Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-accordion.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-accordion.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-accordion.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,324 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, forwardRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Input, Output, ContentChildren, NgModule } from '@angular/core';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { Header, PrimeTemplate, SharedModule } from 'primeng/api';
+
+let idx = 0;
+class AccordionTab {
+    constructor(accordion, changeDetector) {
+        this.changeDetector = changeDetector;
+        this.cache = true;
+        this.selectedChange = new EventEmitter();
+        this.transitionOptions = '400ms cubic-bezier(0.86, 0, 0.07, 1)';
+        this.id = `p-accordiontab-${idx++}`;
+        this.accordion = accordion;
+    }
+    get selected() {
+        return this._selected;
+    }
+    set selected(val) {
+        this._selected = val;
+        if (!this.loaded) {
+            if (this._selected && this.cache) {
+                this.loaded = true;
+            }
+            this.changeDetector.detectChanges();
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    toggle(event) {
+        if (this.disabled) {
+            return false;
+        }
+        let index = this.findTabIndex();
+        if (this.selected) {
+            this.selected = false;
+            this.accordion.onClose.emit({ originalEvent: event, index: index });
+        }
+        else {
+            if (!this.accordion.multiple) {
+                for (var i = 0; i < this.accordion.tabs.length; i++) {
+                    this.accordion.tabs[i].selected = false;
+                    this.accordion.tabs[i].selectedChange.emit(false);
+                    this.accordion.tabs[i].changeDetector.markForCheck();
+                }
+            }
+            this.selected = true;
+            this.loaded = true;
+            this.accordion.onOpen.emit({ originalEvent: event, index: index });
+        }
+        this.selectedChange.emit(this.selected);
+        this.accordion.updateActiveIndex();
+        this.changeDetector.markForCheck();
+        event.preventDefault();
+    }
+    findTabIndex() {
+        let index = -1;
+        for (var i = 0; i < this.accordion.tabs.length; i++) {
+            if (this.accordion.tabs[i] == this) {
+                index = i;
+                break;
+            }
+        }
+        return index;
+    }
+    get hasHeaderFacet() {
+        return this.headerFacet && this.headerFacet.length > 0;
+    }
+    onKeydown(event) {
+        if (event.which === 32 || event.which === 13) {
+            this.toggle(event);
+            event.preventDefault();
+        }
+    }
+    ngOnDestroy() {
+        this.accordion.tabs.splice(this.findTabIndex(), 1);
+    }
+}
+AccordionTab.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AccordionTab, deps: [{ token: forwardRef(() => Accordion) }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+AccordionTab.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: AccordionTab, selector: "p-accordionTab", inputs: { header: "header", disabled: "disabled", cache: "cache", transitionOptions: "transitionOptions", selected: "selected" }, outputs: { selectedChange: "selectedChange" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "headerFacet", predicate: Header }, { propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div class="p-accordion-tab" [ngClass]="{'p-accordion-tab-active': selected}">
+            <div class="p-accordion-header" [ngClass]="{'p-highlight': selected, 'p-disabled': disabled}">
+                <a role="tab" class="p-accordion-header-link" (click)="toggle($event)" (keydown)="onKeydown($event)" [attr.tabindex]="disabled ? null : 0"
+                    [attr.id]="id" [attr.aria-controls]="id + '-content'" [attr.aria-expanded]="selected">
+                    <span class="p-accordion-toggle-icon" [ngClass]="selected ? accordion.collapseIcon : accordion.expandIcon"></span>
+                    <span class="p-accordion-header-text" *ngIf="!hasHeaderFacet">
+                        {{header}}
+                    </span>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                    <ng-content select="p-header" *ngIf="hasHeaderFacet"></ng-content>
+                </a>
+            </div>
+            <div [attr.id]="id + '-content'" class="p-toggleable-content" [@tabContent]="selected ? {value: 'visible', params: {transitionParams: transitionOptions}} : {value: 'hidden', params: {transitionParams: transitionOptions}}"
+                role="region" [attr.aria-hidden]="!selected" [attr.aria-labelledby]="id">
+                <div class="p-accordion-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngIf="contentTemplate && (cache ? loaded : selected)">
+                        <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                    </ng-container>
+                </div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-accordion-header-link{cursor:pointer;display:flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;position:relative;text-decoration:none}.p-accordion-header-link:focus{z-index:1}.p-accordion-header-text{line-height:1}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
+        trigger('tabContent', [
+            state('hidden', style({
+                height: '0',
+                overflow: 'hidden'
+            })),
+            state('visible', style({
+                height: '*'
+            })),
+            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+            transition('void => *', animate(0))
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AccordionTab, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-accordionTab', template: `
+        <div class="p-accordion-tab" [ngClass]="{'p-accordion-tab-active': selected}">
+            <div class="p-accordion-header" [ngClass]="{'p-highlight': selected, 'p-disabled': disabled}">
+                <a role="tab" class="p-accordion-header-link" (click)="toggle($event)" (keydown)="onKeydown($event)" [attr.tabindex]="disabled ? null : 0"
+                    [attr.id]="id" [attr.aria-controls]="id + '-content'" [attr.aria-expanded]="selected">
+                    <span class="p-accordion-toggle-icon" [ngClass]="selected ? accordion.collapseIcon : accordion.expandIcon"></span>
+                    <span class="p-accordion-header-text" *ngIf="!hasHeaderFacet">
+                        {{header}}
+                    </span>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                    <ng-content select="p-header" *ngIf="hasHeaderFacet"></ng-content>
+                </a>
+            </div>
+            <div [attr.id]="id + '-content'" class="p-toggleable-content" [@tabContent]="selected ? {value: 'visible', params: {transitionParams: transitionOptions}} : {value: 'hidden', params: {transitionParams: transitionOptions}}"
+                role="region" [attr.aria-hidden]="!selected" [attr.aria-labelledby]="id">
+                <div class="p-accordion-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngIf="contentTemplate && (cache ? loaded : selected)">
+                        <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                    </ng-container>
+                </div>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('tabContent', [
+                            state('hidden', style({
+                                height: '0',
+                                overflow: 'hidden'
+                            })),
+                            state('visible', style({
+                                height: '*'
+                            })),
+                            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+                            transition('void => *', animate(0))
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-accordion-header-link{cursor:pointer;display:flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;position:relative;text-decoration:none}.p-accordion-header-link:focus{z-index:1}.p-accordion-header-text{line-height:1}\n"] }]
+        }], ctorParameters: function () { return [{ type: undefined, decorators: [{
+                    type: Inject,
+                    args: [forwardRef(() => Accordion)]
+                }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { header: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], cache: [{
+                type: Input
+            }], selectedChange: [{
+                type: Output
+            }], transitionOptions: [{
+                type: Input
+            }], headerFacet: [{
+                type: ContentChildren,
+                args: [Header]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], selected: [{
+                type: Input
+            }] } });
+class Accordion {
+    constructor(el, changeDetector) {
+        this.el = el;
+        this.changeDetector = changeDetector;
+        this.onClose = new EventEmitter();
+        this.onOpen = new EventEmitter();
+        this.expandIcon = 'pi pi-fw pi-chevron-right';
+        this.collapseIcon = 'pi pi-fw pi-chevron-down';
+        this.activeIndexChange = new EventEmitter();
+        this.tabs = [];
+    }
+    ngAfterContentInit() {
+        this.initTabs();
+        this.tabListSubscription = this.tabList.changes.subscribe(_ => {
+            this.initTabs();
+        });
+    }
+    initTabs() {
+        this.tabs = this.tabList.toArray();
+        this.updateSelectionState();
+        this.changeDetector.markForCheck();
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    get activeIndex() {
+        return this._activeIndex;
+    }
+    set activeIndex(val) {
+        this._activeIndex = val;
+        if (this.preventActiveIndexPropagation) {
+            this.preventActiveIndexPropagation = false;
+            return;
+        }
+        this.updateSelectionState();
+    }
+    updateSelectionState() {
+        if (this.tabs && this.tabs.length && this._activeIndex != null) {
+            for (let i = 0; i < this.tabs.length; i++) {
+                let selected = this.multiple ? this._activeIndex.includes(i) : (i === this._activeIndex);
+                let changed = selected !== this.tabs[i].selected;
+                if (changed) {
+                    this.tabs[i].selected = selected;
+                    this.tabs[i].selectedChange.emit(selected);
+                    this.tabs[i].changeDetector.markForCheck();
+                }
+            }
+        }
+    }
+    updateActiveIndex() {
+        let index = this.multiple ? [] : null;
+        this.tabs.forEach((tab, i) => {
+            if (tab.selected) {
+                if (this.multiple) {
+                    index.push(i);
+                }
+                else {
+                    index = i;
+                    return;
+                }
+            }
+        });
+        this.preventActiveIndexPropagation = true;
+        this.activeIndexChange.emit(index);
+    }
+    ngOnDestroy() {
+        if (this.tabListSubscription) {
+            this.tabListSubscription.unsubscribe();
+        }
+    }
+}
+Accordion.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Accordion, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Accordion.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Accordion, selector: "p-accordion", inputs: { multiple: "multiple", style: "style", styleClass: "styleClass", expandIcon: "expandIcon", collapseIcon: "collapseIcon", activeIndex: "activeIndex" }, outputs: { onClose: "onClose", onOpen: "onOpen", activeIndexChange: "activeIndexChange" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "tabList", predicate: AccordionTab }], ngImport: i0, template: `
+        <div [ngClass]="'p-accordion p-component'" [ngStyle]="style" [class]="styleClass" role="tablist">
+            <ng-content></ng-content>
+        </div>
+    `, isInline: true, directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Accordion, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-accordion',
+                    template: `
+        <div [ngClass]="'p-accordion p-component'" [ngStyle]="style" [class]="styleClass" role="tablist">
+            <ng-content></ng-content>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { multiple: [{
+                type: Input
+            }], onClose: [{
+                type: Output
+            }], onOpen: [{
+                type: Output
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], expandIcon: [{
+                type: Input
+            }], collapseIcon: [{
+                type: Input
+            }], activeIndexChange: [{
+                type: Output
+            }], tabList: [{
+                type: ContentChildren,
+                args: [AccordionTab]
+            }], activeIndex: [{
+                type: Input
+            }] } });
+class AccordionModule {
+}
+AccordionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AccordionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+AccordionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AccordionModule, declarations: [Accordion, AccordionTab], imports: [CommonModule], exports: [Accordion, AccordionTab, SharedModule] });
+AccordionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AccordionModule, imports: [[CommonModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AccordionModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Accordion, AccordionTab, SharedModule],
+                    declarations: [Accordion, AccordionTab]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Accordion, AccordionModule, AccordionTab };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-accordion.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-accordion.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-accordion.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-accordion.mjs","sources":["../../src/app/components/accordion/accordion.ts","../../src/app/components/accordion/primeng-accordion.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, AfterContentInit, OnDestroy, Input, Output, EventEmitter,\n    ContentChildren, QueryList, ChangeDetectorRef, Inject, forwardRef, TemplateRef, ViewRef, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule, Header, PrimeTemplate, BlockableUI } from 'primeng/api';\nimport { Subscription } from 'rxjs';\n\nlet idx: number = 0;\n\n@Component({\n    selector: 'p-accordionTab',\n    template: `\n        <div class=\"p-accordion-tab\" [ngClass]=\"{'p-accordion-tab-active': selected}\">\n            <div class=\"p-accordion-header\" [ngClass]=\"{'p-highlight': selected, 'p-disabled': disabled}\">\n                <a role=\"tab\" class=\"p-accordion-header-link\" (click)=\"toggle($event)\" (keydown)=\"onKeydown($event)\" [attr.tabindex]=\"disabled ? null : 0\"\n                    [attr.id]=\"id\" [attr.aria-controls]=\"id + '-content'\" [attr.aria-expanded]=\"selected\">\n                    <span class=\"p-accordion-toggle-icon\" [ngClass]=\"selected ? accordion.collapseIcon : accordion.expandIcon\"></span>\n                    <span class=\"p-accordion-header-text\" *ngIf=\"!hasHeaderFacet\">\n                        {{header}}\n                    </span>\n                    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                    <ng-content select=\"p-header\" *ngIf=\"hasHeaderFacet\"></ng-content>\n                </a>\n            </div>\n            <div [attr.id]=\"id + '-content'\" class=\"p-toggleable-content\" [@tabContent]=\"selected ? {value: 'visible', params: {transitionParams: transitionOptions}} : {value: 'hidden', params: {transitionParams: transitionOptions}}\"\n                role=\"region\" [attr.aria-hidden]=\"!selected\" [attr.aria-labelledby]=\"id\">\n                <div class=\"p-accordion-content\">\n                    <ng-content></ng-content>\n                    <ng-container *ngIf=\"contentTemplate && (cache ? loaded : selected)\">\n                        <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                    </ng-container>\n                </div>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('tabContent', [\n            state('hidden', style({\n                height: '0',\n                overflow: 'hidden'\n            })),\n            state('visible', style({\n                height: '*'\n            })),\n            transition('visible <=> hidden', [style({overflow: 'hidden'}), animate('{{transitionParams}}')]),\n            transition('void => *', animate(0))\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./accordion.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class AccordionTab implements AfterContentInit,OnDestroy {\n\n    @Input() header: string;\n\n    @Input() disabled: boolean;\n\n    @Input() cache: boolean = true;\n\n    @Output() selectedChange: EventEmitter<any> = new EventEmitter();\n\n    @Input() transitionOptions: string = '400ms cubic-bezier(0.86, 0, 0.07, 1)';\n\n    @ContentChildren(Header) headerFacet: QueryList<Header>;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    private _selected: boolean;\n\n    @Input() get selected(): any {\n        return this._selected;\n    }\n\n    set selected(val: any) {\n        this._selected = val;\n\n        if (!this.loaded) {\n            if (this._selected && this.cache) {\n                this.loaded = true;\n            }\n\n            this.changeDetector.detectChanges();\n        }\n    }\n\n    contentTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    id: string = `p-accordiontab-${idx++}`;\n\n    loaded: boolean;\n\n    accordion: Accordion;\n\n    constructor(@Inject(forwardRef(() => Accordion)) accordion, public changeDetector: ChangeDetectorRef) {\n        this.accordion = accordion as Accordion;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    toggle(event) {\n        if (this.disabled) {\n            return false;\n        }\n\n        let index = this.findTabIndex();\n\n        if (this.selected) {\n            this.selected = false;\n            this.accordion.onClose.emit({ originalEvent: event, index: index });\n        }\n        else {\n            if (!this.accordion.multiple) {\n                for (var i = 0; i < this.accordion.tabs.length; i++) {\n                    this.accordion.tabs[i].selected = false;\n                    this.accordion.tabs[i].selectedChange.emit(false);\n                    this.accordion.tabs[i].changeDetector.markForCheck();\n                }\n            }\n\n            this.selected = true;\n            this.loaded = true;\n            this.accordion.onOpen.emit({ originalEvent: event, index: index });\n        }\n\n        this.selectedChange.emit(this.selected);\n        this.accordion.updateActiveIndex();\n        this.changeDetector.markForCheck();\n\n        event.preventDefault();\n    }\n\n    findTabIndex() {\n        let index = -1;\n        for (var i = 0; i < this.accordion.tabs.length; i++) {\n            if (this.accordion.tabs[i] == this) {\n                index = i;\n                break;\n            }\n        }\n        return index;\n    }\n\n    get hasHeaderFacet(): boolean {\n        return this.headerFacet && this.headerFacet.length > 0;\n    }\n\n    onKeydown(event: KeyboardEvent) {\n        if (event.which === 32 || event.which === 13) {\n            this.toggle(event);\n            event.preventDefault();\n        }\n    }\n\n    ngOnDestroy() {\n        this.accordion.tabs.splice(this.findTabIndex(), 1);\n    }\n}\n\n@Component({\n    selector: 'p-accordion',\n    template: `\n        <div [ngClass]=\"'p-accordion p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\" role=\"tablist\">\n            <ng-content></ng-content>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Accordion implements BlockableUI, AfterContentInit, OnDestroy {\n\n    @Input() multiple: boolean;\n\n    @Output() onClose: EventEmitter<any> = new EventEmitter();\n\n    @Output() onOpen: EventEmitter<any> = new EventEmitter();\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() expandIcon: string = 'pi pi-fw pi-chevron-right';\n\n    @Input() collapseIcon: string = 'pi pi-fw pi-chevron-down';\n\n    @Output() activeIndexChange: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(AccordionTab) tabList: QueryList<AccordionTab>;\n\n    tabListSubscription: Subscription;\n\n    private _activeIndex: any;\n\n    preventActiveIndexPropagation: boolean;\n\n    public tabs: AccordionTab[] = [];\n\n    constructor(public el: ElementRef, public changeDetector: ChangeDetectorRef) {}\n\n    ngAfterContentInit() {\n        this.initTabs();\n\n        this.tabListSubscription = this.tabList.changes.subscribe(_ => {\n            this.initTabs();\n        });\n    }\n\n    initTabs(): any {\n        this.tabs = this.tabList.toArray();\n        this.updateSelectionState();\n        this.changeDetector.markForCheck();\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    @Input() get activeIndex(): any {\n        return this._activeIndex;\n    }\n\n    set activeIndex(val: any) {\n        this._activeIndex = val;\n        if (this.preventActiveIndexPropagation) {\n            this.preventActiveIndexPropagation = false;\n            return;\n        }\n\n        this.updateSelectionState();\n    }\n\n    updateSelectionState() {\n        if (this.tabs && this.tabs.length && this._activeIndex != null) {\n            for (let i = 0; i < this.tabs.length; i++) {\n                let selected = this.multiple ? this._activeIndex.includes(i) : (i === this._activeIndex);\n                let changed = selected !== this.tabs[i].selected;\n\n                if (changed) {\n                    this.tabs[i].selected = selected;\n                    this.tabs[i].selectedChange.emit(selected);\n                    this.tabs[i].changeDetector.markForCheck();\n                }\n            }\n        }\n    }\n\n    updateActiveIndex() {\n        let index: any = this.multiple ? [] : null;\n        this.tabs.forEach((tab, i) => {\n            if (tab.selected) {\n                if (this.multiple) {\n                    index.push(i);\n                }\n                else {\n                    index = i;\n                    return;\n                }\n            }\n        });\n\n        this.preventActiveIndexPropagation = true;\n        this.activeIndexChange.emit(index);\n    }\n\n    ngOnDestroy() {\n        if (this.tabListSubscription) {\n            this.tabListSubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Accordion,AccordionTab,SharedModule],\n    declarations: [Accordion,AccordionTab]\n})\nexport class AccordionModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;AAOA,IAAI,GAAG,GAAW,CAAC,CAAC;MAgDP,YAAY;IA4CrB,YAAiD,SAAS,EAAS,cAAiC;QAAjC,mBAAc,GAAd,cAAc,CAAmB;QAtC3F,UAAK,GAAY,IAAI,CAAC;QAErB,mBAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;QAExD,sBAAiB,GAAW,sCAAsC,CAAC;QA4B5E,OAAE,GAAW,kBAAkB,GAAG,EAAE,EAAE,CAAC;QAOnC,IAAI,CAAC,SAAS,GAAG,SAAsB,CAAC;KAC3C;IA5BD,IAAa,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,GAAQ;QACjB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACtB;YAED,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;SACvC;KACJ;IAgBD,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAO,IAAI,CAAC,OAAO,EAAE;gBACjB,KAAK,SAAS;oBACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACzC,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN;oBACI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACzC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;IAED,MAAM,CAAC,KAAK;QACR,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACvE;aACI;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;iBACxD;aACJ;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACtE;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAEnC,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,YAAY;QACR,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;gBAChC,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;aACT;SACJ;QACD,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;KAC1D;IAED,SAAS,CAAC,KAAoB;QAC1B,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;KACJ;IAED,WAAW;QACP,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;KACtD;;yGA1HQ,YAAY,kBA4CD,UAAU,CAAC,MAAM,SAAS,CAAC;6FA5CtC,YAAY,0SAYJ,MAAM,4CAEN,aAAa,6BA1DpB;;;;;;;;;;;;;;;;;;;;;;;KAuBT,8kBACW;QACR,OAAO,CAAC,YAAY,EAAE;YAClB,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAClB,MAAM,EAAE,GAAG;gBACX,QAAQ,EAAE,QAAQ;aACrB,CAAC,CAAC;YACH,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;gBACnB,MAAM,EAAE,GAAG;aACd,CAAC,CAAC;YACH,UAAU,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAChG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;SACtC,CAAC;KACL;2FAQQ,YAAY;kBA9CxB,SAAS;+BACI,gBAAgB,YAChB;;;;;;;;;;;;;;;;;;;;;;;KAuBT,cACW;wBACR,OAAO,CAAC,YAAY,EAAE;4BAClB,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;gCAClB,MAAM,EAAE,GAAG;gCACX,QAAQ,EAAE,QAAQ;6BACrB,CAAC,CAAC;4BACH,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;gCACnB,MAAM,EAAE,GAAG;6BACd,CAAC,CAAC;4BACH,UAAU,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;4BAChG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;yBACtC,CAAC;qBACL,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;;0BA8CY,MAAM;2BAAC,UAAU,CAAC,MAAM,SAAS,CAAC;4EA1CtC,MAAM;sBAAd,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEI,cAAc;sBAAvB,MAAM;gBAEE,iBAAiB;sBAAzB,KAAK;gBAEmB,WAAW;sBAAnC,eAAe;uBAAC,MAAM;gBAES,SAAS;sBAAxC,eAAe;uBAAC,aAAa;gBAIjB,QAAQ;sBAApB,KAAK;;MAuHG,SAAS;IA4BlB,YAAmB,EAAc,EAAS,cAAiC;QAAxD,OAAE,GAAF,EAAE,CAAY;QAAS,mBAAc,GAAd,cAAc,CAAmB;QAxBjE,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAMhD,eAAU,GAAW,2BAA2B,CAAC;QAEjD,iBAAY,GAAW,0BAA0B,CAAC;QAEjD,sBAAiB,GAAsB,IAAI,YAAY,EAAE,CAAC;QAU7D,SAAI,GAAmB,EAAE,CAAC;KAE8C;IAE/E,kBAAkB;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnB,CAAC,CAAC;KACN;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;KACtC;IAED,mBAAmB;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC5C;IAED,IAAa,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IAAI,WAAW,CAAC,GAAQ;QACpB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QACxB,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACpC,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;YAC3C,OAAO;SACV;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzF,IAAI,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAEjD,IAAI,OAAO,EAAE;oBACT,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;iBAC9C;aACJ;SACJ;KACJ;IAED,iBAAiB;QACb,IAAI,KAAK,GAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;YACrB,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACd,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjB;qBACI;oBACD,KAAK,GAAG,CAAC,CAAC;oBACV,OAAO;iBACV;aACJ;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtC;IAED,WAAW;QACP,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;SAC1C;KACJ;;sGAnGQ,SAAS;0FAAT,SAAS,6WAkBD,YAAY,6BA5BnB;;;;KAIT;2FAMQ,SAAS;kBAZrB,SAAS;mBAAC;oBACP,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE;;;;KAIT;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,IAAI,EAAE;wBACF,OAAO,EAAE,WAAW;qBACvB;iBACJ;iIAGY,QAAQ;sBAAhB,KAAK;gBAEI,OAAO;sBAAhB,MAAM;gBAEG,MAAM;sBAAf,MAAM;gBAEE,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,YAAY;sBAApB,KAAK;gBAEI,iBAAiB;sBAA1B,MAAM;gBAEwB,OAAO;sBAArC,eAAe;uBAAC,YAAY;gBA8BhB,WAAW;sBAAvB,KAAK;;MA2DG,eAAe;;4GAAf,eAAe;6GAAf,eAAe,iBA3Gf,SAAS,EAzIT,YAAY,aAgPX,YAAY,aAvGb,SAAS,EAzIT,YAAY,EAiPY,YAAY;6GAGpC,eAAe,YAJf,CAAC,YAAY,CAAC,EACU,YAAY;2FAGpC,eAAe;kBAL3B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,SAAS,EAAC,YAAY,EAAC,YAAY,CAAC;oBAC9C,YAAY,EAAE,CAAC,SAAS,EAAC,YAAY,CAAC;iBACzC;;;AC1SD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-api.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-api.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-api.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,810 @@
+import * as i0 from '@angular/core';
+import { Injectable, Component, Directive, Input, NgModule } from '@angular/core';
+import { Subject } from 'rxjs';
+import { ObjectUtils } from 'primeng/utils';
+import { CommonModule } from '@angular/common';
+
+class FilterMatchMode {
+}
+FilterMatchMode.STARTS_WITH = 'startsWith';
+FilterMatchMode.CONTAINS = 'contains';
+FilterMatchMode.NOT_CONTAINS = 'notContains';
+FilterMatchMode.ENDS_WITH = 'endsWith';
+FilterMatchMode.EQUALS = 'equals';
+FilterMatchMode.NOT_EQUALS = 'notEquals';
+FilterMatchMode.IN = 'in';
+FilterMatchMode.LESS_THAN = 'lt';
+FilterMatchMode.LESS_THAN_OR_EQUAL_TO = 'lte';
+FilterMatchMode.GREATER_THAN = 'gt';
+FilterMatchMode.GREATER_THAN_OR_EQUAL_TO = 'gte';
+FilterMatchMode.BETWEEN = 'between';
+FilterMatchMode.IS = 'is';
+FilterMatchMode.IS_NOT = 'isNot';
+FilterMatchMode.BEFORE = 'before';
+FilterMatchMode.AFTER = 'after';
+FilterMatchMode.DATE_IS = 'dateIs';
+FilterMatchMode.DATE_IS_NOT = 'dateIsNot';
+FilterMatchMode.DATE_BEFORE = 'dateBefore';
+FilterMatchMode.DATE_AFTER = 'dateAfter';
+
+class PrimeNGConfig {
+    constructor() {
+        this.ripple = false;
+        this.filterMatchModeOptions = {
+            text: [
+                FilterMatchMode.STARTS_WITH,
+                FilterMatchMode.CONTAINS,
+                FilterMatchMode.NOT_CONTAINS,
+                FilterMatchMode.ENDS_WITH,
+                FilterMatchMode.EQUALS,
+                FilterMatchMode.NOT_EQUALS
+            ],
+            numeric: [
+                FilterMatchMode.EQUALS,
+                FilterMatchMode.NOT_EQUALS,
+                FilterMatchMode.LESS_THAN,
+                FilterMatchMode.LESS_THAN_OR_EQUAL_TO,
+                FilterMatchMode.GREATER_THAN,
+                FilterMatchMode.GREATER_THAN_OR_EQUAL_TO
+            ],
+            date: [
+                FilterMatchMode.DATE_IS,
+                FilterMatchMode.DATE_IS_NOT,
+                FilterMatchMode.DATE_BEFORE,
+                FilterMatchMode.DATE_AFTER
+            ]
+        };
+        this.translation = {
+            startsWith: 'Starts with',
+            contains: 'Contains',
+            notContains: 'Not contains',
+            endsWith: 'Ends with',
+            equals: 'Equals',
+            notEquals: 'Not equals',
+            noFilter: 'No Filter',
+            lt: 'Less than',
+            lte: 'Less than or equal to',
+            gt: 'Greater than',
+            gte: 'Greater than or equal to',
+            is: 'Is',
+            isNot: 'Is not',
+            before: 'Before',
+            after: 'After',
+            dateIs: 'Date is',
+            dateIsNot: 'Date is not',
+            dateBefore: 'Date is before',
+            dateAfter: 'Date is after',
+            clear: 'Clear',
+            apply: 'Apply',
+            matchAll: 'Match All',
+            matchAny: 'Match Any',
+            addRule: 'Add Rule',
+            removeRule: 'Remove Rule',
+            accept: 'Yes',
+            reject: 'No',
+            choose: 'Choose',
+            upload: 'Upload',
+            cancel: 'Cancel',
+            dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+            dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+            dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
+            monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+            monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+            dateFormat: 'mm/dd/yy',
+            today: 'Today',
+            weekHeader: 'Wk',
+            weak: 'Weak',
+            medium: 'Medium',
+            strong: 'Strong',
+            passwordPrompt: 'Enter a password',
+            emptyMessage: 'No results found',
+            emptyFilterMessage: 'No results found'
+        };
+        this.zIndex = {
+            modal: 1100,
+            overlay: 1000,
+            menu: 1000,
+            tooltip: 1100
+        };
+        this.translationSource = new Subject();
+        this.translationObserver = this.translationSource.asObservable();
+    }
+    getTranslation(key) {
+        return this.translation[key];
+    }
+    setTranslation(value) {
+        this.translation = { ...this.translation, ...value };
+        this.translationSource.next(this.translation);
+    }
+}
+PrimeNGConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PrimeNGConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+PrimeNGConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PrimeNGConfig, providedIn: 'root' });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PrimeNGConfig, decorators: [{
+            type: Injectable,
+            args: [{ providedIn: 'root' }]
+        }] });
+
+class TranslationKeys {
+}
+TranslationKeys.STARTS_WITH = 'startsWith';
+TranslationKeys.CONTAINS = 'contains';
+TranslationKeys.NOT_CONTAINS = 'notContains';
+TranslationKeys.ENDS_WITH = 'endsWith';
+TranslationKeys.EQUALS = 'equals';
+TranslationKeys.NOT_EQUALS = 'notEquals';
+TranslationKeys.NO_FILTER = 'noFilter';
+TranslationKeys.LT = 'lt';
+TranslationKeys.LTE = 'lte';
+TranslationKeys.GT = 'gt';
+TranslationKeys.GTE = 'gte';
+TranslationKeys.IS = 'is';
+TranslationKeys.IS_NOT = 'isNot';
+TranslationKeys.BEFORE = 'before';
+TranslationKeys.AFTER = 'after';
+TranslationKeys.CLEAR = 'clear';
+TranslationKeys.APPLY = 'apply';
+TranslationKeys.MATCH_ALL = 'matchAll';
+TranslationKeys.MATCH_ANY = 'matchAny';
+TranslationKeys.ADD_RULE = 'addRule';
+TranslationKeys.REMOVE_RULE = 'removeRule';
+TranslationKeys.ACCEPT = 'accept';
+TranslationKeys.REJECT = 'reject';
+TranslationKeys.CHOOSE = 'choose';
+TranslationKeys.UPLOAD = 'upload';
+TranslationKeys.CANCEL = 'cancel';
+TranslationKeys.DAY_NAMES = 'dayNames';
+TranslationKeys.DAY_NAMES_SHORT = 'dayNamesShort';
+TranslationKeys.DAY_NAMES_MIN = 'dayNamesMin';
+TranslationKeys.MONTH_NAMES = 'monthNames';
+TranslationKeys.MONTH_NAMES_SHORT = 'monthNamesShort';
+TranslationKeys.TODAY = 'today';
+TranslationKeys.WEEK_HEADER = 'weekHeader';
+TranslationKeys.WEAK = 'weak';
+TranslationKeys.MEDIUM = 'medium';
+TranslationKeys.STRONG = 'strong';
+TranslationKeys.PASSWORD_PROMPT = 'passwordPrompt';
+TranslationKeys.EMPTY_MESSAGE = 'emptyMessage';
+TranslationKeys.EMPTY_FILTER_MESSAGE = 'emptyFilterMessage';
+
+var ConfirmEventType;
+(function (ConfirmEventType) {
+    ConfirmEventType[ConfirmEventType["ACCEPT"] = 0] = "ACCEPT";
+    ConfirmEventType[ConfirmEventType["REJECT"] = 1] = "REJECT";
+    ConfirmEventType[ConfirmEventType["CANCEL"] = 2] = "CANCEL";
+})(ConfirmEventType || (ConfirmEventType = {}));
+
+class ConfirmationService {
+    constructor() {
+        this.requireConfirmationSource = new Subject();
+        this.acceptConfirmationSource = new Subject();
+        this.requireConfirmation$ = this.requireConfirmationSource.asObservable();
+        this.accept = this.acceptConfirmationSource.asObservable();
+    }
+    confirm(confirmation) {
+        this.requireConfirmationSource.next(confirmation);
+        return this;
+    }
+    close() {
+        this.requireConfirmationSource.next(null);
+        return this;
+    }
+    onAccept() {
+        this.acceptConfirmationSource.next(null);
+    }
+}
+ConfirmationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+ConfirmationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmationService });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmationService, decorators: [{
+            type: Injectable
+        }] });
+
+class FilterService {
+    constructor() {
+        this.filters = {
+            startsWith: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null || filter.trim() === '') {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                let filterValue = ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);
+                let stringValue = ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale);
+                return stringValue.slice(0, filterValue.length) === filterValue;
+            },
+            contains: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                let filterValue = ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);
+                let stringValue = ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale);
+                return stringValue.indexOf(filterValue) !== -1;
+            },
+            notContains: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                let filterValue = ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);
+                let stringValue = ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale);
+                return stringValue.indexOf(filterValue) === -1;
+            },
+            endsWith: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null || filter.trim() === '') {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                let filterValue = ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);
+                let stringValue = ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale);
+                return stringValue.indexOf(filterValue, stringValue.length - filterValue.length) !== -1;
+            },
+            equals: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                if (value.getTime && filter.getTime)
+                    return value.getTime() === filter.getTime();
+                else
+                    return ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale) == ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);
+            },
+            notEquals: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {
+                    return false;
+                }
+                if (value === undefined || value === null) {
+                    return true;
+                }
+                if (value.getTime && filter.getTime)
+                    return value.getTime() !== filter.getTime();
+                else
+                    return ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale) != ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);
+            },
+            in: (value, filter) => {
+                if (filter === undefined || filter === null || filter.length === 0) {
+                    return true;
+                }
+                for (let i = 0; i < filter.length; i++) {
+                    if (ObjectUtils.equals(value, filter[i])) {
+                        return true;
+                    }
+                }
+                return false;
+            },
+            between: (value, filter) => {
+                if (filter == null || filter[0] == null || filter[1] == null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                if (value.getTime)
+                    return filter[0].getTime() <= value.getTime() && value.getTime() <= filter[1].getTime();
+                else
+                    return filter[0] <= value && value <= filter[1];
+            },
+            lt: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                if (value.getTime && filter.getTime)
+                    return value.getTime() < filter.getTime();
+                else
+                    return value < filter;
+            },
+            lte: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                if (value.getTime && filter.getTime)
+                    return value.getTime() <= filter.getTime();
+                else
+                    return value <= filter;
+            },
+            gt: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                if (value.getTime && filter.getTime)
+                    return value.getTime() > filter.getTime();
+                else
+                    return value > filter;
+            },
+            gte: (value, filter, filterLocale) => {
+                if (filter === undefined || filter === null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                if (value.getTime && filter.getTime)
+                    return value.getTime() >= filter.getTime();
+                else
+                    return value >= filter;
+            },
+            is: (value, filter, filterLocale) => {
+                return this.filters.equals(value, filter, filterLocale);
+            },
+            isNot: (value, filter, filterLocale) => {
+                return this.filters.notEquals(value, filter, filterLocale);
+            },
+            before: (value, filter, filterLocale) => {
+                return this.filters.lt(value, filter, filterLocale);
+            },
+            after: (value, filter, filterLocale) => {
+                return this.filters.gt(value, filter, filterLocale);
+            },
+            dateIs: (value, filter) => {
+                if (filter === undefined || filter === null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                return value.toDateString() === filter.toDateString();
+            },
+            dateIsNot: (value, filter) => {
+                if (filter === undefined || filter === null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                return value.toDateString() !== filter.toDateString();
+            },
+            dateBefore: (value, filter) => {
+                if (filter === undefined || filter === null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                return value.getTime() < filter.getTime();
+            },
+            dateAfter: (value, filter) => {
+                if (filter === undefined || filter === null) {
+                    return true;
+                }
+                if (value === undefined || value === null) {
+                    return false;
+                }
+                return value.getTime() > filter.getTime();
+            }
+        };
+    }
+    filter(value, fields, filterValue, filterMatchMode, filterLocale) {
+        let filteredItems = [];
+        if (value) {
+            for (let item of value) {
+                for (let field of fields) {
+                    let fieldValue = ObjectUtils.resolveFieldData(item, field);
+                    if (this.filters[filterMatchMode](fieldValue, filterValue, filterLocale)) {
+                        filteredItems.push(item);
+                        break;
+                    }
+                }
+            }
+        }
+        return filteredItems;
+    }
+    register(rule, fn) {
+        this.filters[rule] = fn;
+    }
+}
+FilterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+FilterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FilterService, providedIn: 'root' });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FilterService, decorators: [{
+            type: Injectable,
+            args: [{ providedIn: 'root' }]
+        }] });
+
+class ContextMenuService {
+    constructor() {
+        this.activeItemKeyChange = new Subject();
+        this.activeItemKeyChange$ = this.activeItemKeyChange.asObservable();
+    }
+    changeKey(key) {
+        this.activeItemKey = key;
+        this.activeItemKeyChange.next(this.activeItemKey);
+    }
+    reset() {
+        this.activeItemKey = null;
+        this.activeItemKeyChange.next(this.activeItemKey);
+    }
+}
+ContextMenuService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+ContextMenuService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuService });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuService, decorators: [{
+            type: Injectable
+        }] });
+
+class MessageService {
+    constructor() {
+        this.messageSource = new Subject();
+        this.clearSource = new Subject();
+        this.messageObserver = this.messageSource.asObservable();
+        this.clearObserver = this.clearSource.asObservable();
+    }
+    add(message) {
+        if (message) {
+            this.messageSource.next(message);
+        }
+    }
+    addAll(messages) {
+        if (messages && messages.length) {
+            this.messageSource.next(messages);
+        }
+    }
+    clear(key) {
+        this.clearSource.next(key || null);
+    }
+}
+MessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+MessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessageService });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessageService, decorators: [{
+            type: Injectable
+        }] });
+
+class OverlayService {
+    constructor() {
+        this.clickSource = new Subject();
+        this.clickObservable = this.clickSource.asObservable();
+    }
+    add(event) {
+        if (event) {
+            this.clickSource.next(event);
+        }
+    }
+}
+OverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+OverlayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayService, providedIn: 'root' });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayService, decorators: [{
+            type: Injectable,
+            args: [{ providedIn: 'root' }]
+        }] });
+
+class PrimeIcons {
+}
+PrimeIcons.ALIGN_CENTER = 'pi pi-align-center';
+PrimeIcons.ALIGN_JUSTIFY = 'pi pi-align-justify';
+PrimeIcons.ALIGN_LEFT = 'pi pi-align-left';
+PrimeIcons.ALIGN_RIGHT = 'pi pi-align-right';
+PrimeIcons.AMAZON = 'pi pi-amazon';
+PrimeIcons.ANDROID = 'pi pi-android';
+PrimeIcons.ANGLE_DOUBLE_DOWN = 'pi pi-angle-double-down';
+PrimeIcons.ANGLE_DOUBLE_LEFT = 'pi pi-angle-double-left';
+PrimeIcons.ANGLE_DOUBLE_RIGHT = 'pi pi-angle-double-right';
+PrimeIcons.ANGLE_DOUBLE_UP = 'pi pi-angle-double-up';
+PrimeIcons.ANGLE_DOWN = 'pi pi-angle-down';
+PrimeIcons.ANGLE_LEFT = 'pi pi-angle-left';
+PrimeIcons.ANGLE_RIGHT = 'pi pi-angle-right';
+PrimeIcons.ANGLE_UP = 'pi pi-angle-up';
+PrimeIcons.APPLE = 'pi pi-apple';
+PrimeIcons.ARROW_CIRCLE_DOWN = 'pi pi-arrow-circle-down';
+PrimeIcons.ARROW_CIRCLE_LEFT = 'pi pi-arrow-circle-left';
+PrimeIcons.ARROW_CIRCLE_RIGHT = 'pi pi-arrow-circle-right';
+PrimeIcons.ARROW_CIRCLE_UP = 'pi pi-arrow-circle-up';
+PrimeIcons.ARROW_DOWN = 'pi pi-arrow-down';
+PrimeIcons.ARROW_DOWN_LEFT = 'pi pi-arrow-down-left';
+PrimeIcons.ARROW_DOWN_RIGHT = 'pi pi-arrow-down-right';
+PrimeIcons.ARROW_LEFT = 'pi pi-arrow-left';
+PrimeIcons.ARROW_RIGHT = 'pi pi-arrow-right';
+PrimeIcons.ARROW_UP = 'pi pi-arrow-up';
+PrimeIcons.ARROW_UP_LEFT = 'pi pi-arrow-up-left';
+PrimeIcons.ARROW_UP_RIGHT = 'pi pi-arrow-up-right';
+PrimeIcons.ARROW_H = 'pi pi-arrow-h';
+PrimeIcons.ARROW_V = 'pi pi-arrow-v';
+PrimeIcons.AT = 'pi pi-at';
+PrimeIcons.BACKWARD = 'pi pi-backward';
+PrimeIcons.BAN = 'pi pi-ban';
+PrimeIcons.BARS = 'pi pi-bars';
+PrimeIcons.BELL = 'pi pi-bell';
+PrimeIcons.BOLT = 'pi pi-bolt';
+PrimeIcons.BOOK = 'pi pi-book';
+PrimeIcons.BOOKMARK = 'pi pi-bookmark';
+PrimeIcons.BOOKMARK_FILL = 'pi pi-bookmark-fill';
+PrimeIcons.BOX = 'pi pi-box';
+PrimeIcons.BRIEFCASE = 'pi pi-briefcase';
+PrimeIcons.BUILDING = 'pi pi-building';
+PrimeIcons.CALENDAR = 'pi pi-calendar';
+PrimeIcons.CALENDAR_MINUS = 'pi pi-calendar-minus';
+PrimeIcons.CALENDAR_PLUS = 'pi pi-calendar-plus';
+PrimeIcons.CALENDAR_TIMES = 'pi pi-calendar-times';
+PrimeIcons.CAMERA = 'pi pi-camera';
+PrimeIcons.CAR = 'pi pi-car';
+PrimeIcons.CARET_DOWN = 'pi pi-caret-down';
+PrimeIcons.CARET_LEFT = 'pi pi-caret-left';
+PrimeIcons.CARET_RIGHT = 'pi pi-caret-right';
+PrimeIcons.CARET_UP = 'pi pi-caret-up';
+PrimeIcons.CHART_BAR = 'pi pi-chart-bar';
+PrimeIcons.CHART_LINE = 'pi pi-chart-line';
+PrimeIcons.CHART_PIE = 'pi pi-chart-pie';
+PrimeIcons.CHECK = 'pi pi-check';
+PrimeIcons.CHECK_CIRCLE = 'pi pi-check-circle';
+PrimeIcons.CHECK_SQUARE = 'pi pi-check-square';
+PrimeIcons.CHEVRON_CIRCLE_DOWN = 'pi pi-chevron-circle-down';
+PrimeIcons.CHEVRON_CIRCLE_LEFT = 'pi pi-chevron-circle-left';
+PrimeIcons.CHEVRON_CIRCLE_RIGHT = 'pi pi-chevron-circle-right';
+PrimeIcons.CHEVRON_CIRCLE_UP = 'pi pi-chevron-circle-up';
+PrimeIcons.CHEVRON_DOWN = 'pi pi-chevron-down';
+PrimeIcons.CHEVRON_LEFT = 'pi pi-chevron-left';
+PrimeIcons.CHEVRON_RIGHT = 'pi pi-chevron-right';
+PrimeIcons.CHEVRON_UP = 'pi pi-chevron-up';
+PrimeIcons.CIRCLE = 'pi pi-circle';
+PrimeIcons.CIRCLE_FILL = 'pi pi-circle-fill';
+PrimeIcons.CLOCK = 'pi pi-clock';
+PrimeIcons.CLONE = 'pi pi-clone';
+PrimeIcons.CLOUD = 'pi pi-cloud';
+PrimeIcons.CLOUD_DOWNLOAD = 'pi pi-cloud-download';
+PrimeIcons.CLOUD_UPLOAD = 'pi pi-cloud-upload';
+PrimeIcons.CODE = 'pi pi-code';
+PrimeIcons.COG = 'pi pi-cog';
+PrimeIcons.COMMENT = 'pi pi-comment';
+PrimeIcons.COMMENTS = 'pi pi-comments';
+PrimeIcons.COMPASS = 'pi pi-compass';
+PrimeIcons.COPY = 'pi pi-copy';
+PrimeIcons.CREDIT_CARD = 'pi pi-credit-card';
+PrimeIcons.DATABASE = 'pi pi-database';
+PrimeIcons.DESKTOP = 'pi pi-desktop';
+PrimeIcons.DIRECTIONS = 'pi pi-directions';
+PrimeIcons.DIRECTIONS_ALT = 'pi pi-directions-alt';
+PrimeIcons.DISCORD = 'pi pi-discord';
+PrimeIcons.DOLLAR = 'pi pi-dollar';
+PrimeIcons.DOWNLOAD = 'pi pi-download';
+PrimeIcons.EJECT = 'pi pi-eject';
+PrimeIcons.ELLIPSIS_H = 'pi pi-ellipsis-h';
+PrimeIcons.ELLIPSIS_V = 'pi pi-ellipsis-v';
+PrimeIcons.ENVELOPE = 'pi pi-envelope';
+PrimeIcons.EURO = 'pi pi-euro';
+PrimeIcons.EXCLAMATION_CIRCLE = 'pi pi-exclamation-circle';
+PrimeIcons.EXCLAMATION_TRIANGLE = 'pi pi-exclamation-triangle';
+PrimeIcons.EXTERNAL_LINK = 'pi pi-external-link';
+PrimeIcons.EYE = 'pi pi-eye';
+PrimeIcons.EYE_SLASH = 'pi pi-eye-slash';
+PrimeIcons.FACEBOOK = 'pi pi-facebook';
+PrimeIcons.FAST_BACKWARD = 'pi pi-fast-backward';
+PrimeIcons.FAST_FORWARD = 'pi pi-fast-forward';
+PrimeIcons.FILE = 'pi pi-file';
+PrimeIcons.FILE_EXCEL = 'pi pi-file-excel';
+PrimeIcons.FILE_PDF = 'pi pi-file-pdf';
+PrimeIcons.FILTER = 'pi pi-filter';
+PrimeIcons.FILTER_FILL = 'pi pi-filter-fill';
+PrimeIcons.FILTER_SLASH = 'pi pi-filter-slash';
+PrimeIcons.FLAG = 'pi pi-flag';
+PrimeIcons.FLAG_FILL = 'pi pi-flag-fill';
+PrimeIcons.FOLDER = 'pi pi-folder';
+PrimeIcons.FOLDER_OPEN = 'pi pi-folder-open';
+PrimeIcons.FORWARD = 'pi pi-forward';
+PrimeIcons.GITHUB = 'pi pi-github';
+PrimeIcons.GLOBE = 'pi pi-globe';
+PrimeIcons.GOOGLE = 'pi pi-google';
+PrimeIcons.HASHTAG = 'pi pi-hashtag';
+PrimeIcons.HEART = 'pi pi-heart';
+PrimeIcons.HEART_FILL = 'pi pi-heart-fill';
+PrimeIcons.HISTORY = 'pi pi-history';
+PrimeIcons.HOME = 'pi pi-home';
+PrimeIcons.ID_CARD = 'pi pi-id-card';
+PrimeIcons.IMAGE = 'pi pi-image';
+PrimeIcons.IMAGES = 'pi pi-images';
+PrimeIcons.INBOX = 'pi pi-inbox';
+PrimeIcons.INFO = 'pi pi-info';
+PrimeIcons.INFO_CIRCLE = 'pi pi-info-circle';
+PrimeIcons.INSTAGRAM = 'pi pi-instagram';
+PrimeIcons.KEY = 'pi pi-key';
+PrimeIcons.LINK = 'pi pi-link';
+PrimeIcons.LINKEDIN = 'pi pi-linkedin';
+PrimeIcons.LIST = 'pi pi-list';
+PrimeIcons.LOCK = 'pi pi-lock';
+PrimeIcons.LOCK_OPEN = 'pi pi-lock-open';
+PrimeIcons.MAP = 'pi pi-map';
+PrimeIcons.MAP_MARKER = 'pi pi-map-marker';
+PrimeIcons.MICROSOFT = 'pi pi-microsoft';
+PrimeIcons.MINUS = 'pi pi-minus';
+PrimeIcons.MINUS_CIRCLE = 'pi pi-minus-circle';
+PrimeIcons.MOBILE = 'pi pi-mobile';
+PrimeIcons.MONEY_BILL = 'pi pi-money-bill';
+PrimeIcons.MOON = 'pi pi-moon';
+PrimeIcons.PALETTE = 'pi pi-palette';
+PrimeIcons.PAPERCLIP = 'pi pi-paperclip';
+PrimeIcons.PAUSE = 'pi pi-pause';
+PrimeIcons.PAYPAL = 'pi pi-paypal';
+PrimeIcons.PENCIL = 'pi pi-pencil';
+PrimeIcons.PERCENTAGE = 'pi pi-percentage';
+PrimeIcons.PHONE = 'pi pi-phone';
+PrimeIcons.PLAY = 'pi pi-play';
+PrimeIcons.PLUS = 'pi pi-plus';
+PrimeIcons.PLUS_CIRCLE = 'pi pi-plus-circle';
+PrimeIcons.POUND = 'pi pi-pound';
+PrimeIcons.POWER_OFF = 'pi pi-power-off';
+PrimeIcons.PRIME = 'pi pi-prime';
+PrimeIcons.PRINT = 'pi pi-print';
+PrimeIcons.QRCODE = 'pi pi-qrcode';
+PrimeIcons.QUESTION = 'pi pi-question';
+PrimeIcons.QUESTION_CIRCLE = 'pi pi-question-circle';
+PrimeIcons.REDDIT = 'pi pi-reddit';
+PrimeIcons.REFRESH = 'pi pi-refresh';
+PrimeIcons.REPLAY = 'pi pi-replay';
+PrimeIcons.REPLY = 'pi pi-reply';
+PrimeIcons.SAVE = 'pi pi-save';
+PrimeIcons.SEARCH = 'pi pi-search';
+PrimeIcons.SEARCH_MINUS = 'pi pi-search-minus';
+PrimeIcons.SEARCH_PLUS = 'pi pi-search-plus';
+PrimeIcons.SEND = 'pi pi-send';
+PrimeIcons.SERVER = 'pi pi-server';
+PrimeIcons.SHARE_ALT = 'pi pi-share-alt';
+PrimeIcons.SHIELD = 'pi pi-shield';
+PrimeIcons.SHOPPING_BAG = 'pi pi-shopping-bag';
+PrimeIcons.SHOPPING_CART = 'pi pi-shopping-cart';
+PrimeIcons.SIGN_IN = 'pi pi-sign-in';
+PrimeIcons.SIGN_OUT = 'pi pi-sign-out';
+PrimeIcons.SITEMAP = 'pi pi-sitemap';
+PrimeIcons.SLACK = 'pi pi-slack';
+PrimeIcons.SLIDERS_H = 'pi pi-sliders-h';
+PrimeIcons.SLIDERS_V = 'pi pi-sliders-v';
+PrimeIcons.SORT = 'pi pi-sort';
+PrimeIcons.SORT_ALPHA_DOWN = 'pi pi-sort-alpha-down';
+PrimeIcons.SORT_ALPHA_ALT_DOWN = 'pi pi-sort-alpha-alt-down';
+PrimeIcons.SORT_ALPHA_UP = 'pi pi-sort-alpha-up';
+PrimeIcons.SORT_ALPHA_ALT_UP = 'pi pi-sort-alpha-alt-up';
+PrimeIcons.SORT_ALT = 'pi pi-sort-alt';
+PrimeIcons.SORT_ALT_SLASH = 'pi pi-sort-slash';
+PrimeIcons.SORT_AMOUNT_DOWN = 'pi pi-sort-amount-down';
+PrimeIcons.SORT_AMOUNT_DOWN_ALT = 'pi pi-sort-amount-down-alt';
+PrimeIcons.SORT_AMOUNT_UP = 'pi pi-sort-amount-up';
+PrimeIcons.SORT_AMOUNT_UP_ALT = 'pi pi-sort-amount-up-alt';
+PrimeIcons.SORT_DOWN = 'pi pi-sort-down';
+PrimeIcons.SORT_NUMERIC_DOWN = 'pi pi-sort-numeric-down';
+PrimeIcons.SORT_NUMERIC_ALT_DOWN = 'pi pi-sort-numeric-alt-down';
+PrimeIcons.SORT_NUMERIC_UP = 'pi pi-sort-numeric-up';
+PrimeIcons.SORT_NUMERIC_ALT_UP = 'pi pi-sort-numeric-alt-up';
+PrimeIcons.SORT_UP = 'pi pi-sort-up';
+PrimeIcons.SPINNER = 'pi pi-spinner';
+PrimeIcons.STAR = 'pi pi-star';
+PrimeIcons.STAR_FILL = 'pi pi-star-fill';
+PrimeIcons.STEP_BACKWARD = 'pi pi-step-backward';
+PrimeIcons.STEP_BACKWARD_ALT = 'pi pi-step-backward-alt';
+PrimeIcons.STEP_FORWARD = 'pi pi-step-forward';
+PrimeIcons.STEP_FORWARD_ALT = 'pi pi-step-forward-alt';
+PrimeIcons.STOP = 'pi pi-stop';
+PrimeIcons.STOP_CIRCLE = 'pi pi-stop-circle';
+PrimeIcons.SUN = 'pi pi-sun';
+PrimeIcons.SYNC = 'pi pi-sync';
+PrimeIcons.TABLE = 'pi pi-table';
+PrimeIcons.TABLET = 'pi pi-tablet';
+PrimeIcons.TAG = 'pi pi-tag';
+PrimeIcons.TAGS = 'pi pi-tags';
+PrimeIcons.TELEGRAM = 'pi pi-telegram';
+PrimeIcons.TH_LARGE = 'pi pi-th-large';
+PrimeIcons.THUMBS_DOWN = 'pi pi-thumbs-down';
+PrimeIcons.THUMBS_UP = 'pi pi-thumbs-up';
+PrimeIcons.TICKET = 'pi pi-ticket';
+PrimeIcons.TIMES = 'pi pi-times';
+PrimeIcons.TIMES_CIRCLE = 'pi pi-times-circle';
+PrimeIcons.TRASH = 'pi pi-trash';
+PrimeIcons.TWITTER = 'pi pi-twitter';
+PrimeIcons.UNDO = 'pi pi-undo';
+PrimeIcons.UNLOCK = 'pi pi-unlock';
+PrimeIcons.UPLOAD = 'pi pi-upload';
+PrimeIcons.USER = 'pi pi-user';
+PrimeIcons.USER_EDIT = 'pi pi-user-edit';
+PrimeIcons.USER_MINUS = 'pi pi-user-minus';
+PrimeIcons.USER_PLUS = 'pi pi-user-plus';
+PrimeIcons.USERS = 'pi pi-users';
+PrimeIcons.VIDEO = 'pi pi-video';
+PrimeIcons.VIMEO = 'pi pi-vimeo';
+PrimeIcons.VOLUME_DOWN = 'pi pi-volume-down';
+PrimeIcons.VOLUME_OFF = 'pi pi-volume-off';
+PrimeIcons.VOLUME_UP = 'pi pi-volume-up';
+PrimeIcons.WALLET = 'pi pi-wallet';
+PrimeIcons.WHATSAPP = 'pi pi-whatsapp';
+PrimeIcons.WIFI = 'pi pi-wifi';
+PrimeIcons.WINDOW_MAXIMIZE = 'pi pi-window-maximize';
+PrimeIcons.WINDOW_MINIMIZE = 'pi pi-window-minimize';
+PrimeIcons.YOUTUBE = 'pi pi-youtube';
+
+class FilterOperator {
+}
+FilterOperator.AND = 'and';
+FilterOperator.OR = 'or';
+
+class Header {
+}
+Header.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Header, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Header.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Header, selector: "p-header", ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Header, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-header',
+                    template: '<ng-content></ng-content>'
+                }]
+        }] });
+class Footer {
+}
+Footer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Footer, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Footer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Footer, selector: "p-footer", ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Footer, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-footer',
+                    template: '<ng-content></ng-content>'
+                }]
+        }] });
+class PrimeTemplate {
+    constructor(template) {
+        this.template = template;
+    }
+    getType() {
+        return this.name;
+    }
+}
+PrimeTemplate.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PrimeTemplate, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
+PrimeTemplate.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: PrimeTemplate, selector: "[pTemplate]", inputs: { type: "type", name: ["pTemplate", "name"] }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PrimeTemplate, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pTemplate]',
+                    host: {}
+                }]
+        }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; }, propDecorators: { type: [{
+                type: Input
+            }], name: [{
+                type: Input,
+                args: ['pTemplate']
+            }] } });
+class SharedModule {
+}
+SharedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SharedModule, declarations: [Header, Footer, PrimeTemplate], imports: [CommonModule], exports: [Header, Footer, PrimeTemplate] });
+SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SharedModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SharedModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Header, Footer, PrimeTemplate],
+                    declarations: [Header, Footer, PrimeTemplate]
+                }]
+        }] });
+
+class TreeDragDropService {
+    constructor() {
+        this.dragStartSource = new Subject();
+        this.dragStopSource = new Subject();
+        this.dragStart$ = this.dragStartSource.asObservable();
+        this.dragStop$ = this.dragStopSource.asObservable();
+    }
+    startDrag(event) {
+        this.dragStartSource.next(event);
+    }
+    stopDrag(event) {
+        this.dragStopSource.next(event);
+    }
+}
+TreeDragDropService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeDragDropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+TreeDragDropService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeDragDropService });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeDragDropService, decorators: [{
+            type: Injectable
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ConfirmEventType, ConfirmationService, ContextMenuService, FilterMatchMode, FilterOperator, FilterService, Footer, Header, MessageService, OverlayService, PrimeIcons, PrimeNGConfig, PrimeTemplate, SharedModule, TranslationKeys, TreeDragDropService };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-api.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-api.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-api.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-api.mjs","sources":["../../src/app/components/api/filtermatchmode.ts","../../src/app/components/api/primengconfig.ts","../../src/app/components/api/translationkeys.ts","../../src/app/components/api/confirmaeventtype.ts","../../src/app/components/api/confirmationservice.ts","../../src/app/components/api/filterservice.ts","../../src/app/components/api/contextmenuservice.ts","../../src/app/components/api/messageservice.ts","../../src/app/components/api/overlayservice.ts","../../src/app/components/api/primeicons.ts","../../src/app/components/api/filteroperator.ts","../../src/app/components/api/shared.ts","../../src/app/components/api/treedragdropservice.ts","../../src/app/components/api/primeng-api.ts"],"sourcesContent":["export class FilterMatchMode {\n    public static readonly STARTS_WITH = 'startsWith';\n    public static readonly CONTAINS = 'contains';\n    public static readonly NOT_CONTAINS = 'notContains';\n    public static readonly ENDS_WITH = 'endsWith';\n    public static readonly EQUALS = 'equals';\n    public static readonly NOT_EQUALS = 'notEquals';\n    public static readonly IN = 'in';\n    public static readonly LESS_THAN = 'lt';\n    public static readonly LESS_THAN_OR_EQUAL_TO = 'lte';\n    public static readonly GREATER_THAN = 'gt';\n    public static readonly GREATER_THAN_OR_EQUAL_TO = 'gte';\n    public static readonly BETWEEN = 'between';\n    public static readonly IS = 'is';\n    public static readonly IS_NOT = 'isNot';\n    public static readonly BEFORE = 'before';\n    public static readonly AFTER = 'after';\n    public static readonly DATE_IS = 'dateIs';\n    public static readonly DATE_IS_NOT = 'dateIsNot';\n    public static readonly DATE_BEFORE = 'dateBefore';\n    public static readonly DATE_AFTER = 'dateAfter';\n}","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { FilterMatchMode } from './filtermatchmode';\nimport { Translation } from './translation';\n\n@Injectable({providedIn: 'root'})\nexport class PrimeNGConfig {\n\n    ripple: boolean = false;\n\n    filterMatchModeOptions = {\n        text: [\n            FilterMatchMode.STARTS_WITH,\n            FilterMatchMode.CONTAINS,\n            FilterMatchMode.NOT_CONTAINS,\n            FilterMatchMode.ENDS_WITH,\n            FilterMatchMode.EQUALS,\n            FilterMatchMode.NOT_EQUALS\n        ],\n        numeric: [\n            FilterMatchMode.EQUALS,\n            FilterMatchMode.NOT_EQUALS,\n            FilterMatchMode.LESS_THAN,\n            FilterMatchMode.LESS_THAN_OR_EQUAL_TO,\n            FilterMatchMode.GREATER_THAN,\n            FilterMatchMode.GREATER_THAN_OR_EQUAL_TO\n        ],\n        date: [\n            FilterMatchMode.DATE_IS,\n            FilterMatchMode.DATE_IS_NOT,\n            FilterMatchMode.DATE_BEFORE,\n            FilterMatchMode.DATE_AFTER\n        ]\n    };\n\n    private translation: Translation = {\n        startsWith: 'Starts with',\n        contains: 'Contains',\n        notContains: 'Not contains',\n        endsWith: 'Ends with',\n        equals: 'Equals',\n        notEquals: 'Not equals',\n        noFilter: 'No Filter',\n        lt: 'Less than',\n        lte: 'Less than or equal to',\n        gt: 'Greater than',\n        gte: 'Greater than or equal to',\n        is: 'Is',\n        isNot: 'Is not',\n        before: 'Before',\n        after: 'After',\n        dateIs: 'Date is',\n        dateIsNot: 'Date is not',\n        dateBefore: 'Date is before',\n        dateAfter: 'Date is after',\n        clear: 'Clear',\n        apply: 'Apply',\n        matchAll: 'Match All',\n        matchAny: 'Match Any',\n        addRule: 'Add Rule',\n        removeRule: 'Remove Rule',\n        accept: 'Yes',\n        reject: 'No',\n        choose: 'Choose',\n        upload: 'Upload',\n        cancel: 'Cancel',\n        dayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n        dayNamesShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n        dayNamesMin: [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\n        monthNames: [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\n        monthNamesShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n        dateFormat: 'mm/dd/yy',\n        today: 'Today',\n        weekHeader: 'Wk',\n        weak: 'Weak',\n        medium: 'Medium',\n        strong: 'Strong',\n        passwordPrompt: 'Enter a password',\n        emptyMessage: 'No results found',\n        emptyFilterMessage: 'No results found'\n    }\n\n    zIndex = {\n        modal: 1100,\n        overlay: 1000,\n        menu: 1000,\n        tooltip: 1100\n    }\n\n    private translationSource = new Subject<any>();\n\n    translationObserver = this.translationSource.asObservable();\n\n    getTranslation(key: string) {\n        return this.translation[key];\n    }\n\n    setTranslation(value: Translation) {\n        this.translation = {...this.translation, ...value};\n        this.translationSource.next(this.translation);\n    }\n}\n","export class TranslationKeys {\n    public static readonly STARTS_WITH = 'startsWith';\n    public static readonly CONTAINS = 'contains';\n    public static readonly NOT_CONTAINS = 'notContains';\n    public static readonly ENDS_WITH = 'endsWith';\n    public static readonly EQUALS = 'equals';\n    public static readonly NOT_EQUALS = 'notEquals';\n    public static readonly NO_FILTER = 'noFilter';\n    public static readonly LT = 'lt';\n    public static readonly LTE = 'lte';\n    public static readonly GT = 'gt';\n    public static readonly GTE = 'gte';\n    public static readonly IS = 'is';\n    public static readonly IS_NOT = 'isNot';\n    public static readonly BEFORE = 'before';\n    public static readonly AFTER = 'after';\n    public static readonly CLEAR = 'clear';\n    public static readonly APPLY = 'apply';\n    public static readonly MATCH_ALL = 'matchAll';\n    public static readonly MATCH_ANY = 'matchAny';\n    public static readonly ADD_RULE = 'addRule';\n    public static readonly REMOVE_RULE = 'removeRule';\n    public static readonly ACCEPT = 'accept';\n    public static readonly REJECT = 'reject';\n    public static readonly CHOOSE = 'choose';\n    public static readonly UPLOAD = 'upload';\n    public static readonly CANCEL = 'cancel';\n    public static readonly DAY_NAMES = 'dayNames';\n    public static readonly DAY_NAMES_SHORT = 'dayNamesShort';\n    public static readonly DAY_NAMES_MIN = 'dayNamesMin';\n    public static readonly MONTH_NAMES = 'monthNames';\n    public static readonly MONTH_NAMES_SHORT = 'monthNamesShort';\n    public static readonly TODAY = 'today';\n    public static readonly WEEK_HEADER = 'weekHeader';\n    public static readonly WEAK = 'weak';\n    public static readonly MEDIUM = 'medium';\n    public static readonly STRONG = 'strong';\n    public static readonly PASSWORD_PROMPT = 'passwordPrompt';\n    public static readonly EMPTY_MESSAGE = 'emptyMessage';\n    public static readonly EMPTY_FILTER_MESSAGE = 'emptyFilterMessage';\n}","export enum ConfirmEventType {\n    ACCEPT, \n    REJECT, \n    CANCEL\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Confirmation } from './confirmation';\n\n@Injectable()\nexport class ConfirmationService {\n\n    private requireConfirmationSource = new Subject<Confirmation>();\n    private acceptConfirmationSource = new Subject<Confirmation>();\n\n    requireConfirmation$ = this.requireConfirmationSource.asObservable();\n    accept = this.acceptConfirmationSource.asObservable();\n\n    confirm(confirmation: Confirmation) {\n        this.requireConfirmationSource.next(confirmation);\n        return this;\n    }\n\n    close() {\n        this.requireConfirmationSource.next(null);\n        return this;\n    }\n\n    onAccept() {\n        this.acceptConfirmationSource.next(null);\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { ObjectUtils } from 'primeng/utils';\n\n@Injectable({providedIn: 'root'})\nexport class FilterService {\n\n    filter(value: any[], fields: any[], filterValue: any, filterMatchMode: string, filterLocale?: string) {\n        let filteredItems: any[] = [];\n\n        if (value) {\n            for (let item of value) {\n                for (let field of fields) {\n                    let fieldValue = ObjectUtils.resolveFieldData(item, field);\n\n                    if (this.filters[filterMatchMode](fieldValue, filterValue, filterLocale)) {\n                        filteredItems.push(item);\n                        break;\n                    }\n                }\n            }\n        }\n\n        return filteredItems;\n    }\n    \n    public filters = {\n        startsWith: (value, filter, filterLocale?):boolean =>  {\n            if (filter === undefined || filter === null || filter.trim() === '') {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            let filterValue = ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);\n            let stringValue = ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale);\n    \n            return stringValue.slice(0, filterValue.length) === filterValue;\n        },\n\n        contains: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            let filterValue = ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);\n            let stringValue = ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale);\n    \n            return stringValue.indexOf(filterValue) !== -1;\n        },\n\n        notContains: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            let filterValue = ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);\n            let stringValue = ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale);\n    \n            return stringValue.indexOf(filterValue) === -1;\n        },\n\n        endsWith: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null || filter.trim() === '') {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            let filterValue = ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);\n            let stringValue = ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale);\n    \n            return stringValue.indexOf(filterValue, stringValue.length - filterValue.length) !== -1;\n        },\n\n        equals: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            if (value.getTime && filter.getTime)\n                return value.getTime() === filter.getTime();\n            else\n                return ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale) == ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);\n        },\n\n        notEquals: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                return false;\n            }\n    \n            if (value === undefined || value === null) {\n                return true;\n            }\n    \n            if (value.getTime && filter.getTime)\n                return value.getTime() !== filter.getTime();\n            else\n                return ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale) != ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale);\n        },\n\n        in: (value, filter: any[]):boolean => {\n            if (filter === undefined || filter === null || filter.length === 0) {\n                return true;\n            }\n    \n            for (let i = 0; i < filter.length; i++) {\n                if (ObjectUtils.equals(value, filter[i])) {\n                    return true;\n                }\n            }\n    \n            return false;\n        },\n\n        between: (value, filter: any[]):boolean => {\n            if (filter == null || filter[0] == null || filter[1] == null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            if (value.getTime)\n            return filter[0].getTime() <= value.getTime() && value.getTime() <= filter[1].getTime();\n            else\n                return filter[0] <= value && value <= filter[1];\n        },\n\n        lt: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            if (value.getTime && filter.getTime)\n                return value.getTime() < filter.getTime();\n            else\n                return value < filter;\n        },\n\n        lte: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            if (value.getTime && filter.getTime)\n                return value.getTime() <= filter.getTime();\n            else\n                return value <= filter;\n        },\n\n        gt: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            if (value.getTime && filter.getTime)\n                return value.getTime() > filter.getTime();\n            else\n                return value > filter;\n        },\n\n        gte: (value, filter, filterLocale?):boolean => {\n            if (filter === undefined || filter === null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n    \n            if (value.getTime && filter.getTime)\n                return value.getTime() >= filter.getTime();\n            else\n                return value >= filter;\n        },\n\n        is: (value, filter, filterLocale?):boolean => {\n            return this.filters.equals(value, filter, filterLocale);\n        },\n\n        isNot: (value, filter, filterLocale?): boolean => {\n            return this.filters.notEquals(value, filter, filterLocale);\n        },\n\n        before: (value, filter, filterLocale?): boolean => {\n            return this.filters.lt(value, filter, filterLocale);\n        },\n\n        after: (value, filter, filterLocale?): boolean => {\n            return this.filters.gt(value, filter, filterLocale);\n        },\n\n        dateIs: (value, filter): boolean => {\n            if (filter === undefined || filter === null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n\n            return value.toDateString() === filter.toDateString();\n        },\n\n        dateIsNot: (value, filter): boolean => {\n            if (filter === undefined || filter === null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n\n            return value.toDateString() !== filter.toDateString();\n        },\n\n        dateBefore: (value, filter): boolean =>  {\n            if (filter === undefined || filter === null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n\n            return value.getTime() < filter.getTime();\n        },\n\n        dateAfter: (value, filter): boolean =>  {\n            if (filter === undefined || filter === null) {\n                return true;\n            }\n    \n            if (value === undefined || value === null) {\n                return false;\n            }\n\n            return value.getTime() > filter.getTime();\n        }\n    \n    }\n\n    register(rule: string, fn: Function) {\n        this.filters[rule] = fn;\n    }\n}","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class ContextMenuService {\n\n    private activeItemKeyChange = new Subject<string>();\n\n    activeItemKeyChange$ = this.activeItemKeyChange.asObservable();\n\n    activeItemKey: string;\n\n    changeKey(key) {\n        this.activeItemKey = key;\n        this.activeItemKeyChange.next(this.activeItemKey);\n    }\n\n    reset() {\n        this.activeItemKey = null;\n        this.activeItemKeyChange.next(this.activeItemKey);\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Message } from './message';\n\n@Injectable()\nexport class MessageService {\n    \n    private messageSource = new Subject<Message|Message[]>();\n    private clearSource = new Subject<string>();\n    \n    messageObserver = this.messageSource.asObservable();\n    clearObserver = this.clearSource.asObservable();\n    \n    add(message: Message) {\n        if (message) {\n            this.messageSource.next(message);\n        }\n    }\n    \n    addAll(messages: Message[]) {\n        if (messages && messages.length) {\n            this.messageSource.next(messages);\n        } \n    }\n    \n    clear(key?: string) {\n        this.clearSource.next(key||null);\n    }\n    \n}","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Message } from './message';\n\n@Injectable({providedIn: 'root'})\nexport class OverlayService {\n\n    private clickSource = new Subject<Message|Message[]>();\n\n    clickObservable = this.clickSource.asObservable();\n\n    add(event) {\n        if (event) {\n            this.clickSource.next(event);\n        }\n    }\n}\n","export class PrimeIcons {\n    public static readonly ALIGN_CENTER = 'pi pi-align-center';\n    public static readonly ALIGN_JUSTIFY = 'pi pi-align-justify';\n    public static readonly ALIGN_LEFT = 'pi pi-align-left';\n    public static readonly ALIGN_RIGHT = 'pi pi-align-right';\n    public static readonly AMAZON = 'pi pi-amazon';\n    public static readonly ANDROID = 'pi pi-android';\n    public static readonly ANGLE_DOUBLE_DOWN = 'pi pi-angle-double-down';\n    public static readonly ANGLE_DOUBLE_LEFT = 'pi pi-angle-double-left';\n    public static readonly ANGLE_DOUBLE_RIGHT = 'pi pi-angle-double-right';\n    public static readonly ANGLE_DOUBLE_UP = 'pi pi-angle-double-up';\n    public static readonly ANGLE_DOWN = 'pi pi-angle-down';\n    public static readonly ANGLE_LEFT = 'pi pi-angle-left';\n    public static readonly ANGLE_RIGHT = 'pi pi-angle-right';\n    public static readonly ANGLE_UP = 'pi pi-angle-up';\n    public static readonly APPLE = 'pi pi-apple';\n    public static readonly ARROW_CIRCLE_DOWN = 'pi pi-arrow-circle-down';\n    public static readonly ARROW_CIRCLE_LEFT = 'pi pi-arrow-circle-left';\n    public static readonly ARROW_CIRCLE_RIGHT = 'pi pi-arrow-circle-right';\n    public static readonly ARROW_CIRCLE_UP = 'pi pi-arrow-circle-up';\n    public static readonly ARROW_DOWN = 'pi pi-arrow-down';\n    public static readonly ARROW_DOWN_LEFT = 'pi pi-arrow-down-left';\n    public static readonly ARROW_DOWN_RIGHT = 'pi pi-arrow-down-right';\n    public static readonly ARROW_LEFT = 'pi pi-arrow-left';\n    public static readonly ARROW_RIGHT = 'pi pi-arrow-right';\n    public static readonly ARROW_UP = 'pi pi-arrow-up';\n    public static readonly ARROW_UP_LEFT = 'pi pi-arrow-up-left';\n    public static readonly ARROW_UP_RIGHT = 'pi pi-arrow-up-right';\n    public static readonly ARROW_H = 'pi pi-arrow-h';\n    public static readonly ARROW_V = 'pi pi-arrow-v';\n    public static readonly AT = 'pi pi-at';\n    public static readonly BACKWARD = 'pi pi-backward';\n    public static readonly BAN = 'pi pi-ban';\n    public static readonly BARS = 'pi pi-bars';\n    public static readonly BELL = 'pi pi-bell';\n    public static readonly BOLT = 'pi pi-bolt';\n    public static readonly BOOK = 'pi pi-book';\n    public static readonly BOOKMARK = 'pi pi-bookmark';\n    public static readonly BOOKMARK_FILL = 'pi pi-bookmark-fill';\n    public static readonly BOX = 'pi pi-box';\n    public static readonly BRIEFCASE = 'pi pi-briefcase';\n    public static readonly BUILDING = 'pi pi-building';\n    public static readonly CALENDAR = 'pi pi-calendar';\n    public static readonly CALENDAR_MINUS = 'pi pi-calendar-minus';\n    public static readonly CALENDAR_PLUS = 'pi pi-calendar-plus';\n    public static readonly CALENDAR_TIMES = 'pi pi-calendar-times';\n    public static readonly CAMERA = 'pi pi-camera';\n    public static readonly CAR = 'pi pi-car';\n    public static readonly CARET_DOWN = 'pi pi-caret-down';\n    public static readonly CARET_LEFT = 'pi pi-caret-left';\n    public static readonly CARET_RIGHT = 'pi pi-caret-right';\n    public static readonly CARET_UP = 'pi pi-caret-up';\n    public static readonly CHART_BAR = 'pi pi-chart-bar';\n    public static readonly CHART_LINE = 'pi pi-chart-line';\n    public static readonly CHART_PIE = 'pi pi-chart-pie';\n    public static readonly CHECK = 'pi pi-check';\n    public static readonly CHECK_CIRCLE = 'pi pi-check-circle';\n    public static readonly CHECK_SQUARE = 'pi pi-check-square';\n    public static readonly CHEVRON_CIRCLE_DOWN = 'pi pi-chevron-circle-down';\n    public static readonly CHEVRON_CIRCLE_LEFT = 'pi pi-chevron-circle-left';\n    public static readonly CHEVRON_CIRCLE_RIGHT = 'pi pi-chevron-circle-right';\n    public static readonly CHEVRON_CIRCLE_UP = 'pi pi-chevron-circle-up';\n    public static readonly CHEVRON_DOWN = 'pi pi-chevron-down';\n    public static readonly CHEVRON_LEFT = 'pi pi-chevron-left';\n    public static readonly CHEVRON_RIGHT = 'pi pi-chevron-right';\n    public static readonly CHEVRON_UP = 'pi pi-chevron-up';\n    public static readonly CIRCLE = 'pi pi-circle';\n    public static readonly CIRCLE_FILL = 'pi pi-circle-fill';\n    public static readonly CLOCK = 'pi pi-clock';\n    public static readonly CLONE = 'pi pi-clone';\n    public static readonly CLOUD = 'pi pi-cloud';\n    public static readonly CLOUD_DOWNLOAD = 'pi pi-cloud-download';\n    public static readonly CLOUD_UPLOAD = 'pi pi-cloud-upload';\n    public static readonly CODE = 'pi pi-code';\n    public static readonly COG = 'pi pi-cog';\n    public static readonly COMMENT = 'pi pi-comment';\n    public static readonly COMMENTS = 'pi pi-comments';\n    public static readonly COMPASS = 'pi pi-compass';\n    public static readonly COPY = 'pi pi-copy';\n    public static readonly CREDIT_CARD = 'pi pi-credit-card';\n    public static readonly DATABASE = 'pi pi-database';\n    public static readonly DESKTOP = 'pi pi-desktop';\n    public static readonly DIRECTIONS = 'pi pi-directions';\n    public static readonly DIRECTIONS_ALT = 'pi pi-directions-alt';\n    public static readonly DISCORD = 'pi pi-discord';\n    public static readonly DOLLAR = 'pi pi-dollar';\n    public static readonly DOWNLOAD = 'pi pi-download';\n    public static readonly EJECT = 'pi pi-eject';\n    public static readonly ELLIPSIS_H = 'pi pi-ellipsis-h';\n    public static readonly ELLIPSIS_V = 'pi pi-ellipsis-v';\n    public static readonly ENVELOPE = 'pi pi-envelope';\n    public static readonly EURO = 'pi pi-euro';\n    public static readonly EXCLAMATION_CIRCLE = 'pi pi-exclamation-circle';\n    public static readonly EXCLAMATION_TRIANGLE  = 'pi pi-exclamation-triangle';\n    public static readonly EXTERNAL_LINK = 'pi pi-external-link';\n    public static readonly EYE = 'pi pi-eye';\n    public static readonly EYE_SLASH = 'pi pi-eye-slash';\n    public static readonly FACEBOOK = 'pi pi-facebook';\n    public static readonly FAST_BACKWARD = 'pi pi-fast-backward';\n    public static readonly FAST_FORWARD = 'pi pi-fast-forward';\n    public static readonly FILE = 'pi pi-file';\n    public static readonly FILE_EXCEL = 'pi pi-file-excel';\n    public static readonly FILE_PDF = 'pi pi-file-pdf';\n    public static readonly FILTER = 'pi pi-filter';\n    public static readonly FILTER_FILL = 'pi pi-filter-fill';\n    public static readonly FILTER_SLASH = 'pi pi-filter-slash';\n    public static readonly FLAG = 'pi pi-flag';\n    public static readonly FLAG_FILL = 'pi pi-flag-fill';\n    public static readonly FOLDER = 'pi pi-folder';\n    public static readonly FOLDER_OPEN = 'pi pi-folder-open';\n    public static readonly FORWARD = 'pi pi-forward';\n    public static readonly GITHUB = 'pi pi-github';\n    public static readonly GLOBE = 'pi pi-globe';\n    public static readonly GOOGLE = 'pi pi-google';\n    public static readonly HASHTAG = 'pi pi-hashtag';\n    public static readonly HEART = 'pi pi-heart';\n    public static readonly HEART_FILL = 'pi pi-heart-fill';\n    public static readonly HISTORY = 'pi pi-history';\n    public static readonly HOME = 'pi pi-home';\n    public static readonly ID_CARD = 'pi pi-id-card';\n    public static readonly IMAGE = 'pi pi-image';\n    public static readonly IMAGES = 'pi pi-images';\n    public static readonly INBOX = 'pi pi-inbox';\n    public static readonly INFO = 'pi pi-info';\n    public static readonly INFO_CIRCLE = 'pi pi-info-circle';\n    public static readonly INSTAGRAM = 'pi pi-instagram';\n    public static readonly KEY = 'pi pi-key';\n    public static readonly LINK = 'pi pi-link';\n    public static readonly LINKEDIN = 'pi pi-linkedin';\n    public static readonly LIST = 'pi pi-list';\n    public static readonly LOCK = 'pi pi-lock';\n    public static readonly LOCK_OPEN = 'pi pi-lock-open';\n    public static readonly MAP = 'pi pi-map';\n    public static readonly MAP_MARKER = 'pi pi-map-marker';\n    public static readonly MICROSOFT = 'pi pi-microsoft';\n    public static readonly MINUS = 'pi pi-minus';\n    public static readonly MINUS_CIRCLE = 'pi pi-minus-circle';\n    public static readonly MOBILE = 'pi pi-mobile';\n    public static readonly MONEY_BILL = 'pi pi-money-bill';\n    public static readonly MOON = 'pi pi-moon';\n    public static readonly PALETTE = 'pi pi-palette';\n    public static readonly PAPERCLIP = 'pi pi-paperclip';\n    public static readonly PAUSE = 'pi pi-pause';\n    public static readonly PAYPAL = 'pi pi-paypal';\n    public static readonly PENCIL = 'pi pi-pencil';\n    public static readonly PERCENTAGE = 'pi pi-percentage';\n    public static readonly PHONE = 'pi pi-phone';\n    public static readonly PLAY = 'pi pi-play';\n    public static readonly PLUS = 'pi pi-plus';\n    public static readonly PLUS_CIRCLE = 'pi pi-plus-circle';\n    public static readonly POUND = 'pi pi-pound';\n    public static readonly POWER_OFF = 'pi pi-power-off';\n    public static readonly PRIME = 'pi pi-prime';\n    public static readonly PRINT = 'pi pi-print';\n    public static readonly QRCODE = 'pi pi-qrcode';\n    public static readonly QUESTION = 'pi pi-question';\n    public static readonly QUESTION_CIRCLE = 'pi pi-question-circle';\n    public static readonly REDDIT = 'pi pi-reddit';\n    public static readonly REFRESH = 'pi pi-refresh';\n    public static readonly REPLAY = 'pi pi-replay';\n    public static readonly REPLY = 'pi pi-reply';\n    public static readonly SAVE = 'pi pi-save';\n    public static readonly SEARCH = 'pi pi-search';\n    public static readonly SEARCH_MINUS = 'pi pi-search-minus';\n    public static readonly SEARCH_PLUS = 'pi pi-search-plus';\n    public static readonly SEND = 'pi pi-send';\n    public static readonly SERVER = 'pi pi-server';\n    public static readonly SHARE_ALT = 'pi pi-share-alt';\n    public static readonly SHIELD = 'pi pi-shield';\n    public static readonly SHOPPING_BAG = 'pi pi-shopping-bag';\n    public static readonly SHOPPING_CART = 'pi pi-shopping-cart';\n    public static readonly SIGN_IN = 'pi pi-sign-in';\n    public static readonly SIGN_OUT = 'pi pi-sign-out';\n    public static readonly SITEMAP = 'pi pi-sitemap';\n    public static readonly SLACK = 'pi pi-slack';\n    public static readonly SLIDERS_H = 'pi pi-sliders-h';\n    public static readonly SLIDERS_V = 'pi pi-sliders-v';\n    public static readonly SORT = 'pi pi-sort';\n    public static readonly SORT_ALPHA_DOWN = 'pi pi-sort-alpha-down';\n    public static readonly SORT_ALPHA_ALT_DOWN = 'pi pi-sort-alpha-alt-down';\n    public static readonly SORT_ALPHA_UP = 'pi pi-sort-alpha-up';\n    public static readonly SORT_ALPHA_ALT_UP = 'pi pi-sort-alpha-alt-up';\n    public static readonly SORT_ALT = 'pi pi-sort-alt';\n    public static readonly SORT_ALT_SLASH = 'pi pi-sort-slash';\n    public static readonly SORT_AMOUNT_DOWN = 'pi pi-sort-amount-down';\n    public static readonly SORT_AMOUNT_DOWN_ALT = 'pi pi-sort-amount-down-alt';\n    public static readonly SORT_AMOUNT_UP = 'pi pi-sort-amount-up';\n    public static readonly SORT_AMOUNT_UP_ALT = 'pi pi-sort-amount-up-alt';\n    public static readonly SORT_DOWN = 'pi pi-sort-down';\n    public static readonly SORT_NUMERIC_DOWN = 'pi pi-sort-numeric-down';\n    public static readonly SORT_NUMERIC_ALT_DOWN = 'pi pi-sort-numeric-alt-down';\n    public static readonly SORT_NUMERIC_UP = 'pi pi-sort-numeric-up';\n    public static readonly SORT_NUMERIC_ALT_UP = 'pi pi-sort-numeric-alt-up';\n    public static readonly SORT_UP = 'pi pi-sort-up';\n    public static readonly SPINNER = 'pi pi-spinner';\n    public static readonly STAR = 'pi pi-star';\n    public static readonly STAR_FILL = 'pi pi-star-fill';\n    public static readonly STEP_BACKWARD = 'pi pi-step-backward';\n    public static readonly STEP_BACKWARD_ALT = 'pi pi-step-backward-alt';\n    public static readonly STEP_FORWARD = 'pi pi-step-forward';\n    public static readonly STEP_FORWARD_ALT = 'pi pi-step-forward-alt';\n    public static readonly STOP = 'pi pi-stop';\n    public static readonly STOP_CIRCLE = 'pi pi-stop-circle';\n    public static readonly SUN = 'pi pi-sun';\n    public static readonly SYNC = 'pi pi-sync';\n    public static readonly TABLE = 'pi pi-table';\n    public static readonly TABLET = 'pi pi-tablet';\n    public static readonly TAG = 'pi pi-tag';\n    public static readonly TAGS = 'pi pi-tags';\n    public static readonly TELEGRAM = 'pi pi-telegram';\n    public static readonly TH_LARGE = 'pi pi-th-large';\n    public static readonly THUMBS_DOWN = 'pi pi-thumbs-down';\n    public static readonly THUMBS_UP = 'pi pi-thumbs-up';\n    public static readonly TICKET = 'pi pi-ticket';\n    public static readonly TIMES = 'pi pi-times';\n    public static readonly TIMES_CIRCLE = 'pi pi-times-circle';\n    public static readonly TRASH = 'pi pi-trash';\n    public static readonly TWITTER = 'pi pi-twitter';\n    public static readonly UNDO = 'pi pi-undo';\n    public static readonly UNLOCK = 'pi pi-unlock';\n    public static readonly UPLOAD = 'pi pi-upload';\n    public static readonly USER = 'pi pi-user';\n    public static readonly USER_EDIT = 'pi pi-user-edit';\n    public static readonly USER_MINUS = 'pi pi-user-minus';\n    public static readonly USER_PLUS = 'pi pi-user-plus';\n    public static readonly USERS = 'pi pi-users';\n    public static readonly VIDEO = 'pi pi-video';\n    public static readonly VIMEO = 'pi pi-vimeo';\n    public static readonly VOLUME_DOWN = 'pi pi-volume-down';\n    public static readonly VOLUME_OFF = 'pi pi-volume-off';\n    public static readonly VOLUME_UP = 'pi pi-volume-up';\n    public static readonly WALLET = 'pi pi-wallet';\n    public static readonly WHATSAPP = 'pi pi-whatsapp';\n    public static readonly WIFI = 'pi pi-wifi';\n    public static readonly WINDOW_MAXIMIZE = 'pi pi-window-maximize';\n    public static readonly WINDOW_MINIMIZE = 'pi pi-window-minimize';\n    public static readonly YOUTUBE = 'pi pi-youtube'\n}\n","export class FilterOperator {\n    public static readonly AND = 'and';\n    public static readonly OR = 'or';\n}","import {NgModule,EventEmitter,Directive,Input,Output,ContentChildren,ContentChild,TemplateRef,AfterContentInit,QueryList} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {Component} from '@angular/core';\n\n@Component({\n    selector: 'p-header',\n    template: '<ng-content></ng-content>'\n})\nexport class Header {}\n\n@Component({\n    selector: 'p-footer',\n    template: '<ng-content></ng-content>'\n})\nexport class Footer {}\n\n@Directive({\n    selector: '[pTemplate]',\n    host: {\n    }\n})\nexport class PrimeTemplate {\n    \n    @Input() type: string;\n    \n    @Input('pTemplate') name: string;\n    \n    constructor(public template: TemplateRef<any>) {}\n    \n    getType(): string {\n        return this.name;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Header,Footer,PrimeTemplate],\n    declarations: [Header,Footer,PrimeTemplate]\n})\nexport class SharedModule { }\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TreeNodeDragEvent } from './treenodedragevent';\n\n@Injectable()\nexport class TreeDragDropService {\n    \n    private dragStartSource = new Subject<TreeNodeDragEvent>();\n    private dragStopSource = new Subject<TreeNodeDragEvent>();\n    \n    dragStart$ = this.dragStartSource.asObservable();\n    dragStop$ = this.dragStopSource.asObservable();\n    \n    startDrag(event: TreeNodeDragEvent) {\n        this.dragStartSource.next(event);\n    }\n    \n    stopDrag(event: TreeNodeDragEvent) {\n        this.dragStopSource.next(event);\n    }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-autocomplete.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-autocomplete.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-autocomplete.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,965 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i3 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { trigger, transition, style, animate } from '@angular/animations';
+import { InputTextModule } from 'primeng/inputtext';
+import * as i4 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import * as i5 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i1 from 'primeng/api';
+import { TranslationKeys, PrimeTemplate, SharedModule } from 'primeng/api';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import { UniqueComponentId, ObjectUtils, ZIndexUtils } from 'primeng/utils';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import * as i2 from '@angular/cdk/scrolling';
+import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
+
+const AUTOCOMPLETE_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => AutoComplete),
+    multi: true
+};
+class AutoComplete {
+    constructor(el, renderer, cd, differs, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.differs = differs;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.minLength = 1;
+        this.delay = 300;
+        this.type = 'text';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.dropdownIcon = "pi pi-chevron-down";
+        this.unique = true;
+        this.completeOnFocus = false;
+        this.completeMethod = new EventEmitter();
+        this.onSelect = new EventEmitter();
+        this.onUnselect = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.onDropdownClick = new EventEmitter();
+        this.onClear = new EventEmitter();
+        this.onKeyUp = new EventEmitter();
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.scrollHeight = '200px';
+        this.dropdownMode = 'blank';
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.autocomplete = 'off';
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+        this.overlayVisible = false;
+        this.focus = false;
+        this.inputFieldValue = null;
+        this.differ = differs.find([]).create(null);
+        this.listId = UniqueComponentId() + '_list';
+    }
+    get suggestions() {
+        return this._suggestions;
+    }
+    set suggestions(val) {
+        this._suggestions = val;
+        this.handleSuggestionsChange();
+    }
+    ngAfterViewChecked() {
+        //Use timeouts as since Angular 4.2, AfterViewChecked is broken and not called after panel is updated
+        if (this.suggestionsUpdated && this.overlay && this.overlay.offsetParent) {
+            setTimeout(() => {
+                if (this.overlay) {
+                    this.alignOverlay();
+                }
+            }, 1);
+            this.suggestionsUpdated = false;
+        }
+        if (this.highlightOptionChanged) {
+            setTimeout(() => {
+                if (this.overlay && this.itemsWrapper) {
+                    let listItem = DomHandler.findSingle(this.overlay, 'li.p-highlight');
+                    if (listItem) {
+                        DomHandler.scrollInView(this.itemsWrapper, listItem);
+                    }
+                    if (this.virtualScroll && this.viewPort) {
+                        let range = this.viewPort.getRenderedRange();
+                        this.updateVirtualScrollSelectedIndex();
+                        if (range.start > this.virtualScrollSelectedIndex || range.end < this.virtualScrollSelectedIndex) {
+                            this.viewPort.scrollToIndex(this.virtualScrollSelectedIndex);
+                        }
+                    }
+                }
+            }, 1);
+            this.highlightOptionChanged = false;
+        }
+    }
+    handleSuggestionsChange() {
+        if (this._suggestions != null && this.loading) {
+            this.highlightOption = null;
+            if (this._suggestions.length) {
+                this.noResults = false;
+                this.show();
+                this.suggestionsUpdated = true;
+                if (this.autoHighlight) {
+                    this.highlightOption = this._suggestions[0];
+                }
+            }
+            else {
+                this.noResults = true;
+                if (this.showEmptyMessage) {
+                    this.show();
+                    this.suggestionsUpdated = true;
+                }
+                else {
+                    this.hide();
+                }
+            }
+            this.loading = false;
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                case 'group':
+                    this.groupTemplate = item.template;
+                    break;
+                case 'selectedItem':
+                    this.selectedItemTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'empty':
+                    this.emptyTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    updateVirtualScrollSelectedIndex() {
+        if (this.highlightOption && this.suggestions && this.suggestions.length) {
+            this.virtualScrollSelectedIndex = this.findOptionIndex(this.highlightOption, this.suggestions);
+        }
+    }
+    writeValue(value) {
+        this.value = value;
+        this.filled = this.value && this.value != '';
+        this.updateInputField();
+        this.cd.markForCheck();
+    }
+    getOptionGroupChildren(optionGroup) {
+        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;
+    }
+    getOptionGroupLabel(optionGroup) {
+        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    onInput(event) {
+        // When an input element with a placeholder is clicked, the onInput event is invoked in IE.
+        if (!this.inputKeyDown && DomHandler.isIE()) {
+            return;
+        }
+        if (this.timeout) {
+            clearTimeout(this.timeout);
+        }
+        let value = event.target.value;
+        if (!this.multiple && !this.forceSelection) {
+            this.onModelChange(value);
+        }
+        if (value.length === 0 && !this.multiple) {
+            this.hide();
+            this.onClear.emit(event);
+            this.onModelChange(value);
+        }
+        if (value.length >= this.minLength) {
+            this.timeout = setTimeout(() => {
+                this.search(event, value);
+            }, this.delay);
+        }
+        else {
+            this.hide();
+        }
+        this.updateFilledState();
+        this.inputKeyDown = false;
+    }
+    onInputClick(event) {
+        if (this.documentClickListener) {
+            this.inputClick = true;
+        }
+    }
+    search(event, query) {
+        //allow empty string but not undefined or null
+        if (query === undefined || query === null) {
+            return;
+        }
+        this.loading = true;
+        this.completeMethod.emit({
+            originalEvent: event,
+            query: query
+        });
+    }
+    selectItem(option, focus = true) {
+        if (this.forceSelectionUpdateModelTimeout) {
+            clearTimeout(this.forceSelectionUpdateModelTimeout);
+            this.forceSelectionUpdateModelTimeout = null;
+        }
+        if (this.multiple) {
+            this.multiInputEL.nativeElement.value = '';
+            this.value = this.value || [];
+            if (!this.isSelected(option) || !this.unique) {
+                this.value = [...this.value, option];
+                this.onModelChange(this.value);
+            }
+        }
+        else {
+            this.inputEL.nativeElement.value = this.resolveFieldData(option);
+            this.value = option;
+            this.onModelChange(this.value);
+        }
+        this.onSelect.emit(option);
+        this.updateFilledState();
+        if (focus) {
+            this.itemClicked = true;
+            this.focusInput();
+        }
+    }
+    show() {
+        if (this.multiInputEL || this.inputEL) {
+            let hasFocus = this.multiple ?
+                this.multiInputEL.nativeElement.ownerDocument.activeElement == this.multiInputEL.nativeElement :
+                this.inputEL.nativeElement.ownerDocument.activeElement == this.inputEL.nativeElement;
+            if (!this.overlayVisible && hasFocus) {
+                this.overlayVisible = true;
+            }
+        }
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.overlay = event.element;
+                this.itemsWrapper = this.virtualScroll ? DomHandler.findSingle(this.overlay, '.cdk-virtual-scroll-viewport') : this.overlay;
+                this.appendOverlay();
+                if (this.autoZIndex) {
+                    ZIndexUtils.set('overlay', this.overlay, this.baseZIndex + this.config.zIndex.overlay);
+                }
+                this.alignOverlay();
+                this.bindDocumentClickListener();
+                this.bindDocumentResizeListener();
+                this.bindScrollListener();
+                this.onShow.emit(event);
+                break;
+            case 'void':
+                this.onOverlayHide();
+                break;
+        }
+    }
+    onOverlayAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                if (this.autoZIndex) {
+                    ZIndexUtils.clear(event.element);
+                }
+                break;
+        }
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+    }
+    appendOverlay() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.overlay);
+            else
+                DomHandler.appendChild(this.overlay, this.appendTo);
+            if (!this.overlay.style.minWidth) {
+                this.overlay.style.minWidth = DomHandler.getWidth(this.el.nativeElement.children[0]) + 'px';
+            }
+        }
+    }
+    resolveFieldData(value) {
+        let data = this.field ? ObjectUtils.resolveFieldData(value, this.field) : value;
+        return data !== (null || undefined) ? data : '';
+    }
+    restoreOverlayAppend() {
+        if (this.overlay && this.appendTo) {
+            this.el.nativeElement.appendChild(this.overlay);
+        }
+    }
+    alignOverlay() {
+        if (this.appendTo)
+            DomHandler.absolutePosition(this.overlay, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));
+        else
+            DomHandler.relativePosition(this.overlay, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));
+    }
+    hide() {
+        this.overlayVisible = false;
+        this.cd.markForCheck();
+    }
+    handleDropdownClick(event) {
+        if (!this.overlayVisible) {
+            this.focusInput();
+            let queryValue = this.multiple ? this.multiInputEL.nativeElement.value : this.inputEL.nativeElement.value;
+            if (this.dropdownMode === 'blank')
+                this.search(event, '');
+            else if (this.dropdownMode === 'current')
+                this.search(event, queryValue);
+            this.onDropdownClick.emit({
+                originalEvent: event,
+                query: queryValue
+            });
+        }
+        else {
+            this.hide();
+        }
+    }
+    focusInput() {
+        if (this.multiple)
+            this.multiInputEL.nativeElement.focus();
+        else
+            this.inputEL.nativeElement.focus();
+    }
+    get emptyMessageLabel() {
+        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
+    }
+    removeItem(item) {
+        let itemIndex = DomHandler.index(item);
+        let removedValue = this.value[itemIndex];
+        this.value = this.value.filter((val, i) => i != itemIndex);
+        this.onModelChange(this.value);
+        this.updateFilledState();
+        this.onUnselect.emit(removedValue);
+    }
+    onKeydown(event) {
+        if (this.overlayVisible) {
+            switch (event.which) {
+                //down
+                case 40:
+                    if (this.group) {
+                        let highlightItemIndex = this.findOptionGroupIndex(this.highlightOption, this.suggestions);
+                        if (highlightItemIndex !== -1) {
+                            let nextItemIndex = highlightItemIndex.itemIndex + 1;
+                            if (nextItemIndex < (this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex]).length)) {
+                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex])[nextItemIndex];
+                                this.highlightOptionChanged = true;
+                            }
+                            else if (this.suggestions[highlightItemIndex.groupIndex + 1]) {
+                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex + 1])[0];
+                                this.highlightOptionChanged = true;
+                            }
+                        }
+                        else {
+                            this.highlightOption = this.getOptionGroupChildren(this.suggestions[0])[0];
+                        }
+                    }
+                    else {
+                        let highlightItemIndex = this.findOptionIndex(this.highlightOption, this.suggestions);
+                        if (highlightItemIndex != -1) {
+                            var nextItemIndex = highlightItemIndex + 1;
+                            if (nextItemIndex != (this.suggestions.length)) {
+                                this.highlightOption = this.suggestions[nextItemIndex];
+                                this.highlightOptionChanged = true;
+                            }
+                        }
+                        else {
+                            this.highlightOption = this.suggestions[0];
+                        }
+                    }
+                    event.preventDefault();
+                    break;
+                //up
+                case 38:
+                    if (this.group) {
+                        let highlightItemIndex = this.findOptionGroupIndex(this.highlightOption, this.suggestions);
+                        if (highlightItemIndex !== -1) {
+                            let prevItemIndex = highlightItemIndex.itemIndex - 1;
+                            if (prevItemIndex >= 0) {
+                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex])[prevItemIndex];
+                                this.highlightOptionChanged = true;
+                            }
+                            else if (prevItemIndex < 0) {
+                                let prevGroup = this.suggestions[highlightItemIndex.groupIndex - 1];
+                                if (prevGroup) {
+                                    this.highlightOption = this.getOptionGroupChildren(prevGroup)[this.getOptionGroupChildren(prevGroup).length - 1];
+                                    this.highlightOptionChanged = true;
+                                }
+                            }
+                        }
+                    }
+                    else {
+                        let highlightItemIndex = this.findOptionIndex(this.highlightOption, this.suggestions);
+                        if (highlightItemIndex > 0) {
+                            let prevItemIndex = highlightItemIndex - 1;
+                            this.highlightOption = this.suggestions[prevItemIndex];
+                            this.highlightOptionChanged = true;
+                        }
+                    }
+                    event.preventDefault();
+                    break;
+                //enter
+                case 13:
+                    if (this.highlightOption) {
+                        this.selectItem(this.highlightOption);
+                        this.hide();
+                    }
+                    event.preventDefault();
+                    break;
+                //escape
+                case 27:
+                    this.hide();
+                    event.preventDefault();
+                    break;
+                //tab
+                case 9:
+                    if (this.highlightOption) {
+                        this.selectItem(this.highlightOption);
+                    }
+                    this.hide();
+                    break;
+            }
+        }
+        else {
+            if (event.which === 40 && this.suggestions) {
+                this.search(event, event.target.value);
+            }
+        }
+        if (this.multiple) {
+            switch (event.which) {
+                //backspace
+                case 8:
+                    if (this.value && this.value.length && !this.multiInputEL.nativeElement.value) {
+                        this.value = [...this.value];
+                        const removedValue = this.value.pop();
+                        this.onModelChange(this.value);
+                        this.updateFilledState();
+                        this.onUnselect.emit(removedValue);
+                    }
+                    break;
+            }
+        }
+        this.inputKeyDown = true;
+    }
+    onKeyup(event) {
+        this.onKeyUp.emit(event);
+    }
+    onInputFocus(event) {
+        if (!this.itemClicked && this.completeOnFocus) {
+            let queryValue = this.multiple ? this.multiInputEL.nativeElement.value : this.inputEL.nativeElement.value;
+            this.search(event, queryValue);
+        }
+        this.focus = true;
+        this.onFocus.emit(event);
+        this.itemClicked = false;
+    }
+    onInputBlur(event) {
+        this.focus = false;
+        this.onModelTouched();
+        this.onBlur.emit(event);
+    }
+    onInputChange(event) {
+        if (this.forceSelection) {
+            let valid = false;
+            let inputValue = event.target.value.trim();
+            if (this.suggestions) {
+                for (let suggestion of this.suggestions) {
+                    let itemValue = this.field ? ObjectUtils.resolveFieldData(suggestion, this.field) : suggestion;
+                    if (itemValue && inputValue === itemValue.trim()) {
+                        valid = true;
+                        this.forceSelectionUpdateModelTimeout = setTimeout(() => {
+                            this.selectItem(suggestion, false);
+                        }, 250);
+                        break;
+                    }
+                }
+            }
+            if (!valid) {
+                if (this.multiple) {
+                    this.multiInputEL.nativeElement.value = '';
+                }
+                else {
+                    this.value = null;
+                    this.inputEL.nativeElement.value = '';
+                }
+                this.onClear.emit(event);
+                this.onModelChange(this.value);
+                this.updateFilledState();
+            }
+        }
+    }
+    onInputPaste(event) {
+        this.onKeydown(event);
+    }
+    isSelected(val) {
+        let selected = false;
+        if (this.value && this.value.length) {
+            for (let i = 0; i < this.value.length; i++) {
+                if (ObjectUtils.equals(this.value[i], val, this.dataKey)) {
+                    selected = true;
+                    break;
+                }
+            }
+        }
+        return selected;
+    }
+    findOptionIndex(option, suggestions) {
+        let index = -1;
+        if (suggestions) {
+            for (let i = 0; i < suggestions.length; i++) {
+                if (ObjectUtils.equals(option, suggestions[i])) {
+                    index = i;
+                    break;
+                }
+            }
+        }
+        return index;
+    }
+    findOptionGroupIndex(val, opts) {
+        let groupIndex, itemIndex;
+        if (opts) {
+            for (let i = 0; i < opts.length; i++) {
+                groupIndex = i;
+                itemIndex = this.findOptionIndex(val, this.getOptionGroupChildren(opts[i]));
+                if (itemIndex !== -1) {
+                    break;
+                }
+            }
+        }
+        if (itemIndex !== -1) {
+            return { groupIndex: groupIndex, itemIndex: itemIndex };
+        }
+        else {
+            return -1;
+        }
+    }
+    updateFilledState() {
+        if (this.multiple)
+            this.filled = (this.value && this.value.length) || (this.multiInputEL && this.multiInputEL.nativeElement && this.multiInputEL.nativeElement.value != '');
+        else
+            this.filled = (this.inputFieldValue && this.inputFieldValue != '') || (this.inputEL && this.inputEL.nativeElement && this.inputEL.nativeElement.value != '');
+        ;
+    }
+    updateInputField() {
+        let formattedValue = this.resolveFieldData(this.value);
+        this.inputFieldValue = formattedValue;
+        if (this.inputEL && this.inputEL.nativeElement) {
+            this.inputEL.nativeElement.value = formattedValue;
+        }
+        this.updateFilledState();
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {
+                if (event.which === 3) {
+                    return;
+                }
+                if (!this.inputClick && !this.isDropdownClick(event)) {
+                    this.hide();
+                }
+                this.inputClick = false;
+                this.cd.markForCheck();
+            });
+        }
+    }
+    isDropdownClick(event) {
+        if (this.dropdown) {
+            let target = event.target;
+            return (target === this.dropdownButton.nativeElement || target.parentNode === this.dropdownButton.nativeElement);
+        }
+        else {
+            return false;
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    onWindowResize() {
+        this.hide();
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerEL.nativeElement, () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    onOverlayHide() {
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.overlay = null;
+        this.onHide.emit();
+    }
+    ngOnDestroy() {
+        if (this.forceSelectionUpdateModelTimeout) {
+            clearTimeout(this.forceSelectionUpdateModelTimeout);
+            this.forceSelectionUpdateModelTimeout = null;
+        }
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        if (this.overlay) {
+            ZIndexUtils.clear(this.overlay);
+        }
+        this.restoreOverlayAppend();
+        this.onOverlayHide();
+    }
+}
+AutoComplete.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AutoComplete, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: i1.PrimeNGConfig }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+AutoComplete.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: AutoComplete, selector: "p-autoComplete", inputs: { minLength: "minLength", delay: "delay", style: "style", panelStyle: "panelStyle", styleClass: "styleClass", panelStyleClass: "panelStyleClass", inputStyle: "inputStyle", inputId: "inputId", inputStyleClass: "inputStyleClass", placeholder: "placeholder", readonly: "readonly", disabled: "disabled", virtualScroll: "virtualScroll", itemSize: "itemSize", maxlength: "maxlength", name: "name", required: "required", size: "size", appendTo: "appendTo", autoHighlight: "autoHighlight", forceSelection: "forceSelection", type: "type", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", ariaLabel: "ariaLabel", dropdownAriaLabel: "dropdownAriaLabel", ariaLabelledBy: "ariaLabelledBy", dropdownIcon: "dropdownIcon", unique: "unique", group: "group", completeOnFocus: "completeOnFocus", field: "field", scrollHeight: "scrollHeight", dropdown: "dropdown", showEmptyMessage: "showEmptyMessage", dropdownMode: "dropdownMode", multiple: "multiple", tabindex: "tabindex", dataKey: "dataKey", emptyMessage: "emptyMessage", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", autofocus: "autofocus", autocomplete: "autocomplete", optionGroupChildren: "optionGroupChildren", optionGroupLabel: "optionGroupLabel", suggestions: "suggestions" }, outputs: { completeMethod: "completeMethod", onSelect: "onSelect", onUnselect: "onUnselect", onFocus: "onFocus", onBlur: "onBlur", onDropdownClick: "onDropdownClick", onClear: "onClear", onKeyUp: "onKeyUp", onShow: "onShow", onHide: "onHide" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "(focus && !disabled) ||\u00A0overlayVisible" }, classAttribute: "p-element p-inputwrapper" }, providers: [AUTOCOMPLETE_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerEL", first: true, predicate: ["container"], descendants: true }, { propertyName: "inputEL", first: true, predicate: ["in"], descendants: true }, { propertyName: "multiInputEL", first: true, predicate: ["multiIn"], descendants: true }, { propertyName: "multiContainerEL", first: true, predicate: ["multiContainer"], descendants: true }, { propertyName: "dropdownButton", first: true, predicate: ["ddBtn"], descendants: true }, { propertyName: "viewPort", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: `
+        <span #container [ngClass]="{'p-autocomplete p-component':true,'p-autocomplete-dd':dropdown,'p-autocomplete-multiple':multiple}" [ngStyle]="style" [class]="styleClass">
+            <input *ngIf="!multiple" #in [attr.type]="type" [attr.id]="inputId" [ngStyle]="inputStyle" [class]="inputStyleClass" [autocomplete]="autocomplete" [attr.required]="required" [attr.name]="name"
+            class="p-autocomplete-input p-inputtext p-component" [ngClass]="{'p-autocomplete-dd-input':dropdown,'p-disabled': disabled}" [value]="inputFieldValue" aria-autocomplete="list" [attr.aria-controls]="listId" role="searchbox" [attr.aria-expanded]="overlayVisible" aria-haspopup="true" [attr.aria-activedescendant]="'p-highlighted-option'"
+            (click)="onInputClick($event)" (input)="onInput($event)" (keydown)="onKeydown($event)" (keyup)="onKeyup($event)" [attr.autofocus]="autofocus" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" (change)="onInputChange($event)" (paste)="onInputPaste($event)"
+            [attr.placeholder]="placeholder" [attr.size]="size" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [readonly]="readonly" [disabled]="disabled" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy" [attr.aria-required]="required"
+            ><ul *ngIf="multiple" #multiContainer class="p-autocomplete-multiple-container p-component p-inputtext" [ngClass]="{'p-disabled':disabled,'p-focus':focus}" (click)="multiIn.focus()">
+                <li #token *ngFor="let val of value" class="p-autocomplete-token">
+                    <ng-container *ngTemplateOutlet="selectedItemTemplate; context: {$implicit: val}"></ng-container>
+                    <span *ngIf="!selectedItemTemplate" class="p-autocomplete-token-label">{{resolveFieldData(val)}}</span>
+                    <span  class="p-autocomplete-token-icon pi pi-times-circle" (click)="removeItem(token)" *ngIf="!disabled && !readonly"></span>
+                </li>
+                <li class="p-autocomplete-input-token">
+                    <input #multiIn [attr.type]="type" [attr.id]="inputId" [disabled]="disabled" [attr.placeholder]="(value&&value.length ? null : placeholder)" [attr.tabindex]="tabindex" [attr.maxlength]="maxlength" (input)="onInput($event)"  (click)="onInputClick($event)"
+                            (keydown)="onKeydown($event)" [readonly]="readonly" (keyup)="onKeyup($event)" [attr.autofocus]="autofocus" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" (change)="onInputChange($event)" (paste)="onInputPaste($event)" [autocomplete]="autocomplete"
+                            [ngStyle]="inputStyle" [class]="inputStyleClass" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy" [attr.aria-required]="required"
+                            aria-autocomplete="list" [attr.aria-controls]="listId" role="searchbox" [attr.aria-expanded]="overlayVisible" aria-haspopup="true" [attr.aria-activedescendant]="'p-highlighted-option'">
+                </li>
+            </ul>
+            <i *ngIf="loading" class="p-autocomplete-loader pi pi-spinner pi-spin"></i><button #ddBtn type="button" pButton [icon]="dropdownIcon" [attr.aria-label]="dropdownAriaLabel" class="p-autocomplete-dropdown" [disabled]="disabled" pRipple
+                (click)="handleDropdownClick($event)" *ngIf="dropdown" [attr.tabindex]="tabindex"></button>
+            <div #panel *ngIf="overlayVisible" (click)="onOverlayClick($event)" [ngClass]="['p-autocomplete-panel p-component']" [style.max-height]="virtualScroll ? 'auto' : scrollHeight" [ngStyle]="panelStyle" [class]="panelStyleClass"
+                [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)">
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <ul role="listbox" [attr.id]="listId" class="p-autocomplete-items" [ngClass]="{'p-autocomplete-virtualscroll': virtualScroll}">
+                    <ng-container *ngIf="group">
+                        <ng-template ngFor let-optgroup [ngForOf]="suggestions">
+                            <li class="p-autocomplete-item-group">
+                                <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
+                                <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
+                            </li>
+                            <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}"></ng-container>
+                        </ng-template>
+                    </ng-container>
+                    <ng-container *ngIf="!group">
+                            <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: suggestions}"></ng-container>
+                    </ng-container>
+                    <ng-template #itemslist let-suggestionsToDisplay>
+                        <ng-container *ngIf="!virtualScroll; else virtualScrollList">
+                            <li role="option" *ngFor="let option of suggestionsToDisplay; let idx = index" class="p-autocomplete-item" pRipple [ngClass]="{'p-highlight': (option === highlightOption)}" [id]="highlightOption == option ? 'p-highlighted-option':''" (click)="selectItem(option)">
+                                <span *ngIf="!itemTemplate">{{resolveFieldData(option)}}</span>
+                                <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: option, index: idx}"></ng-container>
+                            </li>
+                        </ng-container>
+                        <ng-template #virtualScrollList>
+                            <cdk-virtual-scroll-viewport [ngStyle]="{'height': scrollHeight}" [itemSize]="itemSize" *ngIf="virtualScroll && !noResults">
+                                <ng-container *cdkVirtualFor="let option of suggestionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd">
+                                    <li role="option" class="p-autocomplete-item" pRipple [ngClass]="{'p-highlight': (option === highlightOption)}" [ngStyle]="{'height': itemSize + 'px'}" [id]="highlightOption == option ? 'p-highlighted-option':''" (click)="selectItem(option)">
+                                        <span *ngIf="!itemTemplate">{{resolveFieldData(option)}}</span>
+                                        <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: option, index: i}"></ng-container>
+                                    </li>
+                                </ng-container>
+                            </cdk-virtual-scroll-viewport>
+                        </ng-template>
+                        <li *ngIf="noResults && showEmptyMessage" class="p-autocomplete-empty-message">
+                            <ng-container *ngIf="!emptyTemplate; else empty">
+                                {{emptyMessageLabel}}
+                            </ng-container>
+                            <ng-container #empty *ngTemplateOutlet="emptyTemplate"></ng-container>
+                        </li>
+                    </ng-template>
+                </ul>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </span>
+    `, isInline: true, styles: [".p-autocomplete{display:inline-flex;position:relative}.p-autocomplete-loader{position:absolute;top:50%;margin-top:-.5rem}.p-autocomplete-dd .p-autocomplete-input{flex:1 1 auto;width:1%}.p-autocomplete-dd .p-autocomplete-input,.p-autocomplete-dd .p-autocomplete-multiple-container{border-top-right-radius:0;border-bottom-right-radius:0}.p-autocomplete-dd .p-autocomplete-dropdown{border-top-left-radius:0;border-bottom-left-radius:0}.p-autocomplete .p-autocomplete-panel{min-width:100%;top:0;left:0}.p-autocomplete-panel{position:absolute;overflow:auto}.p-autocomplete-items{margin:0;padding:0;list-style-type:none}.p-autocomplete-item{cursor:pointer;white-space:nowrap;position:relative;overflow:hidden}.p-autocomplete-multiple-container{margin:0;padding:0;list-style-type:none;cursor:text;overflow:hidden;display:flex;align-items:center;flex-wrap:wrap}.p-autocomplete-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto}.p-autocomplete-token-icon{cursor:pointer}.p-autocomplete-input-token{flex:1 1 auto;display:inline-flex}.p-autocomplete-input-token input{border:0 none;outline:0 none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0;width:100%}.p-fluid .p-autocomplete{display:flex}.p-fluid .p-autocomplete-dd .p-autocomplete-input{width:1%}\n"], components: [{ type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i5.Ripple, selector: "[pRipple]" }, { type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AutoComplete, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-autoComplete', template: `
+        <span #container [ngClass]="{'p-autocomplete p-component':true,'p-autocomplete-dd':dropdown,'p-autocomplete-multiple':multiple}" [ngStyle]="style" [class]="styleClass">
+            <input *ngIf="!multiple" #in [attr.type]="type" [attr.id]="inputId" [ngStyle]="inputStyle" [class]="inputStyleClass" [autocomplete]="autocomplete" [attr.required]="required" [attr.name]="name"
+            class="p-autocomplete-input p-inputtext p-component" [ngClass]="{'p-autocomplete-dd-input':dropdown,'p-disabled': disabled}" [value]="inputFieldValue" aria-autocomplete="list" [attr.aria-controls]="listId" role="searchbox" [attr.aria-expanded]="overlayVisible" aria-haspopup="true" [attr.aria-activedescendant]="'p-highlighted-option'"
+            (click)="onInputClick($event)" (input)="onInput($event)" (keydown)="onKeydown($event)" (keyup)="onKeyup($event)" [attr.autofocus]="autofocus" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" (change)="onInputChange($event)" (paste)="onInputPaste($event)"
+            [attr.placeholder]="placeholder" [attr.size]="size" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [readonly]="readonly" [disabled]="disabled" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy" [attr.aria-required]="required"
+            ><ul *ngIf="multiple" #multiContainer class="p-autocomplete-multiple-container p-component p-inputtext" [ngClass]="{'p-disabled':disabled,'p-focus':focus}" (click)="multiIn.focus()">
+                <li #token *ngFor="let val of value" class="p-autocomplete-token">
+                    <ng-container *ngTemplateOutlet="selectedItemTemplate; context: {$implicit: val}"></ng-container>
+                    <span *ngIf="!selectedItemTemplate" class="p-autocomplete-token-label">{{resolveFieldData(val)}}</span>
+                    <span  class="p-autocomplete-token-icon pi pi-times-circle" (click)="removeItem(token)" *ngIf="!disabled && !readonly"></span>
+                </li>
+                <li class="p-autocomplete-input-token">
+                    <input #multiIn [attr.type]="type" [attr.id]="inputId" [disabled]="disabled" [attr.placeholder]="(value&&value.length ? null : placeholder)" [attr.tabindex]="tabindex" [attr.maxlength]="maxlength" (input)="onInput($event)"  (click)="onInputClick($event)"
+                            (keydown)="onKeydown($event)" [readonly]="readonly" (keyup)="onKeyup($event)" [attr.autofocus]="autofocus" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" (change)="onInputChange($event)" (paste)="onInputPaste($event)" [autocomplete]="autocomplete"
+                            [ngStyle]="inputStyle" [class]="inputStyleClass" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy" [attr.aria-required]="required"
+                            aria-autocomplete="list" [attr.aria-controls]="listId" role="searchbox" [attr.aria-expanded]="overlayVisible" aria-haspopup="true" [attr.aria-activedescendant]="'p-highlighted-option'">
+                </li>
+            </ul>
+            <i *ngIf="loading" class="p-autocomplete-loader pi pi-spinner pi-spin"></i><button #ddBtn type="button" pButton [icon]="dropdownIcon" [attr.aria-label]="dropdownAriaLabel" class="p-autocomplete-dropdown" [disabled]="disabled" pRipple
+                (click)="handleDropdownClick($event)" *ngIf="dropdown" [attr.tabindex]="tabindex"></button>
+            <div #panel *ngIf="overlayVisible" (click)="onOverlayClick($event)" [ngClass]="['p-autocomplete-panel p-component']" [style.max-height]="virtualScroll ? 'auto' : scrollHeight" [ngStyle]="panelStyle" [class]="panelStyleClass"
+                [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)">
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <ul role="listbox" [attr.id]="listId" class="p-autocomplete-items" [ngClass]="{'p-autocomplete-virtualscroll': virtualScroll}">
+                    <ng-container *ngIf="group">
+                        <ng-template ngFor let-optgroup [ngForOf]="suggestions">
+                            <li class="p-autocomplete-item-group">
+                                <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
+                                <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
+                            </li>
+                            <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}"></ng-container>
+                        </ng-template>
+                    </ng-container>
+                    <ng-container *ngIf="!group">
+                            <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: suggestions}"></ng-container>
+                    </ng-container>
+                    <ng-template #itemslist let-suggestionsToDisplay>
+                        <ng-container *ngIf="!virtualScroll; else virtualScrollList">
+                            <li role="option" *ngFor="let option of suggestionsToDisplay; let idx = index" class="p-autocomplete-item" pRipple [ngClass]="{'p-highlight': (option === highlightOption)}" [id]="highlightOption == option ? 'p-highlighted-option':''" (click)="selectItem(option)">
+                                <span *ngIf="!itemTemplate">{{resolveFieldData(option)}}</span>
+                                <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: option, index: idx}"></ng-container>
+                            </li>
+                        </ng-container>
+                        <ng-template #virtualScrollList>
+                            <cdk-virtual-scroll-viewport [ngStyle]="{'height': scrollHeight}" [itemSize]="itemSize" *ngIf="virtualScroll && !noResults">
+                                <ng-container *cdkVirtualFor="let option of suggestionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd">
+                                    <li role="option" class="p-autocomplete-item" pRipple [ngClass]="{'p-highlight': (option === highlightOption)}" [ngStyle]="{'height': itemSize + 'px'}" [id]="highlightOption == option ? 'p-highlighted-option':''" (click)="selectItem(option)">
+                                        <span *ngIf="!itemTemplate">{{resolveFieldData(option)}}</span>
+                                        <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: option, index: i}"></ng-container>
+                                    </li>
+                                </ng-container>
+                            </cdk-virtual-scroll-viewport>
+                        </ng-template>
+                        <li *ngIf="noResults && showEmptyMessage" class="p-autocomplete-empty-message">
+                            <ng-container *ngIf="!emptyTemplate; else empty">
+                                {{emptyMessageLabel}}
+                            </ng-container>
+                            <ng-container #empty *ngTemplateOutlet="emptyTemplate"></ng-container>
+                        </li>
+                    </ng-template>
+                </ul>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </span>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': 'filled',
+                        '[class.p-inputwrapper-focus]': '(focus && !disabled) || overlayVisible'
+                    }, providers: [AUTOCOMPLETE_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".p-autocomplete{display:inline-flex;position:relative}.p-autocomplete-loader{position:absolute;top:50%;margin-top:-.5rem}.p-autocomplete-dd .p-autocomplete-input{flex:1 1 auto;width:1%}.p-autocomplete-dd .p-autocomplete-input,.p-autocomplete-dd .p-autocomplete-multiple-container{border-top-right-radius:0;border-bottom-right-radius:0}.p-autocomplete-dd .p-autocomplete-dropdown{border-top-left-radius:0;border-bottom-left-radius:0}.p-autocomplete .p-autocomplete-panel{min-width:100%;top:0;left:0}.p-autocomplete-panel{position:absolute;overflow:auto}.p-autocomplete-items{margin:0;padding:0;list-style-type:none}.p-autocomplete-item{cursor:pointer;white-space:nowrap;position:relative;overflow:hidden}.p-autocomplete-multiple-container{margin:0;padding:0;list-style-type:none;cursor:text;overflow:hidden;display:flex;align-items:center;flex-wrap:wrap}.p-autocomplete-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto}.p-autocomplete-token-icon{cursor:pointer}.p-autocomplete-input-token{flex:1 1 auto;display:inline-flex}.p-autocomplete-input-token input{border:0 none;outline:0 none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0;width:100%}.p-fluid .p-autocomplete{display:flex}.p-fluid .p-autocomplete-dd .p-autocomplete-input{width:1%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i1.PrimeNGConfig }, { type: i1.OverlayService }]; }, propDecorators: { minLength: [{
+                type: Input
+            }], delay: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], panelStyle: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], panelStyleClass: [{
+                type: Input
+            }], inputStyle: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], inputStyleClass: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], virtualScroll: [{
+                type: Input
+            }], itemSize: [{
+                type: Input
+            }], maxlength: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], required: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], autoHighlight: [{
+                type: Input
+            }], forceSelection: [{
+                type: Input
+            }], type: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }], dropdownAriaLabel: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], dropdownIcon: [{
+                type: Input
+            }], unique: [{
+                type: Input
+            }], group: [{
+                type: Input
+            }], completeOnFocus: [{
+                type: Input
+            }], completeMethod: [{
+                type: Output
+            }], onSelect: [{
+                type: Output
+            }], onUnselect: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], onDropdownClick: [{
+                type: Output
+            }], onClear: [{
+                type: Output
+            }], onKeyUp: [{
+                type: Output
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], field: [{
+                type: Input
+            }], scrollHeight: [{
+                type: Input
+            }], dropdown: [{
+                type: Input
+            }], showEmptyMessage: [{
+                type: Input
+            }], dropdownMode: [{
+                type: Input
+            }], multiple: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], dataKey: [{
+                type: Input
+            }], emptyMessage: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], autofocus: [{
+                type: Input
+            }], autocomplete: [{
+                type: Input
+            }], optionGroupChildren: [{
+                type: Input
+            }], optionGroupLabel: [{
+                type: Input
+            }], containerEL: [{
+                type: ViewChild,
+                args: ['container']
+            }], inputEL: [{
+                type: ViewChild,
+                args: ['in']
+            }], multiInputEL: [{
+                type: ViewChild,
+                args: ['multiIn']
+            }], multiContainerEL: [{
+                type: ViewChild,
+                args: ['multiContainer']
+            }], dropdownButton: [{
+                type: ViewChild,
+                args: ['ddBtn']
+            }], viewPort: [{
+                type: ViewChild,
+                args: [CdkVirtualScrollViewport]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], suggestions: [{
+                type: Input
+            }] } });
+class AutoCompleteModule {
+}
+AutoCompleteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AutoCompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+AutoCompleteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AutoCompleteModule, declarations: [AutoComplete], imports: [CommonModule, InputTextModule, ButtonModule, SharedModule, RippleModule, ScrollingModule], exports: [AutoComplete, SharedModule, ScrollingModule] });
+AutoCompleteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AutoCompleteModule, imports: [[CommonModule, InputTextModule, ButtonModule, SharedModule, RippleModule, ScrollingModule], SharedModule, ScrollingModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AutoCompleteModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, InputTextModule, ButtonModule, SharedModule, RippleModule, ScrollingModule],
+                    exports: [AutoComplete, SharedModule, ScrollingModule],
+                    declarations: [AutoComplete]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { AUTOCOMPLETE_VALUE_ACCESSOR, AutoComplete, AutoCompleteModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-autocomplete.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-autocomplete.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-autocomplete.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-autocomplete.mjs","sources":["../../src/app/components/autocomplete/autocomplete.ts","../../src/app/components/autocomplete/primeng-autocomplete.ts"],"sourcesContent":["import {NgModule,Component,ViewChild,ElementRef,AfterViewChecked,AfterContentInit,OnDestroy,Input,Output,EventEmitter,ContentChildren,QueryList,TemplateRef,Renderer2,forwardRef,ChangeDetectorRef,IterableDiffers,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {ButtonModule} from 'primeng/button';\nimport {RippleModule} from 'primeng/ripple';\nimport {SharedModule,PrimeTemplate, TranslationKeys, PrimeNGConfig, OverlayService} from 'primeng/api';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {ObjectUtils, UniqueComponentId, ZIndexUtils} from 'primeng/utils';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport {CdkVirtualScrollViewport, ScrollingModule} from '@angular/cdk/scrolling';\n\nexport const AUTOCOMPLETE_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => AutoComplete),\n  multi: true\n};\n\n@Component({\n    selector: 'p-autoComplete',\n    template: `\n        <span #container [ngClass]=\"{'p-autocomplete p-component':true,'p-autocomplete-dd':dropdown,'p-autocomplete-multiple':multiple}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <input *ngIf=\"!multiple\" #in [attr.type]=\"type\" [attr.id]=\"inputId\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [autocomplete]=\"autocomplete\" [attr.required]=\"required\" [attr.name]=\"name\"\n            class=\"p-autocomplete-input p-inputtext p-component\" [ngClass]=\"{'p-autocomplete-dd-input':dropdown,'p-disabled': disabled}\" [value]=\"inputFieldValue\" aria-autocomplete=\"list\" [attr.aria-controls]=\"listId\" role=\"searchbox\" [attr.aria-expanded]=\"overlayVisible\" aria-haspopup=\"true\" [attr.aria-activedescendant]=\"'p-highlighted-option'\"\n            (click)=\"onInputClick($event)\" (input)=\"onInput($event)\" (keydown)=\"onKeydown($event)\" (keyup)=\"onKeyup($event)\" [attr.autofocus]=\"autofocus\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\" (change)=\"onInputChange($event)\" (paste)=\"onInputPaste($event)\"\n            [attr.placeholder]=\"placeholder\" [attr.size]=\"size\" [attr.maxlength]=\"maxlength\" [attr.tabindex]=\"tabindex\" [readonly]=\"readonly\" [disabled]=\"disabled\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\" [attr.aria-required]=\"required\"\n            ><ul *ngIf=\"multiple\" #multiContainer class=\"p-autocomplete-multiple-container p-component p-inputtext\" [ngClass]=\"{'p-disabled':disabled,'p-focus':focus}\" (click)=\"multiIn.focus()\">\n                <li #token *ngFor=\"let val of value\" class=\"p-autocomplete-token\">\n                    <ng-container *ngTemplateOutlet=\"selectedItemTemplate; context: {$implicit: val}\"></ng-container>\n                    <span *ngIf=\"!selectedItemTemplate\" class=\"p-autocomplete-token-label\">{{resolveFieldData(val)}}</span>\n                    <span  class=\"p-autocomplete-token-icon pi pi-times-circle\" (click)=\"removeItem(token)\" *ngIf=\"!disabled && !readonly\"></span>\n                </li>\n                <li class=\"p-autocomplete-input-token\">\n                    <input #multiIn [attr.type]=\"type\" [attr.id]=\"inputId\" [disabled]=\"disabled\" [attr.placeholder]=\"(value&&value.length ? null : placeholder)\" [attr.tabindex]=\"tabindex\" [attr.maxlength]=\"maxlength\" (input)=\"onInput($event)\"  (click)=\"onInputClick($event)\"\n                            (keydown)=\"onKeydown($event)\" [readonly]=\"readonly\" (keyup)=\"onKeyup($event)\" [attr.autofocus]=\"autofocus\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\" (change)=\"onInputChange($event)\" (paste)=\"onInputPaste($event)\" [autocomplete]=\"autocomplete\"\n                            [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\" [attr.aria-required]=\"required\"\n                            aria-autocomplete=\"list\" [attr.aria-controls]=\"listId\" role=\"searchbox\" [attr.aria-expanded]=\"overlayVisible\" aria-haspopup=\"true\" [attr.aria-activedescendant]=\"'p-highlighted-option'\">\n                </li>\n            </ul>\n            <i *ngIf=\"loading\" class=\"p-autocomplete-loader pi pi-spinner pi-spin\"></i><button #ddBtn type=\"button\" pButton [icon]=\"dropdownIcon\" [attr.aria-label]=\"dropdownAriaLabel\" class=\"p-autocomplete-dropdown\" [disabled]=\"disabled\" pRipple\n                (click)=\"handleDropdownClick($event)\" *ngIf=\"dropdown\" [attr.tabindex]=\"tabindex\"></button>\n            <div #panel *ngIf=\"overlayVisible\" (click)=\"onOverlayClick($event)\" [ngClass]=\"['p-autocomplete-panel p-component']\" [style.max-height]=\"virtualScroll ? 'auto' : scrollHeight\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\"\n                [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\">\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                <ul role=\"listbox\" [attr.id]=\"listId\" class=\"p-autocomplete-items\" [ngClass]=\"{'p-autocomplete-virtualscroll': virtualScroll}\">\n                    <ng-container *ngIf=\"group\">\n                        <ng-template ngFor let-optgroup [ngForOf]=\"suggestions\">\n                            <li class=\"p-autocomplete-item-group\">\n                                <span *ngIf=\"!groupTemplate\">{{getOptionGroupLabel(optgroup)||'empty'}}</span>\n                                <ng-container *ngTemplateOutlet=\"groupTemplate; context: {$implicit: optgroup}\"></ng-container>\n                            </li>\n                            <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}\"></ng-container>\n                        </ng-template>\n                    </ng-container>\n                    <ng-container *ngIf=\"!group\">\n                            <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: suggestions}\"></ng-container>\n                    </ng-container>\n                    <ng-template #itemslist let-suggestionsToDisplay>\n                        <ng-container *ngIf=\"!virtualScroll; else virtualScrollList\">\n                            <li role=\"option\" *ngFor=\"let option of suggestionsToDisplay; let idx = index\" class=\"p-autocomplete-item\" pRipple [ngClass]=\"{'p-highlight': (option === highlightOption)}\" [id]=\"highlightOption == option ? 'p-highlighted-option':''\" (click)=\"selectItem(option)\">\n                                <span *ngIf=\"!itemTemplate\">{{resolveFieldData(option)}}</span>\n                                <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: option, index: idx}\"></ng-container>\n                            </li>\n                        </ng-container>\n                        <ng-template #virtualScrollList>\n                            <cdk-virtual-scroll-viewport [ngStyle]=\"{'height': scrollHeight}\" [itemSize]=\"itemSize\" *ngIf=\"virtualScroll && !noResults\">\n                                <ng-container *cdkVirtualFor=\"let option of suggestionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd\">\n                                    <li role=\"option\" class=\"p-autocomplete-item\" pRipple [ngClass]=\"{'p-highlight': (option === highlightOption)}\" [ngStyle]=\"{'height': itemSize + 'px'}\" [id]=\"highlightOption == option ? 'p-highlighted-option':''\" (click)=\"selectItem(option)\">\n                                        <span *ngIf=\"!itemTemplate\">{{resolveFieldData(option)}}</span>\n                                        <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: option, index: i}\"></ng-container>\n                                    </li>\n                                </ng-container>\n                            </cdk-virtual-scroll-viewport>\n                        </ng-template>\n                        <li *ngIf=\"noResults && showEmptyMessage\" class=\"p-autocomplete-empty-message\">\n                            <ng-container *ngIf=\"!emptyTemplate; else empty\">\n                                {{emptyMessageLabel}}\n                            </ng-container>\n                            <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n                        </li>\n                    </ng-template>\n                </ul>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </span>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': '(focus && !disabled) || overlayVisible'\n    },\n    providers: [AUTOCOMPLETE_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./autocomplete.css']\n})\nexport class AutoComplete implements AfterViewChecked,AfterContentInit,OnDestroy,ControlValueAccessor {\n\n    @Input() minLength: number = 1;\n\n    @Input() delay: number = 300;\n\n    @Input() style: any;\n\n    @Input() panelStyle: any;\n\n    @Input() styleClass: string;\n\n    @Input() panelStyleClass: string;\n\n    @Input() inputStyle: any;\n\n    @Input() inputId: string;\n\n    @Input() inputStyleClass: string;\n\n    @Input() placeholder: string;\n\n    @Input() readonly: boolean;\n\n    @Input() disabled: boolean;\n\n    @Input() virtualScroll: boolean;\n\n    @Input() itemSize: number;\n\n    @Input() maxlength: number;\n\n    @Input() name: string;\n\n    @Input() required: boolean;\n\n    @Input() size: number;\n\n    @Input() appendTo: any;\n\n    @Input() autoHighlight: boolean;\n\n    @Input() forceSelection: boolean;\n\n    @Input() type: string = 'text';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() ariaLabel: string;\n\n    @Input() dropdownAriaLabel: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() dropdownIcon: string = \"pi pi-chevron-down\";\n\n    @Input() unique: boolean = true;\n\n    @Input() group: boolean;\n\n    @Input() completeOnFocus: boolean = false;\n\n    @Output() completeMethod: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onUnselect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDropdownClick: EventEmitter<any> = new EventEmitter();\n\n\t@Output() onClear: EventEmitter<any> = new EventEmitter();\n\n    @Output() onKeyUp: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @Input() field: string;\n\n    @Input() scrollHeight: string = '200px';\n\n    @Input() dropdown: boolean;\n\n    @Input() showEmptyMessage: boolean;\n\n    @Input() dropdownMode: string = 'blank';\n\n    @Input() multiple: boolean;\n\n    @Input() tabindex: number;\n\n    @Input() dataKey: string;\n\n    @Input() emptyMessage: string;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Input() autofocus: boolean;\n\n    @Input() autocomplete: string = 'off';\n\n    @Input() optionGroupChildren: string;\n\n    @Input() optionGroupLabel: string;\n\n    @ViewChild('container') containerEL: ElementRef;\n\n    @ViewChild('in') inputEL: ElementRef;\n\n    @ViewChild('multiIn') multiInputEL: ElementRef;\n\n    @ViewChild('multiContainer') multiContainerEL: ElementRef;\n\n    @ViewChild('ddBtn') dropdownButton: ElementRef;\n\n    @ViewChild(CdkVirtualScrollViewport) viewPort: CdkVirtualScrollViewport;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    overlay: HTMLDivElement;\n\n    itemsWrapper: HTMLDivElement;\n\n    itemTemplate: TemplateRef<any>;\n\n    emptyTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    selectedItemTemplate: TemplateRef<any>;\n\n    groupTemplate: TemplateRef<any>;\n\n    value: any;\n\n    _suggestions: any[];\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    timeout: any;\n\n    overlayVisible: boolean = false;\n\n    documentClickListener: any;\n\n    suggestionsUpdated: boolean;\n\n    highlightOption: any;\n\n    highlightOptionChanged: boolean;\n\n    focus: boolean = false;\n\n    filled: boolean;\n\n    inputClick: boolean;\n\n    inputKeyDown: boolean;\n\n    noResults: boolean;\n\n    differ: any;\n\n    inputFieldValue: string = null;\n\n    loading: boolean;\n\n    scrollHandler: any;\n\n    documentResizeListener: any;\n\n    forceSelectionUpdateModelTimeout: any;\n\n    listId: string;\n\n    itemClicked: boolean;\n\n    virtualScrollSelectedIndex: number;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public differs: IterableDiffers, public config: PrimeNGConfig, public overlayService: OverlayService) {\n        this.differ = differs.find([]).create(null);\n        this.listId = UniqueComponentId() + '_list';\n    }\n\n    @Input() get suggestions(): any[] {\n        return this._suggestions;\n    }\n\n    set suggestions(val:any[]) {\n        this._suggestions = val;\n        this.handleSuggestionsChange();\n    }\n\n    ngAfterViewChecked() {\n        //Use timeouts as since Angular 4.2, AfterViewChecked is broken and not called after panel is updated\n        if (this.suggestionsUpdated && this.overlay && this.overlay.offsetParent) {\n            setTimeout(() => {\n                if (this.overlay) {\n                    this.alignOverlay();\n                }\n            }, 1);\n            this.suggestionsUpdated = false;\n        }\n\n        if (this.highlightOptionChanged) {\n            setTimeout(() => {\n                if (this.overlay && this.itemsWrapper) {\n                    let listItem = DomHandler.findSingle(this.overlay, 'li.p-highlight');\n\n                    if (listItem) {\n                        DomHandler.scrollInView(this.itemsWrapper, listItem);\n                    }\n\n                    if (this.virtualScroll && this.viewPort) {\n                        let range = this.viewPort.getRenderedRange();\n                        this.updateVirtualScrollSelectedIndex();\n\n                        if (range.start > this.virtualScrollSelectedIndex || range.end < this.virtualScrollSelectedIndex) {\n                            this.viewPort.scrollToIndex(this.virtualScrollSelectedIndex);\n                        }\n                    }\n                }\n            }, 1);\n            this.highlightOptionChanged = false;\n        }\n    }\n\n    handleSuggestionsChange() {\n        if (this._suggestions != null && this.loading) {\n            this.highlightOption = null;\n            if (this._suggestions.length) {\n                this.noResults = false;\n                this.show();\n                this.suggestionsUpdated = true;\n\n                if (this.autoHighlight) {\n                    this.highlightOption = this._suggestions[0];\n                }\n            }\n            else {\n                this.noResults = true;\n\n                if (this.showEmptyMessage) {\n                    this.show();\n                    this.suggestionsUpdated = true;\n                }\n                else {\n                    this.hide();\n                }\n            }\n\n            this.loading = false;\n        }\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'group':\n                    this.groupTemplate = item.template;\n                break;\n\n                case 'selectedItem':\n                    this.selectedItemTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    updateVirtualScrollSelectedIndex() {\n        if (this.highlightOption && this.suggestions && this.suggestions.length) {\n            this.virtualScrollSelectedIndex = this.findOptionIndex(this.highlightOption, this.suggestions);\n        }\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.filled = this.value && this.value != '';\n        this.updateInputField();\n        this.cd.markForCheck();\n    }\n\n    getOptionGroupChildren(optionGroup: any) {\n        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;\n    }\n\n    getOptionGroupLabel(optionGroup: any) {\n        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    onInput(event: Event) {\n        // When an input element with a placeholder is clicked, the onInput event is invoked in IE.\n        if (!this.inputKeyDown && DomHandler.isIE()) {\n            return;\n        }\n\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n        }\n\n        let value = (<HTMLInputElement> event.target).value;\n        if (!this.multiple && !this.forceSelection) {\n            this.onModelChange(value);\n        }\n\n        if (value.length === 0 && !this.multiple) {\n            this.hide();\n            this.onClear.emit(event);\n\t        this.onModelChange(value);\n        }\n\n        if (value.length >= this.minLength) {\n            this.timeout = setTimeout(() => {\n                this.search(event, value);\n            }, this.delay);\n        }\n        else {\n            this.hide();\n        }\n        this.updateFilledState();\n        this.inputKeyDown = false;\n    }\n\n    onInputClick(event: MouseEvent) {\n        if (this.documentClickListener) {\n            this.inputClick = true;\n        }\n    }\n\n    search(event: any, query: string) {\n        //allow empty string but not undefined or null\n       if (query === undefined || query === null) {\n           return;\n       }\n\n       this.loading = true;\n\n       this.completeMethod.emit({\n           originalEvent: event,\n           query: query\n       });\n    }\n\n    selectItem(option: any, focus: boolean = true) {\n        if (this.forceSelectionUpdateModelTimeout) {\n            clearTimeout(this.forceSelectionUpdateModelTimeout);\n            this.forceSelectionUpdateModelTimeout = null;\n        }\n\n        if (this.multiple) {\n            this.multiInputEL.nativeElement.value = '';\n            this.value = this.value||[];\n            if (!this.isSelected(option) || !this.unique) {\n                this.value = [...this.value,option];\n                this.onModelChange(this.value);\n            }\n        }\n        else {\n            this.inputEL.nativeElement.value =  this.resolveFieldData(option);\n            this.value = option;\n            this.onModelChange(this.value);\n        }\n\n        this.onSelect.emit(option);\n        this.updateFilledState();\n\n        if (focus) {\n            this.itemClicked = true;\n            this.focusInput();\n        }\n    }\n\n    show() {\n        if (this.multiInputEL || this.inputEL) {\n            let hasFocus = this.multiple ?\n                this.multiInputEL.nativeElement.ownerDocument.activeElement == this.multiInputEL.nativeElement :\n                this.inputEL.nativeElement.ownerDocument.activeElement == this.inputEL.nativeElement;\n\n            if (!this.overlayVisible && hasFocus) {\n                this.overlayVisible = true;\n            }\n        }\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n                this.overlay = event.element;\n                this.itemsWrapper = this.virtualScroll ? DomHandler.findSingle(this.overlay, '.cdk-virtual-scroll-viewport') : this.overlay;\n                this.appendOverlay();\n\n                if (this.autoZIndex) {\n                    ZIndexUtils.set('overlay', this.overlay, this.baseZIndex + this.config.zIndex.overlay);\n                }\n\n                this.alignOverlay();\n                this.bindDocumentClickListener();\n                this.bindDocumentResizeListener();\n                this.bindScrollListener();\n                this.onShow.emit(event);\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                if (this.autoZIndex) {\n                    ZIndexUtils.clear(event.element);\n                }\n            break;\n        }\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                DomHandler.appendChild(this.overlay, this.appendTo);\n\n            if (!this.overlay.style.minWidth) {\n                this.overlay.style.minWidth = DomHandler.getWidth(this.el.nativeElement.children[0]) + 'px';\n            }\n        }\n    }\n\n    resolveFieldData(value) {\n        let data = this.field ? ObjectUtils.resolveFieldData(value, this.field) : value;\n        return data !== (null || undefined) ? data : '';\n    }\n\n    restoreOverlayAppend() {\n        if (this.overlay && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlay);\n        }\n    }\n\n    alignOverlay() {\n        if (this.appendTo)\n            DomHandler.absolutePosition(this.overlay, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));\n        else\n            DomHandler.relativePosition(this.overlay, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));\n    }\n\n    hide() {\n        this.overlayVisible = false;\n        this.cd.markForCheck();\n    }\n\n    handleDropdownClick(event) {\n        if (!this.overlayVisible) {\n            this.focusInput();\n            let queryValue = this.multiple ? this.multiInputEL.nativeElement.value : this.inputEL.nativeElement.value;\n\n            if (this.dropdownMode === 'blank')\n                this.search(event, '');\n            else if (this.dropdownMode === 'current')\n                this.search(event, queryValue);\n\n            this.onDropdownClick.emit({\n                originalEvent: event,\n                query: queryValue\n            });\n        }\n        else {\n            this.hide();\n        }\n    }\n\n    focusInput() {\n        if (this.multiple)\n            this.multiInputEL.nativeElement.focus();\n        else\n            this.inputEL.nativeElement.focus();\n    }\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    removeItem(item: any) {\n        let itemIndex = DomHandler.index(item);\n        let removedValue = this.value[itemIndex];\n        this.value = this.value.filter((val, i) => i!=itemIndex);\n        this.onModelChange(this.value);\n        this.updateFilledState();\n        this.onUnselect.emit(removedValue);\n    }\n\n    onKeydown(event) {\n        if (this.overlayVisible) {\n            switch(event.which) {\n                //down\n                case 40:\n                    if (this.group) {\n                        let highlightItemIndex = this.findOptionGroupIndex(this.highlightOption, this.suggestions);\n\n                        if (highlightItemIndex !== -1) {\n                            let nextItemIndex = highlightItemIndex.itemIndex + 1;\n                            if (nextItemIndex < (this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex]).length)) {\n                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex])[nextItemIndex];\n                                this.highlightOptionChanged = true;\n                            }\n                            else if (this.suggestions[highlightItemIndex.groupIndex + 1]) {\n                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex + 1])[0];\n                                this.highlightOptionChanged = true;\n                            }\n                        }\n                        else {\n                            this.highlightOption = this.getOptionGroupChildren(this.suggestions[0])[0];\n                        }\n                    }\n                    else {\n                        let highlightItemIndex = this.findOptionIndex(this.highlightOption, this.suggestions);\n\n                        if (highlightItemIndex != -1) {\n                            var nextItemIndex = highlightItemIndex + 1;\n                            if (nextItemIndex != (this.suggestions.length)) {\n                                this.highlightOption = this.suggestions[nextItemIndex];\n                                this.highlightOptionChanged = true;\n                            }\n                        }\n                        else {\n                            this.highlightOption = this.suggestions[0];\n                        }\n                    }\n\n                    event.preventDefault();\n                break;\n\n                //up\n                case 38:\n                    if (this.group) {\n                        let highlightItemIndex = this.findOptionGroupIndex(this.highlightOption, this.suggestions);\n                        if (highlightItemIndex !== -1) {\n                            let prevItemIndex = highlightItemIndex.itemIndex - 1;\n                            if (prevItemIndex >= 0) {\n                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex])[prevItemIndex];\n                                this.highlightOptionChanged = true;\n                            }\n                            else if (prevItemIndex < 0) {\n                                let prevGroup = this.suggestions[highlightItemIndex.groupIndex - 1];\n                                if (prevGroup) {\n                                    this.highlightOption = this.getOptionGroupChildren(prevGroup)[this.getOptionGroupChildren(prevGroup).length - 1];\n                                    this.highlightOptionChanged = true;\n                                }\n                            }\n                        }\n                    }\n                    else {\n                        let highlightItemIndex = this.findOptionIndex(this.highlightOption, this.suggestions);\n\n                        if (highlightItemIndex > 0) {\n                            let prevItemIndex = highlightItemIndex - 1;\n                            this.highlightOption = this.suggestions[prevItemIndex];\n                            this.highlightOptionChanged = true;\n                        }\n                    }\n\n                    event.preventDefault();\n                break;\n\n                //enter\n                case 13:\n                    if (this.highlightOption) {\n                        this.selectItem(this.highlightOption);\n                        this.hide();\n                    }\n                    event.preventDefault();\n                break;\n\n                //escape\n                case 27:\n                    this.hide();\n                    event.preventDefault();\n                break;\n\n\n                //tab\n                case 9:\n                    if (this.highlightOption) {\n                        this.selectItem(this.highlightOption);\n                    }\n                    this.hide();\n                break;\n            }\n        } else {\n            if (event.which === 40 && this.suggestions) {\n                this.search(event,event.target.value);\n            }\n        }\n\n        if (this.multiple) {\n            switch(event.which) {\n                //backspace\n                case 8:\n                    if (this.value && this.value.length && !this.multiInputEL.nativeElement.value) {\n                        this.value = [...this.value];\n                        const removedValue = this.value.pop();\n                        this.onModelChange(this.value);\n                        this.updateFilledState();\n                        this.onUnselect.emit(removedValue);\n                    }\n                break;\n            }\n        }\n\n        this.inputKeyDown = true;\n    }\n\n    onKeyup(event) {\n        this.onKeyUp.emit(event);\n    }\n\n    onInputFocus(event) {\n        if (!this.itemClicked && this.completeOnFocus ) {\n            let queryValue = this.multiple ? this.multiInputEL.nativeElement.value : this.inputEL.nativeElement.value;\n            this.search(event, queryValue);\n        }\n\n        this.focus = true;\n        this.onFocus.emit(event);\n        this.itemClicked = false;\n    }\n\n    onInputBlur(event) {\n        this.focus = false;\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    }\n\n    onInputChange(event) {\n        if (this.forceSelection) {\n            let valid = false;\n            let inputValue = event.target.value.trim();\n\n            if (this.suggestions)  {\n                for (let suggestion of this.suggestions) {\n                    let itemValue = this.field ? ObjectUtils.resolveFieldData(suggestion, this.field) : suggestion;\n                    if (itemValue && inputValue === itemValue.trim()) {\n                        valid = true;\n                        this.forceSelectionUpdateModelTimeout = setTimeout(() => {\n                            this.selectItem(suggestion, false);\n                        }, 250);\n                        break;\n                    }\n                }\n            }\n\n            if (!valid) {\n                if (this.multiple) {\n                    this.multiInputEL.nativeElement.value = '';\n                }\n                else {\n                    this.value = null;\n                    this.inputEL.nativeElement.value = '';\n                }\n\n                this.onClear.emit(event);\n                this.onModelChange(this.value);\n                this.updateFilledState();\n            }\n        }\n    }\n\n    onInputPaste(event: ClipboardEvent) {\n        this.onKeydown(event);\n    }\n\n    isSelected(val: any): boolean {\n        let selected: boolean = false;\n        if (this.value && this.value.length) {\n            for (let i = 0; i < this.value.length; i++) {\n                if (ObjectUtils.equals(this.value[i], val, this.dataKey)) {\n                    selected = true;\n                    break;\n                }\n            }\n        }\n        return selected;\n    }\n\n    findOptionIndex(option, suggestions): number {\n        let index: number = -1;\n        if (suggestions) {\n            for (let i = 0; i < suggestions.length; i++) {\n                if (ObjectUtils.equals(option, suggestions[i])) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n\n        return index;\n    }\n\n    findOptionGroupIndex(val: any, opts: any[]): any {\n        let groupIndex, itemIndex;\n\n        if (opts) {\n            for (let i = 0; i < opts.length; i++) {\n                groupIndex = i;\n                itemIndex = this.findOptionIndex(val, this.getOptionGroupChildren(opts[i]));\n\n                if (itemIndex !== -1) {\n                    break;\n                }\n            }\n        }\n\n        if (itemIndex !== -1) {\n            return {groupIndex: groupIndex, itemIndex: itemIndex};\n        }\n        else {\n            return -1;\n        }\n    }\n\n    updateFilledState() {\n        if (this.multiple)\n            this.filled = (this.value && this.value.length) || (this.multiInputEL && this.multiInputEL.nativeElement && this.multiInputEL.nativeElement.value != '');\n        else\n            this.filled = (this.inputFieldValue && this.inputFieldValue != '') || (this.inputEL && this.inputEL.nativeElement && this.inputEL.nativeElement.value != '');;\n    }\n\n    updateInputField() {\n        let formattedValue = this.resolveFieldData(this.value);\n        this.inputFieldValue = formattedValue;\n\n        if (this.inputEL && this.inputEL.nativeElement) {\n            this.inputEL.nativeElement.value = formattedValue;\n        }\n\n        this.updateFilledState();\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n                if (event.which === 3) {\n                    return;\n                }\n\n                if (!this.inputClick && !this.isDropdownClick(event)) {\n                    this.hide();\n                }\n\n                this.inputClick = false;\n                this.cd.markForCheck();\n            });\n        }\n    }\n\n    isDropdownClick(event) {\n        if (this.dropdown) {\n            let target = event.target;\n            return (target === this.dropdownButton.nativeElement || target.parentNode === this.dropdownButton.nativeElement);\n        }\n        else {\n            return false;\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    onWindowResize() {\n        this.hide();\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerEL.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    onOverlayHide() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.overlay = null;\n        this.onHide.emit();\n    }\n\n    ngOnDestroy() {\n        if (this.forceSelectionUpdateModelTimeout) {\n            clearTimeout(this.forceSelectionUpdateModelTimeout);\n            this.forceSelectionUpdateModelTimeout = null;\n        }\n\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.overlay) {\n            ZIndexUtils.clear(this.overlay);\n        }\n\n        this.restoreOverlayAppend();\n        this.onOverlayHide();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,InputTextModule,ButtonModule,SharedModule,RippleModule,ScrollingModule],\n    exports: [AutoComplete,SharedModule,ScrollingModule],\n    declarations: [AutoComplete]\n})\nexport class AutoCompleteModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-avatar.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-avatar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-avatar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,75 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class Avatar {
+    constructor() {
+        this.size = "normal";
+        this.shape = "square";
+    }
+    containerClass() {
+        return {
+            'p-avatar p-component': true,
+            'p-avatar-image': this.image != null,
+            'p-avatar-circle': this.shape === 'circle',
+            'p-avatar-lg': this.size === 'large',
+            'p-avatar-xl': this.size === 'xlarge'
+        };
+    }
+}
+Avatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Avatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Avatar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Avatar, selector: "p-avatar", inputs: { label: "label", icon: "icon", image: "image", size: "size", shape: "shape", style: "style", styleClass: "styleClass" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+            <ng-content></ng-content>
+            <span class="p-avatar-text" *ngIf="label; else iconTemplate">{{label}}</span>
+            <ng-template #iconTemplate><span [class]="icon" [ngClass]="'p-avatar-icon'" *ngIf="icon; else imageTemplate"></span></ng-template>
+            <ng-template #imageTemplate><img [src]="image" *ngIf="image"></ng-template>
+        </div>
+    `, isInline: true, styles: [".p-avatar{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:1rem}.p-avatar.p-avatar-image{background-color:transparent}.p-avatar.p-avatar-circle{border-radius:50%;overflow:hidden}.p-avatar .p-avatar-icon{font-size:1rem}.p-avatar img{width:100%;height:100%}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Avatar, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-avatar', template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+            <ng-content></ng-content>
+            <span class="p-avatar-text" *ngIf="label; else iconTemplate">{{label}}</span>
+            <ng-template #iconTemplate><span [class]="icon" [ngClass]="'p-avatar-icon'" *ngIf="icon; else imageTemplate"></span></ng-template>
+            <ng-template #imageTemplate><img [src]="image" *ngIf="image"></ng-template>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-avatar{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:1rem}.p-avatar.p-avatar-image{background-color:transparent}.p-avatar.p-avatar-circle{border-radius:50%;overflow:hidden}.p-avatar .p-avatar-icon{font-size:1rem}.p-avatar img{width:100%;height:100%}\n"] }]
+        }], propDecorators: { label: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], image: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], shape: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }] } });
+class AvatarModule {
+}
+AvatarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+AvatarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarModule, declarations: [Avatar], imports: [CommonModule], exports: [Avatar] });
+AvatarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Avatar],
+                    declarations: [Avatar]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Avatar, AvatarModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-avatar.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-avatar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-avatar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-avatar.mjs","sources":["../../src/app/components/avatar/avatar.ts","../../src/app/components/avatar/primeng-avatar.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'p-avatar',\n    template: `\n        <div [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\">\n            <ng-content></ng-content>\n            <span class=\"p-avatar-text\" *ngIf=\"label; else iconTemplate\">{{label}}</span>\n            <ng-template #iconTemplate><span [class]=\"icon\" [ngClass]=\"'p-avatar-icon'\" *ngIf=\"icon; else imageTemplate\"></span></ng-template>\n            <ng-template #imageTemplate><img [src]=\"image\" *ngIf=\"image\"></ng-template>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./avatar.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Avatar {\n\n    @Input() label: string;\n\n    @Input() icon: string;\n\n    @Input() image: string;\n\n    @Input() size: string = \"normal\";\n\n    @Input() shape: string = \"square\";\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    containerClass() {\n        return {\n            'p-avatar p-component': true,\n            'p-avatar-image': this.image != null,\n            'p-avatar-circle': this.shape === 'circle',\n            'p-avatar-lg': this.size === 'large',\n            'p-avatar-xl': this.size === 'xlarge'\n        };\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Avatar],\n    declarations: [Avatar]\n})\nexport class AvatarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAoBa,MAAM;IAjBnB;QAyBa,SAAI,GAAW,QAAQ,CAAC;QAExB,UAAK,GAAW,QAAQ,CAAC;KAerC;IATG,cAAc;QACV,OAAO;YACH,sBAAsB,EAAE,IAAI;YAC5B,gBAAgB,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;YACpC,iBAAiB,EAAE,IAAI,CAAC,KAAK,KAAK,QAAQ;YAC1C,aAAa,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;YACpC,aAAa,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ;SACxC,CAAC;KACL;;mGAxBQ,MAAM;uFAAN,MAAM,yNAfL;;;;;;;KAOT;2FAQQ,MAAM;kBAjBlB,SAAS;+BACI,UAAU,YACV;;;;;;;KAOT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,KAAK;sBAAb,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;;MAkBG,YAAY;;yGAAZ,YAAY;0GAAZ,YAAY,iBAhCZ,MAAM,aA4BL,YAAY,aA5Bb,MAAM;0GAgCN,YAAY,YAJZ,CAAC,YAAY,CAAC;2FAId,YAAY;kBALxB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,MAAM,CAAC;oBACjB,YAAY,EAAE,CAAC,MAAM,CAAC;iBACzB;;;ACnDD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-avatargroup.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-avatargroup.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-avatargroup.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,46 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class AvatarGroup {
+}
+AvatarGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
+AvatarGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: AvatarGroup, selector: "p-avatarGroup", inputs: { styleClass: "styleClass", style: "style" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="'p-avatar-group p-component'" [class]="styleClass" [ngStyle]="style">
+            <ng-content></ng-content>
+        </div>
+    `, isInline: true, styles: [".p-avatar-group p-avatar+p-avatar{margin-left:-1rem}.p-avatar-group{display:flex;align-items:center}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarGroup, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-avatarGroup', template: `
+        <div [ngClass]="'p-avatar-group p-component'" [class]="styleClass" [ngStyle]="style">
+            <ng-content></ng-content>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-avatar-group p-avatar+p-avatar{margin-left:-1rem}.p-avatar-group{display:flex;align-items:center}\n"] }]
+        }], propDecorators: { styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }] } });
+class AvatarGroupModule {
+}
+AvatarGroupModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+AvatarGroupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarGroupModule, declarations: [AvatarGroup], imports: [CommonModule], exports: [AvatarGroup] });
+AvatarGroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarGroupModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: AvatarGroupModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [AvatarGroup],
+                    declarations: [AvatarGroup]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { AvatarGroup, AvatarGroupModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-avatargroup.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-avatargroup.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-avatargroup.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-avatargroup.mjs","sources":["../../src/app/components/avatargroup/avatargroup.ts","../../src/app/components/avatargroup/primeng-avatargroup.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'p-avatarGroup',\n    template: `\n        <div [ngClass]=\"'p-avatar-group p-component'\" [class]=\"styleClass\" [ngStyle]=\"style\">\n            <ng-content></ng-content>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./avatargroup.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class AvatarGroup {\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [AvatarGroup],\n    declarations: [AvatarGroup]\n})\nexport class AvatarGroupModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAiBa,WAAW;;wGAAX,WAAW;4FAAX,WAAW,kJAZV;;;;KAIT;2FAQQ,WAAW;kBAdvB,SAAS;+BACI,eAAe,YACf;;;;KAIT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,UAAU;sBAAlB,KAAK;gBAEG,KAAK;sBAAb,KAAK;;MAQG,iBAAiB;;8GAAjB,iBAAiB;+GAAjB,iBAAiB,iBAZjB,WAAW,aAQV,YAAY,aARb,WAAW;+GAYX,iBAAiB,YAJjB,CAAC,YAAY,CAAC;2FAId,iBAAiB;kBAL7B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,WAAW,CAAC;oBACtB,YAAY,EAAE,CAAC,WAAW,CAAC;iBAC9B;;;AC5BD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-badge.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-badge.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-badge.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,141 @@
+import * as i0 from '@angular/core';
+import { Directive, Input, Component, ChangeDetectionStrategy, ViewEncapsulation, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { SharedModule } from 'primeng/api';
+import { DomHandler } from 'primeng/dom';
+import { UniqueComponentId } from 'primeng/utils';
+
+class BadgeDirective {
+    constructor(el) {
+        this.el = el;
+        this.iconPos = 'left';
+    }
+    ngAfterViewInit() {
+        this.id = UniqueComponentId() + '_badge';
+        let el = this.el.nativeElement.nodeName.indexOf("-") != -1 ? this.el.nativeElement.firstChild : this.el.nativeElement;
+        let badge = document.createElement('span');
+        badge.id = this.id;
+        badge.className = 'p-badge p-component';
+        if (this.severity) {
+            DomHandler.addClass(badge, 'p-badge-' + this.severity);
+        }
+        if (this.value != null) {
+            badge.appendChild(document.createTextNode(this.value));
+            if (String(this.value).length === 1) {
+                DomHandler.addClass(badge, 'p-badge-no-gutter');
+            }
+        }
+        else {
+            DomHandler.addClass(badge, 'p-badge-dot');
+        }
+        DomHandler.addClass(el, 'p-overlay-badge');
+        el.appendChild(badge);
+        this.initialized = true;
+    }
+    get value() {
+        return this._value;
+    }
+    set value(val) {
+        if (val !== this._value) {
+            this._value = val;
+            if (this.initialized) {
+                let badge = document.getElementById(this.id);
+                if (this._value) {
+                    if (DomHandler.hasClass(badge, 'p-badge-dot'))
+                        DomHandler.removeClass(badge, 'p-badge-dot');
+                    if (String(this._value).length === 1) {
+                        DomHandler.addClass(badge, 'p-badge-no-gutter');
+                    }
+                    else {
+                        DomHandler.removeClass(badge, 'p-badge-no-gutter');
+                    }
+                }
+                else if (!this._value && !DomHandler.hasClass(badge, 'p-badge-dot')) {
+                    DomHandler.addClass(badge, 'p-badge-dot');
+                }
+                badge.innerHTML = '';
+                badge.appendChild(document.createTextNode(this._value));
+            }
+        }
+    }
+    ngOnDestroy() {
+        this.initialized = false;
+    }
+}
+BadgeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BadgeDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+BadgeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: BadgeDirective, selector: "[pBadge]", inputs: { iconPos: "iconPos", value: "value", severity: "severity" }, host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BadgeDirective, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pBadge]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { iconPos: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], severity: [{
+                type: Input
+            }] } });
+class Badge {
+    containerClass() {
+        return {
+            'p-badge p-component': true,
+            'p-badge-no-gutter': this.value != undefined && String(this.value).length === 1,
+            'p-badge-lg': this.size === 'large',
+            'p-badge-xl': this.size === 'xlarge',
+            'p-badge-info': this.severity === 'info',
+            'p-badge-success': this.severity === 'success',
+            'p-badge-warning': this.severity === 'warning',
+            'p-badge-danger': this.severity === 'danger'
+        };
+    }
+}
+Badge.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Badge, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Badge.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Badge, selector: "p-badge", inputs: { styleClass: "styleClass", style: "style", size: "size", severity: "severity", value: "value" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <span [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+                {{value}}
+        </span>
+    `, isInline: true, styles: [".p-badge{display:inline-block;border-radius:10px;text-align:center;padding:0 .5rem}.p-overlay-badge{position:relative}.p-overlay-badge .p-badge{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0;margin:0}.p-badge-dot{width:.5rem;min-width:.5rem;height:.5rem;border-radius:50%;padding:0}.p-badge-no-gutter{padding:0;border-radius:50%}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Badge, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-badge', template: `
+        <span [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+                {{value}}
+        </span>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-badge{display:inline-block;border-radius:10px;text-align:center;padding:0 .5rem}.p-overlay-badge{position:relative}.p-overlay-badge .p-badge{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0;margin:0}.p-badge-dot{width:.5rem;min-width:.5rem;height:.5rem;border-radius:50%;padding:0}.p-badge-no-gutter{padding:0;border-radius:50%}\n"] }]
+        }], propDecorators: { styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], severity: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }] } });
+class BadgeModule {
+}
+BadgeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+BadgeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BadgeModule, declarations: [Badge, BadgeDirective], imports: [CommonModule], exports: [Badge, BadgeDirective, SharedModule] });
+BadgeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BadgeModule, imports: [[CommonModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BadgeModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Badge, BadgeDirective, SharedModule],
+                    declarations: [Badge, BadgeDirective]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Badge, BadgeDirective, BadgeModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-badge.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-badge.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-badge.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-badge.mjs","sources":["../../src/app/components/badge/badge.ts","../../src/app/components/badge/primeng-badge.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, QueryList, ContentChildren, TemplateRef, Directive, OnDestroy, AfterViewInit, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule } from 'primeng/api';\nimport { DomHandler } from 'primeng/dom';\nimport { UniqueComponentId } from 'primeng/utils';\n\n@Directive({\n    selector: '[pBadge]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class BadgeDirective implements AfterViewInit, OnDestroy {\n\n    @Input() iconPos: 'left' | 'right' | 'top' | 'bottom' = 'left';\n\n    public _value: string;\n\n    public initialized: boolean;\n\n    private id: string;\n\n    constructor(public el: ElementRef) {}\n\n    ngAfterViewInit() {\n        this.id = UniqueComponentId() + '_badge';\n        let el = this.el.nativeElement.nodeName.indexOf(\"-\") != -1 ? this.el.nativeElement.firstChild : this.el.nativeElement;\n\n        let badge = document.createElement('span');\n        badge.id = this.id ;\n        badge.className = 'p-badge p-component';\n\n        if (this.severity) {\n            DomHandler.addClass(badge, 'p-badge-' + this.severity);\n        }\n\n        if (this.value != null) {\n            badge.appendChild(document.createTextNode(this.value));\n\n            if (String(this.value).length === 1) {\n                DomHandler.addClass(badge, 'p-badge-no-gutter');\n            }\n        }\n        else {\n            DomHandler.addClass(badge, 'p-badge-dot');\n        }\n\n        DomHandler.addClass(el, 'p-overlay-badge');\n        el.appendChild(badge);\n\n        this.initialized = true;\n    }\n\n    @Input() get value(): string {\n        return this._value;\n    }\n\n    set value(val: string) {\n        if (val !== this._value) {\n            this._value = val;\n\n            if (this.initialized) {\n                let badge = document.getElementById(this.id);\n\n                if (this._value) {\n                    if (DomHandler.hasClass(badge, 'p-badge-dot'))\n                        DomHandler.removeClass(badge, 'p-badge-dot');\n\n                    if (String(this._value).length === 1) {\n                        DomHandler.addClass(badge, 'p-badge-no-gutter');\n                    }\n                    else {\n                        DomHandler.removeClass(badge, 'p-badge-no-gutter');\n                    }\n                }\n                else if (!this._value && !DomHandler.hasClass(badge, 'p-badge-dot')) {\n                    DomHandler.addClass(badge, 'p-badge-dot');\n                }\n\n                badge.innerHTML = '';\n                badge.appendChild(document.createTextNode(this._value));\n            }\n        }\n    }\n\n    @Input() severity: string;\n\n    ngOnDestroy() {\n        this.initialized = false;\n    }\n}\n\n@Component({\n    selector: 'p-badge',\n    template: `\n        <span [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\">\n                {{value}}\n        </span>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./badge.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Badge {\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() size: string;\n\n    @Input() severity: string;\n\n    @Input() value: string;\n\n    containerClass() {\n        return {\n            'p-badge p-component': true,\n            'p-badge-no-gutter': this.value != undefined && String(this.value).length === 1,\n            'p-badge-lg': this.size === 'large',\n            'p-badge-xl': this.size === 'xlarge',\n            'p-badge-info': this.severity === 'info',\n            'p-badge-success': this.severity === 'success',\n            'p-badge-warning': this.severity === 'warning',\n            'p-badge-danger': this.severity === 'danger'\n        };\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Badge, BadgeDirective, SharedModule],\n    declarations: [Badge, BadgeDirective]\n})\nexport class BadgeModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;MAYa,cAAc;IAUvB,YAAmB,EAAc;QAAd,OAAE,GAAF,EAAE,CAAY;QARxB,YAAO,GAAwC,MAAM,CAAC;KAQ1B;IAErC,eAAe;QACX,IAAI,CAAC,EAAE,GAAG,iBAAiB,EAAE,GAAG,QAAQ,CAAC;QACzC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QAEtH,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAE;QACpB,KAAK,CAAC,SAAS,GAAG,qBAAqB,CAAC;QAExC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1D;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;YACpB,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAEvD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACjC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;aACnD;SACJ;aACI;YACD,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;SAC7C;QAED,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC3C,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;IAED,IAAa,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,KAAK,CAAC,GAAW;QACjB,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YAElB,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAE7C,IAAI,IAAI,CAAC,MAAM,EAAE;oBACb,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;wBACzC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;oBAEjD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;wBAClC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;qBACnD;yBACI;wBACD,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;qBACtD;iBACJ;qBACI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;oBACjE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;iBAC7C;gBAED,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;gBACrB,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;aAC3D;SACJ;KACJ;IAID,WAAW;QACP,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC5B;;2GA7EQ,cAAc;+FAAd,cAAc;2FAAd,cAAc;kBAN1B,SAAS;mBAAC;oBACP,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE;wBACF,OAAO,EAAE,WAAW;qBACvB;iBACJ;iGAGY,OAAO;sBAAf,KAAK;gBAuCO,KAAK;sBAAjB,KAAK;gBAgCG,QAAQ;sBAAhB,KAAK;;MAqBG,KAAK;IAYd,cAAc;QACV,OAAO;YACH,qBAAqB,EAAE,IAAI;YAC3B,mBAAmB,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;YAC/E,YAAY,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;YACnC,YAAY,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ;YACpC,cAAc,EAAE,IAAI,CAAC,QAAQ,KAAK,MAAM;YACxC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC9C,iBAAiB,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC9C,gBAAgB,EAAE,IAAI,CAAC,QAAQ,KAAK,QAAQ;SAC/C,CAAC;KACL;;kGAvBQ,KAAK;sFAAL,KAAK,gMAZJ;;;;KAIT;2FAQQ,KAAK;kBAdjB,SAAS;+BACI,SAAS,YACT;;;;KAIT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,UAAU;sBAAlB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,KAAK;sBAAb,KAAK;;MAqBG,WAAW;;wGAAX,WAAW;yGAAX,WAAW,iBA/BX,KAAK,EA9FL,cAAc,aAyHb,YAAY,aA3Bb,KAAK,EA9FL,cAAc,EA0HU,YAAY;yGAGpC,WAAW,YAJX,CAAC,YAAY,CAAC,EACU,YAAY;2FAGpC,WAAW;kBALvB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC;oBAC9C,YAAY,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC;iBACxC;;;ACxID;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-blockui.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-blockui.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-blockui.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,138 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, ViewChild, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate } from 'primeng/api';
+import { ZIndexUtils } from 'primeng/utils';
+import { DomHandler } from 'primeng/dom';
+
+class BlockUI {
+    constructor(el, cd, config) {
+        this.el = el;
+        this.cd = cd;
+        this.config = config;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+    }
+    get blocked() {
+        return this._blocked;
+    }
+    set blocked(val) {
+        if (this.mask && this.mask.nativeElement) {
+            if (val)
+                this.block();
+            else
+                this.unblock();
+        }
+        else {
+            this._blocked = val;
+        }
+    }
+    ngAfterViewInit() {
+        if (this.target && !this.target.getBlockableElement) {
+            throw 'Target of BlockUI must implement BlockableUI interface';
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    block() {
+        this._blocked = true;
+        if (this.target) {
+            this.target.getBlockableElement().appendChild(this.mask.nativeElement);
+            this.target.getBlockableElement().style.position = 'relative';
+        }
+        else {
+            document.body.appendChild(this.mask.nativeElement);
+        }
+        if (this.autoZIndex) {
+            ZIndexUtils.set('modal', this.mask.nativeElement, this.baseZIndex + this.config.zIndex.modal);
+        }
+    }
+    unblock() {
+        this.animationEndListener = this.destroyModal.bind(this);
+        this.mask.nativeElement.addEventListener('animationend', this.animationEndListener);
+        DomHandler.addClass(this.mask.nativeElement, 'p-component-overlay-leave');
+    }
+    destroyModal() {
+        this._blocked = false;
+        DomHandler.removeClass(this.mask.nativeElement, 'p-component-overlay-leave');
+        ZIndexUtils.clear(this.mask.nativeElement);
+        this.el.nativeElement.appendChild(this.mask.nativeElement);
+        this.unbindAnimationEndListener();
+        this.cd.markForCheck();
+    }
+    unbindAnimationEndListener() {
+        if (this.animationEndListener && this.mask) {
+            this.mask.nativeElement.removeEventListener('animationend', this.animationEndListener);
+            this.animationEndListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.unblock();
+        this.destroyModal();
+    }
+}
+BlockUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BlockUI, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+BlockUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: BlockUI, selector: "p-blockUI", inputs: { target: "target", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", styleClass: "styleClass", blocked: "blocked" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "mask", first: true, predicate: ["mask"], descendants: true }], ngImport: i0, template: `
+        <div #mask [class]="styleClass" [ngClass]="{'p-blockui-document':!target, 'p-blockui p-component-overlay p-component-overlay-enter': true}" [ngStyle]="{display: blocked ? 'flex' : 'none'}">
+            <ng-content></ng-content>
+            <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+        </div>
+    `, isInline: true, styles: [".p-blockui{position:absolute;top:0;left:0;width:100%;height:100%;background-color:transparent;transition-property:background-color;display:flex;align-items:center;justify-content:center}.p-blockui.p-component-overlay{position:absolute}.p-blockui-document.p-component-overlay{position:fixed}.p-blockui-leave.p-component-overlay{background-color:transparent}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BlockUI, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-blockUI', template: `
+        <div #mask [class]="styleClass" [ngClass]="{'p-blockui-document':!target, 'p-blockui p-component-overlay p-component-overlay-enter': true}" [ngStyle]="{display: blocked ? 'flex' : 'none'}">
+            <ng-content></ng-content>
+            <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-blockui{position:absolute;top:0;left:0;width:100%;height:100%;background-color:transparent;transition-property:background-color;display:flex;align-items:center;justify-content:center}.p-blockui.p-component-overlay{position:absolute}.p-blockui-document.p-component-overlay{position:fixed}.p-blockui-leave.p-component-overlay{background-color:transparent}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }]; }, propDecorators: { target: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], mask: [{
+                type: ViewChild,
+                args: ['mask']
+            }], blocked: [{
+                type: Input
+            }] } });
+class BlockUIModule {
+}
+BlockUIModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BlockUIModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+BlockUIModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BlockUIModule, declarations: [BlockUI], imports: [CommonModule], exports: [BlockUI] });
+BlockUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BlockUIModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BlockUIModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [BlockUI],
+                    declarations: [BlockUI]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { BlockUI, BlockUIModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-blockui.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-blockui.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-blockui.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-blockui.mjs","sources":["../../src/app/components/blockui/blockui.ts","../../src/app/components/blockui/primeng-blockui.ts"],"sourcesContent":["import {NgModule,Component,Input,AfterViewInit,OnDestroy,ElementRef,ViewChild,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, ContentChildren, QueryList, TemplateRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PrimeNGConfig, PrimeTemplate} from 'primeng/api';\nimport {ZIndexUtils} from 'primeng/utils';\nimport { DomHandler } from 'primeng/dom';\n\n@Component({\n    selector: 'p-blockUI',\n    template: `\n        <div #mask [class]=\"styleClass\" [ngClass]=\"{'p-blockui-document':!target, 'p-blockui p-component-overlay p-component-overlay-enter': true}\" [ngStyle]=\"{display: blocked ? 'flex' : 'none'}\">\n            <ng-content></ng-content>\n            <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./blockui.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class BlockUI implements AfterViewInit,OnDestroy {\n\n    @Input() target: any;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() styleClass: string;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @ViewChild('mask') mask: ElementRef;\n\n    _blocked: boolean;\n\n    animationEndListener: any;\n\n    contentTemplate: TemplateRef<any>;\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef, public config: PrimeNGConfig) {}\n\n    @Input() get blocked(): boolean {\n        return this._blocked;\n    }\n\n    set blocked(val: boolean) {\n        if (this.mask && this.mask.nativeElement) {\n            if (val)\n                this.block();\n            else\n                this.unblock();\n        }\n        else {\n            this._blocked = val;\n        }\n    }\n\n    ngAfterViewInit() {\n        if (this.target && !this.target.getBlockableElement) {\n            throw 'Target of BlockUI must implement BlockableUI interface';\n        }\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    block() {\n        this._blocked = true;\n\n        if (this.target) {\n            this.target.getBlockableElement().appendChild(this.mask.nativeElement);\n            this.target.getBlockableElement().style.position = 'relative';\n        }\n        else {\n            document.body.appendChild(this.mask.nativeElement);\n        }\n\n        if (this.autoZIndex) {\n            ZIndexUtils.set('modal', this.mask.nativeElement, this.baseZIndex + this.config.zIndex.modal);\n        }\n    }\n\n    unblock() {\n        this.animationEndListener = this.destroyModal.bind(this);\n        this.mask.nativeElement.addEventListener('animationend', this.animationEndListener);\n        DomHandler.addClass(this.mask.nativeElement, 'p-component-overlay-leave')\n    }\n\n    destroyModal() {\n        this._blocked = false;\n        DomHandler.removeClass(this.mask.nativeElement, 'p-component-overlay-leave');\n        ZIndexUtils.clear(this.mask.nativeElement);\n        this.el.nativeElement.appendChild(this.mask.nativeElement);\n        this.unbindAnimationEndListener();\n        this.cd.markForCheck();\n    }\n\n    unbindAnimationEndListener() {\n        if (this.animationEndListener && this.mask) {\n            this.mask.nativeElement.removeEventListener('animationend', this.animationEndListener);\n            this.animationEndListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.unblock();\n        this.destroyModal();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [BlockUI],\n    declarations: [BlockUI]\n})\nexport class BlockUIModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-breadcrumb.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-breadcrumb.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-breadcrumb.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,171 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import * as i2 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+
+class Breadcrumb {
+    constructor() {
+        this.onItemClick = new EventEmitter();
+    }
+    itemClick(event, item) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (!item.url) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        this.onItemClick.emit({
+            originalEvent: event,
+            item: item
+        });
+    }
+    onHomeClick(event) {
+        if (this.home) {
+            this.itemClick(event, this.home);
+        }
+    }
+}
+Breadcrumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Breadcrumb, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Breadcrumb.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Breadcrumb, selector: "p-breadcrumb", inputs: { model: "model", style: "style", styleClass: "styleClass", home: "home", homeAriaLabel: "homeAriaLabel" }, outputs: { onItemClick: "onItemClick" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-breadcrumb p-component'">
+            <ul>
+                <li [class]="home.styleClass" [ngClass]="{'p-breadcrumb-home': true, 'p-disabled':home.disabled}" [ngStyle]="home.style" *ngIf="home" pTooltip [tooltipOptions]="home.tooltipOptions">
+                    <a *ngIf="!home.routerLink" [attr.aria-label]="homeAriaLabel" [href]="home.url ? home.url : null" class="p-menuitem-link" (click)="itemClick($event, home)"
+                        [attr.target]="home.target" [attr.title]="home.title" [attr.id]="home.id" [attr.tabindex]="home.disabled ? null : '0'">
+                        <span *ngIf="home.icon" class="p-menuitem-icon" [ngClass]="home.icon||'pi pi-home'"></span>
+                        <ng-container *ngIf="home.label">
+                            <span *ngIf="home.escape !== false; else htmlHomeLabel" class="p-menuitem-text">{{home.label}}</span>
+                            <ng-template #htmlHomeLabel><span class="p-menuitem-text" [innerHTML]="home.label"></span></ng-template>
+                        </ng-container>
+                    </a>
+                    <a *ngIf="home.routerLink" [routerLink]="home.routerLink" [attr.aria-label]="homeAriaLabel" [queryParams]="home.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="home.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link" (click)="itemClick($event, home)"
+                        [attr.target]="home.target" [attr.title]="home.title" [attr.id]="home.id" [attr.tabindex]="home.disabled ? null : '0'"
+                        [fragment]="home.fragment" [queryParamsHandling]="home.queryParamsHandling" [preserveFragment]="home.preserveFragment" [skipLocationChange]="home.skipLocationChange" [replaceUrl]="home.replaceUrl" [state]="home.state">
+                        <span *ngIf="home.icon" class="p-menuitem-icon" [ngClass]="home.icon||'pi pi-home'"></span>
+                        <ng-container *ngIf="home.label">
+                            <span *ngIf="home.escape !== false; else htmlHomeRouteLabel" class="p-menuitem-text">{{home.label}}</span>
+                            <ng-template #htmlHomeRouteLabel><span class="p-menuitem-text" [innerHTML]="home.label"></span></ng-template>
+                        </ng-container>
+                    </a>
+                </li>
+                <li class="p-breadcrumb-chevron pi pi-chevron-right" *ngIf="model&&home"></li>
+                <ng-template ngFor let-item let-end="last" [ngForOf]="model">
+                    <li [class]="item.styleClass" [ngStyle]="item.style" [ngClass]="{'p-disabled':item.disabled}">
+                        <a *ngIf="!item.routerLink" [attr.href]="item.url ? item.url : null" class="p-menuitem-link" (click)="itemClick($event, item)" pTooltip [tooltipOptions]="item.tooltipOptions"
+                            [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id" [attr.tabindex]="item.disabled ? null : '0'">
+                            <span *ngIf="item.icon" class="p-menuitem-icon" [ngClass]="item.icon"></span>
+                            <ng-container *ngIf="item.label">
+                                <span *ngIf="item.escape !== false; else htmlLabel" class="p-menuitem-text">{{item.label}}</span>
+                                <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                            </ng-container>
+                        </a>
+                        <a *ngIf="item.routerLink" [routerLink]="item.routerLink" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'"  [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link" (click)="itemClick($event, item)"
+                            [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id" [attr.tabindex]="item.disabled ? null : '0'"
+                            [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                            <span *ngIf="item.icon" class="p-menuitem-icon" [ngClass]="item.icon"></span>
+                            <ng-container *ngIf="item.label">
+                                <span *ngIf="item.escape !== false; else htmlRouteLabel" class="p-menuitem-text">{{item.label}}</span>
+                                <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                            </ng-container>
+                        </a>
+                    </li>
+                    <li class="p-breadcrumb-chevron pi pi-chevron-right" *ngIf="!end"></li>
+                </ng-template>
+            </ul>
+        </div>
+    `, isInline: true, styles: [".p-breadcrumb{overflow-x:auto}.p-breadcrumb ul{margin:0;padding:0;list-style-type:none;display:flex;align-items:center;flex-wrap:nowrap}.p-breadcrumb .p-menuitem-text{line-height:1}.p-breadcrumb .p-menuitem-link{text-decoration:none}.p-breadcrumb::-webkit-scrollbar{display:none}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Breadcrumb, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-breadcrumb', template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-breadcrumb p-component'">
+            <ul>
+                <li [class]="home.styleClass" [ngClass]="{'p-breadcrumb-home': true, 'p-disabled':home.disabled}" [ngStyle]="home.style" *ngIf="home" pTooltip [tooltipOptions]="home.tooltipOptions">
+                    <a *ngIf="!home.routerLink" [attr.aria-label]="homeAriaLabel" [href]="home.url ? home.url : null" class="p-menuitem-link" (click)="itemClick($event, home)"
+                        [attr.target]="home.target" [attr.title]="home.title" [attr.id]="home.id" [attr.tabindex]="home.disabled ? null : '0'">
+                        <span *ngIf="home.icon" class="p-menuitem-icon" [ngClass]="home.icon||'pi pi-home'"></span>
+                        <ng-container *ngIf="home.label">
+                            <span *ngIf="home.escape !== false; else htmlHomeLabel" class="p-menuitem-text">{{home.label}}</span>
+                            <ng-template #htmlHomeLabel><span class="p-menuitem-text" [innerHTML]="home.label"></span></ng-template>
+                        </ng-container>
+                    </a>
+                    <a *ngIf="home.routerLink" [routerLink]="home.routerLink" [attr.aria-label]="homeAriaLabel" [queryParams]="home.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="home.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link" (click)="itemClick($event, home)"
+                        [attr.target]="home.target" [attr.title]="home.title" [attr.id]="home.id" [attr.tabindex]="home.disabled ? null : '0'"
+                        [fragment]="home.fragment" [queryParamsHandling]="home.queryParamsHandling" [preserveFragment]="home.preserveFragment" [skipLocationChange]="home.skipLocationChange" [replaceUrl]="home.replaceUrl" [state]="home.state">
+                        <span *ngIf="home.icon" class="p-menuitem-icon" [ngClass]="home.icon||'pi pi-home'"></span>
+                        <ng-container *ngIf="home.label">
+                            <span *ngIf="home.escape !== false; else htmlHomeRouteLabel" class="p-menuitem-text">{{home.label}}</span>
+                            <ng-template #htmlHomeRouteLabel><span class="p-menuitem-text" [innerHTML]="home.label"></span></ng-template>
+                        </ng-container>
+                    </a>
+                </li>
+                <li class="p-breadcrumb-chevron pi pi-chevron-right" *ngIf="model&&home"></li>
+                <ng-template ngFor let-item let-end="last" [ngForOf]="model">
+                    <li [class]="item.styleClass" [ngStyle]="item.style" [ngClass]="{'p-disabled':item.disabled}">
+                        <a *ngIf="!item.routerLink" [attr.href]="item.url ? item.url : null" class="p-menuitem-link" (click)="itemClick($event, item)" pTooltip [tooltipOptions]="item.tooltipOptions"
+                            [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id" [attr.tabindex]="item.disabled ? null : '0'">
+                            <span *ngIf="item.icon" class="p-menuitem-icon" [ngClass]="item.icon"></span>
+                            <ng-container *ngIf="item.label">
+                                <span *ngIf="item.escape !== false; else htmlLabel" class="p-menuitem-text">{{item.label}}</span>
+                                <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                            </ng-container>
+                        </a>
+                        <a *ngIf="item.routerLink" [routerLink]="item.routerLink" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'"  [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link" (click)="itemClick($event, item)"
+                            [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id" [attr.tabindex]="item.disabled ? null : '0'"
+                            [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                            <span *ngIf="item.icon" class="p-menuitem-icon" [ngClass]="item.icon"></span>
+                            <ng-container *ngIf="item.label">
+                                <span *ngIf="item.escape !== false; else htmlRouteLabel" class="p-menuitem-text">{{item.label}}</span>
+                                <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                            </ng-container>
+                        </a>
+                    </li>
+                    <li class="p-breadcrumb-chevron pi pi-chevron-right" *ngIf="!end"></li>
+                </ng-template>
+            </ul>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-breadcrumb{overflow-x:auto}.p-breadcrumb ul{margin:0;padding:0;list-style-type:none;display:flex;align-items:center;flex-wrap:nowrap}.p-breadcrumb .p-menuitem-text{line-height:1}.p-breadcrumb .p-menuitem-link{text-decoration:none}.p-breadcrumb::-webkit-scrollbar{display:none}\n"] }]
+        }], propDecorators: { model: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], home: [{
+                type: Input
+            }], homeAriaLabel: [{
+                type: Input
+            }], onItemClick: [{
+                type: Output
+            }] } });
+class BreadcrumbModule {
+}
+BreadcrumbModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BreadcrumbModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+BreadcrumbModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BreadcrumbModule, declarations: [Breadcrumb], imports: [CommonModule, RouterModule, TooltipModule], exports: [Breadcrumb, RouterModule, TooltipModule] });
+BreadcrumbModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BreadcrumbModule, imports: [[CommonModule, RouterModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BreadcrumbModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, TooltipModule],
+                    exports: [Breadcrumb, RouterModule, TooltipModule],
+                    declarations: [Breadcrumb]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Breadcrumb, BreadcrumbModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-breadcrumb.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-breadcrumb.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-breadcrumb.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-breadcrumb.mjs","sources":["../../src/app/components/breadcrumb/breadcrumb.ts","../../src/app/components/breadcrumb/primeng-breadcrumb.ts"],"sourcesContent":["import {NgModule,Component,Input, Output, EventEmitter,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MenuItem} from 'primeng/api';\nimport {RouterModule} from '@angular/router';\nimport {TooltipModule} from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-breadcrumb',\n    template: `\n        <div [class]=\"styleClass\" [ngStyle]=\"style\" [ngClass]=\"'p-breadcrumb p-component'\">\n            <ul>\n                <li [class]=\"home.styleClass\" [ngClass]=\"{'p-breadcrumb-home': true, 'p-disabled':home.disabled}\" [ngStyle]=\"home.style\" *ngIf=\"home\" pTooltip [tooltipOptions]=\"home.tooltipOptions\">\n                    <a *ngIf=\"!home.routerLink\" [attr.aria-label]=\"homeAriaLabel\" [href]=\"home.url ? home.url : null\" class=\"p-menuitem-link\" (click)=\"itemClick($event, home)\"\n                        [attr.target]=\"home.target\" [attr.title]=\"home.title\" [attr.id]=\"home.id\" [attr.tabindex]=\"home.disabled ? null : '0'\">\n                        <span *ngIf=\"home.icon\" class=\"p-menuitem-icon\" [ngClass]=\"home.icon||'pi pi-home'\"></span>\n                        <ng-container *ngIf=\"home.label\">\n                            <span *ngIf=\"home.escape !== false; else htmlHomeLabel\" class=\"p-menuitem-text\">{{home.label}}</span>\n                            <ng-template #htmlHomeLabel><span class=\"p-menuitem-text\" [innerHTML]=\"home.label\"></span></ng-template>\n                        </ng-container>\n                    </a>\n                    <a *ngIf=\"home.routerLink\" [routerLink]=\"home.routerLink\" [attr.aria-label]=\"homeAriaLabel\" [queryParams]=\"home.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" [routerLinkActiveOptions]=\"home.routerLinkActiveOptions||{exact:false}\" class=\"p-menuitem-link\" (click)=\"itemClick($event, home)\"\n                        [attr.target]=\"home.target\" [attr.title]=\"home.title\" [attr.id]=\"home.id\" [attr.tabindex]=\"home.disabled ? null : '0'\"\n                        [fragment]=\"home.fragment\" [queryParamsHandling]=\"home.queryParamsHandling\" [preserveFragment]=\"home.preserveFragment\" [skipLocationChange]=\"home.skipLocationChange\" [replaceUrl]=\"home.replaceUrl\" [state]=\"home.state\">\n                        <span *ngIf=\"home.icon\" class=\"p-menuitem-icon\" [ngClass]=\"home.icon||'pi pi-home'\"></span>\n                        <ng-container *ngIf=\"home.label\">\n                            <span *ngIf=\"home.escape !== false; else htmlHomeRouteLabel\" class=\"p-menuitem-text\">{{home.label}}</span>\n                            <ng-template #htmlHomeRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"home.label\"></span></ng-template>\n                        </ng-container>\n                    </a>\n                </li>\n                <li class=\"p-breadcrumb-chevron pi pi-chevron-right\" *ngIf=\"model&&home\"></li>\n                <ng-template ngFor let-item let-end=\"last\" [ngForOf]=\"model\">\n                    <li [class]=\"item.styleClass\" [ngStyle]=\"item.style\" [ngClass]=\"{'p-disabled':item.disabled}\">\n                        <a *ngIf=\"!item.routerLink\" [attr.href]=\"item.url ? item.url : null\" class=\"p-menuitem-link\" (click)=\"itemClick($event, item)\" pTooltip [tooltipOptions]=\"item.tooltipOptions\"\n                            [attr.target]=\"item.target\" [attr.title]=\"item.title\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled ? null : '0'\">\n                            <span *ngIf=\"item.icon\" class=\"p-menuitem-icon\" [ngClass]=\"item.icon\"></span>\n                            <ng-container *ngIf=\"item.label\">\n                                <span *ngIf=\"item.escape !== false; else htmlLabel\" class=\"p-menuitem-text\">{{item.label}}</span>\n                                <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n                            </ng-container>\n                        </a>\n                        <a *ngIf=\"item.routerLink\" [routerLink]=\"item.routerLink\" [queryParams]=\"item.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\"  [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{exact:false}\" class=\"p-menuitem-link\" (click)=\"itemClick($event, item)\"\n                            [attr.target]=\"item.target\" [attr.title]=\"item.title\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled ? null : '0'\"\n                            [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\" [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\">\n                            <span *ngIf=\"item.icon\" class=\"p-menuitem-icon\" [ngClass]=\"item.icon\"></span>\n                            <ng-container *ngIf=\"item.label\">\n                                <span *ngIf=\"item.escape !== false; else htmlRouteLabel\" class=\"p-menuitem-text\">{{item.label}}</span>\n                                <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n                            </ng-container>\n                        </a>\n                    </li>\n                    <li class=\"p-breadcrumb-chevron pi pi-chevron-right\" *ngIf=\"!end\"></li>\n                </ng-template>\n            </ul>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./breadcrumb.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Breadcrumb {\n\n    @Input() model: MenuItem[];\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() home: MenuItem;\n\n    @Input() homeAriaLabel: string;\n\n    @Output() onItemClick: EventEmitter<any> = new EventEmitter();\n\n    itemClick(event, item: MenuItem) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (!item.url) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        this.onItemClick.emit({\n            originalEvent: event,\n            item: item\n        });\n    }\n\n    onHomeClick(event) {\n        if (this.home) {\n            this.itemClick(event, this.home);\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,TooltipModule],\n    exports: [Breadcrumb,RouterModule,TooltipModule],\n    declarations: [Breadcrumb]\n})\nexport class BreadcrumbModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;MA+Da,UAAU;IAzDvB;QAqEc,gBAAW,GAAsB,IAAI,YAAY,EAAE,CAAC;KA8BjE;IA5BG,SAAS,CAAC,KAAK,EAAE,IAAc;QAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACX,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC;gBACT,aAAa,EAAE,KAAK;gBACpB,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;SACN;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAClB,aAAa,EAAE,KAAK;YACpB,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;KACN;IAED,WAAW,CAAC,KAAK;QACb,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACpC;KACJ;;uGAzCQ,UAAU;2FAAV,UAAU,wPAvDT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+CT;2FAQQ,UAAU;kBAzDtB,SAAS;+BACI,cAAc,YACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+CT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,KAAK;sBAAb,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEI,WAAW;sBAApB,MAAM;;MAqCE,gBAAgB;;6GAAhB,gBAAgB;8GAAhB,gBAAgB,iBAjDhB,UAAU,aA6CT,YAAY,EAAC,YAAY,EAAC,aAAa,aA7CxC,UAAU,EA8CE,YAAY,EAAC,aAAa;8GAGtC,gBAAgB,YAJhB,CAAC,YAAY,EAAC,YAAY,EAAC,aAAa,CAAC,EAC7B,YAAY,EAAC,aAAa;2FAGtC,gBAAgB;kBAL5B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAC,YAAY,EAAC,aAAa,CAAC;oBAClD,OAAO,EAAE,CAAC,UAAU,EAAC,YAAY,EAAC,aAAa,CAAC;oBAChD,YAAY,EAAE,CAAC,UAAU,CAAC;iBAC7B;;;AC/GD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-button.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-button.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-button.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,281 @@
+import * as i0 from '@angular/core';
+import { Directive, Input, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, Output, NgModule } from '@angular/core';
+import { DomHandler } from 'primeng/dom';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i1 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { PrimeTemplate } from 'primeng/api';
+
+class ButtonDirective {
+    constructor(el) {
+        this.el = el;
+        this.iconPos = 'left';
+        this.loadingIcon = "pi pi-spinner pi-spin";
+        this._loading = false;
+    }
+    ngAfterViewInit() {
+        this._initialStyleClass = this.el.nativeElement.className;
+        DomHandler.addMultipleClasses(this.el.nativeElement, this.getStyleClass());
+        if (this.icon || this.loading) {
+            this.createIconEl();
+        }
+        let labelElement = document.createElement("span");
+        if (this.icon && !this.label) {
+            labelElement.setAttribute('aria-hidden', 'true');
+        }
+        labelElement.className = 'p-button-label';
+        if (this.label)
+            labelElement.appendChild(document.createTextNode(this.label));
+        else
+            labelElement.innerHTML = '&nbsp;';
+        this.el.nativeElement.appendChild(labelElement);
+        this.initialized = true;
+    }
+    getStyleClass() {
+        let styleClass = 'p-button p-component';
+        if (this.icon && !this.label) {
+            styleClass = styleClass + ' p-button-icon-only';
+        }
+        if (this.loading) {
+            styleClass = styleClass + ' p-disabled p-button-loading';
+            if (!this.icon && this.label)
+                styleClass = styleClass + ' p-button-loading-label-only';
+        }
+        return styleClass;
+    }
+    setStyleClass() {
+        let styleClass = this.getStyleClass();
+        this.el.nativeElement.className = styleClass + ' ' + this._initialStyleClass;
+    }
+    createIconEl() {
+        let iconElement = document.createElement("span");
+        iconElement.className = 'p-button-icon';
+        iconElement.setAttribute("aria-hidden", "true");
+        let iconPosClass = this.label ? 'p-button-icon-' + this.iconPos : null;
+        if (iconPosClass) {
+            DomHandler.addClass(iconElement, iconPosClass);
+        }
+        let iconClass = this.getIconClass();
+        if (iconClass) {
+            DomHandler.addMultipleClasses(iconElement, iconClass);
+        }
+        let labelEl = DomHandler.findSingle(this.el.nativeElement, '.p-button-label');
+        if (labelEl)
+            this.el.nativeElement.insertBefore(iconElement, labelEl);
+        else
+            this.el.nativeElement.appendChild(iconElement);
+    }
+    getIconClass() {
+        return this.loading ? 'p-button-loading-icon ' + this.loadingIcon : this._icon;
+    }
+    setIconClass() {
+        let iconElement = DomHandler.findSingle(this.el.nativeElement, '.p-button-icon');
+        if (iconElement) {
+            if (this.iconPos)
+                iconElement.className = 'p-button-icon p-button-icon-' + this.iconPos + ' ' + this.getIconClass();
+            else
+                iconElement.className = 'p-button-icon ' + this.getIconClass();
+        }
+        else {
+            this.createIconEl();
+        }
+    }
+    removeIconElement() {
+        let iconElement = DomHandler.findSingle(this.el.nativeElement, '.p-button-icon');
+        this.el.nativeElement.removeChild(iconElement);
+    }
+    get label() {
+        return this._label;
+    }
+    set label(val) {
+        this._label = val;
+        if (this.initialized) {
+            DomHandler.findSingle(this.el.nativeElement, '.p-button-label').textContent = this._label || '&nbsp;';
+            if (this.loading || this.icon) {
+                this.setIconClass();
+            }
+            this.setStyleClass();
+        }
+    }
+    get icon() {
+        return this._icon;
+    }
+    set icon(val) {
+        this._icon = val;
+        if (this.initialized) {
+            this.setIconClass();
+            this.setStyleClass();
+        }
+    }
+    get loading() {
+        return this._loading;
+    }
+    set loading(val) {
+        this._loading = val;
+        if (this.initialized) {
+            if (this.loading || this.icon)
+                this.setIconClass();
+            else
+                this.removeIconElement();
+            this.setStyleClass();
+        }
+    }
+    ngOnDestroy() {
+        this.initialized = false;
+    }
+}
+ButtonDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ButtonDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+ButtonDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: ButtonDirective, selector: "[pButton]", inputs: { iconPos: "iconPos", loadingIcon: "loadingIcon", label: "label", icon: "icon", loading: "loading" }, host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ButtonDirective, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pButton]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { iconPos: [{
+                type: Input
+            }], loadingIcon: [{
+                type: Input
+            }], label: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], loading: [{
+                type: Input
+            }] } });
+class Button {
+    constructor() {
+        this.type = "button";
+        this.iconPos = 'left';
+        this.loading = false;
+        this.loadingIcon = "pi pi-spinner pi-spin";
+        this.onClick = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    badgeStyleClass() {
+        return {
+            'p-badge p-component': true,
+            'p-badge-no-gutter': this.badge && String(this.badge).length === 1
+        };
+    }
+}
+Button.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Button, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Button.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Button, selector: "p-button", inputs: { type: "type", iconPos: "iconPos", icon: "icon", badge: "badge", label: "label", disabled: "disabled", loading: "loading", loadingIcon: "loadingIcon", style: "style", styleClass: "styleClass", badgeClass: "badgeClass" }, outputs: { onClick: "onClick", onFocus: "onFocus", onBlur: "onBlur" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <button [attr.type]="type" [class]="styleClass" [ngStyle]="style" [disabled]="disabled || loading"
+            [ngClass]="{'p-button p-component':true,
+                        'p-button-icon-only': (icon && !label),
+                        'p-button-vertical': (iconPos === 'top' || iconPos === 'bottom') && label,
+                        'p-disabled': this.disabled || this.loading,
+                        'p-button-loading': this.loading,
+                        'p-button-loading-label-only': this.loading && !this.icon && this.label}"
+                        (click)="onClick.emit($event)" (focus)="onFocus.emit($event)" (blur)="onBlur.emit($event)" pRipple>
+            <ng-content></ng-content>
+            <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+            <span [ngClass]="{'p-button-icon': true,
+                        'p-button-icon-left': iconPos === 'left' && label,
+                        'p-button-icon-right': iconPos === 'right' && label,
+                        'p-button-icon-top': iconPos === 'top' && label,
+                        'p-button-icon-bottom': iconPos === 'bottom' && label}"
+                        [class]="loading ? 'p-button-loading-icon ' + loadingIcon : icon" *ngIf="!contentTemplate && (icon||loading)" [attr.aria-hidden]="true"></span>
+            <span class="p-button-label" [attr.aria-hidden]="icon && !label" *ngIf="!contentTemplate">{{label||'&nbsp;'}}</span>
+            <span [ngClass]="badgeStyleClass()" [class]="badgeClass" *ngIf="!contentTemplate && badge">{{badge}}</span>
+        </button>
+    `, isInline: true, directives: [{ type: i1.Ripple, selector: "[pRipple]" }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Button, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-button',
+                    template: `
+        <button [attr.type]="type" [class]="styleClass" [ngStyle]="style" [disabled]="disabled || loading"
+            [ngClass]="{'p-button p-component':true,
+                        'p-button-icon-only': (icon && !label),
+                        'p-button-vertical': (iconPos === 'top' || iconPos === 'bottom') && label,
+                        'p-disabled': this.disabled || this.loading,
+                        'p-button-loading': this.loading,
+                        'p-button-loading-label-only': this.loading && !this.icon && this.label}"
+                        (click)="onClick.emit($event)" (focus)="onFocus.emit($event)" (blur)="onBlur.emit($event)" pRipple>
+            <ng-content></ng-content>
+            <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+            <span [ngClass]="{'p-button-icon': true,
+                        'p-button-icon-left': iconPos === 'left' && label,
+                        'p-button-icon-right': iconPos === 'right' && label,
+                        'p-button-icon-top': iconPos === 'top' && label,
+                        'p-button-icon-bottom': iconPos === 'bottom' && label}"
+                        [class]="loading ? 'p-button-loading-icon ' + loadingIcon : icon" *ngIf="!contentTemplate && (icon||loading)" [attr.aria-hidden]="true"></span>
+            <span class="p-button-label" [attr.aria-hidden]="icon && !label" *ngIf="!contentTemplate">{{label||'&nbsp;'}}</span>
+            <span [ngClass]="badgeStyleClass()" [class]="badgeClass" *ngIf="!contentTemplate && badge">{{badge}}</span>
+        </button>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], propDecorators: { type: [{
+                type: Input
+            }], iconPos: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], badge: [{
+                type: Input
+            }], label: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], loading: [{
+                type: Input
+            }], loadingIcon: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], badgeClass: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], onClick: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }] } });
+class ButtonModule {
+}
+ButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ButtonModule, declarations: [ButtonDirective, Button], imports: [CommonModule, RippleModule], exports: [ButtonDirective, Button] });
+ButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ButtonModule, imports: [[CommonModule, RippleModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ButtonModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule],
+                    exports: [ButtonDirective, Button],
+                    declarations: [ButtonDirective, Button]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Button, ButtonDirective, ButtonModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-button.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-button.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-button.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-button.mjs","sources":["../../src/app/components/button/button.ts","../../src/app/components/button/primeng-button.ts"],"sourcesContent":["import {NgModule,Directive,Component,ElementRef,EventEmitter,AfterViewInit,Output,OnDestroy,Input,ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, AfterContentInit, TemplateRef, QueryList} from '@angular/core';\nimport {DomHandler} from 'primeng/dom';\nimport {CommonModule} from '@angular/common';\nimport {RippleModule} from 'primeng/ripple';\nimport {PrimeTemplate} from 'primeng/api';\n\n@Directive({\n    selector: '[pButton]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ButtonDirective implements AfterViewInit, OnDestroy {\n\n    @Input() iconPos: 'left' | 'right' | 'top' | 'bottom' = 'left';\n\n    @Input() loadingIcon: string = \"pi pi-spinner pi-spin\";\n\n    public _label: string;\n\n    public _icon: string;\n\n    public _loading: boolean = false;\n\n    public initialized: boolean;\n\n    public _initialStyleClass: string;\n\n    constructor(public el: ElementRef) {}\n\n    ngAfterViewInit() {\n        this._initialStyleClass = this.el.nativeElement.className;\n        DomHandler.addMultipleClasses(this.el.nativeElement, this.getStyleClass());\n\n        if (this.icon || this.loading) {\n            this.createIconEl();\n        }\n\n        let labelElement = document.createElement(\"span\");\n        if (this.icon && !this.label) {\n            labelElement.setAttribute('aria-hidden', 'true');\n        }\n        labelElement.className = 'p-button-label';\n\n        if (this.label)\n            labelElement.appendChild(document.createTextNode(this.label));\n        else\n            labelElement.innerHTML = '&nbsp;';\n\n        this.el.nativeElement.appendChild(labelElement);\n        this.initialized = true;\n    }\n\n    getStyleClass(): string {\n        let styleClass = 'p-button p-component';\n        if (this.icon && !this.label) {\n            styleClass = styleClass + ' p-button-icon-only';\n        }\n\n        if (this.loading) {\n            styleClass = styleClass + ' p-disabled p-button-loading';\n            if (!this.icon && this.label)\n                styleClass = styleClass + ' p-button-loading-label-only';\n        }\n\n        return styleClass;\n    }\n\n    setStyleClass() {\n        let styleClass = this.getStyleClass();\n        this.el.nativeElement.className = styleClass + ' ' + this._initialStyleClass;\n    }\n\n    createIconEl() {\n        let iconElement = document.createElement(\"span\");\n        iconElement.className = 'p-button-icon';\n        iconElement.setAttribute(\"aria-hidden\", \"true\");\n        let iconPosClass = this.label ? 'p-button-icon-' + this.iconPos : null;\n\n        if (iconPosClass) {\n            DomHandler.addClass(iconElement, iconPosClass);\n        }\n\n        let iconClass = this.getIconClass();\n\n        if(iconClass) {\n            DomHandler.addMultipleClasses(iconElement, iconClass);\n        }\n\n        let labelEl = DomHandler.findSingle(this.el.nativeElement, '.p-button-label')\n\n        if (labelEl)\n            this.el.nativeElement.insertBefore(iconElement, labelEl);\n        else\n            this.el.nativeElement.appendChild(iconElement)\n    }\n\n    getIconClass() {\n        return this.loading ? 'p-button-loading-icon ' + this.loadingIcon : this._icon;\n    }\n\n    setIconClass() {\n        let iconElement = DomHandler.findSingle(this.el.nativeElement, '.p-button-icon');\n        if (iconElement) {\n            if (this.iconPos)\n                iconElement.className = 'p-button-icon p-button-icon-' + this.iconPos + ' ' + this.getIconClass();\n            else\n                iconElement.className = 'p-button-icon ' + this.getIconClass();\n        }\n        else {\n            this.createIconEl();\n        }\n    }\n\n    removeIconElement() {\n        let iconElement = DomHandler.findSingle(this.el.nativeElement, '.p-button-icon');\n        this.el.nativeElement.removeChild(iconElement);\n    }\n\n    @Input() get label(): string {\n        return this._label;\n    }\n\n    set label(val: string) {\n        this._label = val;\n\n        if (this.initialized) {\n            DomHandler.findSingle(this.el.nativeElement, '.p-button-label').textContent = this._label || '&nbsp;';\n\n            if (this.loading || this.icon) {\n                this.setIconClass();\n            }\n            this.setStyleClass();\n        }\n    }\n\n    @Input() get icon(): string {\n        return this._icon;\n    }\n\n    set icon(val: string) {\n        this._icon = val;\n\n        if (this.initialized) {\n            this.setIconClass();\n            this.setStyleClass();\n        }\n    }\n\n    @Input() get loading(): boolean {\n        return this._loading;\n    }\n\n    set loading(val: boolean) {\n        this._loading = val;\n\n        if (this.initialized) {\n            if (this.loading || this.icon)\n                this.setIconClass();\n            else\n                this.removeIconElement();\n\n            this.setStyleClass();\n        }\n    }\n\n    ngOnDestroy() {\n        this.initialized = false;\n    }\n}\n\n@Component({\n    selector: 'p-button',\n    template: `\n        <button [attr.type]=\"type\" [class]=\"styleClass\" [ngStyle]=\"style\" [disabled]=\"disabled || loading\"\n            [ngClass]=\"{'p-button p-component':true,\n                        'p-button-icon-only': (icon && !label),\n                        'p-button-vertical': (iconPos === 'top' || iconPos === 'bottom') && label,\n                        'p-disabled': this.disabled || this.loading,\n                        'p-button-loading': this.loading,\n                        'p-button-loading-label-only': this.loading && !this.icon && this.label}\"\n                        (click)=\"onClick.emit($event)\" (focus)=\"onFocus.emit($event)\" (blur)=\"onBlur.emit($event)\" pRipple>\n            <ng-content></ng-content>\n            <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n            <span [ngClass]=\"{'p-button-icon': true,\n                        'p-button-icon-left': iconPos === 'left' && label,\n                        'p-button-icon-right': iconPos === 'right' && label,\n                        'p-button-icon-top': iconPos === 'top' && label,\n                        'p-button-icon-bottom': iconPos === 'bottom' && label}\"\n                        [class]=\"loading ? 'p-button-loading-icon ' + loadingIcon : icon\" *ngIf=\"!contentTemplate && (icon||loading)\" [attr.aria-hidden]=\"true\"></span>\n            <span class=\"p-button-label\" [attr.aria-hidden]=\"icon && !label\" *ngIf=\"!contentTemplate\">{{label||'&nbsp;'}}</span>\n            <span [ngClass]=\"badgeStyleClass()\" [class]=\"badgeClass\" *ngIf=\"!contentTemplate && badge\">{{badge}}</span>\n        </button>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Button implements AfterContentInit {\n\n    @Input() type: string = \"button\";\n\n    @Input() iconPos: string = 'left';\n\n    @Input() icon: string;\n\n    @Input() badge: string;\n\n    @Input() label: string;\n\n    @Input() disabled: boolean;\n\n    @Input() loading: boolean = false;\n\n    @Input() loadingIcon: string = \"pi pi-spinner pi-spin\";\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() badgeClass: string;\n\n    contentTemplate: TemplateRef<any>;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    badgeStyleClass() {\n        return {\n            'p-badge p-component': true,\n            'p-badge-no-gutter': this.badge && String(this.badge).length === 1\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RippleModule],\n    exports: [ButtonDirective,Button],\n    declarations: [ButtonDirective,Button]\n})\nexport class ButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-calendar.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-calendar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-calendar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,2456 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import * as i4 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import * as i1 from 'primeng/api';
+import { TranslationKeys, PrimeTemplate, SharedModule } from 'primeng/api';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { ZIndexUtils } from 'primeng/utils';
+
+const CALENDAR_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Calendar),
+    multi: true
+};
+class Calendar {
+    constructor(el, renderer, cd, zone, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.zone = zone;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.multipleSeparator = ',';
+        this.rangeSeparator = '-';
+        this.inline = false;
+        this.showOtherMonths = true;
+        this.icon = 'pi pi-calendar';
+        this.shortYearCutoff = '+10';
+        this.hourFormat = '24';
+        this.stepHour = 1;
+        this.stepMinute = 1;
+        this.stepSecond = 1;
+        this.showSeconds = false;
+        this.showOnFocus = true;
+        this.showWeek = false;
+        this.dataType = 'date';
+        this.selectionMode = 'single';
+        this.todayButtonStyleClass = 'p-button-text';
+        this.clearButtonStyleClass = 'p-button-text';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.keepInvalid = false;
+        this.hideOnDateTimeSelect = true;
+        this.numberOfMonths = 1;
+        this.view = 'date';
+        this.timeSeparator = ":";
+        this.focusTrap = true;
+        this.firstDayOfWeek = 0;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.onClose = new EventEmitter();
+        this.onSelect = new EventEmitter();
+        this.onInput = new EventEmitter();
+        this.onTodayClick = new EventEmitter();
+        this.onClearClick = new EventEmitter();
+        this.onMonthChange = new EventEmitter();
+        this.onYearChange = new EventEmitter();
+        this.onClickOutside = new EventEmitter();
+        this.onShow = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+        this.inputFieldValue = null;
+        this.navigationState = null;
+        this.convertTo24Hour = function (hours, pm) {
+            if (this.hourFormat == '12') {
+                if (hours === 12) {
+                    return (pm ? 12 : 0);
+                }
+                else {
+                    return (pm ? hours + 12 : hours);
+                }
+            }
+            return hours;
+        };
+    }
+    set content(content) {
+        this.contentViewChild = content;
+        if (this.contentViewChild) {
+            if (this.isMonthNavigate) {
+                Promise.resolve(null).then(() => this.updateFocus());
+                this.isMonthNavigate = false;
+            }
+            else {
+                this.initFocusableCell();
+            }
+        }
+    }
+    ;
+    get defaultDate() {
+        return this._defaultDate;
+    }
+    ;
+    set defaultDate(defaultDate) {
+        this._defaultDate = defaultDate;
+        if (this.initialized) {
+            const date = defaultDate || new Date();
+            this.currentMonth = date.getMonth();
+            this.currentYear = date.getFullYear();
+            this.initTime(date);
+            this.createMonths(this.currentMonth, this.currentYear);
+        }
+    }
+    get minDate() {
+        return this._minDate;
+    }
+    set minDate(date) {
+        this._minDate = date;
+        if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {
+            this.createMonths(this.currentMonth, this.currentYear);
+        }
+    }
+    get maxDate() {
+        return this._maxDate;
+    }
+    set maxDate(date) {
+        this._maxDate = date;
+        if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {
+            this.createMonths(this.currentMonth, this.currentYear);
+        }
+    }
+    get disabledDates() {
+        return this._disabledDates;
+    }
+    set disabledDates(disabledDates) {
+        this._disabledDates = disabledDates;
+        if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {
+            this.createMonths(this.currentMonth, this.currentYear);
+        }
+    }
+    get disabledDays() {
+        return this._disabledDays;
+    }
+    set disabledDays(disabledDays) {
+        this._disabledDays = disabledDays;
+        if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {
+            this.createMonths(this.currentMonth, this.currentYear);
+        }
+    }
+    get yearRange() {
+        return this._yearRange;
+    }
+    set yearRange(yearRange) {
+        this._yearRange = yearRange;
+        if (yearRange) {
+            const years = yearRange.split(':');
+            const yearStart = parseInt(years[0]);
+            const yearEnd = parseInt(years[1]);
+            this.populateYearOptions(yearStart, yearEnd);
+        }
+    }
+    get showTime() {
+        return this._showTime;
+    }
+    set showTime(showTime) {
+        this._showTime = showTime;
+        if (this.currentHour === undefined) {
+            this.initTime(this.value || new Date());
+        }
+        this.updateInputfield();
+    }
+    get locale() {
+        return this._locale;
+    }
+    set locale(newLocale) {
+        console.warn("Locale property has no effect, use new i18n API instead.");
+    }
+    ngOnInit() {
+        const date = this.defaultDate || new Date();
+        this.currentMonth = date.getMonth();
+        this.currentYear = date.getFullYear();
+        if (this.view === 'date') {
+            this.createWeekDays();
+            this.initTime(date);
+            this.createMonths(this.currentMonth, this.currentYear);
+            this.ticksTo1970 = (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000);
+        }
+        else if (this.view === 'month') {
+            this.createMonthPickerValues();
+        }
+        this.translationSubscription = this.config.translationObserver.subscribe(() => {
+            this.createWeekDays();
+        });
+        this.initialized = true;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'date':
+                    this.dateTemplate = item.template;
+                    break;
+                case 'disabledDate':
+                    this.disabledDateTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.dateTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    getTranslation(option) {
+        return this.config.getTranslation(option);
+    }
+    populateYearOptions(start, end) {
+        this.yearOptions = [];
+        for (let i = start; i <= end; i++) {
+            this.yearOptions.push(i);
+        }
+    }
+    createWeekDays() {
+        this.weekDays = [];
+        let dayIndex = this.firstDayOfWeek;
+        let dayLabels = this.getTranslation(TranslationKeys.DAY_NAMES_MIN);
+        for (let i = 0; i < 7; i++) {
+            this.weekDays.push(dayLabels[dayIndex]);
+            dayIndex = (dayIndex == 6) ? 0 : ++dayIndex;
+        }
+    }
+    createMonthPickerValues() {
+        this.monthPickerValues = [];
+        let monthLabels = this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT);
+        for (let i = 0; i <= 11; i++) {
+            this.monthPickerValues.push(monthLabels[i]);
+        }
+    }
+    createMonths(month, year) {
+        this.months = this.months = [];
+        for (let i = 0; i < this.numberOfMonths; i++) {
+            let m = month + i;
+            let y = year;
+            if (m > 11) {
+                m = m % 11 - 1;
+                y = year + 1;
+            }
+            this.months.push(this.createMonth(m, y));
+        }
+    }
+    getWeekNumber(date) {
+        let checkDate = new Date(date.getTime());
+        checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+        let time = checkDate.getTime();
+        checkDate.setMonth(0);
+        checkDate.setDate(1);
+        return Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1;
+    }
+    createMonth(month, year) {
+        let dates = [];
+        let firstDay = this.getFirstDayOfMonthIndex(month, year);
+        let daysLength = this.getDaysCountInMonth(month, year);
+        let prevMonthDaysLength = this.getDaysCountInPrevMonth(month, year);
+        let dayNo = 1;
+        let today = new Date();
+        let weekNumbers = [];
+        let monthRows = Math.ceil((daysLength + firstDay) / 7);
+        for (let i = 0; i < monthRows; i++) {
+            let week = [];
+            if (i == 0) {
+                for (let j = (prevMonthDaysLength - firstDay + 1); j <= prevMonthDaysLength; j++) {
+                    let prev = this.getPreviousMonthAndYear(month, year);
+                    week.push({ day: j, month: prev.month, year: prev.year, otherMonth: true,
+                        today: this.isToday(today, j, prev.month, prev.year), selectable: this.isSelectable(j, prev.month, prev.year, true) });
+                }
+                let remainingDaysLength = 7 - week.length;
+                for (let j = 0; j < remainingDaysLength; j++) {
+                    week.push({ day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),
+                        selectable: this.isSelectable(dayNo, month, year, false) });
+                    dayNo++;
+                }
+            }
+            else {
+                for (let j = 0; j < 7; j++) {
+                    if (dayNo > daysLength) {
+                        let next = this.getNextMonthAndYear(month, year);
+                        week.push({ day: dayNo - daysLength, month: next.month, year: next.year, otherMonth: true,
+                            today: this.isToday(today, dayNo - daysLength, next.month, next.year),
+                            selectable: this.isSelectable((dayNo - daysLength), next.month, next.year, true) });
+                    }
+                    else {
+                        week.push({ day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),
+                            selectable: this.isSelectable(dayNo, month, year, false) });
+                    }
+                    dayNo++;
+                }
+            }
+            if (this.showWeek) {
+                weekNumbers.push(this.getWeekNumber(new Date(week[0].year, week[0].month, week[0].day)));
+            }
+            dates.push(week);
+        }
+        return {
+            month: month,
+            year: year,
+            dates: dates,
+            weekNumbers: weekNumbers
+        };
+    }
+    initTime(date) {
+        this.pm = date.getHours() > 11;
+        if (this.showTime) {
+            this.currentMinute = date.getMinutes();
+            this.currentSecond = date.getSeconds();
+            this.setCurrentHourPM(date.getHours());
+        }
+        else if (this.timeOnly) {
+            this.currentMinute = 0;
+            this.currentHour = 0;
+            this.currentSecond = 0;
+        }
+    }
+    navBackward(event) {
+        event.stopPropagation();
+        if (this.disabled) {
+            event.preventDefault();
+            return;
+        }
+        this.isMonthNavigate = true;
+        if (this.view === 'month') {
+            this.decrementYear();
+            setTimeout(() => {
+                this.updateFocus();
+            }, 1);
+        }
+        else {
+            if (this.currentMonth === 0) {
+                this.currentMonth = 11;
+                this.decrementYear();
+            }
+            else {
+                this.currentMonth--;
+            }
+            this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
+            this.createMonths(this.currentMonth, this.currentYear);
+        }
+    }
+    navForward(event) {
+        event.stopPropagation();
+        if (this.disabled) {
+            event.preventDefault();
+            return;
+        }
+        this.isMonthNavigate = true;
+        if (this.view === 'month') {
+            this.incrementYear();
+            setTimeout(() => {
+                this.updateFocus();
+            }, 1);
+        }
+        else {
+            if (this.currentMonth === 11) {
+                this.currentMonth = 0;
+                this.incrementYear();
+            }
+            else {
+                this.currentMonth++;
+            }
+            this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
+            this.createMonths(this.currentMonth, this.currentYear);
+        }
+    }
+    decrementYear() {
+        this.currentYear--;
+        if (this.yearNavigator && this.currentYear < this.yearOptions[0]) {
+            let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];
+            this.populateYearOptions(this.yearOptions[0] - difference, this.yearOptions[this.yearOptions.length - 1] - difference);
+        }
+    }
+    incrementYear() {
+        this.currentYear++;
+        if (this.yearNavigator && this.currentYear > this.yearOptions[this.yearOptions.length - 1]) {
+            let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];
+            this.populateYearOptions(this.yearOptions[0] + difference, this.yearOptions[this.yearOptions.length - 1] + difference);
+        }
+    }
+    onDateSelect(event, dateMeta) {
+        if (this.disabled || !dateMeta.selectable) {
+            event.preventDefault();
+            return;
+        }
+        if (this.isMultipleSelection() && this.isSelected(dateMeta)) {
+            this.value = this.value.filter((date, i) => {
+                return !this.isDateEquals(date, dateMeta);
+            });
+            if (this.value.length === 0) {
+                this.value = null;
+            }
+            this.updateModel(this.value);
+        }
+        else {
+            if (this.shouldSelectDate(dateMeta)) {
+                this.selectDate(dateMeta);
+            }
+        }
+        if (this.isSingleSelection() && this.hideOnDateTimeSelect) {
+            setTimeout(() => {
+                event.preventDefault();
+                this.hideOverlay();
+                if (this.mask) {
+                    this.disableModality();
+                }
+                this.cd.markForCheck();
+            }, 150);
+        }
+        this.updateInputfield();
+        event.preventDefault();
+    }
+    shouldSelectDate(dateMeta) {
+        if (this.isMultipleSelection())
+            return this.maxDateCount != null ? this.maxDateCount > (this.value ? this.value.length : 0) : true;
+        else
+            return true;
+    }
+    onMonthSelect(event, index) {
+        if (!DomHandler.hasClass(event.target, 'p-disabled')) {
+            this.onDateSelect(event, { year: this.currentYear, month: index, day: 1, selectable: true });
+        }
+    }
+    updateInputfield() {
+        let formattedValue = '';
+        if (this.value) {
+            if (this.isSingleSelection()) {
+                formattedValue = this.formatDateTime(this.value);
+            }
+            else if (this.isMultipleSelection()) {
+                for (let i = 0; i < this.value.length; i++) {
+                    let dateAsString = this.formatDateTime(this.value[i]);
+                    formattedValue += dateAsString;
+                    if (i !== (this.value.length - 1)) {
+                        formattedValue += this.multipleSeparator + ' ';
+                    }
+                }
+            }
+            else if (this.isRangeSelection()) {
+                if (this.value && this.value.length) {
+                    let startDate = this.value[0];
+                    let endDate = this.value[1];
+                    formattedValue = this.formatDateTime(startDate);
+                    if (endDate) {
+                        formattedValue += ' ' + this.rangeSeparator + ' ' + this.formatDateTime(endDate);
+                    }
+                }
+            }
+        }
+        this.inputFieldValue = formattedValue;
+        this.updateFilledState();
+        if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {
+            this.inputfieldViewChild.nativeElement.value = this.inputFieldValue;
+        }
+    }
+    formatDateTime(date) {
+        let formattedValue = null;
+        if (date) {
+            if (this.timeOnly) {
+                formattedValue = this.formatTime(date);
+            }
+            else {
+                formattedValue = this.formatDate(date, this.getDateFormat());
+                if (this.showTime) {
+                    formattedValue += ' ' + this.formatTime(date);
+                }
+            }
+        }
+        return formattedValue;
+    }
+    setCurrentHourPM(hours) {
+        if (this.hourFormat == '12') {
+            this.pm = hours > 11;
+            if (hours >= 12) {
+                this.currentHour = (hours == 12) ? 12 : hours - 12;
+            }
+            else {
+                this.currentHour = (hours == 0) ? 12 : hours;
+            }
+        }
+        else {
+            this.currentHour = hours;
+        }
+    }
+    selectDate(dateMeta) {
+        let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);
+        if (this.showTime) {
+            if (this.hourFormat == '12') {
+                if (this.currentHour === 12)
+                    date.setHours(this.pm ? 12 : 0);
+                else
+                    date.setHours(this.pm ? this.currentHour + 12 : this.currentHour);
+            }
+            else {
+                date.setHours(this.currentHour);
+            }
+            date.setMinutes(this.currentMinute);
+            date.setSeconds(this.currentSecond);
+        }
+        if (this.minDate && this.minDate > date) {
+            date = this.minDate;
+            this.setCurrentHourPM(date.getHours());
+            this.currentMinute = date.getMinutes();
+            this.currentSecond = date.getSeconds();
+        }
+        if (this.maxDate && this.maxDate < date) {
+            date = this.maxDate;
+            this.setCurrentHourPM(date.getHours());
+            this.currentMinute = date.getMinutes();
+            this.currentSecond = date.getSeconds();
+        }
+        if (this.isSingleSelection()) {
+            this.updateModel(date);
+        }
+        else if (this.isMultipleSelection()) {
+            this.updateModel(this.value ? [...this.value, date] : [date]);
+        }
+        else if (this.isRangeSelection()) {
+            if (this.value && this.value.length) {
+                let startDate = this.value[0];
+                let endDate = this.value[1];
+                if (!endDate && date.getTime() >= startDate.getTime()) {
+                    endDate = date;
+                }
+                else {
+                    startDate = date;
+                    endDate = null;
+                }
+                this.updateModel([startDate, endDate]);
+            }
+            else {
+                this.updateModel([date, null]);
+            }
+        }
+        this.onSelect.emit(date);
+    }
+    updateModel(value) {
+        this.value = value;
+        if (this.dataType == 'date') {
+            this.onModelChange(this.value);
+        }
+        else if (this.dataType == 'string') {
+            if (this.isSingleSelection()) {
+                this.onModelChange(this.formatDateTime(this.value));
+            }
+            else {
+                let stringArrValue = null;
+                if (this.value) {
+                    stringArrValue = this.value.map(date => this.formatDateTime(date));
+                }
+                this.onModelChange(stringArrValue);
+            }
+        }
+    }
+    getFirstDayOfMonthIndex(month, year) {
+        let day = new Date();
+        day.setDate(1);
+        day.setMonth(month);
+        day.setFullYear(year);
+        let dayIndex = day.getDay() + this.getSundayIndex();
+        return dayIndex >= 7 ? dayIndex - 7 : dayIndex;
+    }
+    getDaysCountInMonth(month, year) {
+        return 32 - this.daylightSavingAdjust(new Date(year, month, 32)).getDate();
+    }
+    getDaysCountInPrevMonth(month, year) {
+        let prev = this.getPreviousMonthAndYear(month, year);
+        return this.getDaysCountInMonth(prev.month, prev.year);
+    }
+    getPreviousMonthAndYear(month, year) {
+        let m, y;
+        if (month === 0) {
+            m = 11;
+            y = year - 1;
+        }
+        else {
+            m = month - 1;
+            y = year;
+        }
+        return { 'month': m, 'year': y };
+    }
+    getNextMonthAndYear(month, year) {
+        let m, y;
+        if (month === 11) {
+            m = 0;
+            y = year + 1;
+        }
+        else {
+            m = month + 1;
+            y = year;
+        }
+        return { 'month': m, 'year': y };
+    }
+    getSundayIndex() {
+        return this.firstDayOfWeek > 0 ? 7 - this.firstDayOfWeek : 0;
+    }
+    isSelected(dateMeta) {
+        if (this.value) {
+            if (this.isSingleSelection()) {
+                return this.isDateEquals(this.value, dateMeta);
+            }
+            else if (this.isMultipleSelection()) {
+                let selected = false;
+                for (let date of this.value) {
+                    selected = this.isDateEquals(date, dateMeta);
+                    if (selected) {
+                        break;
+                    }
+                }
+                return selected;
+            }
+            else if (this.isRangeSelection()) {
+                if (this.value[1])
+                    return this.isDateEquals(this.value[0], dateMeta) || this.isDateEquals(this.value[1], dateMeta) || this.isDateBetween(this.value[0], this.value[1], dateMeta);
+                else
+                    return this.isDateEquals(this.value[0], dateMeta);
+            }
+        }
+        else {
+            return false;
+        }
+    }
+    isMonthSelected(month) {
+        let day = this.value ? (Array.isArray(this.value) ? this.value[0].getDate() : this.value.getDate()) : 1;
+        return this.isSelected({ year: this.currentYear, month: month, day: day, selectable: true });
+    }
+    isDateEquals(value, dateMeta) {
+        if (value)
+            return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year;
+        else
+            return false;
+    }
+    isDateBetween(start, end, dateMeta) {
+        let between = false;
+        if (start && end) {
+            let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);
+            return start.getTime() <= date.getTime() && end.getTime() >= date.getTime();
+        }
+        return between;
+    }
+    isSingleSelection() {
+        return this.selectionMode === 'single';
+    }
+    isRangeSelection() {
+        return this.selectionMode === 'range';
+    }
+    isMultipleSelection() {
+        return this.selectionMode === 'multiple';
+    }
+    isToday(today, day, month, year) {
+        return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;
+    }
+    isSelectable(day, month, year, otherMonth) {
+        let validMin = true;
+        let validMax = true;
+        let validDate = true;
+        let validDay = true;
+        if (otherMonth && !this.selectOtherMonths) {
+            return false;
+        }
+        if (this.minDate) {
+            if (this.minDate.getFullYear() > year) {
+                validMin = false;
+            }
+            else if (this.minDate.getFullYear() === year) {
+                if (this.minDate.getMonth() > month) {
+                    validMin = false;
+                }
+                else if (this.minDate.getMonth() === month) {
+                    if (this.minDate.getDate() > day) {
+                        validMin = false;
+                    }
+                }
+            }
+        }
+        if (this.maxDate) {
+            if (this.maxDate.getFullYear() < year) {
+                validMax = false;
+            }
+            else if (this.maxDate.getFullYear() === year) {
+                if (this.maxDate.getMonth() < month) {
+                    validMax = false;
+                }
+                else if (this.maxDate.getMonth() === month) {
+                    if (this.maxDate.getDate() < day) {
+                        validMax = false;
+                    }
+                }
+            }
+        }
+        if (this.disabledDates) {
+            validDate = !this.isDateDisabled(day, month, year);
+        }
+        if (this.disabledDays) {
+            validDay = !this.isDayDisabled(day, month, year);
+        }
+        return validMin && validMax && validDate && validDay;
+    }
+    isDateDisabled(day, month, year) {
+        if (this.disabledDates) {
+            for (let disabledDate of this.disabledDates) {
+                if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    isDayDisabled(day, month, year) {
+        if (this.disabledDays) {
+            let weekday = new Date(year, month, day);
+            let weekdayNumber = weekday.getDay();
+            return this.disabledDays.indexOf(weekdayNumber) !== -1;
+        }
+        return false;
+    }
+    onInputFocus(event) {
+        this.focus = true;
+        if (this.showOnFocus) {
+            this.showOverlay();
+        }
+        this.onFocus.emit(event);
+    }
+    onInputClick() {
+        if (this.showOnFocus && !this.overlayVisible) {
+            this.showOverlay();
+        }
+    }
+    onInputBlur(event) {
+        this.focus = false;
+        this.onBlur.emit(event);
+        if (!this.keepInvalid) {
+            this.updateInputfield();
+        }
+        this.onModelTouched();
+    }
+    onButtonClick(event, inputfield) {
+        if (!this.overlayVisible) {
+            inputfield.focus();
+            this.showOverlay();
+        }
+        else {
+            this.hideOverlay();
+        }
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+    }
+    onPrevButtonClick(event) {
+        this.navigationState = { backward: true, button: true };
+        this.navBackward(event);
+    }
+    onNextButtonClick(event) {
+        this.navigationState = { backward: false, button: true };
+        this.navForward(event);
+    }
+    onContainerButtonKeydown(event) {
+        switch (event.which) {
+            //tab
+            case 9:
+                if (!this.inline) {
+                    this.trapFocus(event);
+                }
+                break;
+            //escape
+            case 27:
+                this.overlayVisible = false;
+                event.preventDefault();
+                break;
+            default:
+                //Noop
+                break;
+        }
+    }
+    onInputKeydown(event) {
+        this.isKeydown = true;
+        if (event.keyCode === 40 && this.contentViewChild) {
+            this.trapFocus(event);
+        }
+        else if (event.keyCode === 27) {
+            if (this.overlayVisible) {
+                this.overlayVisible = false;
+                event.preventDefault();
+            }
+        }
+        else if (event.keyCode === 13) {
+            if (this.overlayVisible) {
+                this.overlayVisible = false;
+                event.preventDefault();
+            }
+        }
+        else if (event.keyCode === 9 && this.contentViewChild) {
+            DomHandler.getFocusableElements(this.contentViewChild.nativeElement).forEach(el => el.tabIndex = '-1');
+            if (this.overlayVisible) {
+                this.overlayVisible = false;
+            }
+        }
+    }
+    onDateCellKeydown(event, date, groupIndex) {
+        const cellContent = event.currentTarget;
+        const cell = cellContent.parentElement;
+        switch (event.which) {
+            //down arrow
+            case 40: {
+                cellContent.tabIndex = '-1';
+                let cellIndex = DomHandler.index(cell);
+                let nextRow = cell.parentElement.nextElementSibling;
+                if (nextRow) {
+                    let focusCell = nextRow.children[cellIndex].children[0];
+                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {
+                        this.navigationState = { backward: false };
+                        this.navForward(event);
+                    }
+                    else {
+                        nextRow.children[cellIndex].children[0].tabIndex = '0';
+                        nextRow.children[cellIndex].children[0].focus();
+                    }
+                }
+                else {
+                    this.navigationState = { backward: false };
+                    this.navForward(event);
+                }
+                event.preventDefault();
+                break;
+            }
+            //up arrow
+            case 38: {
+                cellContent.tabIndex = '-1';
+                let cellIndex = DomHandler.index(cell);
+                let prevRow = cell.parentElement.previousElementSibling;
+                if (prevRow) {
+                    let focusCell = prevRow.children[cellIndex].children[0];
+                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {
+                        this.navigationState = { backward: true };
+                        this.navBackward(event);
+                    }
+                    else {
+                        focusCell.tabIndex = '0';
+                        focusCell.focus();
+                    }
+                }
+                else {
+                    this.navigationState = { backward: true };
+                    this.navBackward(event);
+                }
+                event.preventDefault();
+                break;
+            }
+            //left arrow
+            case 37: {
+                cellContent.tabIndex = '-1';
+                let prevCell = cell.previousElementSibling;
+                if (prevCell) {
+                    let focusCell = prevCell.children[0];
+                    if (DomHandler.hasClass(focusCell, 'p-disabled') || DomHandler.hasClass(focusCell.parentElement, 'p-datepicker-weeknumber')) {
+                        this.navigateToMonth(true, groupIndex);
+                    }
+                    else {
+                        focusCell.tabIndex = '0';
+                        focusCell.focus();
+                    }
+                }
+                else {
+                    this.navigateToMonth(true, groupIndex);
+                }
+                event.preventDefault();
+                break;
+            }
+            //right arrow
+            case 39: {
+                cellContent.tabIndex = '-1';
+                let nextCell = cell.nextElementSibling;
+                if (nextCell) {
+                    let focusCell = nextCell.children[0];
+                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {
+                        this.navigateToMonth(false, groupIndex);
+                    }
+                    else {
+                        focusCell.tabIndex = '0';
+                        focusCell.focus();
+                    }
+                }
+                else {
+                    this.navigateToMonth(false, groupIndex);
+                }
+                event.preventDefault();
+                break;
+            }
+            //enter
+            case 13: {
+                this.onDateSelect(event, date);
+                event.preventDefault();
+                break;
+            }
+            //escape
+            case 27: {
+                this.overlayVisible = false;
+                event.preventDefault();
+                break;
+            }
+            //tab
+            case 9: {
+                if (!this.inline) {
+                    this.trapFocus(event);
+                }
+                break;
+            }
+            default:
+                //no op
+                break;
+        }
+    }
+    onMonthCellKeydown(event, index) {
+        const cell = event.currentTarget;
+        switch (event.which) {
+            //arrows
+            case 38:
+            case 40: {
+                cell.tabIndex = '-1';
+                var cells = cell.parentElement.children;
+                var cellIndex = DomHandler.index(cell);
+                let nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex - 3];
+                if (nextCell) {
+                    nextCell.tabIndex = '0';
+                    nextCell.focus();
+                }
+                event.preventDefault();
+                break;
+            }
+            //left arrow
+            case 37: {
+                cell.tabIndex = '-1';
+                let prevCell = cell.previousElementSibling;
+                if (prevCell) {
+                    prevCell.tabIndex = '0';
+                    prevCell.focus();
+                }
+                event.preventDefault();
+                break;
+            }
+            //right arrow
+            case 39: {
+                cell.tabIndex = '-1';
+                let nextCell = cell.nextElementSibling;
+                if (nextCell) {
+                    nextCell.tabIndex = '0';
+                    nextCell.focus();
+                }
+                event.preventDefault();
+                break;
+            }
+            //enter
+            case 13: {
+                this.onMonthSelect(event, index);
+                event.preventDefault();
+                break;
+            }
+            //escape
+            case 27: {
+                this.overlayVisible = false;
+                event.preventDefault();
+                break;
+            }
+            //tab
+            case 9: {
+                if (!this.inline) {
+                    this.trapFocus(event);
+                }
+                break;
+            }
+            default:
+                //no op
+                break;
+        }
+    }
+    navigateToMonth(prev, groupIndex) {
+        if (prev) {
+            if (this.numberOfMonths === 1 || (groupIndex === 0)) {
+                this.navigationState = { backward: true };
+                this.navBackward(event);
+            }
+            else {
+                let prevMonthContainer = this.contentViewChild.nativeElement.children[groupIndex - 1];
+                let cells = DomHandler.find(prevMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
+                let focusCell = cells[cells.length - 1];
+                focusCell.tabIndex = '0';
+                focusCell.focus();
+            }
+        }
+        else {
+            if (this.numberOfMonths === 1 || (groupIndex === this.numberOfMonths - 1)) {
+                this.navigationState = { backward: false };
+                this.navForward(event);
+            }
+            else {
+                let nextMonthContainer = this.contentViewChild.nativeElement.children[groupIndex + 1];
+                let focusCell = DomHandler.findSingle(nextMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
+                focusCell.tabIndex = '0';
+                focusCell.focus();
+            }
+        }
+    }
+    updateFocus() {
+        let cell;
+        if (this.navigationState) {
+            if (this.navigationState.button) {
+                this.initFocusableCell();
+                if (this.navigationState.backward)
+                    DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-prev').focus();
+                else
+                    DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-next').focus();
+            }
+            else {
+                if (this.navigationState.backward) {
+                    let cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
+                    cell = cells[cells.length - 1];
+                }
+                else {
+                    cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
+                }
+                if (cell) {
+                    cell.tabIndex = '0';
+                    cell.focus();
+                }
+            }
+            this.navigationState = null;
+        }
+        else {
+            this.initFocusableCell();
+        }
+    }
+    initFocusableCell() {
+        let cell;
+        if (this.view === 'month') {
+            let cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');
+            let selectedCell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month.p-highlight');
+            cells.forEach(cell => cell.tabIndex = -1);
+            cell = selectedCell || cells[0];
+            if (cells.length === 0) {
+                let disabledCells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month.p-disabled[tabindex = "0"]');
+                disabledCells.forEach(cell => cell.tabIndex = -1);
+            }
+        }
+        else {
+            cell = DomHandler.findSingle(this.contentViewChild.nativeElement, 'span.p-highlight');
+            if (!cell) {
+                let todayCell = DomHandler.findSingle(this.contentViewChild.nativeElement, 'td.p-datepicker-today span:not(.p-disabled):not(.p-ink)');
+                if (todayCell)
+                    cell = todayCell;
+                else
+                    cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
+            }
+        }
+        if (cell) {
+            cell.tabIndex = '0';
+        }
+    }
+    trapFocus(event) {
+        let focusableElements = DomHandler.getFocusableElements(this.contentViewChild.nativeElement);
+        if (focusableElements && focusableElements.length > 0) {
+            if (!focusableElements[0].ownerDocument.activeElement) {
+                focusableElements[0].focus();
+            }
+            else {
+                let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);
+                if (event.shiftKey) {
+                    if (focusedIndex == -1 || focusedIndex === 0) {
+                        if (this.focusTrap) {
+                            focusableElements[focusableElements.length - 1].focus();
+                        }
+                        else {
+                            if (focusedIndex === -1)
+                                return this.hideOverlay();
+                            else if (focusedIndex === 0)
+                                return;
+                        }
+                    }
+                    else {
+                        focusableElements[focusedIndex - 1].focus();
+                    }
+                }
+                else {
+                    if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1)) {
+                        if (!this.focusTrap && focusedIndex != -1)
+                            return this.hideOverlay();
+                        else
+                            focusableElements[0].focus();
+                    }
+                    else {
+                        focusableElements[focusedIndex + 1].focus();
+                    }
+                }
+            }
+        }
+        event.preventDefault();
+    }
+    onMonthDropdownChange(m) {
+        this.currentMonth = parseInt(m);
+        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
+        this.createMonths(this.currentMonth, this.currentYear);
+    }
+    onYearDropdownChange(y) {
+        this.currentYear = parseInt(y);
+        this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
+        this.createMonths(this.currentMonth, this.currentYear);
+    }
+    validateTime(hour, minute, second, pm) {
+        let value = this.value;
+        const convertedHour = this.convertTo24Hour(hour, pm);
+        if (this.isRangeSelection()) {
+            value = this.value[1] || this.value[0];
+        }
+        if (this.isMultipleSelection()) {
+            value = this.value[this.value.length - 1];
+        }
+        const valueDateString = value ? value.toDateString() : null;
+        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {
+            if (this.minDate.getHours() > convertedHour) {
+                return false;
+            }
+            if (this.minDate.getHours() === convertedHour) {
+                if (this.minDate.getMinutes() > minute) {
+                    return false;
+                }
+                if (this.minDate.getMinutes() === minute) {
+                    if (this.minDate.getSeconds() > second) {
+                        return false;
+                    }
+                }
+            }
+        }
+        if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {
+            if (this.maxDate.getHours() < convertedHour) {
+                return false;
+            }
+            if (this.maxDate.getHours() === convertedHour) {
+                if (this.maxDate.getMinutes() < minute) {
+                    return false;
+                }
+                if (this.maxDate.getMinutes() === minute) {
+                    if (this.maxDate.getSeconds() < second) {
+                        return false;
+                    }
+                }
+            }
+        }
+        return true;
+    }
+    incrementHour(event) {
+        const prevHour = this.currentHour;
+        let newHour = this.currentHour + this.stepHour;
+        let newPM = this.pm;
+        if (this.hourFormat == '24')
+            newHour = (newHour >= 24) ? (newHour - 24) : newHour;
+        else if (this.hourFormat == '12') {
+            // Before the AM/PM break, now after
+            if (prevHour < 12 && newHour > 11) {
+                newPM = !this.pm;
+            }
+            newHour = (newHour >= 13) ? (newHour - 12) : newHour;
+        }
+        if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {
+            this.currentHour = newHour;
+            this.pm = newPM;
+        }
+        event.preventDefault();
+    }
+    onTimePickerElementMouseDown(event, type, direction) {
+        if (!this.disabled) {
+            this.repeat(event, null, type, direction);
+            event.preventDefault();
+        }
+    }
+    onTimePickerElementMouseUp(event) {
+        if (!this.disabled) {
+            this.clearTimePickerTimer();
+            this.updateTime();
+        }
+    }
+    onTimePickerElementMouseLeave() {
+        if (!this.disabled && this.timePickerTimer) {
+            this.clearTimePickerTimer();
+            this.updateTime();
+        }
+    }
+    repeat(event, interval, type, direction) {
+        let i = interval || 500;
+        this.clearTimePickerTimer();
+        this.timePickerTimer = setTimeout(() => {
+            this.repeat(event, 100, type, direction);
+            this.cd.markForCheck();
+        }, i);
+        switch (type) {
+            case 0:
+                if (direction === 1)
+                    this.incrementHour(event);
+                else
+                    this.decrementHour(event);
+                break;
+            case 1:
+                if (direction === 1)
+                    this.incrementMinute(event);
+                else
+                    this.decrementMinute(event);
+                break;
+            case 2:
+                if (direction === 1)
+                    this.incrementSecond(event);
+                else
+                    this.decrementSecond(event);
+                break;
+        }
+        this.updateInputfield();
+    }
+    clearTimePickerTimer() {
+        if (this.timePickerTimer) {
+            clearTimeout(this.timePickerTimer);
+            this.timePickerTimer = null;
+        }
+    }
+    decrementHour(event) {
+        let newHour = this.currentHour - this.stepHour;
+        let newPM = this.pm;
+        if (this.hourFormat == '24')
+            newHour = (newHour < 0) ? (24 + newHour) : newHour;
+        else if (this.hourFormat == '12') {
+            // If we were at noon/midnight, then switch
+            if (this.currentHour === 12) {
+                newPM = !this.pm;
+            }
+            newHour = (newHour <= 0) ? (12 + newHour) : newHour;
+        }
+        if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {
+            this.currentHour = newHour;
+            this.pm = newPM;
+        }
+        event.preventDefault();
+    }
+    incrementMinute(event) {
+        let newMinute = this.currentMinute + this.stepMinute;
+        newMinute = (newMinute > 59) ? newMinute - 60 : newMinute;
+        if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {
+            this.currentMinute = newMinute;
+        }
+        event.preventDefault();
+    }
+    decrementMinute(event) {
+        let newMinute = this.currentMinute - this.stepMinute;
+        newMinute = (newMinute < 0) ? 60 + newMinute : newMinute;
+        if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {
+            this.currentMinute = newMinute;
+        }
+        event.preventDefault();
+    }
+    incrementSecond(event) {
+        let newSecond = this.currentSecond + this.stepSecond;
+        newSecond = (newSecond > 59) ? newSecond - 60 : newSecond;
+        if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {
+            this.currentSecond = newSecond;
+        }
+        event.preventDefault();
+    }
+    decrementSecond(event) {
+        let newSecond = this.currentSecond - this.stepSecond;
+        newSecond = (newSecond < 0) ? 60 + newSecond : newSecond;
+        if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {
+            this.currentSecond = newSecond;
+        }
+        event.preventDefault();
+    }
+    updateTime() {
+        let value = this.value;
+        if (this.isRangeSelection()) {
+            value = this.value[1] || this.value[0];
+        }
+        if (this.isMultipleSelection()) {
+            value = this.value[this.value.length - 1];
+        }
+        value = value ? new Date(value.getTime()) : new Date();
+        if (this.hourFormat == '12') {
+            if (this.currentHour === 12)
+                value.setHours(this.pm ? 12 : 0);
+            else
+                value.setHours(this.pm ? this.currentHour + 12 : this.currentHour);
+        }
+        else {
+            value.setHours(this.currentHour);
+        }
+        value.setMinutes(this.currentMinute);
+        value.setSeconds(this.currentSecond);
+        if (this.isRangeSelection()) {
+            if (this.value[1])
+                value = [this.value[0], value];
+            else
+                value = [value, null];
+        }
+        if (this.isMultipleSelection()) {
+            value = [...this.value.slice(0, -1), value];
+        }
+        this.updateModel(value);
+        this.onSelect.emit(value);
+        this.updateInputfield();
+    }
+    toggleAMPM(event) {
+        const newPM = !this.pm;
+        if (this.validateTime(this.currentHour, this.currentMinute, this.currentSecond, newPM)) {
+            this.pm = newPM;
+            this.updateTime();
+        }
+        event.preventDefault();
+    }
+    onUserInput(event) {
+        // IE 11 Workaround for input placeholder : https://github.com/primefaces/primeng/issues/2026
+        if (!this.isKeydown) {
+            return;
+        }
+        this.isKeydown = false;
+        let val = event.target.value;
+        try {
+            let value = this.parseValueFromString(val);
+            if (this.isValidSelection(value)) {
+                this.updateModel(value);
+                this.updateUI();
+            }
+        }
+        catch (err) {
+            //invalid date
+            this.updateModel(null);
+        }
+        this.filled = val != null && val.length;
+        this.onInput.emit(event);
+    }
+    isValidSelection(value) {
+        let isValid = true;
+        if (this.isSingleSelection()) {
+            if (!this.isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false)) {
+                isValid = false;
+            }
+        }
+        else if (value.every(v => this.isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false))) {
+            if (this.isRangeSelection()) {
+                isValid = value.length > 1 && value[1] > value[0] ? true : false;
+            }
+        }
+        return isValid;
+    }
+    parseValueFromString(text) {
+        if (!text || text.trim().length === 0) {
+            return null;
+        }
+        let value;
+        if (this.isSingleSelection()) {
+            value = this.parseDateTime(text);
+        }
+        else if (this.isMultipleSelection()) {
+            let tokens = text.split(this.multipleSeparator);
+            value = [];
+            for (let token of tokens) {
+                value.push(this.parseDateTime(token.trim()));
+            }
+        }
+        else if (this.isRangeSelection()) {
+            let tokens = text.split(' ' + this.rangeSeparator + ' ');
+            value = [];
+            for (let i = 0; i < tokens.length; i++) {
+                value[i] = this.parseDateTime(tokens[i].trim());
+            }
+        }
+        return value;
+    }
+    parseDateTime(text) {
+        let date;
+        let parts = text.split(' ');
+        if (this.timeOnly) {
+            date = new Date();
+            this.populateTime(date, parts[0], parts[1]);
+        }
+        else {
+            const dateFormat = this.getDateFormat();
+            if (this.showTime) {
+                let ampm = this.hourFormat == '12' ? parts.pop() : null;
+                let timeString = parts.pop();
+                date = this.parseDate(parts.join(' '), dateFormat);
+                this.populateTime(date, timeString, ampm);
+            }
+            else {
+                date = this.parseDate(text, dateFormat);
+            }
+        }
+        return date;
+    }
+    populateTime(value, timeString, ampm) {
+        if (this.hourFormat == '12' && !ampm) {
+            throw 'Invalid Time';
+        }
+        this.pm = (ampm === 'PM' || ampm === 'pm');
+        let time = this.parseTime(timeString);
+        value.setHours(time.hour);
+        value.setMinutes(time.minute);
+        value.setSeconds(time.second);
+    }
+    updateUI() {
+        let val = this.value || this.defaultDate || new Date();
+        if (Array.isArray(val)) {
+            val = val[0];
+        }
+        this.currentMonth = val.getMonth();
+        this.currentYear = val.getFullYear();
+        this.createMonths(this.currentMonth, this.currentYear);
+        if (this.showTime || this.timeOnly) {
+            this.setCurrentHourPM(val.getHours());
+            this.currentMinute = val.getMinutes();
+            this.currentSecond = val.getSeconds();
+        }
+    }
+    showOverlay() {
+        if (!this.overlayVisible) {
+            this.updateUI();
+            this.overlayVisible = true;
+        }
+    }
+    hideOverlay() {
+        this.overlayVisible = false;
+        this.clearTimePickerTimer();
+        if (this.touchUI) {
+            this.disableModality();
+        }
+        this.cd.markForCheck();
+    }
+    toggle() {
+        if (!this.inline) {
+            if (!this.overlayVisible) {
+                this.showOverlay();
+                this.inputfieldViewChild.nativeElement.focus();
+            }
+            else {
+                this.hideOverlay();
+            }
+        }
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+            case 'visibleTouchUI':
+                if (!this.inline) {
+                    this.overlay = event.element;
+                    this.appendOverlay();
+                    if (this.autoZIndex) {
+                        if (this.touchUI)
+                            ZIndexUtils.set('modal', this.overlay, this.baseZIndex || this.config.zIndex.modal);
+                        else
+                            ZIndexUtils.set('overlay', this.overlay, this.baseZIndex || this.config.zIndex.overlay);
+                    }
+                    this.alignOverlay();
+                    this.onShow.emit(event);
+                }
+                break;
+            case 'void':
+                this.onOverlayHide();
+                this.onClose.emit(event);
+                break;
+        }
+    }
+    onOverlayAnimationDone(event) {
+        switch (event.toState) {
+            case 'visible':
+            case 'visibleTouchUI':
+                if (!this.inline) {
+                    this.bindDocumentClickListener();
+                    this.bindDocumentResizeListener();
+                    this.bindScrollListener();
+                }
+                break;
+            case 'void':
+                if (this.autoZIndex) {
+                    ZIndexUtils.clear(event.element);
+                }
+                break;
+        }
+    }
+    appendOverlay() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.overlay);
+            else
+                DomHandler.appendChild(this.overlay, this.appendTo);
+        }
+    }
+    restoreOverlayAppend() {
+        if (this.overlay && this.appendTo) {
+            this.el.nativeElement.appendChild(this.overlay);
+        }
+    }
+    alignOverlay() {
+        if (this.touchUI) {
+            this.enableModality(this.overlay);
+        }
+        else {
+            if (this.appendTo)
+                DomHandler.absolutePosition(this.overlay, this.inputfieldViewChild.nativeElement);
+            else
+                DomHandler.relativePosition(this.overlay, this.inputfieldViewChild.nativeElement);
+        }
+    }
+    enableModality(element) {
+        if (!this.mask) {
+            this.mask = document.createElement('div');
+            this.mask.style.zIndex = String(parseInt(element.style.zIndex) - 1);
+            let maskStyleClass = 'p-component-overlay p-datepicker-mask p-datepicker-mask-scrollblocker p-component-overlay p-component-overlay-enter';
+            DomHandler.addMultipleClasses(this.mask, maskStyleClass);
+            this.maskClickListener = this.renderer.listen(this.mask, 'click', (event) => {
+                this.disableModality();
+            });
+            document.body.appendChild(this.mask);
+            DomHandler.addClass(document.body, 'p-overflow-hidden');
+        }
+    }
+    disableModality() {
+        if (this.mask) {
+            DomHandler.addClass(this.mask, 'p-component-overlay-leave');
+            this.animationEndListener = this.destroyMask.bind(this);
+            this.mask.addEventListener('animationend', this.animationEndListener);
+        }
+    }
+    destroyMask() {
+        document.body.removeChild(this.mask);
+        let bodyChildren = document.body.children;
+        let hasBlockerMasks;
+        for (let i = 0; i < bodyChildren.length; i++) {
+            let bodyChild = bodyChildren[i];
+            if (DomHandler.hasClass(bodyChild, 'p-datepicker-mask-scrollblocker')) {
+                hasBlockerMasks = true;
+                break;
+            }
+        }
+        if (!hasBlockerMasks) {
+            DomHandler.removeClass(document.body, 'p-overflow-hidden');
+        }
+        this.unbindAnimationEndListener();
+        this.unbindMaskClickListener();
+        this.mask = null;
+    }
+    unbindMaskClickListener() {
+        if (this.maskClickListener) {
+            this.maskClickListener();
+            this.maskClickListener = null;
+        }
+    }
+    unbindAnimationEndListener() {
+        if (this.animationEndListener && this.mask) {
+            this.mask.removeEventListener('animationend', this.animationEndListener);
+            this.animationEndListener = null;
+        }
+    }
+    writeValue(value) {
+        this.value = value;
+        if (this.value && typeof this.value === 'string') {
+            this.value = this.parseValueFromString(this.value);
+        }
+        this.updateInputfield();
+        this.updateUI();
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    getDateFormat() {
+        return this.dateFormat || this.getTranslation('dateFormat');
+    }
+    // Ported from jquery-ui datepicker formatDate
+    formatDate(date, format) {
+        if (!date) {
+            return '';
+        }
+        let iFormat;
+        const lookAhead = (match) => {
+            const matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+            if (matches) {
+                iFormat++;
+            }
+            return matches;
+        }, formatNumber = (match, value, len) => {
+            let num = '' + value;
+            if (lookAhead(match)) {
+                while (num.length < len) {
+                    num = '0' + num;
+                }
+            }
+            return num;
+        }, formatName = (match, value, shortNames, longNames) => {
+            return (lookAhead(match) ? longNames[value] : shortNames[value]);
+        };
+        let output = '';
+        let literal = false;
+        if (date) {
+            for (iFormat = 0; iFormat < format.length; iFormat++) {
+                if (literal) {
+                    if (format.charAt(iFormat) === '\'' && !lookAhead('\'')) {
+                        literal = false;
+                    }
+                    else {
+                        output += format.charAt(iFormat);
+                    }
+                }
+                else {
+                    switch (format.charAt(iFormat)) {
+                        case 'd':
+                            output += formatNumber('d', date.getDate(), 2);
+                            break;
+                        case 'D':
+                            output += formatName('D', date.getDay(), this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));
+                            break;
+                        case 'o':
+                            output += formatNumber('o', Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() -
+                                new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+                            break;
+                        case 'm':
+                            output += formatNumber('m', date.getMonth() + 1, 2);
+                            break;
+                        case 'M':
+                            output += formatName('M', date.getMonth(), this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));
+                            break;
+                        case 'y':
+                            output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100);
+                            break;
+                        case '@':
+                            output += date.getTime();
+                            break;
+                        case '!':
+                            output += date.getTime() * 10000 + this.ticksTo1970;
+                            break;
+                        case '\'':
+                            if (lookAhead('\'')) {
+                                output += '\'';
+                            }
+                            else {
+                                literal = true;
+                            }
+                            break;
+                        default:
+                            output += format.charAt(iFormat);
+                    }
+                }
+            }
+        }
+        return output;
+    }
+    formatTime(date) {
+        if (!date) {
+            return '';
+        }
+        let output = '';
+        let hours = date.getHours();
+        let minutes = date.getMinutes();
+        let seconds = date.getSeconds();
+        if (this.hourFormat == '12' && hours > 11 && hours != 12) {
+            hours -= 12;
+        }
+        if (this.hourFormat == '12') {
+            output += hours === 0 ? 12 : (hours < 10) ? '0' + hours : hours;
+        }
+        else {
+            output += (hours < 10) ? '0' + hours : hours;
+        }
+        output += ':';
+        output += (minutes < 10) ? '0' + minutes : minutes;
+        if (this.showSeconds) {
+            output += ':';
+            output += (seconds < 10) ? '0' + seconds : seconds;
+        }
+        if (this.hourFormat == '12') {
+            output += date.getHours() > 11 ? ' PM' : ' AM';
+        }
+        return output;
+    }
+    parseTime(value) {
+        let tokens = value.split(':');
+        let validTokenLength = this.showSeconds ? 3 : 2;
+        if (tokens.length !== validTokenLength) {
+            throw "Invalid time";
+        }
+        let h = parseInt(tokens[0]);
+        let m = parseInt(tokens[1]);
+        let s = this.showSeconds ? parseInt(tokens[2]) : null;
+        if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (this.hourFormat == '12' && h > 12) || (this.showSeconds && (isNaN(s) || s > 59))) {
+            throw "Invalid time";
+        }
+        else {
+            if (this.hourFormat == '12') {
+                if (h !== 12 && this.pm) {
+                    h += 12;
+                }
+                else if (!this.pm && h === 12) {
+                    h -= 12;
+                }
+            }
+            return { hour: h, minute: m, second: s };
+        }
+    }
+    // Ported from jquery-ui datepicker parseDate
+    parseDate(value, format) {
+        if (format == null || value == null) {
+            throw "Invalid arguments";
+        }
+        value = (typeof value === "object" ? value.toString() : value + "");
+        if (value === "") {
+            return null;
+        }
+        let iFormat, dim, extra, iValue = 0, shortYearCutoff = (typeof this.shortYearCutoff !== "string" ? this.shortYearCutoff : new Date().getFullYear() % 100 + parseInt(this.shortYearCutoff, 10)), year = -1, month = -1, day = -1, doy = -1, literal = false, date, lookAhead = (match) => {
+            let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+            if (matches) {
+                iFormat++;
+            }
+            return matches;
+        }, getNumber = (match) => {
+            let isDoubled = lookAhead(match), size = (match === "@" ? 14 : (match === "!" ? 20 :
+                (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))), minSize = (match === "y" ? size : 1), digits = new RegExp("^\\d{" + minSize + "," + size + "}"), num = value.substring(iValue).match(digits);
+            if (!num) {
+                throw "Missing number at position " + iValue;
+            }
+            iValue += num[0].length;
+            return parseInt(num[0], 10);
+        }, getName = (match, shortNames, longNames) => {
+            let index = -1;
+            let arr = lookAhead(match) ? longNames : shortNames;
+            let names = [];
+            for (let i = 0; i < arr.length; i++) {
+                names.push([i, arr[i]]);
+            }
+            names.sort((a, b) => {
+                return -(a[1].length - b[1].length);
+            });
+            for (let i = 0; i < names.length; i++) {
+                let name = names[i][1];
+                if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+                    index = names[i][0];
+                    iValue += name.length;
+                    break;
+                }
+            }
+            if (index !== -1) {
+                return index + 1;
+            }
+            else {
+                throw "Unknown name at position " + iValue;
+            }
+        }, checkLiteral = () => {
+            if (value.charAt(iValue) !== format.charAt(iFormat)) {
+                throw "Unexpected literal at position " + iValue;
+            }
+            iValue++;
+        };
+        if (this.view === 'month') {
+            day = 1;
+        }
+        for (iFormat = 0; iFormat < format.length; iFormat++) {
+            if (literal) {
+                if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+                    literal = false;
+                }
+                else {
+                    checkLiteral();
+                }
+            }
+            else {
+                switch (format.charAt(iFormat)) {
+                    case "d":
+                        day = getNumber("d");
+                        break;
+                    case "D":
+                        getName("D", this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));
+                        break;
+                    case "o":
+                        doy = getNumber("o");
+                        break;
+                    case "m":
+                        month = getNumber("m");
+                        break;
+                    case "M":
+                        month = getName("M", this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));
+                        break;
+                    case "y":
+                        year = getNumber("y");
+                        break;
+                    case "@":
+                        date = new Date(getNumber("@"));
+                        year = date.getFullYear();
+                        month = date.getMonth() + 1;
+                        day = date.getDate();
+                        break;
+                    case "!":
+                        date = new Date((getNumber("!") - this.ticksTo1970) / 10000);
+                        year = date.getFullYear();
+                        month = date.getMonth() + 1;
+                        day = date.getDate();
+                        break;
+                    case "'":
+                        if (lookAhead("'")) {
+                            checkLiteral();
+                        }
+                        else {
+                            literal = true;
+                        }
+                        break;
+                    default:
+                        checkLiteral();
+                }
+            }
+        }
+        if (iValue < value.length) {
+            extra = value.substr(iValue);
+            if (!/^\s+/.test(extra)) {
+                throw "Extra/unparsed characters found in date: " + extra;
+            }
+        }
+        if (year === -1) {
+            year = new Date().getFullYear();
+        }
+        else if (year < 100) {
+            year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+                (year <= shortYearCutoff ? 0 : -100);
+        }
+        if (doy > -1) {
+            month = 1;
+            day = doy;
+            do {
+                dim = this.getDaysCountInMonth(year, month - 1);
+                if (day <= dim) {
+                    break;
+                }
+                month++;
+                day -= dim;
+            } while (true);
+        }
+        date = this.daylightSavingAdjust(new Date(year, month - 1, day));
+        if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+            throw "Invalid date"; // E.g. 31/02/00
+        }
+        return date;
+    }
+    daylightSavingAdjust(date) {
+        if (!date) {
+            return null;
+        }
+        date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+        return date;
+    }
+    updateFilledState() {
+        this.filled = this.inputFieldValue && this.inputFieldValue != '';
+    }
+    onTodayButtonClick(event) {
+        let date = new Date();
+        let dateMeta = { day: date.getDate(), month: date.getMonth(), year: date.getFullYear(), otherMonth: date.getMonth() !== this.currentMonth || date.getFullYear() !== this.currentYear, today: true, selectable: true };
+        this.onDateSelect(event, dateMeta);
+        this.onTodayClick.emit(event);
+    }
+    onClearButtonClick(event) {
+        this.updateModel(null);
+        this.updateInputfield();
+        this.hideOverlay();
+        this.onClearClick.emit(event);
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            this.zone.runOutsideAngular(() => {
+                const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+                this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {
+                    if (this.isOutsideClicked(event) && this.overlayVisible) {
+                        this.zone.run(() => {
+                            this.hideOverlay();
+                            this.onClickOutside.emit(event);
+                            this.cd.markForCheck();
+                        });
+                    }
+                });
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    bindDocumentResizeListener() {
+        if (!this.documentResizeListener && !this.touchUI) {
+            this.documentResizeListener = this.onWindowResize.bind(this);
+            window.addEventListener('resize', this.documentResizeListener);
+        }
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {
+                if (this.overlayVisible) {
+                    this.hideOverlay();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    isOutsideClicked(event) {
+        return !(this.el.nativeElement.isSameNode(event.target) || this.isNavIconClicked(event) ||
+            this.el.nativeElement.contains(event.target) || (this.overlay && this.overlay.contains(event.target)));
+    }
+    isNavIconClicked(event) {
+        return (DomHandler.hasClass(event.target, 'p-datepicker-prev') || DomHandler.hasClass(event.target, 'p-datepicker-prev-icon')
+            || DomHandler.hasClass(event.target, 'p-datepicker-next') || DomHandler.hasClass(event.target, 'p-datepicker-next-icon'));
+    }
+    onWindowResize() {
+        if (this.overlayVisible && !DomHandler.isAndroid()) {
+            this.hideOverlay();
+        }
+    }
+    onOverlayHide() {
+        if (this.mask) {
+            this.destroyMask();
+        }
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.overlay = null;
+    }
+    ngOnDestroy() {
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        if (this.translationSubscription) {
+            this.translationSubscription.unsubscribe();
+        }
+        if (this.overlay && this.autoZIndex) {
+            ZIndexUtils.clear(this.overlay);
+        }
+        this.clearTimePickerTimer();
+        this.restoreOverlayAppend();
+        this.onOverlayHide();
+    }
+}
+Calendar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Calendar, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.PrimeNGConfig }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+Calendar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Calendar, selector: "p-calendar", inputs: { style: "style", styleClass: "styleClass", inputStyle: "inputStyle", inputId: "inputId", name: "name", inputStyleClass: "inputStyleClass", placeholder: "placeholder", ariaLabelledBy: "ariaLabelledBy", iconAriaLabel: "iconAriaLabel", disabled: "disabled", dateFormat: "dateFormat", multipleSeparator: "multipleSeparator", rangeSeparator: "rangeSeparator", inline: "inline", showOtherMonths: "showOtherMonths", selectOtherMonths: "selectOtherMonths", showIcon: "showIcon", icon: "icon", appendTo: "appendTo", readonlyInput: "readonlyInput", shortYearCutoff: "shortYearCutoff", monthNavigator: "monthNavigator", yearNavigator: "yearNavigator", hourFormat: "hourFormat", timeOnly: "timeOnly", stepHour: "stepHour", stepMinute: "stepMinute", stepSecond: "stepSecond", showSeconds: "showSeconds", required: "required", showOnFocus: "showOnFocus", showWeek: "showWeek", dataType: "dataType", selectionMode: "selectionMode", maxDateCount: "maxDateCount", showButtonBar: "showButtonBar", todayButtonStyleClass: "todayButtonStyleClass", clearButtonStyleClass: "clearButtonStyleClass", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", panelStyleClass: "panelStyleClass", panelStyle: "panelStyle", keepInvalid: "keepInvalid", hideOnDateTimeSelect: "hideOnDateTimeSelect", numberOfMonths: "numberOfMonths", view: "view", touchUI: "touchUI", timeSeparator: "timeSeparator", focusTrap: "focusTrap", firstDayOfWeek: "firstDayOfWeek", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", tabindex: "tabindex", defaultDate: "defaultDate", minDate: "minDate", maxDate: "maxDate", disabledDates: "disabledDates", disabledDays: "disabledDays", yearRange: "yearRange", showTime: "showTime", locale: "locale" }, outputs: { onFocus: "onFocus", onBlur: "onBlur", onClose: "onClose", onSelect: "onSelect", onInput: "onInput", onTodayClick: "onTodayClick", onClearClick: "onClearClick", onMonthChange: "onMonthChange", onYearChange: "onYearChange", onClickOutside: "onClickOutside", onShow: "onShow" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "focus" }, classAttribute: "p-element p-inputwrapper" }, providers: [CALENDAR_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "inputfieldViewChild", first: true, predicate: ["inputfield"], descendants: true }, { propertyName: "content", first: true, predicate: ["contentWrapper"], descendants: true }], ngImport: i0, template: `
+        <span #container [ngClass]="{'p-calendar':true, 'p-calendar-w-btn': showIcon, 'p-calendar-timeonly': timeOnly, 'p-calendar-disabled':disabled, 'p-focus': focus}" [ngStyle]="style" [class]="styleClass">
+            <ng-template [ngIf]="!inline">
+                <input #inputfield type="text" [attr.id]="inputId" [attr.name]="name" [attr.required]="required" [attr.aria-required]="required" [value]="inputFieldValue" (focus)="onInputFocus($event)" (keydown)="onInputKeydown($event)" (click)="onInputClick()" (blur)="onInputBlur($event)"
+                    [readonly]="readonlyInput" (input)="onUserInput($event)" [ngStyle]="inputStyle" [class]="inputStyleClass" [placeholder]="placeholder||''" [disabled]="disabled" [attr.tabindex]="tabindex" [attr.inputmode]="touchUI ? 'off' : null"
+                    [ngClass]="'p-inputtext p-component'" autocomplete="off" [attr.aria-labelledby]="ariaLabelledBy"
+                    ><button type="button" [attr.aria-label]="iconAriaLabel" [icon]="icon" pButton pRipple *ngIf="showIcon" (click)="onButtonClick($event,inputfield)" class="p-datepicker-trigger"
+                    [disabled]="disabled" tabindex="0"></button>
+            </ng-template>
+            <div #contentWrapper [class]="panelStyleClass" [ngStyle]="panelStyle" [ngClass]="{'p-datepicker p-component': true, 'p-datepicker-inline':inline,
+                'p-disabled':disabled,'p-datepicker-timeonly':timeOnly,'p-datepicker-multiple-month': this.numberOfMonths > 1, 'p-datepicker-monthpicker': (view === 'month'), 'p-datepicker-touch-ui': touchUI}"
+                [@overlayAnimation]="touchUI ? {value: 'visibleTouchUI', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}:
+                                            {value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+                                            [@.disabled]="inline === true" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationDone($event)" (click)="onOverlayClick($event)" *ngIf="inline || overlayVisible">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <ng-container *ngIf="!timeOnly">
+                    <div class="p-datepicker-group-container">
+                        <div class="p-datepicker-group" *ngFor="let month of months; let i = index;">
+                            <div class="p-datepicker-header">
+                                <button (keydown)="onContainerButtonKeydown($event)" class="p-datepicker-prev p-link" (click)="onPrevButtonClick($event)" *ngIf="i === 0" type="button" pRipple>
+                                    <span class="p-datepicker-prev-icon pi pi-chevron-left"></span>
+                                </button>
+                                <div class="p-datepicker-title">
+                                    <span class="p-datepicker-month" *ngIf="!monthNavigator && (view !== 'month')">{{getTranslation('monthNames')[month.month]}}</span>
+                                    <select tabindex="0" class="p-datepicker-month" *ngIf="monthNavigator && (view !== 'month') && numberOfMonths === 1" (change)="onMonthDropdownChange($event.target.value)">
+                                        <option [value]="i" *ngFor="let monthName of getTranslation('monthNames');let i = index" [selected]="i === month.month">{{monthName}}</option>
+                                    </select>
+                                    <select tabindex="0" class="p-datepicker-year" *ngIf="yearNavigator && numberOfMonths === 1" (change)="onYearDropdownChange($event.target.value)">
+                                        <option [value]="year" *ngFor="let year of yearOptions" [selected]="year === currentYear">{{year}}</option>
+                                    </select>
+                                    <span class="p-datepicker-year" *ngIf="!yearNavigator">{{view === 'month' ? currentYear : month.year}}</span>
+                                </div>
+                                <button (keydown)="onContainerButtonKeydown($event)" class="p-datepicker-next p-link" (click)="onNextButtonClick($event)" *ngIf="numberOfMonths === 1 ? true : (i === numberOfMonths -1)" type="button" pRipple>
+                                    <span class="p-datepicker-next-icon pi pi-chevron-right"></span>
+                                </button>
+                            </div>
+                            <div class="p-datepicker-calendar-container" *ngIf="view ==='date'">
+                                <table class="p-datepicker-calendar">
+                                    <thead>
+                                        <tr>
+                                            <th *ngIf="showWeek" class="p-datepicker-weekheader p-disabled">
+                                                <span>{{getTranslation('weekHeader')}}</span>
+                                            </th>
+                                            <th scope="col" *ngFor="let weekDay of weekDays;let begin = first; let end = last">
+                                                <span>{{weekDay}}</span>
+                                            </th>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                        <tr *ngFor="let week of month.dates; let j = index;">
+                                            <td *ngIf="showWeek" class="p-datepicker-weeknumber">
+                                                <span class="p-disabled">
+                                                    {{month.weekNumbers[j]}}
+                                                </span>
+                                            </td>
+                                            <td *ngFor="let date of week" [ngClass]="{'p-datepicker-other-month': date.otherMonth,'p-datepicker-today':date.today}">
+                                                <ng-container *ngIf="date.otherMonth ? showOtherMonths : true">
+                                                    <span [ngClass]="{'p-highlight':isSelected(date), 'p-disabled': !date.selectable}"
+                                                        (click)="onDateSelect($event,date)" draggable="false" (keydown)="onDateCellKeydown($event,date,i)" pRipple>
+                                                        <ng-container *ngIf="!dateTemplate">{{date.day}}</ng-container>
+                                                        <ng-container *ngTemplateOutlet="dateTemplate; context: {$implicit: date}"></ng-container>
+                                                    </span>
+                                                </ng-container>
+                                            </td>
+                                        </tr>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="p-monthpicker" *ngIf="view === 'month'">
+                        <span *ngFor="let m of monthPickerValues; let i = index" (click)="onMonthSelect($event, i)" (keydown)="onMonthCellKeydown($event,i)" class="p-monthpicker-month" [ngClass]="{'p-highlight': isMonthSelected(i), 'p-disabled':!isSelectable(1, i, this.currentYear, false)}" pRipple>
+                            {{m}}
+                        </span>
+                    </div>
+                </ng-container>
+                <div class="p-timepicker" *ngIf="showTime||timeOnly">
+                    <div class="p-hour-picker">
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="incrementHour($event)" (mousedown)="onTimePickerElementMouseDown($event, 0, 1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-up"></span>
+                        </button>
+                        <span><ng-container *ngIf="currentHour < 10">0</ng-container>{{currentHour}}</span>
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="decrementHour($event)" (mousedown)="onTimePickerElementMouseDown($event, 0, -1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-down"></span>
+                        </button>
+                    </div>
+                    <div class="p-separator">
+                        <span>{{timeSeparator}}</span>
+                    </div>
+                    <div class="p-minute-picker">
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="incrementMinute($event)" (mousedown)="onTimePickerElementMouseDown($event, 1, 1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-up"></span>
+                        </button>
+                        <span><ng-container *ngIf="currentMinute < 10">0</ng-container>{{currentMinute}}</span>
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="decrementMinute($event)" (mousedown)="onTimePickerElementMouseDown($event, 1, -1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-down"></span>
+                        </button>
+                    </div>
+                    <div class="p-separator" *ngIf="showSeconds">
+                        <span>{{timeSeparator}}</span>
+                    </div>
+                    <div class="p-second-picker" *ngIf="showSeconds">
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="incrementSecond($event)" (mousedown)="onTimePickerElementMouseDown($event, 2, 1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-up"></span>
+                        </button>
+                        <span><ng-container *ngIf="currentSecond < 10">0</ng-container>{{currentSecond}}</span>
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="decrementSecond($event)" (mousedown)="onTimePickerElementMouseDown($event, 2, -1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-down"></span>
+                        </button>
+                    </div>
+                    <div class="p-ampm-picker" *ngIf="hourFormat=='12'">
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (click)="toggleAMPM($event)" (keydown.enter)="toggleAMPM($event)" pRipple>
+                            <span class="pi pi-chevron-up"></span>
+                        </button>
+                        <span>{{pm ? 'PM' : 'AM'}}</span>
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (click)="toggleAMPM($event)" (keydown.enter)="toggleAMPM($event)" pRipple>
+                            <span class="pi pi-chevron-down"></span>
+                        </button>
+                    </div>
+                </div>
+                <div class="p-datepicker-buttonbar" *ngIf="showButtonBar">
+                    <button type="button" [label]="getTranslation('today')" (keydown)="onContainerButtonKeydown($event)" (click)="onTodayButtonClick($event)" pButton pRipple [ngClass]="[todayButtonStyleClass]"></button>
+                    <button type="button" [label]="getTranslation('clear')" (keydown)="onContainerButtonKeydown($event)" (click)="onClearButtonClick($event)" pButton pRipple [ngClass]="[clearButtonStyleClass]"></button>
+                </div>
+                <ng-content select="p-footer"></ng-content>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </span>
+    `, isInline: true, styles: [".p-calendar{position:relative;display:inline-flex}.p-calendar .p-inputtext{flex:1 1 auto;width:1%}.p-calendar-w-btn .p-inputtext{border-top-right-radius:0;border-bottom-right-radius:0}.p-calendar-w-btn .p-datepicker-trigger{border-top-left-radius:0;border-bottom-left-radius:0}.p-fluid .p-calendar{display:flex}.p-fluid .p-calendar .p-inputtext{width:1%}.p-calendar .p-datepicker{min-width:100%}.p-datepicker{width:auto;position:absolute;top:0;left:0}.p-datepicker-inline{position:static}.p-datepicker-header{display:flex;align-items:center;justify-content:space-between}.p-datepicker-header .p-datepicker-title{margin:0 auto}.p-datepicker-prev,.p-datepicker-next{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-datepicker-multiple-month .p-datepicker-group-container{display:flex}.p-datepicker table{width:100%;border-collapse:collapse}.p-datepicker td>span{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:0 auto;overflow:hidden;position:relative}.p-monthpicker-month{width:33.3%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-datepicker-buttonbar{display:flex;justify-content:space-between;align-items:center}.p-timepicker{display:flex;justify-content:center;align-items:center}.p-timepicker button{display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-timepicker>div{display:flex;align-items:center;flex-direction:column}.p-datepicker-touch-ui,.p-calendar .p-datepicker-touch-ui{position:fixed;top:50%;left:50%;min-width:80vw;transform:translate(-50%,-50%)}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i4.Ripple, selector: "[pRipple]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [
+        trigger('overlayAnimation', [
+            state('visibleTouchUI', style({
+                transform: 'translate(-50%,-50%)',
+                opacity: 1
+            })),
+            transition('void => visible', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}', style({ opacity: 1, transform: '*' }))
+            ]),
+            transition('visible => void', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ]),
+            transition('void => visibleTouchUI', [
+                style({ opacity: 0, transform: 'translate3d(-50%, -40%, 0) scale(0.9)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition('visibleTouchUI => void', [
+                animate(('{{hideTransitionParams}}'), style({
+                    opacity: 0,
+                    transform: 'translate3d(-50%, -40%, 0) scale(0.9)'
+                }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Calendar, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-calendar', template: `
+        <span #container [ngClass]="{'p-calendar':true, 'p-calendar-w-btn': showIcon, 'p-calendar-timeonly': timeOnly, 'p-calendar-disabled':disabled, 'p-focus': focus}" [ngStyle]="style" [class]="styleClass">
+            <ng-template [ngIf]="!inline">
+                <input #inputfield type="text" [attr.id]="inputId" [attr.name]="name" [attr.required]="required" [attr.aria-required]="required" [value]="inputFieldValue" (focus)="onInputFocus($event)" (keydown)="onInputKeydown($event)" (click)="onInputClick()" (blur)="onInputBlur($event)"
+                    [readonly]="readonlyInput" (input)="onUserInput($event)" [ngStyle]="inputStyle" [class]="inputStyleClass" [placeholder]="placeholder||''" [disabled]="disabled" [attr.tabindex]="tabindex" [attr.inputmode]="touchUI ? 'off' : null"
+                    [ngClass]="'p-inputtext p-component'" autocomplete="off" [attr.aria-labelledby]="ariaLabelledBy"
+                    ><button type="button" [attr.aria-label]="iconAriaLabel" [icon]="icon" pButton pRipple *ngIf="showIcon" (click)="onButtonClick($event,inputfield)" class="p-datepicker-trigger"
+                    [disabled]="disabled" tabindex="0"></button>
+            </ng-template>
+            <div #contentWrapper [class]="panelStyleClass" [ngStyle]="panelStyle" [ngClass]="{'p-datepicker p-component': true, 'p-datepicker-inline':inline,
+                'p-disabled':disabled,'p-datepicker-timeonly':timeOnly,'p-datepicker-multiple-month': this.numberOfMonths > 1, 'p-datepicker-monthpicker': (view === 'month'), 'p-datepicker-touch-ui': touchUI}"
+                [@overlayAnimation]="touchUI ? {value: 'visibleTouchUI', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}:
+                                            {value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+                                            [@.disabled]="inline === true" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationDone($event)" (click)="onOverlayClick($event)" *ngIf="inline || overlayVisible">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <ng-container *ngIf="!timeOnly">
+                    <div class="p-datepicker-group-container">
+                        <div class="p-datepicker-group" *ngFor="let month of months; let i = index;">
+                            <div class="p-datepicker-header">
+                                <button (keydown)="onContainerButtonKeydown($event)" class="p-datepicker-prev p-link" (click)="onPrevButtonClick($event)" *ngIf="i === 0" type="button" pRipple>
+                                    <span class="p-datepicker-prev-icon pi pi-chevron-left"></span>
+                                </button>
+                                <div class="p-datepicker-title">
+                                    <span class="p-datepicker-month" *ngIf="!monthNavigator && (view !== 'month')">{{getTranslation('monthNames')[month.month]}}</span>
+                                    <select tabindex="0" class="p-datepicker-month" *ngIf="monthNavigator && (view !== 'month') && numberOfMonths === 1" (change)="onMonthDropdownChange($event.target.value)">
+                                        <option [value]="i" *ngFor="let monthName of getTranslation('monthNames');let i = index" [selected]="i === month.month">{{monthName}}</option>
+                                    </select>
+                                    <select tabindex="0" class="p-datepicker-year" *ngIf="yearNavigator && numberOfMonths === 1" (change)="onYearDropdownChange($event.target.value)">
+                                        <option [value]="year" *ngFor="let year of yearOptions" [selected]="year === currentYear">{{year}}</option>
+                                    </select>
+                                    <span class="p-datepicker-year" *ngIf="!yearNavigator">{{view === 'month' ? currentYear : month.year}}</span>
+                                </div>
+                                <button (keydown)="onContainerButtonKeydown($event)" class="p-datepicker-next p-link" (click)="onNextButtonClick($event)" *ngIf="numberOfMonths === 1 ? true : (i === numberOfMonths -1)" type="button" pRipple>
+                                    <span class="p-datepicker-next-icon pi pi-chevron-right"></span>
+                                </button>
+                            </div>
+                            <div class="p-datepicker-calendar-container" *ngIf="view ==='date'">
+                                <table class="p-datepicker-calendar">
+                                    <thead>
+                                        <tr>
+                                            <th *ngIf="showWeek" class="p-datepicker-weekheader p-disabled">
+                                                <span>{{getTranslation('weekHeader')}}</span>
+                                            </th>
+                                            <th scope="col" *ngFor="let weekDay of weekDays;let begin = first; let end = last">
+                                                <span>{{weekDay}}</span>
+                                            </th>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                        <tr *ngFor="let week of month.dates; let j = index;">
+                                            <td *ngIf="showWeek" class="p-datepicker-weeknumber">
+                                                <span class="p-disabled">
+                                                    {{month.weekNumbers[j]}}
+                                                </span>
+                                            </td>
+                                            <td *ngFor="let date of week" [ngClass]="{'p-datepicker-other-month': date.otherMonth,'p-datepicker-today':date.today}">
+                                                <ng-container *ngIf="date.otherMonth ? showOtherMonths : true">
+                                                    <span [ngClass]="{'p-highlight':isSelected(date), 'p-disabled': !date.selectable}"
+                                                        (click)="onDateSelect($event,date)" draggable="false" (keydown)="onDateCellKeydown($event,date,i)" pRipple>
+                                                        <ng-container *ngIf="!dateTemplate">{{date.day}}</ng-container>
+                                                        <ng-container *ngTemplateOutlet="dateTemplate; context: {$implicit: date}"></ng-container>
+                                                    </span>
+                                                </ng-container>
+                                            </td>
+                                        </tr>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="p-monthpicker" *ngIf="view === 'month'">
+                        <span *ngFor="let m of monthPickerValues; let i = index" (click)="onMonthSelect($event, i)" (keydown)="onMonthCellKeydown($event,i)" class="p-monthpicker-month" [ngClass]="{'p-highlight': isMonthSelected(i), 'p-disabled':!isSelectable(1, i, this.currentYear, false)}" pRipple>
+                            {{m}}
+                        </span>
+                    </div>
+                </ng-container>
+                <div class="p-timepicker" *ngIf="showTime||timeOnly">
+                    <div class="p-hour-picker">
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="incrementHour($event)" (mousedown)="onTimePickerElementMouseDown($event, 0, 1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-up"></span>
+                        </button>
+                        <span><ng-container *ngIf="currentHour < 10">0</ng-container>{{currentHour}}</span>
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="decrementHour($event)" (mousedown)="onTimePickerElementMouseDown($event, 0, -1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-down"></span>
+                        </button>
+                    </div>
+                    <div class="p-separator">
+                        <span>{{timeSeparator}}</span>
+                    </div>
+                    <div class="p-minute-picker">
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="incrementMinute($event)" (mousedown)="onTimePickerElementMouseDown($event, 1, 1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-up"></span>
+                        </button>
+                        <span><ng-container *ngIf="currentMinute < 10">0</ng-container>{{currentMinute}}</span>
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="decrementMinute($event)" (mousedown)="onTimePickerElementMouseDown($event, 1, -1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-down"></span>
+                        </button>
+                    </div>
+                    <div class="p-separator" *ngIf="showSeconds">
+                        <span>{{timeSeparator}}</span>
+                    </div>
+                    <div class="p-second-picker" *ngIf="showSeconds">
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="incrementSecond($event)" (mousedown)="onTimePickerElementMouseDown($event, 2, 1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-up"></span>
+                        </button>
+                        <span><ng-container *ngIf="currentSecond < 10">0</ng-container>{{currentSecond}}</span>
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (keydown.enter)="decrementSecond($event)" (mousedown)="onTimePickerElementMouseDown($event, 2, -1)" (mouseup)="onTimePickerElementMouseUp($event)" (mouseleave)="onTimePickerElementMouseLeave()" pRipple>
+                            <span class="pi pi-chevron-down"></span>
+                        </button>
+                    </div>
+                    <div class="p-ampm-picker" *ngIf="hourFormat=='12'">
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (click)="toggleAMPM($event)" (keydown.enter)="toggleAMPM($event)" pRipple>
+                            <span class="pi pi-chevron-up"></span>
+                        </button>
+                        <span>{{pm ? 'PM' : 'AM'}}</span>
+                        <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (click)="toggleAMPM($event)" (keydown.enter)="toggleAMPM($event)" pRipple>
+                            <span class="pi pi-chevron-down"></span>
+                        </button>
+                    </div>
+                </div>
+                <div class="p-datepicker-buttonbar" *ngIf="showButtonBar">
+                    <button type="button" [label]="getTranslation('today')" (keydown)="onContainerButtonKeydown($event)" (click)="onTodayButtonClick($event)" pButton pRipple [ngClass]="[todayButtonStyleClass]"></button>
+                    <button type="button" [label]="getTranslation('clear')" (keydown)="onContainerButtonKeydown($event)" (click)="onClearButtonClick($event)" pButton pRipple [ngClass]="[clearButtonStyleClass]"></button>
+                </div>
+                <ng-content select="p-footer"></ng-content>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </span>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            state('visibleTouchUI', style({
+                                transform: 'translate(-50%,-50%)',
+                                opacity: 1
+                            })),
+                            transition('void => visible', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}', style({ opacity: 1, transform: '*' }))
+                            ]),
+                            transition('visible => void', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ]),
+                            transition('void => visibleTouchUI', [
+                                style({ opacity: 0, transform: 'translate3d(-50%, -40%, 0) scale(0.9)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition('visibleTouchUI => void', [
+                                animate(('{{hideTransitionParams}}'), style({
+                                    opacity: 0,
+                                    transform: 'translate3d(-50%, -40%, 0) scale(0.9)'
+                                }))
+                            ])
+                        ])
+                    ], host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': 'filled',
+                        '[class.p-inputwrapper-focus]': 'focus'
+                    }, providers: [CALENDAR_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".p-calendar{position:relative;display:inline-flex}.p-calendar .p-inputtext{flex:1 1 auto;width:1%}.p-calendar-w-btn .p-inputtext{border-top-right-radius:0;border-bottom-right-radius:0}.p-calendar-w-btn .p-datepicker-trigger{border-top-left-radius:0;border-bottom-left-radius:0}.p-fluid .p-calendar{display:flex}.p-fluid .p-calendar .p-inputtext{width:1%}.p-calendar .p-datepicker{min-width:100%}.p-datepicker{width:auto;position:absolute;top:0;left:0}.p-datepicker-inline{position:static}.p-datepicker-header{display:flex;align-items:center;justify-content:space-between}.p-datepicker-header .p-datepicker-title{margin:0 auto}.p-datepicker-prev,.p-datepicker-next{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-datepicker-multiple-month .p-datepicker-group-container{display:flex}.p-datepicker table{width:100%;border-collapse:collapse}.p-datepicker td>span{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:0 auto;overflow:hidden;position:relative}.p-monthpicker-month{width:33.3%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-datepicker-buttonbar{display:flex;justify-content:space-between;align-items:center}.p-timepicker{display:flex;justify-content:center;align-items:center}.p-timepicker button{display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-timepicker>div{display:flex;align-items:center;flex-direction:column}.p-datepicker-touch-ui,.p-calendar .p-datepicker-touch-ui{position:fixed;top:50%;left:50%;min-width:80vw;transform:translate(-50%,-50%)}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.PrimeNGConfig }, { type: i1.OverlayService }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], inputStyle: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], inputStyleClass: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], iconAriaLabel: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], dateFormat: [{
+                type: Input
+            }], multipleSeparator: [{
+                type: Input
+            }], rangeSeparator: [{
+                type: Input
+            }], inline: [{
+                type: Input
+            }], showOtherMonths: [{
+                type: Input
+            }], selectOtherMonths: [{
+                type: Input
+            }], showIcon: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], readonlyInput: [{
+                type: Input
+            }], shortYearCutoff: [{
+                type: Input
+            }], monthNavigator: [{
+                type: Input
+            }], yearNavigator: [{
+                type: Input
+            }], hourFormat: [{
+                type: Input
+            }], timeOnly: [{
+                type: Input
+            }], stepHour: [{
+                type: Input
+            }], stepMinute: [{
+                type: Input
+            }], stepSecond: [{
+                type: Input
+            }], showSeconds: [{
+                type: Input
+            }], required: [{
+                type: Input
+            }], showOnFocus: [{
+                type: Input
+            }], showWeek: [{
+                type: Input
+            }], dataType: [{
+                type: Input
+            }], selectionMode: [{
+                type: Input
+            }], maxDateCount: [{
+                type: Input
+            }], showButtonBar: [{
+                type: Input
+            }], todayButtonStyleClass: [{
+                type: Input
+            }], clearButtonStyleClass: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], panelStyleClass: [{
+                type: Input
+            }], panelStyle: [{
+                type: Input
+            }], keepInvalid: [{
+                type: Input
+            }], hideOnDateTimeSelect: [{
+                type: Input
+            }], numberOfMonths: [{
+                type: Input
+            }], view: [{
+                type: Input
+            }], touchUI: [{
+                type: Input
+            }], timeSeparator: [{
+                type: Input
+            }], focusTrap: [{
+                type: Input
+            }], firstDayOfWeek: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], onClose: [{
+                type: Output
+            }], onSelect: [{
+                type: Output
+            }], onInput: [{
+                type: Output
+            }], onTodayClick: [{
+                type: Output
+            }], onClearClick: [{
+                type: Output
+            }], onMonthChange: [{
+                type: Output
+            }], onYearChange: [{
+                type: Output
+            }], onClickOutside: [{
+                type: Output
+            }], onShow: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], tabindex: [{
+                type: Input
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container', { static: false }]
+            }], inputfieldViewChild: [{
+                type: ViewChild,
+                args: ['inputfield', { static: false }]
+            }], content: [{
+                type: ViewChild,
+                args: ['contentWrapper', { static: false }]
+            }], defaultDate: [{
+                type: Input
+            }], minDate: [{
+                type: Input
+            }], maxDate: [{
+                type: Input
+            }], disabledDates: [{
+                type: Input
+            }], disabledDays: [{
+                type: Input
+            }], yearRange: [{
+                type: Input
+            }], showTime: [{
+                type: Input
+            }], locale: [{
+                type: Input
+            }] } });
+class CalendarModule {
+}
+CalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+CalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CalendarModule, declarations: [Calendar], imports: [CommonModule, ButtonModule, SharedModule, RippleModule], exports: [Calendar, ButtonModule, SharedModule] });
+CalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CalendarModule, imports: [[CommonModule, ButtonModule, SharedModule, RippleModule], ButtonModule, SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CalendarModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ButtonModule, SharedModule, RippleModule],
+                    exports: [Calendar, ButtonModule, SharedModule],
+                    declarations: [Calendar]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { CALENDAR_VALUE_ACCESSOR, Calendar, CalendarModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-calendar.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-calendar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-calendar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-calendar.mjs","sources":["../../src/app/components/calendar/calendar.ts","../../src/app/components/calendar/primeng-calendar.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,OnInit,Input,Output,EventEmitter,forwardRef,Renderer2,\n        ViewChild,ChangeDetectorRef,TemplateRef,ContentChildren,QueryList,NgZone,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {trigger,state,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {ButtonModule} from 'primeng/button';\nimport {RippleModule} from 'primeng/ripple';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {SharedModule,PrimeTemplate,PrimeNGConfig,TranslationKeys, OverlayService} from 'primeng/api';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {ZIndexUtils} from 'primeng/utils';\n\nexport const CALENDAR_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Calendar),\n    multi: true\n};\n\nexport interface LocaleSettings {\n    firstDayOfWeek?: number;\n    dayNames?: string[];\n    dayNamesShort?: string[];\n    dayNamesMin?: string[];\n    monthNames?: string[];\n    monthNamesShort?: string[];\n    today?: string;\n    clear?: string;\n    dateFormat?: string;\n    weekHeader?: string;\n}\n\n@Component({\n    selector: 'p-calendar',\n    template:  `\n        <span #container [ngClass]=\"{'p-calendar':true, 'p-calendar-w-btn': showIcon, 'p-calendar-timeonly': timeOnly, 'p-calendar-disabled':disabled, 'p-focus': focus}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <ng-template [ngIf]=\"!inline\">\n                <input #inputfield type=\"text\" [attr.id]=\"inputId\" [attr.name]=\"name\" [attr.required]=\"required\" [attr.aria-required]=\"required\" [value]=\"inputFieldValue\" (focus)=\"onInputFocus($event)\" (keydown)=\"onInputKeydown($event)\" (click)=\"onInputClick()\" (blur)=\"onInputBlur($event)\"\n                    [readonly]=\"readonlyInput\" (input)=\"onUserInput($event)\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [placeholder]=\"placeholder||''\" [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\" [attr.inputmode]=\"touchUI ? 'off' : null\"\n                    [ngClass]=\"'p-inputtext p-component'\" autocomplete=\"off\" [attr.aria-labelledby]=\"ariaLabelledBy\"\n                    ><button type=\"button\" [attr.aria-label]=\"iconAriaLabel\" [icon]=\"icon\" pButton pRipple *ngIf=\"showIcon\" (click)=\"onButtonClick($event,inputfield)\" class=\"p-datepicker-trigger\"\n                    [disabled]=\"disabled\" tabindex=\"0\"></button>\n            </ng-template>\n            <div #contentWrapper [class]=\"panelStyleClass\" [ngStyle]=\"panelStyle\" [ngClass]=\"{'p-datepicker p-component': true, 'p-datepicker-inline':inline,\n                'p-disabled':disabled,'p-datepicker-timeonly':timeOnly,'p-datepicker-multiple-month': this.numberOfMonths > 1, 'p-datepicker-monthpicker': (view === 'month'), 'p-datepicker-touch-ui': touchUI}\"\n                [@overlayAnimation]=\"touchUI ? {value: 'visibleTouchUI', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}:\n                                            {value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\"\n                                            [@.disabled]=\"inline === true\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationDone($event)\" (click)=\"onOverlayClick($event)\" *ngIf=\"inline || overlayVisible\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                <ng-container *ngIf=\"!timeOnly\">\n                    <div class=\"p-datepicker-group-container\">\n                        <div class=\"p-datepicker-group\" *ngFor=\"let month of months; let i = index;\">\n                            <div class=\"p-datepicker-header\">\n                                <button (keydown)=\"onContainerButtonKeydown($event)\" class=\"p-datepicker-prev p-link\" (click)=\"onPrevButtonClick($event)\" *ngIf=\"i === 0\" type=\"button\" pRipple>\n                                    <span class=\"p-datepicker-prev-icon pi pi-chevron-left\"></span>\n                                </button>\n                                <div class=\"p-datepicker-title\">\n                                    <span class=\"p-datepicker-month\" *ngIf=\"!monthNavigator && (view !== 'month')\">{{getTranslation('monthNames')[month.month]}}</span>\n                                    <select tabindex=\"0\" class=\"p-datepicker-month\" *ngIf=\"monthNavigator && (view !== 'month') && numberOfMonths === 1\" (change)=\"onMonthDropdownChange($event.target.value)\">\n                                        <option [value]=\"i\" *ngFor=\"let monthName of getTranslation('monthNames');let i = index\" [selected]=\"i === month.month\">{{monthName}}</option>\n                                    </select>\n                                    <select tabindex=\"0\" class=\"p-datepicker-year\" *ngIf=\"yearNavigator && numberOfMonths === 1\" (change)=\"onYearDropdownChange($event.target.value)\">\n                                        <option [value]=\"year\" *ngFor=\"let year of yearOptions\" [selected]=\"year === currentYear\">{{year}}</option>\n                                    </select>\n                                    <span class=\"p-datepicker-year\" *ngIf=\"!yearNavigator\">{{view === 'month' ? currentYear : month.year}}</span>\n                                </div>\n                                <button (keydown)=\"onContainerButtonKeydown($event)\" class=\"p-datepicker-next p-link\" (click)=\"onNextButtonClick($event)\" *ngIf=\"numberOfMonths === 1 ? true : (i === numberOfMonths -1)\" type=\"button\" pRipple>\n                                    <span class=\"p-datepicker-next-icon pi pi-chevron-right\"></span>\n                                </button>\n                            </div>\n                            <div class=\"p-datepicker-calendar-container\" *ngIf=\"view ==='date'\">\n                                <table class=\"p-datepicker-calendar\">\n                                    <thead>\n                                        <tr>\n                                            <th *ngIf=\"showWeek\" class=\"p-datepicker-weekheader p-disabled\">\n                                                <span>{{getTranslation('weekHeader')}}</span>\n                                            </th>\n                                            <th scope=\"col\" *ngFor=\"let weekDay of weekDays;let begin = first; let end = last\">\n                                                <span>{{weekDay}}</span>\n                                            </th>\n                                        </tr>\n                                    </thead>\n                                    <tbody>\n                                        <tr *ngFor=\"let week of month.dates; let j = index;\">\n                                            <td *ngIf=\"showWeek\" class=\"p-datepicker-weeknumber\">\n                                                <span class=\"p-disabled\">\n                                                    {{month.weekNumbers[j]}}\n                                                </span>\n                                            </td>\n                                            <td *ngFor=\"let date of week\" [ngClass]=\"{'p-datepicker-other-month': date.otherMonth,'p-datepicker-today':date.today}\">\n                                                <ng-container *ngIf=\"date.otherMonth ? showOtherMonths : true\">\n                                                    <span [ngClass]=\"{'p-highlight':isSelected(date), 'p-disabled': !date.selectable}\"\n                                                        (click)=\"onDateSelect($event,date)\" draggable=\"false\" (keydown)=\"onDateCellKeydown($event,date,i)\" pRipple>\n                                                        <ng-container *ngIf=\"!dateTemplate\">{{date.day}}</ng-container>\n                                                        <ng-container *ngTemplateOutlet=\"dateTemplate; context: {$implicit: date}\"></ng-container>\n                                                    </span>\n                                                </ng-container>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"p-monthpicker\" *ngIf=\"view === 'month'\">\n                        <span *ngFor=\"let m of monthPickerValues; let i = index\" (click)=\"onMonthSelect($event, i)\" (keydown)=\"onMonthCellKeydown($event,i)\" class=\"p-monthpicker-month\" [ngClass]=\"{'p-highlight': isMonthSelected(i), 'p-disabled':!isSelectable(1, i, this.currentYear, false)}\" pRipple>\n                            {{m}}\n                        </span>\n                    </div>\n                </ng-container>\n                <div class=\"p-timepicker\" *ngIf=\"showTime||timeOnly\">\n                    <div class=\"p-hour-picker\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementHour($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 0, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentHour < 10\">0</ng-container>{{currentHour}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementHour($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 0, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-separator\">\n                        <span>{{timeSeparator}}</span>\n                    </div>\n                    <div class=\"p-minute-picker\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementMinute($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 1, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentMinute < 10\">0</ng-container>{{currentMinute}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementMinute($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 1, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-separator\" *ngIf=\"showSeconds\">\n                        <span>{{timeSeparator}}</span>\n                    </div>\n                    <div class=\"p-second-picker\" *ngIf=\"showSeconds\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementSecond($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 2, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentSecond < 10\">0</ng-container>{{currentSecond}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementSecond($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 2, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-ampm-picker\" *ngIf=\"hourFormat=='12'\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"toggleAMPM($event)\" (keydown.enter)=\"toggleAMPM($event)\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span>{{pm ? 'PM' : 'AM'}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"toggleAMPM($event)\" (keydown.enter)=\"toggleAMPM($event)\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                </div>\n                <div class=\"p-datepicker-buttonbar\" *ngIf=\"showButtonBar\">\n                    <button type=\"button\" [label]=\"getTranslation('today')\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"onTodayButtonClick($event)\" pButton pRipple [ngClass]=\"[todayButtonStyleClass]\"></button>\n                    <button type=\"button\" [label]=\"getTranslation('clear')\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"onClearButtonClick($event)\" pButton pRipple [ngClass]=\"[clearButtonStyleClass]\"></button>\n                </div>\n                <ng-content select=\"p-footer\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </span>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            state('visibleTouchUI', style({\n                transform: 'translate(-50%,-50%)',\n                opacity: 1\n            })),\n            transition('void => visible', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}', style({ opacity: 1, transform: '*' }))\n            ]),\n            transition('visible => void', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n            ]),\n            transition('void => visibleTouchUI', [\n                style({opacity: 0, transform: 'translate3d(-50%, -40%, 0) scale(0.9)'}),\n                animate('{{showTransitionParams}}')\n            ]),\n            transition('visibleTouchUI => void', [\n                animate(('{{hideTransitionParams}}'),\n                style({\n                    opacity: 0,\n                    transform: 'translate3d(-50%, -40%, 0) scale(0.9)'\n                }))\n            ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focus'\n    },\n    providers: [CALENDAR_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./calendar.css']\n})\nexport class Calendar implements OnInit,OnDestroy,ControlValueAccessor {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() inputStyle: any;\n\n    @Input() inputId: string;\n\n    @Input() name: string;\n\n    @Input() inputStyleClass: string;\n\n    @Input() placeholder: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() iconAriaLabel: string;\n\n    @Input() disabled: any;\n\n    @Input() dateFormat: string;\n\n    @Input() multipleSeparator: string = ',';\n\n    @Input() rangeSeparator: string = '-';\n\n    @Input() inline: boolean = false;\n\n    @Input() showOtherMonths: boolean = true;\n\n    @Input() selectOtherMonths: boolean;\n\n    @Input() showIcon: boolean;\n\n    @Input() icon: string = 'pi pi-calendar';\n\n    @Input() appendTo: any;\n\n    @Input() readonlyInput: boolean;\n\n    @Input() shortYearCutoff: any = '+10';\n\n    @Input() monthNavigator: boolean;\n\n    @Input() yearNavigator: boolean;\n\n    @Input() hourFormat: string = '24';\n\n    @Input() timeOnly: boolean;\n\n    @Input() stepHour: number = 1;\n\n    @Input() stepMinute: number = 1;\n\n    @Input() stepSecond: number = 1;\n\n    @Input() showSeconds: boolean = false;\n\n    @Input() required: boolean;\n\n    @Input() showOnFocus: boolean = true;\n\n    @Input() showWeek: boolean = false;\n\n    @Input() dataType: string = 'date';\n\n    @Input() selectionMode: string = 'single';\n\n    @Input() maxDateCount: number;\n\n    @Input() showButtonBar: boolean;\n\n    @Input() todayButtonStyleClass: string = 'p-button-text';\n\n    @Input() clearButtonStyleClass: string = 'p-button-text';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() panelStyleClass: string;\n\n    @Input() panelStyle: any;\n\n    @Input() keepInvalid: boolean = false;\n\n    @Input() hideOnDateTimeSelect: boolean = true;\n\n    @Input() numberOfMonths: number = 1;\n\n    @Input() view: string = 'date';\n\n    @Input() touchUI: boolean;\n\n    @Input() timeSeparator: string = \":\";\n\n    @Input() focusTrap: boolean = true;\n\n    @Input() firstDayOfWeek: number = 0;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClose: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onInput: EventEmitter<any> = new EventEmitter();\n\n    @Output() onTodayClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClearClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMonthChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onYearChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClickOutside: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Input() tabindex: number;\n\n    @ViewChild('container', { static: false }) containerViewChild: ElementRef;\n\n    @ViewChild('inputfield', { static: false }) inputfieldViewChild: ElementRef;\n\n    @ViewChild('contentWrapper', { static: false }) set content (content: ElementRef) {\n        this.contentViewChild = content;\n\n        if (this.contentViewChild) {\n            if (this.isMonthNavigate) {\n                Promise.resolve(null).then(() => this.updateFocus());\n                this.isMonthNavigate = false;\n            }\n            else {\n                this.initFocusableCell();\n            }\n        }\n    };\n\n    contentViewChild: ElementRef;\n\n    value: any;\n\n    dates: any[];\n\n    months: any[];\n\n    monthPickerValues: any[];\n\n    weekDays: string[];\n\n    currentMonth: number;\n\n    currentYear: number;\n\n    currentHour: number;\n\n    currentMinute: number;\n\n    currentSecond: number;\n\n    pm: boolean;\n\n    mask: HTMLDivElement;\n\n    maskClickListener: Function;\n\n    overlay: HTMLDivElement;\n\n    overlayVisible: boolean;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    calendarElement: any;\n\n    timePickerTimer:any;\n\n    documentClickListener: any;\n\n    animationEndListener: any;\n\n    ticksTo1970: number;\n\n    yearOptions: number[];\n\n    focus: boolean;\n\n    isKeydown: boolean;\n\n    filled: boolean;\n\n    inputFieldValue: string = null;\n\n    _minDate: Date;\n\n    _maxDate: Date;\n\n    _showTime: boolean;\n\n    _yearRange: string;\n\n    preventDocumentListener: boolean;\n\n    dateTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    disabledDateTemplate: TemplateRef<any>;\n\n    _disabledDates: Array<Date>;\n\n    _disabledDays: Array<number>;\n\n    selectElement: any;\n\n    todayElement: any;\n\n    focusElement: any;\n\n    scrollHandler: any;\n\n    documentResizeListener: any;\n\n    navigationState: any = null;\n\n    isMonthNavigate: boolean;\n\n    initialized: boolean;\n\n    translationSubscription: Subscription;\n\n    _locale: LocaleSettings;\n\n    @Input() get defaultDate(): Date {\n        return this._defaultDate;\n    };\n\n    set defaultDate(defaultDate: Date) {\n        this._defaultDate = defaultDate;\n\n        if (this.initialized) {\n            const date = defaultDate||new Date();\n            this.currentMonth = date.getMonth();\n            this.currentYear = date.getFullYear();\n            this.initTime(date);\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    _defaultDate: Date;\n\n    @Input() get minDate(): Date {\n        return this._minDate;\n    }\n\n    set minDate(date: Date) {\n        this._minDate = date;\n\n        if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get maxDate(): Date {\n        return this._maxDate;\n    }\n\n    set maxDate(date: Date) {\n        this._maxDate = date;\n\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get disabledDates(): Date[] {\n        return this._disabledDates;\n    }\n\n    set disabledDates(disabledDates: Date[]) {\n        this._disabledDates = disabledDates;\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get disabledDays(): number[] {\n        return this._disabledDays;\n    }\n\n    set disabledDays(disabledDays: number[]) {\n        this._disabledDays = disabledDays;\n\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get yearRange(): string {\n        return this._yearRange;\n    }\n\n    set yearRange(yearRange: string) {\n        this._yearRange = yearRange;\n\n        if (yearRange) {\n            const years = yearRange.split(':');\n            const yearStart = parseInt(years[0]);\n            const yearEnd = parseInt(years[1]);\n\n            this.populateYearOptions(yearStart, yearEnd);\n        }\n    }\n\n    @Input() get showTime(): boolean {\n        return this._showTime;\n    }\n\n    set showTime(showTime: boolean) {\n        this._showTime = showTime;\n\n        if (this.currentHour === undefined) {\n            this.initTime(this.value||new Date());\n        }\n        this.updateInputfield();\n    }\n\n    get locale() {\n       return this._locale;\n    }\n\n    @Input()\n    set locale(newLocale: LocaleSettings) {\n        console.warn(\"Locale property has no effect, use new i18n API instead.\");\n    }\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, private zone: NgZone, private config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    ngOnInit() {\n        const date = this.defaultDate||new Date();\n        this.currentMonth = date.getMonth();\n        this.currentYear = date.getFullYear();\n\n        if (this.view === 'date') {\n            this.createWeekDays();\n            this.initTime(date);\n            this.createMonths(this.currentMonth, this.currentYear);\n            this.ticksTo1970 = (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000);\n        }\n        else if (this.view === 'month') {\n            this.createMonthPickerValues();\n        }\n\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.createWeekDays();\n        });\n\n        this.initialized = true;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'date':\n                    this.dateTemplate = item.template;\n                break;\n\n                case 'disabledDate':\n                    this.disabledDateTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.dateTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    getTranslation(option: string) {\n        return this.config.getTranslation(option);\n    }\n\n    populateYearOptions(start, end) {\n        this.yearOptions = [];\n\n        for (let i = start; i <= end; i++) {\n            this.yearOptions.push(i);\n        }\n    }\n\n    createWeekDays() {\n        this.weekDays = [];\n        let dayIndex = this.firstDayOfWeek;\n        let dayLabels = this.getTranslation(TranslationKeys.DAY_NAMES_MIN);\n        for (let i = 0; i < 7; i++) {\n            this.weekDays.push(dayLabels[dayIndex]);\n            dayIndex = (dayIndex == 6) ? 0 : ++dayIndex;\n        }\n    }\n\n    createMonthPickerValues() {\n        this.monthPickerValues = [];\n        let monthLabels = this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT);\n        for (let i = 0; i <= 11; i++) {\n            this.monthPickerValues.push(monthLabels[i]);\n        }\n    }\n\n    createMonths(month: number, year: number) {\n        this.months = this.months = [];\n        for (let i = 0 ; i < this.numberOfMonths; i++) {\n            let m = month + i;\n            let y = year;\n            if (m > 11) {\n                m = m % 11 - 1;\n                y = year + 1;\n            }\n\n            this.months.push(this.createMonth(m, y));\n        }\n    }\n\n    getWeekNumber(date: Date) {\n        let checkDate = new Date(date.getTime());\n\t\tcheckDate.setDate(checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ));\n\t\tlet time = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 );\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round((time - checkDate.getTime()) / 86400000 ) / 7 ) + 1;\n    }\n\n    createMonth(month: number, year: number) {\n        let dates = [];\n        let firstDay = this.getFirstDayOfMonthIndex(month, year);\n        let daysLength = this.getDaysCountInMonth(month, year);\n        let prevMonthDaysLength = this.getDaysCountInPrevMonth(month, year);\n        let dayNo = 1;\n        let today = new Date();\n        let weekNumbers = [];\n        let monthRows = Math.ceil((daysLength + firstDay) / 7);\n\n        for (let i = 0; i < monthRows; i++) {\n            let week = [];\n\n            if (i == 0) {\n                for (let j = (prevMonthDaysLength - firstDay + 1); j <= prevMonthDaysLength; j++) {\n                    let prev = this.getPreviousMonthAndYear(month, year);\n                    week.push({day: j, month: prev.month, year: prev.year, otherMonth: true,\n                            today: this.isToday(today, j, prev.month, prev.year), selectable: this.isSelectable(j, prev.month, prev.year, true)});\n                }\n\n                let remainingDaysLength = 7 - week.length;\n                for (let j = 0; j < remainingDaysLength; j++) {\n                    week.push({day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                            selectable: this.isSelectable(dayNo, month, year, false)});\n                    dayNo++;\n                }\n            }\n            else {\n                for (let j = 0; j < 7; j++) {\n                    if (dayNo > daysLength) {\n                        let next = this.getNextMonthAndYear(month, year);\n                        week.push({day: dayNo - daysLength, month: next.month, year: next.year, otherMonth: true,\n                                    today: this.isToday(today, dayNo - daysLength, next.month, next.year),\n                                    selectable: this.isSelectable((dayNo - daysLength), next.month, next.year, true)});\n                    }\n                    else {\n                        week.push({day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                            selectable: this.isSelectable(dayNo, month, year, false)});\n                    }\n\n                    dayNo++;\n                }\n            }\n\n            if (this.showWeek) {\n                weekNumbers.push(this.getWeekNumber(new Date(week[0].year, week[0].month, week[0].day)));\n            }\n\n            dates.push(week);\n        }\n\n        return {\n            month: month,\n            year: year,\n            dates: dates,\n            weekNumbers: weekNumbers\n        };\n    }\n\n    initTime(date: Date) {\n        this.pm = date.getHours() > 11;\n\n        if (this.showTime) {\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n            this.setCurrentHourPM(date.getHours());\n        }\n        else if (this.timeOnly) {\n            this.currentMinute = 0;\n            this.currentHour = 0;\n            this.currentSecond = 0;\n        }\n    }\n\n    navBackward(event) {\n        event.stopPropagation();\n\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        this.isMonthNavigate = true;\n\n        if (this.view === 'month') {\n            this.decrementYear();\n            setTimeout(()=> {\n                this.updateFocus();\n            },1);\n        }\n        else {\n            if (this.currentMonth === 0) {\n                this.currentMonth = 11;\n                this.decrementYear();\n            }\n            else {\n                this.currentMonth--;\n            }\n\n            this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    navForward(event) {\n        event.stopPropagation();\n\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        this.isMonthNavigate = true;\n\n        if (this.view === 'month') {\n            this.incrementYear();\n            setTimeout(()=> {\n                this.updateFocus();\n            },1);\n        }\n        else {\n            if (this.currentMonth === 11) {\n                this.currentMonth = 0;\n                this.incrementYear();\n            }\n            else {\n                this.currentMonth++;\n            }\n\n            this.onMonthChange.emit({month: this.currentMonth + 1, year: this.currentYear});\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    decrementYear() {\n        this.currentYear--;\n\n        if (this.yearNavigator && this.currentYear < this.yearOptions[0]) {\n            let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];\n            this.populateYearOptions(this.yearOptions[0] - difference, this.yearOptions[this.yearOptions.length - 1] - difference);\n        }\n    }\n\n    incrementYear() {\n        this.currentYear++;\n\n        if (this.yearNavigator && this.currentYear > this.yearOptions[this.yearOptions.length - 1]) {\n            let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];\n            this.populateYearOptions(this.yearOptions[0] + difference, this.yearOptions[this.yearOptions.length - 1] + difference);\n        }\n    }\n\n    onDateSelect(event, dateMeta) {\n        if (this.disabled || !dateMeta.selectable) {\n            event.preventDefault();\n            return;\n        }\n\n        if (this.isMultipleSelection() && this.isSelected(dateMeta)) {\n            this.value = this.value.filter((date, i) => {\n                return !this.isDateEquals(date, dateMeta);\n            });\n            if (this.value.length === 0) {\n                this.value = null;\n            }\n            this.updateModel(this.value);\n        }\n        else {\n            if (this.shouldSelectDate(dateMeta)) {\n                this.selectDate(dateMeta);\n            }\n        }\n\n        if (this.isSingleSelection() && this.hideOnDateTimeSelect) {\n            setTimeout(() => {\n                event.preventDefault();\n                this.hideOverlay();\n\n                if (this.mask) {\n                    this.disableModality();\n                }\n\n                this.cd.markForCheck();\n            }, 150);\n        }\n\n        this.updateInputfield();\n        event.preventDefault();\n    }\n\n    shouldSelectDate(dateMeta) {\n        if (this.isMultipleSelection())\n            return this.maxDateCount != null ? this.maxDateCount > (this.value ? this.value.length : 0) : true;\n        else\n            return true;\n    }\n\n    onMonthSelect(event, index) {\n        if (!DomHandler.hasClass(event.target, 'p-disabled')) {\n            this.onDateSelect(event, {year: this.currentYear, month: index, day: 1, selectable: true});\n        }\n    }\n\n    updateInputfield() {\n        let formattedValue = '';\n\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                formattedValue = this.formatDateTime(this.value);\n            }\n            else if (this.isMultipleSelection()) {\n                for (let i = 0; i < this.value.length; i++) {\n                    let dateAsString = this.formatDateTime(this.value[i]);\n                    formattedValue += dateAsString;\n                    if (i !== (this.value.length - 1)) {\n                        formattedValue += this.multipleSeparator+' ';\n                    }\n                }\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value && this.value.length) {\n                    let startDate = this.value[0];\n                    let endDate = this.value[1];\n\n                    formattedValue = this.formatDateTime(startDate);\n                    if (endDate) {\n                        formattedValue += ' '+this.rangeSeparator +' ' + this.formatDateTime(endDate);\n                    }\n                }\n            }\n        }\n\n        this.inputFieldValue = formattedValue;\n        this.updateFilledState();\n        if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {\n            this.inputfieldViewChild.nativeElement.value = this.inputFieldValue;\n        }\n    }\n\n    formatDateTime(date) {\n        let formattedValue = null;\n        if (date) {\n            if (this.timeOnly) {\n                formattedValue = this.formatTime(date);\n            }\n            else {\n                formattedValue = this.formatDate(date, this.getDateFormat());\n                if (this.showTime) {\n                    formattedValue += ' ' + this.formatTime(date);\n                }\n            }\n        }\n\n        return formattedValue;\n    }\n\n    setCurrentHourPM(hours: number) {\n        if (this.hourFormat == '12') {\n            this.pm = hours > 11;\n            if (hours >= 12) {\n                this.currentHour = (hours == 12) ? 12 : hours - 12;\n            }\n            else {\n                this.currentHour = (hours == 0) ? 12 : hours;\n            }\n        }\n        else {\n            this.currentHour = hours;\n        }\n    }\n\n    selectDate(dateMeta) {\n        let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n\n        if (this.showTime) {\n            if (this.hourFormat == '12') {\n                if (this.currentHour === 12)\n                    date.setHours(this.pm ? 12 : 0);\n                else\n                    date.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n            }\n            else {\n                date.setHours(this.currentHour);\n            }\n\n            date.setMinutes(this.currentMinute);\n            date.setSeconds(this.currentSecond);\n        }\n\n        if (this.minDate && this.minDate > date) {\n            date = this.minDate;\n            this.setCurrentHourPM(date.getHours());\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n\n        if (this.maxDate && this.maxDate < date) {\n            date = this.maxDate;\n            this.setCurrentHourPM(date.getHours());\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n\n        if (this.isSingleSelection()) {\n            this.updateModel(date);\n        }\n        else if (this.isMultipleSelection()) {\n            this.updateModel(this.value ? [...this.value, date] : [date]);\n        }\n        else if (this.isRangeSelection()) {\n            if (this.value && this.value.length) {\n                let startDate = this.value[0];\n                let endDate = this.value[1];\n\n                if (!endDate && date.getTime() >= startDate.getTime()) {\n                    endDate = date;\n                }\n                else {\n                    startDate = date;\n                    endDate = null;\n                }\n\n                this.updateModel([startDate, endDate]);\n            }\n            else {\n                this.updateModel([date, null]);\n            }\n        }\n\n        this.onSelect.emit(date);\n    }\n\n    updateModel(value) {\n        this.value = value;\n\n        if (this.dataType == 'date') {\n            this.onModelChange(this.value);\n        }\n        else if (this.dataType == 'string') {\n            if (this.isSingleSelection()) {\n                this.onModelChange(this.formatDateTime(this.value));\n            }\n            else {\n                let stringArrValue = null;\n                if (this.value) {\n                    stringArrValue = this.value.map(date => this.formatDateTime(date));\n                }\n                this.onModelChange(stringArrValue);\n            }\n        }\n    }\n\n    getFirstDayOfMonthIndex(month: number, year: number) {\n        let day = new Date();\n        day.setDate(1);\n        day.setMonth(month);\n        day.setFullYear(year);\n\n        let dayIndex = day.getDay() + this.getSundayIndex();\n        return dayIndex >= 7 ? dayIndex - 7 : dayIndex;\n    }\n\n    getDaysCountInMonth(month: number, year: number) {\n        return 32 - this.daylightSavingAdjust(new Date(year, month, 32)).getDate();\n    }\n\n    getDaysCountInPrevMonth(month: number, year: number) {\n        let prev = this.getPreviousMonthAndYear(month, year);\n        return this.getDaysCountInMonth(prev.month, prev.year);\n    }\n\n    getPreviousMonthAndYear(month: number, year: number) {\n        let m, y;\n\n        if (month === 0) {\n            m = 11;\n            y = year - 1;\n        }\n        else {\n            m = month - 1;\n            y = year;\n        }\n\n        return {'month':m,'year':y};\n    }\n\n    getNextMonthAndYear(month: number, year: number) {\n        let m, y;\n\n        if (month === 11) {\n            m = 0;\n            y = year + 1;\n        }\n        else {\n            m = month + 1;\n            y = year;\n        }\n\n        return {'month':m,'year':y};\n    }\n\n    getSundayIndex() {\n        return this.firstDayOfWeek > 0 ? 7 - this.firstDayOfWeek : 0;\n    }\n\n    isSelected(dateMeta): boolean {\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                return this.isDateEquals(this.value, dateMeta);\n            }\n            else if (this.isMultipleSelection()) {\n                let selected = false;\n                for (let date of this.value) {\n                    selected = this.isDateEquals(date, dateMeta);\n                    if (selected) {\n                        break;\n                    }\n                }\n\n                return selected;\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value[1])\n                    return this.isDateEquals(this.value[0], dateMeta) || this.isDateEquals(this.value[1], dateMeta) || this.isDateBetween(this.value[0], this.value[1], dateMeta);\n                else\n                    return this.isDateEquals(this.value[0], dateMeta)\n            }\n        }\n        else {\n            return false;\n        }\n    }\n\n    isMonthSelected(month: number): boolean {\n        let day = this.value ? (Array.isArray(this.value) ? this.value[0].getDate() : this.value.getDate()) : 1;\n        return this.isSelected({year: this.currentYear, month: month, day: day, selectable: true});\n    }\n\n    isDateEquals(value, dateMeta) {\n        if (value)\n            return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year;\n        else\n            return false;\n    }\n\n    isDateBetween(start, end, dateMeta) {\n        let between : boolean = false;\n        if (start && end) {\n            let date: Date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n            return start.getTime() <= date.getTime() && end.getTime() >= date.getTime();\n        }\n\n        return between;\n    }\n\n    isSingleSelection(): boolean {\n        return this.selectionMode === 'single';\n    }\n\n    isRangeSelection(): boolean {\n        return this.selectionMode === 'range';\n    }\n\n    isMultipleSelection(): boolean {\n        return this.selectionMode === 'multiple';\n    }\n\n    isToday(today, day, month, year): boolean {\n        return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;\n    }\n\n    isSelectable(day, month, year, otherMonth): boolean {\n        let validMin = true;\n        let validMax = true;\n        let validDate = true;\n        let validDay = true;\n\n        if (otherMonth && !this.selectOtherMonths) {\n            return false;\n        }\n\n        if (this.minDate) {\n             if (this.minDate.getFullYear() > year) {\n                 validMin = false;\n             }\n             else if (this.minDate.getFullYear() === year) {\n                 if (this.minDate.getMonth() > month) {\n                     validMin = false;\n                 }\n                 else if (this.minDate.getMonth() === month) {\n                     if (this.minDate.getDate() > day) {\n                         validMin = false;\n                     }\n                 }\n             }\n        }\n\n        if (this.maxDate) {\n             if (this.maxDate.getFullYear() < year) {\n                 validMax = false;\n             }\n             else if (this.maxDate.getFullYear() === year) {\n                 if (this.maxDate.getMonth() < month) {\n                     validMax = false;\n                 }\n                 else if (this.maxDate.getMonth() === month) {\n                     if (this.maxDate.getDate() < day) {\n                         validMax = false;\n                     }\n                 }\n             }\n        }\n\n        if (this.disabledDates) {\n           validDate = !this.isDateDisabled(day,month,year);\n        }\n\n        if (this.disabledDays) {\n           validDay = !this.isDayDisabled(day,month,year)\n        }\n\n        return validMin && validMax && validDate && validDay;\n    }\n\n    isDateDisabled(day:number, month:number, year:number):boolean {\n        if (this.disabledDates) {\n            for (let disabledDate of this.disabledDates) {\n                if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    isDayDisabled(day:number, month:number, year:number):boolean {\n        if (this.disabledDays) {\n            let weekday = new Date(year, month, day);\n            let weekdayNumber = weekday.getDay();\n            return this.disabledDays.indexOf(weekdayNumber) !== -1;\n        }\n        return false;\n    }\n\n    onInputFocus(event: Event) {\n        this.focus = true;\n        if (this.showOnFocus) {\n            this.showOverlay();\n        }\n        this.onFocus.emit(event);\n    }\n\n    onInputClick() {\n        if (this.showOnFocus && !this.overlayVisible) {\n            this.showOverlay();\n        }\n    }\n\n    onInputBlur(event: Event) {\n        this.focus = false;\n        this.onBlur.emit(event);\n        if (!this.keepInvalid) {\n            this.updateInputfield();\n        }\n        this.onModelTouched();\n    }\n\n    onButtonClick(event, inputfield) {\n        if (!this.overlayVisible) {\n            inputfield.focus();\n            this.showOverlay();\n        }\n        else {\n            this.hideOverlay();\n        }\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    onPrevButtonClick(event) {\n        this.navigationState = {backward: true, button: true};\n        this.navBackward(event);\n    }\n\n    onNextButtonClick(event) {\n        this.navigationState = {backward: false, button: true};\n        this.navForward(event);\n    }\n\n    onContainerButtonKeydown(event) {\n        switch (event.which) {\n           //tab\n           case 9:\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n           break;\n\n           //escape\n           case 27:\n               this.overlayVisible = false;\n               event.preventDefault();\n           break;\n\n           default:\n               //Noop\n           break;\n        }\n   }\n\n    onInputKeydown(event) {\n        this.isKeydown = true;\n        if (event.keyCode === 40 && this.contentViewChild) {\n            this.trapFocus(event);\n        }\n        else if (event.keyCode === 27) {\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n                event.preventDefault();\n            }\n        }\n        else if (event.keyCode === 13) {\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n                event.preventDefault();\n            }\n        }\n        else if (event.keyCode === 9 && this.contentViewChild) {\n            DomHandler.getFocusableElements(this.contentViewChild.nativeElement).forEach(el => el.tabIndex = '-1');\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n            }\n        }\n    }\n\n    onDateCellKeydown(event, date, groupIndex) {\n        const cellContent = event.currentTarget;\n        const cell = cellContent.parentElement;\n\n        switch (event.which) {\n            //down arrow\n            case 40: {\n                cellContent.tabIndex = '-1';\n                let cellIndex = DomHandler.index(cell);\n                let nextRow = cell.parentElement.nextElementSibling;\n                if (nextRow) {\n                    let focusCell = nextRow.children[cellIndex].children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigationState = {backward: false};\n                        this.navForward(event);\n                    }\n                    else {\n                        nextRow.children[cellIndex].children[0].tabIndex = '0';\n                        nextRow.children[cellIndex].children[0].focus();\n                    }\n                }\n                else {\n                    this.navigationState = {backward: false};\n                    this.navForward(event);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //up arrow\n            case 38: {\n                cellContent.tabIndex = '-1';\n                let cellIndex = DomHandler.index(cell);\n                let prevRow = cell.parentElement.previousElementSibling;\n                if (prevRow) {\n                    let focusCell = prevRow.children[cellIndex].children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigationState = {backward: true};\n                        this.navBackward(event);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigationState = {backward: true};\n                    this.navBackward(event);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //left arrow\n            case 37: {\n                cellContent.tabIndex = '-1';\n                let prevCell = cell.previousElementSibling;\n                if (prevCell) {\n                    let focusCell = prevCell.children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled') || DomHandler.hasClass(focusCell.parentElement, 'p-datepicker-weeknumber')) {\n                        this.navigateToMonth(true, groupIndex);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigateToMonth(true, groupIndex);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //right arrow\n            case 39: {\n                cellContent.tabIndex = '-1';\n                let nextCell = cell.nextElementSibling;\n                if (nextCell) {\n                    let focusCell = nextCell.children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigateToMonth(false, groupIndex);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigateToMonth(false, groupIndex);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            case 13: {\n                this.onDateSelect(event, date);\n                event.preventDefault();\n                break;\n            }\n\n            //escape\n            case 27: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //tab\n            case 9: {\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n                break;\n            }\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n    onMonthCellKeydown(event, index) {\n        const cell = event.currentTarget;\n        switch (event.which) {\n            //arrows\n            case 38:\n            case 40: {\n                cell.tabIndex = '-1';\n                var cells = cell.parentElement.children;\n                var cellIndex = DomHandler.index(cell);\n                let nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex -3];\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //left arrow\n            case 37: {\n                cell.tabIndex = '-1';\n                let prevCell = cell.previousElementSibling;\n                if (prevCell) {\n                    prevCell.tabIndex = '0';\n                    prevCell.focus();\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //right arrow\n            case 39: {\n                cell.tabIndex = '-1';\n                let nextCell = cell.nextElementSibling;\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            case 13: {\n                this.onMonthSelect(event, index);\n                event.preventDefault();\n                break;\n            }\n\n            //escape\n            case 27: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //tab\n            case 9: {\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n                break;\n            }\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n    navigateToMonth(prev, groupIndex) {\n        if (prev) {\n            if (this.numberOfMonths === 1 || (groupIndex === 0)) {\n                this.navigationState = {backward: true};\n                this.navBackward(event);\n            }\n            else {\n                let prevMonthContainer = this.contentViewChild.nativeElement.children[groupIndex - 1];\n                let cells = DomHandler.find(prevMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                let focusCell = cells[cells.length - 1];\n                focusCell.tabIndex = '0';\n                focusCell.focus();\n            }\n        }\n        else {\n            if (this.numberOfMonths === 1 || (groupIndex === this.numberOfMonths - 1)) {\n                this.navigationState = {backward: false};\n                this.navForward(event);\n            }\n            else {\n                let nextMonthContainer = this.contentViewChild.nativeElement.children[groupIndex + 1];\n                let focusCell = DomHandler.findSingle(nextMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                focusCell.tabIndex = '0';\n                focusCell.focus();\n            }\n        }\n    }\n\n    updateFocus() {\n        let cell;\n        if (this.navigationState) {\n            if (this.navigationState.button) {\n                this.initFocusableCell();\n\n                if (this.navigationState.backward)\n                    DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-prev').focus();\n                else\n                    DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-next').focus();\n            }\n            else {\n                if (this.navigationState.backward) {\n                    let cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                    cell = cells[cells.length - 1];\n                }\n                else {\n                    cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                }\n\n                if (cell) {\n                    cell.tabIndex = '0';\n                    cell.focus();\n                }\n            }\n\n            this.navigationState = null;\n        }\n        else {\n            this.initFocusableCell();\n        }\n    }\n\n    initFocusableCell() {\n        let cell;\n        if (this.view === 'month') {\n            let cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n            let selectedCell= DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month.p-highlight');\n            cells.forEach(cell => cell.tabIndex = -1);\n            cell = selectedCell || cells[0];\n\n            if (cells.length === 0) {\n                let disabledCells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month.p-disabled[tabindex = \"0\"]');\n                disabledCells.forEach(cell => cell.tabIndex = -1);\n            }\n        }\n        else {\n            cell = DomHandler.findSingle(this.contentViewChild.nativeElement, 'span.p-highlight');\n            if (!cell) {\n                let todayCell = DomHandler.findSingle(this.contentViewChild.nativeElement, 'td.p-datepicker-today span:not(.p-disabled):not(.p-ink)');\n                if (todayCell)\n                    cell = todayCell;\n                else\n                    cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n            }\n        }\n\n        if (cell) {\n            cell.tabIndex = '0';\n        }\n    }\n\n    trapFocus(event) {\n        let focusableElements = DomHandler.getFocusableElements(this.contentViewChild.nativeElement);\n\n        if (focusableElements && focusableElements.length > 0) {\n            if (!focusableElements[0].ownerDocument.activeElement) {\n                focusableElements[0].focus();\n            }\n            else {\n                let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n                if (event.shiftKey) {\n                    if (focusedIndex == -1 || focusedIndex === 0) {\n                        if (this.focusTrap){\n                            focusableElements[focusableElements.length - 1].focus();\n                        }\n                        else {\n                            if (focusedIndex === -1)\n                                return this.hideOverlay();\n                            else if (focusedIndex === 0)\n                                return;\n                        }\n                    }\n                    else {\n                        focusableElements[focusedIndex - 1].focus();\n                    }\n                }\n                else {\n                    if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1)) {\n                        if (!this.focusTrap && focusedIndex != -1)\n                            return this.hideOverlay();\n                        else\n                            focusableElements[0].focus();\n                    }\n                    else {\n                        focusableElements[focusedIndex + 1].focus();\n                    }\n                }\n            }\n        }\n\n        event.preventDefault();\n    }\n\n    onMonthDropdownChange(m: string) {\n        this.currentMonth = parseInt(m);\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonths(this.currentMonth, this.currentYear);\n    }\n\n    onYearDropdownChange(y: string) {\n        this.currentYear = parseInt(y);\n        this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonths(this.currentMonth, this.currentYear);\n    }\n\n    convertTo24Hour = function (hours: number, pm: boolean) {\n        if (this.hourFormat == '12') {\n            if (hours === 12) {\n                return (pm ? 12 : 0);\n            } else {\n                return (pm ? hours + 12 : hours);\n            }\n        }\n        return hours;\n    }\n\n    validateTime(hour: number, minute: number, second: number, pm: boolean) {\n        let value = this.value;\n        const convertedHour = this.convertTo24Hour(hour, pm);\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        const valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getHours() > convertedHour) {\n                return false;\n            }\n            if (this.minDate.getHours() === convertedHour) {\n                if (this.minDate.getMinutes() > minute) {\n                    return false;\n                }\n                if (this.minDate.getMinutes() === minute) {\n                    if (this.minDate.getSeconds() > second) {\n                        return false;\n                    }\n                }\n            }\n        }\n\n      if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getHours() < convertedHour) {\n                return false;\n            }\n            if (this.maxDate.getHours() === convertedHour) {\n                if (this.maxDate.getMinutes() < minute) {\n                    return false;\n                }\n                if (this.maxDate.getMinutes() === minute) {\n                  if (this.maxDate.getSeconds() < second) {\n                      return false;\n                  }\n                }\n            }\n        }\n        return true;\n    }\n\n\n    incrementHour(event) {\n        const prevHour = this.currentHour;\n        let newHour = this.currentHour + this.stepHour;\n        let newPM = this.pm;\n\n        if (this.hourFormat == '24')\n            newHour = (newHour >= 24) ? (newHour - 24) : newHour;\n        else if (this.hourFormat == '12') {\n            // Before the AM/PM break, now after\n            if (prevHour < 12 && newHour > 11) {\n                newPM= !this.pm;\n            }\n            newHour = (newHour >= 13) ? (newHour - 12) : newHour;\n        }\n\n        if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.currentHour = newHour;\n          this.pm = newPM;\n        }\n        event.preventDefault();\n    }\n\n    onTimePickerElementMouseDown(event: Event, type: number, direction: number) {\n        if (!this.disabled) {\n            this.repeat(event, null, type, direction);\n            event.preventDefault();\n        }\n    }\n\n    onTimePickerElementMouseUp(event: Event) {\n        if (!this.disabled) {\n            this.clearTimePickerTimer();\n            this.updateTime();\n        }\n    }\n\n    onTimePickerElementMouseLeave() {\n        if (!this.disabled && this.timePickerTimer) {\n            this.clearTimePickerTimer();\n            this.updateTime();\n        }\n    }\n\n    repeat(event: Event, interval: number, type: number, direction: number) {\n        let i = interval||500;\n\n        this.clearTimePickerTimer();\n        this.timePickerTimer = setTimeout(() => {\n            this.repeat(event, 100, type, direction);\n            this.cd.markForCheck();\n        }, i);\n\n        switch(type) {\n            case 0:\n                if (direction === 1)\n                    this.incrementHour(event);\n                else\n                    this.decrementHour(event);\n            break;\n\n            case 1:\n                if (direction === 1)\n                    this.incrementMinute(event);\n                else\n                    this.decrementMinute(event);\n            break;\n\n            case 2:\n                if (direction === 1)\n                    this.incrementSecond(event);\n                else\n                    this.decrementSecond(event);\n            break;\n        }\n\n        this.updateInputfield();\n    }\n\n    clearTimePickerTimer() {\n        if (this.timePickerTimer) {\n            clearTimeout(this.timePickerTimer);\n            this.timePickerTimer = null;\n        }\n    }\n\n    decrementHour(event) {\n        let newHour = this.currentHour - this.stepHour;\n        let newPM = this.pm\n\n        if (this.hourFormat == '24')\n            newHour = (newHour < 0) ? (24 + newHour) : newHour;\n        else if (this.hourFormat == '12') {\n            // If we were at noon/midnight, then switch\n            if (this.currentHour === 12) {\n                newPM = !this.pm;\n            }\n            newHour = (newHour <= 0) ? (12 + newHour) : newHour;\n        }\n\n        if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.currentHour = newHour;\n          this.pm = newPM;\n        }\n\n        event.preventDefault();\n    }\n\n    incrementMinute(event) {\n        let newMinute = this.currentMinute + this.stepMinute;\n        newMinute = (newMinute > 59) ? newMinute - 60 : newMinute;\n        if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {\n            this.currentMinute = newMinute;\n        }\n\n        event.preventDefault();\n    }\n\n    decrementMinute(event) {\n        let newMinute = this.currentMinute - this.stepMinute;\n        newMinute = (newMinute < 0) ? 60 + newMinute : newMinute;\n        if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {\n            this.currentMinute = newMinute;\n        }\n\n        event.preventDefault();\n    }\n\n    incrementSecond(event) {\n        let newSecond = this.currentSecond + this.stepSecond;\n        newSecond = (newSecond > 59) ? newSecond - 60 : newSecond;\n        if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {\n            this.currentSecond = newSecond;\n        }\n\n        event.preventDefault();\n    }\n\n    decrementSecond(event) {\n        let newSecond = this.currentSecond - this.stepSecond;\n        newSecond = (newSecond < 0) ? 60 + newSecond : newSecond;\n        if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {\n            this.currentSecond = newSecond;\n        }\n\n        event.preventDefault();\n    }\n\n    updateTime() {\n        let value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        value = value ? new Date(value.getTime()) : new Date();\n\n        if (this.hourFormat == '12') {\n            if (this.currentHour === 12)\n                value.setHours(this.pm ? 12 : 0);\n            else\n                value.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n        }\n        else {\n            value.setHours(this.currentHour);\n        }\n\n        value.setMinutes(this.currentMinute);\n        value.setSeconds(this.currentSecond);\n        if (this.isRangeSelection()) {\n            if (this.value[1])\n                value = [this.value[0], value];\n            else\n                value = [value, null];\n        }\n\n        if (this.isMultipleSelection()){\n            value = [...this.value.slice(0, -1), value];\n        }\n\n        this.updateModel(value);\n        this.onSelect.emit(value);\n        this.updateInputfield();\n    }\n\n    toggleAMPM(event) {\n        const newPM = !this.pm;\n        if (this.validateTime(this.currentHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.pm = newPM;\n          this.updateTime();\n        }\n        event.preventDefault();\n    }\n\n    onUserInput(event) {\n        // IE 11 Workaround for input placeholder : https://github.com/primefaces/primeng/issues/2026\n        if (!this.isKeydown) {\n            return;\n        }\n        this.isKeydown = false;\n\n        let val = event.target.value;\n        try {\n            let value = this.parseValueFromString(val);\n            if (this.isValidSelection(value)) {\n                this.updateModel(value);\n                this.updateUI();\n            }\n        }\n        catch(err) {\n            //invalid date\n            this.updateModel(null);\n        }\n\n        this.filled = val != null && val.length;\n        this.onInput.emit(event);\n    }\n\n    isValidSelection(value): boolean {\n        let isValid = true;\n        if (this.isSingleSelection()) {\n            if (!this.isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false)) {\n                isValid = false;\n            }\n        } else if (value.every(v => this.isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false))) {\n            if (this.isRangeSelection()) {\n                isValid = value.length > 1 && value[1] > value[0] ? true : false;\n            }\n        }\n        return isValid;\n    }\n\n    parseValueFromString(text: string): Date | Date[]{\n        if (!text || text.trim().length === 0) {\n            return null;\n        }\n\n        let value: any;\n\n        if (this.isSingleSelection()) {\n            value = this.parseDateTime(text);\n        }\n        else if (this.isMultipleSelection()) {\n            let tokens = text.split(this.multipleSeparator);\n            value = [];\n            for (let token of tokens) {\n                value.push(this.parseDateTime(token.trim()));\n            }\n        }\n        else if (this.isRangeSelection()) {\n            let tokens = text.split(' '+this.rangeSeparator +' ');\n            value = [];\n            for (let i = 0; i < tokens.length; i++) {\n                value[i] = this.parseDateTime(tokens[i].trim());\n            }\n        }\n\n        return value;\n    }\n\n    parseDateTime(text): Date {\n        let date: Date;\n        let parts: string[] = text.split(' ');\n\n        if (this.timeOnly) {\n            date = new Date();\n            this.populateTime(date, parts[0], parts[1]);\n        }\n        else {\n            const dateFormat = this.getDateFormat();\n            if (this.showTime) {\n                let ampm = this.hourFormat == '12' ? parts.pop() : null;\n                let timeString = parts.pop();\n\n                date = this.parseDate(parts.join(' '), dateFormat);\n                this.populateTime(date, timeString, ampm);\n            }\n            else {\n                 date = this.parseDate(text, dateFormat);\n            }\n        }\n\n        return date;\n    }\n\n    populateTime(value, timeString, ampm) {\n        if (this.hourFormat == '12' && !ampm) {\n            throw 'Invalid Time';\n        }\n\n        this.pm = (ampm === 'PM' || ampm === 'pm');\n        let time = this.parseTime(timeString);\n        value.setHours(time.hour);\n        value.setMinutes(time.minute);\n        value.setSeconds(time.second);\n    }\n\n    updateUI() {\n        let val = this.value||this.defaultDate||new Date();\n        if (Array.isArray(val)){\n            val = val[0];\n        }\n\n        this.currentMonth = val.getMonth();\n        this.currentYear = val.getFullYear();\n        this.createMonths(this.currentMonth, this.currentYear);\n\n        if (this.showTime||this.timeOnly) {\n            this.setCurrentHourPM(val.getHours());\n            this.currentMinute = val.getMinutes();\n            this.currentSecond = val.getSeconds();\n        }\n    }\n\n    showOverlay() {\n        if (!this.overlayVisible) {\n            this.updateUI();\n            this.overlayVisible = true;\n        }\n    }\n\n    hideOverlay() {\n        this.overlayVisible = false;\n        this.clearTimePickerTimer();\n\n        if (this.touchUI) {\n            this.disableModality();\n        }\n\n        this.cd.markForCheck();\n    }\n\n    toggle() {\n        if (!this.inline){\n            if (!this.overlayVisible) {\n                this.showOverlay();\n                this.inputfieldViewChild.nativeElement.focus();\n            }\n            else {\n                this.hideOverlay();\n            }\n        }\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n            case 'visibleTouchUI':\n                if (!this.inline) {\n                    this.overlay = event.element;\n                    this.appendOverlay();\n                    if (this.autoZIndex) {\n                        if (this.touchUI)\n                            ZIndexUtils.set('modal', this.overlay, this.baseZIndex || this.config.zIndex.modal);\n                        else\n                            ZIndexUtils.set('overlay', this.overlay, this.baseZIndex || this.config.zIndex.overlay);\n                    }\n\n                    this.alignOverlay();\n                    this.onShow.emit(event);\n                }\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n                this.onClose.emit(event);\n            break;\n        }\n    }\n\n    onOverlayAnimationDone(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n            case 'visibleTouchUI':\n                if (!this.inline) {\n                    this.bindDocumentClickListener();\n                    this.bindDocumentResizeListener();\n                    this.bindScrollListener();\n                }\n            break;\n\n            case 'void':\n                if (this.autoZIndex) {\n                    ZIndexUtils.clear(event.element);\n                }\n            break\n        }\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                DomHandler.appendChild(this.overlay, this.appendTo);\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.overlay && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlay);\n        }\n    }\n\n    alignOverlay() {\n        if (this.touchUI) {\n            this.enableModality(this.overlay);\n        }\n        else {\n            if (this.appendTo)\n                DomHandler.absolutePosition(this.overlay, this.inputfieldViewChild.nativeElement);\n            else\n                DomHandler.relativePosition(this.overlay, this.inputfieldViewChild.nativeElement);\n        }\n    }\n\n    enableModality(element) {\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = String(parseInt(element.style.zIndex) - 1);\n            let maskStyleClass = 'p-component-overlay p-datepicker-mask p-datepicker-mask-scrollblocker p-component-overlay p-component-overlay-enter';\n            DomHandler.addMultipleClasses(this.mask, maskStyleClass);\n\n\t\t\tthis.maskClickListener = this.renderer.listen(this.mask, 'click', (event: any) => {\n                this.disableModality();\n            });\n            document.body.appendChild(this.mask);\n            DomHandler.addClass(document.body, 'p-overflow-hidden');\n        }\n    }\n\n    disableModality() {\n        if (this.mask) {\n            DomHandler.addClass(this.mask, 'p-component-overlay-leave');\n            this.animationEndListener = this.destroyMask.bind(this);\n            this.mask.addEventListener('animationend', this.animationEndListener);\n        }\n    }\n\n    destroyMask() {\n        document.body.removeChild(this.mask);\n        let bodyChildren = document.body.children;\n        let hasBlockerMasks: boolean;\n        for (let i = 0; i < bodyChildren.length; i++) {\n            let bodyChild = bodyChildren[i];\n            if (DomHandler.hasClass(bodyChild, 'p-datepicker-mask-scrollblocker')) {\n                hasBlockerMasks = true;\n                break;\n            }\n        }\n\n        if (!hasBlockerMasks) {\n            DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        }\n\n        this.unbindAnimationEndListener();\n        this.unbindMaskClickListener();\n        this.mask = null;\n    }\n\n    unbindMaskClickListener() {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n\t\t}\n    }\n\n    unbindAnimationEndListener() {\n        if (this.animationEndListener && this.mask) {\n            this.mask.removeEventListener('animationend', this.animationEndListener);\n            this.animationEndListener = null;\n        }\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        if (this.value && typeof this.value === 'string') {\n            this.value = this.parseValueFromString(this.value);\n        }\n\n        this.updateInputfield();\n        this.updateUI();\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    getDateFormat() {\n        return this.dateFormat||this.getTranslation('dateFormat');\n    }\n\n    // Ported from jquery-ui datepicker formatDate\n    formatDate(date, format) {\n        if (!date) {\n            return '';\n        }\n\n        let iFormat;\n        const lookAhead = (match) => {\n            const matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        },\n            formatNumber = (match, value, len) => {\n                let num = '' + value;\n                if (lookAhead(match)) {\n                    while (num.length < len) {\n                        num = '0' + num;\n                    }\n                }\n                return num;\n            },\n            formatName = (match, value, shortNames, longNames) => {\n                return (lookAhead(match) ? longNames[value] : shortNames[value]);\n            };\n        let output = '';\n        let literal = false;\n\n        if (date) {\n            for (iFormat = 0; iFormat < format.length; iFormat++) {\n                if (literal) {\n                    if (format.charAt(iFormat) === '\\'' && !lookAhead('\\'')) {\n                        literal = false;\n                    } else {\n                        output += format.charAt(iFormat);\n                    }\n                } else {\n                    switch (format.charAt(iFormat)) {\n                        case 'd':\n                            output += formatNumber('d', date.getDate(), 2);\n                            break;\n                        case 'D':\n                            output += formatName('D', date.getDay(), this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));\n                            break;\n                        case 'o':\n                            output += formatNumber('o',\n                            Math.round((\n                                new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() -\n                                new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n                            break;\n                        case 'm':\n                            output += formatNumber('m', date.getMonth() + 1, 2);\n                            break;\n                        case 'M':\n                            output += formatName('M',date.getMonth(), this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));\n                            break;\n                        case 'y':\n                            output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100);\n                            break;\n                        case '@':\n                            output += date.getTime();\n                            break;\n                        case '!':\n                            output += date.getTime() * 10000 + this.ticksTo1970;\n                            break;\n                        case '\\'':\n                            if (lookAhead('\\'')) {\n                                output += '\\'';\n                            } else {\n                                literal = true;\n                            }\n                            break;\n                        default:\n                            output += format.charAt(iFormat);\n                    }\n                }\n            }\n        }\n        return output;\n    }\n\n    formatTime(date) {\n        if (!date) {\n            return '';\n        }\n\n        let output = '';\n        let hours = date.getHours();\n        let minutes = date.getMinutes();\n        let seconds = date.getSeconds();\n\n        if (this.hourFormat == '12' && hours > 11 && hours != 12) {\n            hours-=12;\n        }\n\n        if (this.hourFormat == '12') {\n            output += hours === 0 ? 12 : (hours < 10) ? '0' + hours : hours;\n        } else {\n            output += (hours < 10) ? '0' + hours : hours;\n        }\n        output += ':';\n        output += (minutes < 10) ? '0' + minutes : minutes;\n\n        if (this.showSeconds) {\n            output += ':';\n            output += (seconds < 10) ? '0' + seconds : seconds;\n        }\n\n        if (this.hourFormat == '12') {\n            output += date.getHours() > 11 ? ' PM' : ' AM';\n        }\n\n        return output;\n    }\n\n    parseTime(value) {\n        let tokens: string[] = value.split(':');\n        let validTokenLength = this.showSeconds ? 3 : 2;\n\n        if (tokens.length !== validTokenLength) {\n            throw \"Invalid time\";\n        }\n\n        let h = parseInt(tokens[0]);\n        let m = parseInt(tokens[1]);\n        let s = this.showSeconds ? parseInt(tokens[2]) : null;\n\n        if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (this.hourFormat == '12' && h > 12) || (this.showSeconds && (isNaN(s) || s > 59))) {\n            throw \"Invalid time\";\n        }\n        else {\n            if (this.hourFormat == '12') {\n                if (h !== 12 && this.pm) {\n                    h += 12;\n                }\n                else if (!this.pm && h === 12) {\n                    h -= 12;\n                }\n            }\n\n            return {hour: h, minute: m, second: s};\n        }\n    }\n\n    // Ported from jquery-ui datepicker parseDate\n    parseDate(value, format) {\n        if (format == null || value == null) {\n            throw \"Invalid arguments\";\n        }\n\n        value = (typeof value === \"object\" ? value.toString() : value + \"\");\n        if (value === \"\") {\n            return null;\n        }\n\n        let iFormat, dim, extra,\n        iValue = 0,\n        shortYearCutoff = (typeof this.shortYearCutoff !== \"string\" ? this.shortYearCutoff : new Date().getFullYear() % 100 + parseInt(this.shortYearCutoff, 10)),\n        year = -1,\n        month = -1,\n        day = -1,\n        doy = -1,\n        literal = false,\n        date,\n        lookAhead = (match) => {\n            let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        },\n        getNumber = (match) => {\n            let isDoubled = lookAhead(match),\n                size = (match === \"@\" ? 14 : (match === \"!\" ? 20 :\n                (match === \"y\" && isDoubled ? 4 : (match === \"o\" ? 3 : 2)))),\n                minSize = (match === \"y\" ? size : 1),\n                digits = new RegExp(\"^\\\\d{\" + minSize + \",\" + size + \"}\"),\n                num = value.substring(iValue).match(digits);\n            if (!num) {\n                throw \"Missing number at position \" + iValue;\n            }\n            iValue += num[ 0 ].length;\n            return parseInt(num[ 0 ], 10);\n        },\n        getName = (match, shortNames, longNames) => {\n            let index = -1;\n            let arr = lookAhead(match) ? longNames : shortNames;\n            let names = [];\n\n            for (let i = 0; i < arr.length; i++) {\n                names.push([i,arr[i]]);\n            }\n            names.sort((a,b) => {\n                return -(a[ 1 ].length - b[ 1 ].length);\n            });\n\n            for (let i = 0; i < names.length; i++) {\n                let name = names[i][1];\n                if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {\n                    index = names[i][0];\n                    iValue += name.length;\n                    break;\n                }\n            }\n\n            if (index !== -1) {\n                return index + 1;\n            } else {\n                throw \"Unknown name at position \" + iValue;\n            }\n        },\n        checkLiteral = () => {\n            if (value.charAt(iValue) !== format.charAt(iFormat)) {\n                throw \"Unexpected literal at position \" + iValue;\n            }\n            iValue++;\n        };\n\n        if (this.view === 'month') {\n            day = 1;\n        }\n\n        for (iFormat = 0; iFormat < format.length; iFormat++) {\n            if (literal) {\n                if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n                    literal = false;\n                } else {\n                    checkLiteral();\n                }\n            } else {\n                switch (format.charAt(iFormat)) {\n                    case \"d\":\n                        day = getNumber(\"d\");\n                        break;\n                    case \"D\":\n                        getName(\"D\", this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));\n                        break;\n                    case \"o\":\n                        doy = getNumber(\"o\");\n                        break;\n                    case \"m\":\n                        month = getNumber(\"m\");\n                        break;\n                    case \"M\":\n                        month = getName(\"M\", this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));\n                        break;\n                    case \"y\":\n                        year = getNumber(\"y\");\n                        break;\n                    case \"@\":\n                        date = new Date(getNumber(\"@\"));\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"!\":\n                        date = new Date((getNumber(\"!\") - this.ticksTo1970) / 10000);\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"'\":\n                        if (lookAhead(\"'\")) {\n                            checkLiteral();\n                        } else {\n                            literal = true;\n                        }\n                        break;\n                    default:\n                        checkLiteral();\n                }\n            }\n        }\n\n        if (iValue < value.length) {\n            extra = value.substr(iValue);\n            if (!/^\\s+/.test(extra)) {\n                throw \"Extra/unparsed characters found in date: \" + extra;\n            }\n        }\n\n        if (year === -1) {\n            year = new Date().getFullYear();\n        } else if (year < 100) {\n            year += new Date().getFullYear() - new Date().getFullYear() % 100 +\n                (year <= shortYearCutoff ? 0 : -100);\n        }\n\n        if (doy > -1) {\n            month = 1;\n            day = doy;\n            do {\n                dim = this.getDaysCountInMonth(year, month - 1);\n                if (day <= dim) {\n                    break;\n                }\n                month++;\n                day -= dim;\n            } while (true);\n        }\n\n        date = this.daylightSavingAdjust(new Date(year, month - 1, day));\n                if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n                    throw \"Invalid date\"; // E.g. 31/02/00\n                }\n\n        return date;\n    }\n\n    daylightSavingAdjust(date) {\n        if (!date) {\n            return null;\n        }\n\n        date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n\n        return date;\n    }\n\n    updateFilledState() {\n        this.filled = this.inputFieldValue && this.inputFieldValue != '';\n    }\n\n    onTodayButtonClick(event) {\n        let date: Date = new Date();\n        let dateMeta = {day: date.getDate(), month: date.getMonth(), year: date.getFullYear(), otherMonth: date.getMonth() !== this.currentMonth || date.getFullYear() !== this.currentYear, today: true, selectable: true};\n\n        this.onDateSelect(event, dateMeta);\n        this.onTodayClick.emit(event);\n    }\n\n    onClearButtonClick(event) {\n        this.updateModel(null);\n        this.updateInputfield();\n        this.hideOverlay();\n        this.onClearClick.emit(event);\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            this.zone.runOutsideAngular(() => {\n                const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n                this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n                    if (this.isOutsideClicked(event) && this.overlayVisible) {\n                        this.zone.run(() => {\n                            this.hideOverlay();\n                            this.onClickOutside.emit(event);\n\n                            this.cd.markForCheck();\n                        });\n                    }\n\n                });\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        if (!this.documentResizeListener && !this.touchUI) {\n            this.documentResizeListener = this.onWindowResize.bind(this);\n            window.addEventListener('resize', this.documentResizeListener);\n        }\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hideOverlay();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    isOutsideClicked(event: Event) {\n        return !(this.el.nativeElement.isSameNode(event.target) || this.isNavIconClicked(event) || \n                this.el.nativeElement.contains(event.target) || (this.overlay && this.overlay.contains(<Node> event.target)));\n    }\n\n    isNavIconClicked(event: Event) {\n        return (DomHandler.hasClass(event.target, 'p-datepicker-prev') || DomHandler.hasClass(event.target, 'p-datepicker-prev-icon')\n                || DomHandler.hasClass(event.target, 'p-datepicker-next') || DomHandler.hasClass(event.target, 'p-datepicker-next-icon'));\n    }\n\n    onWindowResize() {\n        if (this.overlayVisible && !DomHandler.isAndroid()) {\n            this.hideOverlay();\n        }\n    }\n\n    onOverlayHide() {\n        if (this.mask) {\n            this.destroyMask();\n        }\n\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.overlay = null;\n    }\n\n    ngOnDestroy() {\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n\n        if (this.overlay && this.autoZIndex) {\n            ZIndexUtils.clear(this.overlay);\n        }\n\n        this.clearTimePickerTimer();\n        this.restoreOverlayAppend();\n        this.onOverlayHide();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule,SharedModule,RippleModule],\n    exports: [Calendar,ButtonModule,SharedModule],\n    declarations: [Calendar]\n})\nexport class CalendarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-captcha.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-captcha.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-captcha.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,132 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+class Captcha {
+    constructor(el, _zone, cd) {
+        this.el = el;
+        this._zone = _zone;
+        this.cd = cd;
+        this.siteKey = null;
+        this.theme = 'light';
+        this.type = 'image';
+        this.size = 'normal';
+        this.tabindex = 0;
+        this.initCallback = "initRecaptcha";
+        this.onResponse = new EventEmitter();
+        this.onExpire = new EventEmitter();
+        this._instance = null;
+        this._language = null;
+    }
+    get language() {
+        return this._language;
+    }
+    set language(language) {
+        this._language = language;
+        this.init();
+    }
+    ngAfterViewInit() {
+        if (window.grecaptcha) {
+            if (!window.grecaptcha.render) {
+                setTimeout(() => {
+                    this.init();
+                }, 100);
+            }
+            else {
+                this.init();
+            }
+        }
+        else {
+            window[this.initCallback] = () => {
+                this.init();
+            };
+        }
+    }
+    init() {
+        this._instance = window.grecaptcha.render(this.el.nativeElement.children[0], {
+            'sitekey': this.siteKey,
+            'theme': this.theme,
+            'type': this.type,
+            'size': this.size,
+            'tabindex': this.tabindex,
+            'hl': this.language,
+            'callback': (response) => { this._zone.run(() => this.recaptchaCallback(response)); },
+            'expired-callback': () => { this._zone.run(() => this.recaptchaExpiredCallback()); }
+        });
+    }
+    reset() {
+        if (this._instance === null)
+            return;
+        window.grecaptcha.reset(this._instance);
+        this.cd.markForCheck();
+    }
+    getResponse() {
+        if (this._instance === null)
+            return null;
+        return window.grecaptcha.getResponse(this._instance);
+    }
+    recaptchaCallback(response) {
+        this.onResponse.emit({
+            response: response
+        });
+    }
+    recaptchaExpiredCallback() {
+        this.onExpire.emit();
+    }
+    ngOnDestroy() {
+        if (this._instance != null) {
+            window.grecaptcha.reset(this._instance);
+        }
+    }
+}
+Captcha.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Captcha, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Captcha.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Captcha, selector: "p-captcha", inputs: { siteKey: "siteKey", theme: "theme", type: "type", size: "size", tabindex: "tabindex", initCallback: "initCallback", language: "language" }, outputs: { onResponse: "onResponse", onExpire: "onExpire" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `<div></div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Captcha, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-captcha',
+                    template: `<div></div>`,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { siteKey: [{
+                type: Input
+            }], theme: [{
+                type: Input
+            }], type: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], initCallback: [{
+                type: Input
+            }], onResponse: [{
+                type: Output
+            }], onExpire: [{
+                type: Output
+            }], language: [{
+                type: Input
+            }] } });
+class CaptchaModule {
+}
+CaptchaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CaptchaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+CaptchaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CaptchaModule, declarations: [Captcha], imports: [CommonModule], exports: [Captcha] });
+CaptchaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CaptchaModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CaptchaModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Captcha],
+                    declarations: [Captcha]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Captcha, CaptchaModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-captcha.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-captcha.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-captcha.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-captcha.mjs","sources":["../../src/app/components/captcha/captcha.ts","../../src/app/components/captcha/primeng-captcha.ts"],"sourcesContent":["import {NgModule,AfterViewInit,Component,EventEmitter,Input,NgZone,OnDestroy,Output,ElementRef,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\n@Component({\n    selector: 'p-captcha',\n    template: `<div></div>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Captcha implements AfterViewInit,OnDestroy {\n\n    @Input() siteKey: string = null;\n\n    @Input() theme = 'light';\n\n    @Input() type = 'image';\n\n    @Input() size = 'normal';\n\n    @Input() tabindex = 0;\n\n    @Input() initCallback = \"initRecaptcha\";\n\n    @Output() onResponse: EventEmitter<any> = new EventEmitter();\n\n    @Output() onExpire: EventEmitter<any> = new EventEmitter();\n\n    private _instance: any = null;\n\n    private _language: any = null;\n\n\n    @Input() get language(): string {\n        return this._language;\n    }\n\n    set language(language: string) {\n        this._language = language;\n        this.init();\n    }\n\n    constructor(public el: ElementRef, public _zone: NgZone, public cd: ChangeDetectorRef) {}\n\n    ngAfterViewInit() {\n        if ((<any>window).grecaptcha) {\n            if (!(<any>window).grecaptcha.render){\n                setTimeout(() =>{\n                    this.init();\n                },100)\n            }\n            else {\n                this.init();\n            }\n        }\n        else {\n            (<any>window)[this.initCallback] = () => {\n              this.init();\n            }\n        }\n    }\n\n    init() {\n        this._instance = (<any>window).grecaptcha.render(this.el.nativeElement.children[0], {\n            'sitekey': this.siteKey,\n            'theme': this.theme,\n            'type': this.type,\n            'size': this.size,\n            'tabindex': this.tabindex,\n            'hl': this.language,\n            'callback': (response: string) => {this._zone.run(() => this.recaptchaCallback(response))},\n            'expired-callback': () => {this._zone.run(() => this.recaptchaExpiredCallback())}\n        });\n    }\n\n    reset() {\n        if (this._instance === null)\n            return;\n\n        (<any>window).grecaptcha.reset(this._instance);\n        this.cd.markForCheck();\n    }\n\n    getResponse(): String {\n        if (this._instance === null)\n            return null;\n\n        return (<any>window).grecaptcha.getResponse(this._instance);\n    }\n\n    recaptchaCallback(response: string) {\n        this.onResponse.emit({\n            response: response\n        });\n    }\n\n    recaptchaExpiredCallback() {\n        this.onExpire.emit();\n    }\n\n    ngOnDestroy() {\n        if (this._instance != null) {\n          (<any>window).grecaptcha.reset(this._instance);\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Captcha],\n    declarations: [Captcha]\n})\nexport class CaptchaModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MAYa,OAAO;IAgChB,YAAmB,EAAc,EAAS,KAAa,EAAS,EAAqB;QAAlE,OAAE,GAAF,EAAE,CAAY;QAAS,UAAK,GAAL,KAAK,CAAQ;QAAS,OAAE,GAAF,EAAE,CAAmB;QA9B5E,YAAO,GAAW,IAAI,CAAC;QAEvB,UAAK,GAAG,OAAO,CAAC;QAEhB,SAAI,GAAG,OAAO,CAAC;QAEf,SAAI,GAAG,QAAQ,CAAC;QAEhB,aAAQ,GAAG,CAAC,CAAC;QAEb,iBAAY,GAAG,eAAe,CAAC;QAE9B,eAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEnD,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEnD,cAAS,GAAQ,IAAI,CAAC;QAEtB,cAAS,GAAQ,IAAI,CAAC;KAY2D;IATzF,IAAa,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,QAAgB;QACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;KACf;IAID,eAAe;QACX,IAAU,MAAO,CAAC,UAAU,EAAE;YAC1B,IAAI,CAAO,MAAO,CAAC,UAAU,CAAC,MAAM,EAAC;gBACjC,UAAU,CAAC;oBACP,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf,EAAC,GAAG,CAAC,CAAA;aACT;iBACI;gBACD,IAAI,CAAC,IAAI,EAAE,CAAC;aACf;SACJ;aACI;YACK,MAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG;gBACjC,IAAI,CAAC,IAAI,EAAE,CAAC;aACb,CAAA;SACJ;KACJ;IAED,IAAI;QACA,IAAI,CAAC,SAAS,GAAS,MAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAChF,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,UAAU,EAAE,IAAI,CAAC,QAAQ;YACzB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,UAAU,EAAE,CAAC,QAAgB,OAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAA,EAAC;YAC1F,kBAAkB,EAAE,QAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA,EAAC;SACpF,CAAC,CAAC;KACN;IAED,KAAK;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;YACvB,OAAO;QAEL,MAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,WAAW;QACP,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;YACvB,OAAO,IAAI,CAAC;QAEhB,OAAa,MAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC/D;IAED,iBAAiB,CAAC,QAAgB;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACjB,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;KACN;IAED,wBAAwB;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,WAAW;QACP,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;YACpB,MAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAChD;KACJ;;oGA9FQ,OAAO;wFAAP,OAAO,2SAPN,aAAa;2FAOd,OAAO;kBATnB,SAAS;mBAAC;oBACP,QAAQ,EAAE,WAAW;oBACrB,QAAQ,EAAE,aAAa;oBACvB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,IAAI,EAAE;wBACF,OAAO,EAAE,WAAW;qBACvB;iBACJ;sJAGY,OAAO;sBAAf,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,YAAY;sBAApB,KAAK;gBAEI,UAAU;sBAAnB,MAAM;gBAEG,QAAQ;sBAAjB,MAAM;gBAOM,QAAQ;sBAApB,KAAK;;MA+EG,aAAa;;0GAAb,aAAa;2GAAb,aAAa,iBAtGb,OAAO,aAkGN,YAAY,aAlGb,OAAO;2GAsGP,aAAa,YAJb,CAAC,YAAY,CAAC;2FAId,aAAa;kBALzB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,YAAY,EAAE,CAAC,OAAO,CAAC;iBAC1B;;;ACjHD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-card.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-card.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-card.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,132 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChild, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { Header, Footer, PrimeTemplate, SharedModule } from 'primeng/api';
+
+class Card {
+    constructor(el) {
+        this.el = el;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'title':
+                    this.titleTemplate = item.template;
+                    break;
+                case 'subtitle':
+                    this.subtitleTemplate = item.template;
+                    break;
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+}
+Card.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Card, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+Card.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Card, selector: "p-card", inputs: { header: "header", subheader: "subheader", style: "style", styleClass: "styleClass" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "headerFacet", first: true, predicate: Header, descendants: true }, { propertyName: "footerFacet", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [ngClass]="'p-card p-component'" [ngStyle]="style" [class]="styleClass">
+            <div class="p-card-header" *ngIf="headerFacet || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            </div>
+            <div class="p-card-body">
+                <div class="p-card-title" *ngIf="header || titleTemplate">
+                    {{header}}
+                    <ng-container *ngTemplateOutlet="titleTemplate"></ng-container>
+                </div>
+                <div class="p-card-subtitle" *ngIf="subheader || subtitleTemplate">
+                    {{subheader}}
+                    <ng-container *ngTemplateOutlet="subtitleTemplate"></ng-container>
+                </div>
+                <div class="p-card-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+                <div class="p-card-footer" *ngIf="footerFacet || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-card-header img{width:100%}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Card, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-card', template: `
+        <div [ngClass]="'p-card p-component'" [ngStyle]="style" [class]="styleClass">
+            <div class="p-card-header" *ngIf="headerFacet || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            </div>
+            <div class="p-card-body">
+                <div class="p-card-title" *ngIf="header || titleTemplate">
+                    {{header}}
+                    <ng-container *ngTemplateOutlet="titleTemplate"></ng-container>
+                </div>
+                <div class="p-card-subtitle" *ngIf="subheader || subtitleTemplate">
+                    {{subheader}}
+                    <ng-container *ngTemplateOutlet="subtitleTemplate"></ng-container>
+                </div>
+                <div class="p-card-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+                <div class="p-card-footer" *ngIf="footerFacet || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-card-header img{width:100%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { header: [{
+                type: Input
+            }], subheader: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], headerFacet: [{
+                type: ContentChild,
+                args: [Header]
+            }], footerFacet: [{
+                type: ContentChild,
+                args: [Footer]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class CardModule {
+}
+CardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+CardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CardModule, declarations: [Card], imports: [CommonModule], exports: [Card, SharedModule] });
+CardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CardModule, imports: [[CommonModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CardModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Card, SharedModule],
+                    declarations: [Card]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Card, CardModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-card.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-card.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-card.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-card.mjs","sources":["../../src/app/components/card/card.ts","../../src/app/components/card/primeng-card.ts"],"sourcesContent":["import { NgModule, Component, Input, ElementRef, ContentChild, ChangeDetectionStrategy, ViewEncapsulation, TemplateRef, AfterContentInit, ContentChildren, QueryList } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule, Header, Footer, PrimeTemplate } from 'primeng/api';\nimport { BlockableUI } from 'primeng/api';\n\n@Component({\n    selector: 'p-card',\n    template: `\n        <div [ngClass]=\"'p-card p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-card-header\" *ngIf=\"headerFacet || headerTemplate\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n            </div>\n            <div class=\"p-card-body\">\n                <div class=\"p-card-title\" *ngIf=\"header || titleTemplate\">\n                    {{header}}\n                    <ng-container *ngTemplateOutlet=\"titleTemplate\"></ng-container>\n                </div>\n                <div class=\"p-card-subtitle\" *ngIf=\"subheader || subtitleTemplate\">\n                    {{subheader}}\n                    <ng-container *ngTemplateOutlet=\"subtitleTemplate\"></ng-container>\n                </div>\n                <div class=\"p-card-content\">\n                    <ng-content></ng-content>\n                    <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                </div>\n                <div class=\"p-card-footer\" *ngIf=\"footerFacet || footerTemplate\">\n                    <ng-content select=\"p-footer\"></ng-content>\n                    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n                </div>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./card.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Card implements AfterContentInit,BlockableUI {\n\n    @Input() header: string;\n\n    @Input() subheader: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @ContentChild(Header) headerFacet;\n\n    @ContentChild(Footer) footerFacet;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    titleTemplate: TemplateRef<any>;\n\n    subtitleTemplate: TemplateRef<any>;\n\n    contentTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    constructor(private el: ElementRef) { }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'title':\n                    this.titleTemplate = item.template;\n                break;\n\n                case 'subtitle':\n                    this.subtitleTemplate = item.template;\n                break;\n\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    getBlockableElement(): HTMLElement  {\n        return this.el.nativeElement.children[0];\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Card, SharedModule],\n    declarations: [Card]\n})\nexport class CardModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;MAwCa,IAAI;IA0Bb,YAAoB,EAAc;QAAd,OAAE,GAAF,EAAE,CAAY;KAAK;IAEvC,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAO,IAAI,CAAC,OAAO,EAAE;gBACjB,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN,KAAK,OAAO;oBACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACvC,MAAM;gBAEN,KAAK,UAAU;oBACX,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC1C,MAAM;gBAEN,KAAK,SAAS;oBACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACzC,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN;oBACI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACzC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;IAED,mBAAmB;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC5C;;iGA5DQ,IAAI;qFAAJ,IAAI,8NAUC,MAAM,8EAEN,MAAM,+DAEH,aAAa,6BA/CpB;;;;;;;;;;;;;;;;;;;;;;;;;KAyBT;2FAQQ,IAAI;kBAnChB,SAAS;+BACI,QAAQ,YACR;;;;;;;;;;;;;;;;;;;;;;;;;KAyBT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;iGAIQ,MAAM;sBAAd,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEgB,WAAW;sBAAhC,YAAY;uBAAC,MAAM;gBAEE,WAAW;sBAAhC,YAAY;uBAAC,MAAM;gBAEY,SAAS;sBAAxC,eAAe;uBAAC,aAAa;;MAuDrB,UAAU;;uGAAV,UAAU;wGAAV,UAAU,iBArEV,IAAI,aAiEH,YAAY,aAjEb,IAAI,EAkEG,YAAY;wGAGnB,UAAU,YAJV,CAAC,YAAY,CAAC,EACP,YAAY;2FAGnB,UAAU;kBALtB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC;oBAC7B,YAAY,EAAE,CAAC,IAAI,CAAC;iBACvB;;;AC5GD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-carousel.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-carousel.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-carousel.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,634 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChild, ContentChildren, NgModule } from '@angular/core';
+import { Header, Footer, PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { UniqueComponentId } from 'primeng/utils';
+
+class Carousel {
+    constructor(el, zone, cd) {
+        this.el = el;
+        this.zone = zone;
+        this.cd = cd;
+        this.orientation = "horizontal";
+        this.verticalViewPortHeight = "300px";
+        this.contentClass = "";
+        this.indicatorsContentClass = "";
+        this.indicatorStyleClass = "";
+        this.circular = false;
+        this.showIndicators = true;
+        this.showNavigators = true;
+        this.autoplayInterval = 0;
+        this.onPage = new EventEmitter();
+        this._numVisible = 1;
+        this._numScroll = 1;
+        this._oldNumScroll = 0;
+        this.prevState = {
+            numScroll: 0,
+            numVisible: 0,
+            value: []
+        };
+        this.defaultNumScroll = 1;
+        this.defaultNumVisible = 1;
+        this._page = 0;
+        this.isRemainingItemsAdded = false;
+        this.remainingItems = 0;
+        this.swipeThreshold = 20;
+        this.totalShiftedItems = this.page * this.numScroll * -1;
+    }
+    get page() {
+        return this._page;
+    }
+    set page(val) {
+        if (this.isCreated && val !== this._page) {
+            if (this.autoplayInterval) {
+                this.stopAutoplay();
+                this.allowAutoplay = false;
+            }
+            if (val > this._page && val <= (this.totalDots() - 1)) {
+                this.step(-1, val);
+            }
+            else if (val < this._page) {
+                this.step(1, val);
+            }
+        }
+        this._page = val;
+    }
+    get numVisible() {
+        return this._numVisible;
+    }
+    set numVisible(val) {
+        this._numVisible = val;
+    }
+    get numScroll() {
+        return this._numVisible;
+    }
+    set numScroll(val) {
+        this._numScroll = val;
+    }
+    get value() {
+        return this._value;
+    }
+    ;
+    set value(val) {
+        this._value = val;
+    }
+    ngOnChanges(simpleChange) {
+        if (simpleChange.value) {
+            if (this.circular && this._value) {
+                this.setCloneItems();
+            }
+        }
+        if (this.isCreated) {
+            if (simpleChange.numVisible) {
+                if (this.responsiveOptions) {
+                    this.defaultNumVisible = this.numVisible;
+                }
+                if (this.isCircular()) {
+                    this.setCloneItems();
+                }
+                this.createStyle();
+                this.calculatePosition();
+            }
+            if (simpleChange.numScroll) {
+                if (this.responsiveOptions) {
+                    this.defaultNumScroll = this.numScroll;
+                }
+            }
+        }
+    }
+    ngAfterContentInit() {
+        this.id = UniqueComponentId();
+        this.allowAutoplay = !!this.autoplayInterval;
+        if (this.circular) {
+            this.setCloneItems();
+        }
+        if (this.responsiveOptions) {
+            this.defaultNumScroll = this._numScroll;
+            this.defaultNumVisible = this._numVisible;
+        }
+        this.createStyle();
+        this.calculatePosition();
+        if (this.responsiveOptions) {
+            this.bindDocumentListeners();
+        }
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngAfterContentChecked() {
+        const isCircular = this.isCircular();
+        let totalShiftedItems = this.totalShiftedItems;
+        if (this.value && this.itemsContainer && (this.prevState.numScroll !== this._numScroll || this.prevState.numVisible !== this._numVisible || this.prevState.value.length !== this.value.length)) {
+            if (this.autoplayInterval) {
+                this.stopAutoplay();
+            }
+            this.remainingItems = (this.value.length - this._numVisible) % this._numScroll;
+            let page = this._page;
+            if (this.totalDots() !== 0 && page >= this.totalDots()) {
+                page = this.totalDots() - 1;
+                this._page = page;
+                this.onPage.emit({
+                    page: this.page
+                });
+            }
+            totalShiftedItems = (page * this._numScroll) * -1;
+            if (isCircular) {
+                totalShiftedItems -= this._numVisible;
+            }
+            if (page === (this.totalDots() - 1) && this.remainingItems > 0) {
+                totalShiftedItems += (-1 * this.remainingItems) + this._numScroll;
+                this.isRemainingItemsAdded = true;
+            }
+            else {
+                this.isRemainingItemsAdded = false;
+            }
+            if (totalShiftedItems !== this.totalShiftedItems) {
+                this.totalShiftedItems = totalShiftedItems;
+            }
+            this._oldNumScroll = this._numScroll;
+            this.prevState.numScroll = this._numScroll;
+            this.prevState.numVisible = this._numVisible;
+            this.prevState.value = [...this._value];
+            if (this.totalDots() > 0 && this.itemsContainer.nativeElement) {
+                this.itemsContainer.nativeElement.style.transform = this.isVertical() ? `translate3d(0, ${totalShiftedItems * (100 / this._numVisible)}%, 0)` : `translate3d(${totalShiftedItems * (100 / this._numVisible)}%, 0, 0)`;
+            }
+            this.isCreated = true;
+            if (this.autoplayInterval && this.isAutoplay()) {
+                this.startAutoplay();
+            }
+        }
+        if (isCircular) {
+            if (this.page === 0) {
+                totalShiftedItems = -1 * this._numVisible;
+            }
+            else if (totalShiftedItems === 0) {
+                totalShiftedItems = -1 * this.value.length;
+                if (this.remainingItems > 0) {
+                    this.isRemainingItemsAdded = true;
+                }
+            }
+            if (totalShiftedItems !== this.totalShiftedItems) {
+                this.totalShiftedItems = totalShiftedItems;
+            }
+        }
+    }
+    createStyle() {
+        if (!this.carouselStyle) {
+            this.carouselStyle = document.createElement('style');
+            this.carouselStyle.type = 'text/css';
+            document.body.appendChild(this.carouselStyle);
+        }
+        let innerHTML = `
+            #${this.id} .p-carousel-item {
+				flex: 1 0 ${(100 / this.numVisible)}%
+			}
+        `;
+        if (this.responsiveOptions) {
+            this.responsiveOptions.sort((data1, data2) => {
+                const value1 = data1.breakpoint;
+                const value2 = data2.breakpoint;
+                let result = null;
+                if (value1 == null && value2 != null)
+                    result = -1;
+                else if (value1 != null && value2 == null)
+                    result = 1;
+                else if (value1 == null && value2 == null)
+                    result = 0;
+                else if (typeof value1 === 'string' && typeof value2 === 'string')
+                    result = value1.localeCompare(value2, undefined, { numeric: true });
+                else
+                    result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
+                return -1 * result;
+            });
+            for (let i = 0; i < this.responsiveOptions.length; i++) {
+                let res = this.responsiveOptions[i];
+                innerHTML += `
+                    @media screen and (max-width: ${res.breakpoint}) {
+                        #${this.id} .p-carousel-item {
+                            flex: 1 0 ${(100 / res.numVisible)}%
+                        }
+                    }
+                `;
+            }
+        }
+        this.carouselStyle.innerHTML = innerHTML;
+    }
+    calculatePosition() {
+        if (this.responsiveOptions) {
+            let windowWidth = window.innerWidth;
+            let matchedResponsiveData = {
+                numVisible: this.defaultNumVisible,
+                numScroll: this.defaultNumScroll
+            };
+            for (let i = 0; i < this.responsiveOptions.length; i++) {
+                let res = this.responsiveOptions[i];
+                if (parseInt(res.breakpoint, 10) >= windowWidth) {
+                    matchedResponsiveData = res;
+                }
+            }
+            if (this._numScroll !== matchedResponsiveData.numScroll) {
+                let page = this._page;
+                page = Math.floor((page * this._numScroll) / matchedResponsiveData.numScroll);
+                let totalShiftedItems = (matchedResponsiveData.numScroll * this.page) * -1;
+                if (this.isCircular()) {
+                    totalShiftedItems -= matchedResponsiveData.numVisible;
+                }
+                this.totalShiftedItems = totalShiftedItems;
+                this._numScroll = matchedResponsiveData.numScroll;
+                this._page = page;
+                this.onPage.emit({
+                    page: this.page
+                });
+            }
+            if (this._numVisible !== matchedResponsiveData.numVisible) {
+                this._numVisible = matchedResponsiveData.numVisible;
+                this.setCloneItems();
+            }
+            this.cd.markForCheck();
+        }
+    }
+    setCloneItems() {
+        this.clonedItemsForStarting = [];
+        this.clonedItemsForFinishing = [];
+        if (this.isCircular()) {
+            this.clonedItemsForStarting.push(...this.value.slice(-1 * this._numVisible));
+            this.clonedItemsForFinishing.push(...this.value.slice(0, this._numVisible));
+        }
+    }
+    firstIndex() {
+        return this.isCircular() ? (-1 * (this.totalShiftedItems + this.numVisible)) : (this.totalShiftedItems * -1);
+    }
+    lastIndex() {
+        return this.firstIndex() + this.numVisible - 1;
+    }
+    totalDots() {
+        return this.value ? Math.ceil((this.value.length - this._numVisible) / this._numScroll) + 1 : 0;
+    }
+    totalDotsArray() {
+        const totalDots = this.totalDots();
+        return totalDots <= 0 ? [] : Array(totalDots).fill(0);
+    }
+    isVertical() {
+        return this.orientation === 'vertical';
+    }
+    isCircular() {
+        return this.circular && this.value && this.value.length >= this.numVisible;
+    }
+    isAutoplay() {
+        return this.autoplayInterval && this.allowAutoplay;
+    }
+    isForwardNavDisabled() {
+        return this.isEmpty() || (this._page >= (this.totalDots() - 1) && !this.isCircular());
+    }
+    isBackwardNavDisabled() {
+        return this.isEmpty() || (this._page <= 0 && !this.isCircular());
+    }
+    isEmpty() {
+        return !this.value || this.value.length === 0;
+    }
+    navForward(e, index) {
+        if (this.isCircular() || this._page < (this.totalDots() - 1)) {
+            this.step(-1, index);
+        }
+        if (this.autoplayInterval) {
+            this.stopAutoplay();
+            this.allowAutoplay = false;
+        }
+        if (e && e.cancelable) {
+            e.preventDefault();
+        }
+    }
+    navBackward(e, index) {
+        if (this.isCircular() || this._page !== 0) {
+            this.step(1, index);
+        }
+        if (this.autoplayInterval) {
+            this.stopAutoplay();
+            this.allowAutoplay = false;
+        }
+        if (e && e.cancelable) {
+            e.preventDefault();
+        }
+    }
+    onDotClick(e, index) {
+        let page = this._page;
+        if (this.autoplayInterval) {
+            this.stopAutoplay();
+            this.allowAutoplay = false;
+        }
+        if (index > page) {
+            this.navForward(e, index);
+        }
+        else if (index < page) {
+            this.navBackward(e, index);
+        }
+    }
+    step(dir, page) {
+        let totalShiftedItems = this.totalShiftedItems;
+        const isCircular = this.isCircular();
+        if (page != null) {
+            totalShiftedItems = (this._numScroll * page) * -1;
+            if (isCircular) {
+                totalShiftedItems -= this._numVisible;
+            }
+            this.isRemainingItemsAdded = false;
+        }
+        else {
+            totalShiftedItems += (this._numScroll * dir);
+            if (this.isRemainingItemsAdded) {
+                totalShiftedItems += this.remainingItems - (this._numScroll * dir);
+                this.isRemainingItemsAdded = false;
+            }
+            let originalShiftedItems = isCircular ? (totalShiftedItems + this._numVisible) : totalShiftedItems;
+            page = Math.abs(Math.floor((originalShiftedItems / this._numScroll)));
+        }
+        if (isCircular && this.page === (this.totalDots() - 1) && dir === -1) {
+            totalShiftedItems = -1 * (this.value.length + this._numVisible);
+            page = 0;
+        }
+        else if (isCircular && this.page === 0 && dir === 1) {
+            totalShiftedItems = 0;
+            page = (this.totalDots() - 1);
+        }
+        else if (page === (this.totalDots() - 1) && this.remainingItems > 0) {
+            totalShiftedItems += ((this.remainingItems * -1) - (this._numScroll * dir));
+            this.isRemainingItemsAdded = true;
+        }
+        if (this.itemsContainer) {
+            this.itemsContainer.nativeElement.style.transform = this.isVertical() ? `translate3d(0, ${totalShiftedItems * (100 / this._numVisible)}%, 0)` : `translate3d(${totalShiftedItems * (100 / this._numVisible)}%, 0, 0)`;
+            this.itemsContainer.nativeElement.style.transition = 'transform 500ms ease 0s';
+        }
+        this.totalShiftedItems = totalShiftedItems;
+        this._page = page;
+        this.onPage.emit({
+            page: this.page
+        });
+    }
+    startAutoplay() {
+        this.interval = setInterval(() => {
+            if (this.totalDots() > 0) {
+                if (this.page === (this.totalDots() - 1)) {
+                    this.step(-1, 0);
+                }
+                else {
+                    this.step(-1, this.page + 1);
+                }
+            }
+        }, this.autoplayInterval);
+    }
+    stopAutoplay() {
+        if (this.interval) {
+            clearInterval(this.interval);
+        }
+    }
+    onTransitionEnd() {
+        if (this.itemsContainer) {
+            this.itemsContainer.nativeElement.style.transition = '';
+            if ((this.page === 0 || this.page === (this.totalDots() - 1)) && this.isCircular()) {
+                this.itemsContainer.nativeElement.style.transform = this.isVertical() ? `translate3d(0, ${this.totalShiftedItems * (100 / this._numVisible)}%, 0)` : `translate3d(${this.totalShiftedItems * (100 / this._numVisible)}%, 0, 0)`;
+            }
+        }
+    }
+    onTouchStart(e) {
+        let touchobj = e.changedTouches[0];
+        this.startPos = {
+            x: touchobj.pageX,
+            y: touchobj.pageY
+        };
+    }
+    onTouchMove(e) {
+        if (e.cancelable) {
+            e.preventDefault();
+        }
+    }
+    onTouchEnd(e) {
+        let touchobj = e.changedTouches[0];
+        if (this.isVertical()) {
+            this.changePageOnTouch(e, (touchobj.pageY - this.startPos.y));
+        }
+        else {
+            this.changePageOnTouch(e, (touchobj.pageX - this.startPos.x));
+        }
+    }
+    changePageOnTouch(e, diff) {
+        if (Math.abs(diff) > this.swipeThreshold) {
+            if (diff < 0) {
+                this.navForward(e);
+            }
+            else {
+                this.navBackward(e);
+            }
+        }
+    }
+    bindDocumentListeners() {
+        if (!this.documentResizeListener) {
+            this.documentResizeListener = (e) => {
+                this.calculatePosition();
+            };
+            window.addEventListener('resize', this.documentResizeListener);
+        }
+    }
+    unbindDocumentListeners() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    ngOnDestroy() {
+        if (this.responsiveOptions) {
+            this.unbindDocumentListeners();
+        }
+        if (this.autoplayInterval) {
+            this.stopAutoplay();
+        }
+    }
+}
+Carousel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Carousel, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Carousel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Carousel, selector: "p-carousel", inputs: { page: "page", numVisible: "numVisible", numScroll: "numScroll", responsiveOptions: "responsiveOptions", orientation: "orientation", verticalViewPortHeight: "verticalViewPortHeight", contentClass: "contentClass", indicatorsContentClass: "indicatorsContentClass", indicatorsContentStyle: "indicatorsContentStyle", indicatorStyleClass: "indicatorStyleClass", indicatorStyle: "indicatorStyle", value: "value", circular: "circular", showIndicators: "showIndicators", showNavigators: "showNavigators", autoplayInterval: "autoplayInterval", style: "style", styleClass: "styleClass" }, outputs: { onPage: "onPage" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "headerFacet", first: true, predicate: Header, descendants: true }, { propertyName: "footerFacet", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "itemsContainer", first: true, predicate: ["itemsContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
+		<div [attr.id]="id" [ngClass]="{'p-carousel p-component':true, 'p-carousel-vertical': isVertical(), 'p-carousel-horizontal': !isVertical()}" [ngStyle]="style" [class]="styleClass">
+			<div class="p-carousel-header" *ngIf="headerFacet || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+			</div>
+			<div [class]="contentClass" [ngClass]="'p-carousel-content'">
+				<div class="p-carousel-container">
+					<button type="button" *ngIf="showNavigators" [ngClass]="{'p-carousel-prev p-link':true, 'p-disabled': isBackwardNavDisabled()}" [disabled]="isBackwardNavDisabled()" (click)="navBackward($event)" pRipple>
+						<span [ngClass]="{'p-carousel-prev-icon pi': true, 'pi-chevron-left': !isVertical(), 'pi-chevron-up': isVertical()}"></span>
+					</button>
+					<div class="p-carousel-items-content" [ngStyle]="{'height': isVertical() ? verticalViewPortHeight : 'auto'}">
+						<div #itemsContainer class="p-carousel-items-container" (transitionend)="onTransitionEnd()" (touchend)="onTouchEnd($event)" (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)">
+                            <div *ngFor="let item of clonedItemsForStarting; let index = index" [ngClass]= "{'p-carousel-item p-carousel-item-cloned': true,
+                                'p-carousel-item-active': (totalShiftedItems * -1) === (value.length),
+							    'p-carousel-item-start': 0 === index,
+							    'p-carousel-item-end': (clonedItemsForStarting.length - 1) === index}">
+								<ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+							</div>
+                            <div *ngFor="let item of value; let index = index" [ngClass]= "{'p-carousel-item': true,
+                                'p-carousel-item-active': (firstIndex() <= index && lastIndex() >= index),
+							    'p-carousel-item-start': firstIndex() === index,
+							    'p-carousel-item-end': lastIndex() === index}">
+								<ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+							</div>
+                            <div *ngFor="let item of clonedItemsForFinishing; let index = index" [ngClass]= "{'p-carousel-item p-carousel-item-cloned': true,
+                                'p-carousel-item-active': ((totalShiftedItems *-1) === numVisible),
+							    'p-carousel-item-start': 0 === index,
+							    'p-carousel-item-end': (clonedItemsForFinishing.length - 1) === index}">
+								<ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+							</div>
+						</div>
+					</div>
+					<button type="button" *ngIf="showNavigators" [ngClass]="{'p-carousel-next p-link': true, 'p-disabled': isForwardNavDisabled()}" [disabled]="isForwardNavDisabled()" (click)="navForward($event)" pRipple>
+						<span [ngClass]="{'p-carousel-prev-icon pi': true, 'pi-chevron-right': !isVertical(), 'pi-chevron-down': isVertical()}"></span>
+					</button>
+				</div>
+				<ul [ngClass]="'p-carousel-indicators p-reset'" [class]="indicatorsContentClass" [ngStyle]="indicatorsContentStyle" *ngIf="showIndicators">
+					<li *ngFor="let totalDot of totalDotsArray(); let i = index" [ngClass]="{'p-carousel-indicator':true,'p-highlight': _page === i}">
+						<button type="button" [ngClass]="'p-link'" (click)="onDotClick($event, i)" [class]="indicatorStyleClass" [ngStyle]="indicatorStyle"></button>
+					</li>
+				</ul>
+			</div>
+			<div class="p-carousel-footer" *ngIf="footerFacet || footerTemplate">
+                <ng-content select="p-footer"></ng-content>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+			</div>
+		</div>
+    `, isInline: true, styles: [".p-carousel{display:flex;flex-direction:column}.p-carousel-content{display:flex;flex-direction:column;overflow:auto}.p-carousel-prev,.p-carousel-next{align-self:center;flex-grow:0;flex-shrink:0;display:flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-carousel-container{display:flex;flex-direction:row}.p-carousel-items-content{overflow:hidden;width:100%}.p-carousel-items-container{display:flex;flex-direction:row}.p-carousel-indicators{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.p-carousel-indicator>button{display:flex;align-items:center;justify-content:center}.p-carousel-vertical .p-carousel-container{flex-direction:column}.p-carousel-vertical .p-carousel-items-container{flex-direction:column;height:100%}.p-items-hidden .p-carousel-item{visibility:hidden}.p-items-hidden .p-carousel-item.p-carousel-item-active{visibility:visible}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.Ripple, selector: "[pRipple]" }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Carousel, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-carousel', template: `
+		<div [attr.id]="id" [ngClass]="{'p-carousel p-component':true, 'p-carousel-vertical': isVertical(), 'p-carousel-horizontal': !isVertical()}" [ngStyle]="style" [class]="styleClass">
+			<div class="p-carousel-header" *ngIf="headerFacet || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+			</div>
+			<div [class]="contentClass" [ngClass]="'p-carousel-content'">
+				<div class="p-carousel-container">
+					<button type="button" *ngIf="showNavigators" [ngClass]="{'p-carousel-prev p-link':true, 'p-disabled': isBackwardNavDisabled()}" [disabled]="isBackwardNavDisabled()" (click)="navBackward($event)" pRipple>
+						<span [ngClass]="{'p-carousel-prev-icon pi': true, 'pi-chevron-left': !isVertical(), 'pi-chevron-up': isVertical()}"></span>
+					</button>
+					<div class="p-carousel-items-content" [ngStyle]="{'height': isVertical() ? verticalViewPortHeight : 'auto'}">
+						<div #itemsContainer class="p-carousel-items-container" (transitionend)="onTransitionEnd()" (touchend)="onTouchEnd($event)" (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)">
+                            <div *ngFor="let item of clonedItemsForStarting; let index = index" [ngClass]= "{'p-carousel-item p-carousel-item-cloned': true,
+                                'p-carousel-item-active': (totalShiftedItems * -1) === (value.length),
+							    'p-carousel-item-start': 0 === index,
+							    'p-carousel-item-end': (clonedItemsForStarting.length - 1) === index}">
+								<ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+							</div>
+                            <div *ngFor="let item of value; let index = index" [ngClass]= "{'p-carousel-item': true,
+                                'p-carousel-item-active': (firstIndex() <= index && lastIndex() >= index),
+							    'p-carousel-item-start': firstIndex() === index,
+							    'p-carousel-item-end': lastIndex() === index}">
+								<ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+							</div>
+                            <div *ngFor="let item of clonedItemsForFinishing; let index = index" [ngClass]= "{'p-carousel-item p-carousel-item-cloned': true,
+                                'p-carousel-item-active': ((totalShiftedItems *-1) === numVisible),
+							    'p-carousel-item-start': 0 === index,
+							    'p-carousel-item-end': (clonedItemsForFinishing.length - 1) === index}">
+								<ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+							</div>
+						</div>
+					</div>
+					<button type="button" *ngIf="showNavigators" [ngClass]="{'p-carousel-next p-link': true, 'p-disabled': isForwardNavDisabled()}" [disabled]="isForwardNavDisabled()" (click)="navForward($event)" pRipple>
+						<span [ngClass]="{'p-carousel-prev-icon pi': true, 'pi-chevron-right': !isVertical(), 'pi-chevron-down': isVertical()}"></span>
+					</button>
+				</div>
+				<ul [ngClass]="'p-carousel-indicators p-reset'" [class]="indicatorsContentClass" [ngStyle]="indicatorsContentStyle" *ngIf="showIndicators">
+					<li *ngFor="let totalDot of totalDotsArray(); let i = index" [ngClass]="{'p-carousel-indicator':true,'p-highlight': _page === i}">
+						<button type="button" [ngClass]="'p-link'" (click)="onDotClick($event, i)" [class]="indicatorStyleClass" [ngStyle]="indicatorStyle"></button>
+					</li>
+				</ul>
+			</div>
+			<div class="p-carousel-footer" *ngIf="footerFacet || footerTemplate">
+                <ng-content select="p-footer"></ng-content>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+			</div>
+		</div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-carousel{display:flex;flex-direction:column}.p-carousel-content{display:flex;flex-direction:column;overflow:auto}.p-carousel-prev,.p-carousel-next{align-self:center;flex-grow:0;flex-shrink:0;display:flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-carousel-container{display:flex;flex-direction:row}.p-carousel-items-content{overflow:hidden;width:100%}.p-carousel-items-container{display:flex;flex-direction:row}.p-carousel-indicators{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.p-carousel-indicator>button{display:flex;align-items:center;justify-content:center}.p-carousel-vertical .p-carousel-container{flex-direction:column}.p-carousel-vertical .p-carousel-items-container{flex-direction:column;height:100%}.p-items-hidden .p-carousel-item{visibility:hidden}.p-items-hidden .p-carousel-item.p-carousel-item-active{visibility:visible}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { page: [{
+                type: Input
+            }], numVisible: [{
+                type: Input
+            }], numScroll: [{
+                type: Input
+            }], responsiveOptions: [{
+                type: Input
+            }], orientation: [{
+                type: Input
+            }], verticalViewPortHeight: [{
+                type: Input
+            }], contentClass: [{
+                type: Input
+            }], indicatorsContentClass: [{
+                type: Input
+            }], indicatorsContentStyle: [{
+                type: Input
+            }], indicatorStyleClass: [{
+                type: Input
+            }], indicatorStyle: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], circular: [{
+                type: Input
+            }], showIndicators: [{
+                type: Input
+            }], showNavigators: [{
+                type: Input
+            }], autoplayInterval: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], onPage: [{
+                type: Output
+            }], itemsContainer: [{
+                type: ViewChild,
+                args: ['itemsContainer']
+            }], headerFacet: [{
+                type: ContentChild,
+                args: [Header]
+            }], footerFacet: [{
+                type: ContentChild,
+                args: [Footer]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class CarouselModule {
+}
+CarouselModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+CarouselModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CarouselModule, declarations: [Carousel], imports: [CommonModule, SharedModule, RippleModule], exports: [CommonModule, Carousel, SharedModule] });
+CarouselModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CarouselModule, imports: [[CommonModule, SharedModule, RippleModule], CommonModule, SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CarouselModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, RippleModule],
+                    exports: [CommonModule, Carousel, SharedModule],
+                    declarations: [Carousel]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Carousel, CarouselModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-carousel.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-carousel.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-carousel.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-carousel.mjs","sources":["../../src/app/components/carousel/carousel.ts","../../src/app/components/carousel/primeng-carousel.ts"],"sourcesContent":["import { Component, Input, ElementRef, ViewChild, AfterContentInit, TemplateRef, ContentChildren, QueryList, NgModule, NgZone, EventEmitter, Output, ContentChild, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, SimpleChanges } from '@angular/core';\nimport { PrimeTemplate, SharedModule, Header, Footer } from 'primeng/api';\nimport { RippleModule } from 'primeng/ripple';\nimport { CommonModule } from '@angular/common';\nimport { UniqueComponentId } from 'primeng/utils';\n\n@Component({\n\tselector: 'p-carousel',\n\ttemplate: `\n\t\t<div [attr.id]=\"id\" [ngClass]=\"{'p-carousel p-component':true, 'p-carousel-vertical': isVertical(), 'p-carousel-horizontal': !isVertical()}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n\t\t\t<div class=\"p-carousel-header\" *ngIf=\"headerFacet || headerTemplate\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n\t\t\t</div>\n\t\t\t<div [class]=\"contentClass\" [ngClass]=\"'p-carousel-content'\">\n\t\t\t\t<div class=\"p-carousel-container\">\n\t\t\t\t\t<button type=\"button\" *ngIf=\"showNavigators\" [ngClass]=\"{'p-carousel-prev p-link':true, 'p-disabled': isBackwardNavDisabled()}\" [disabled]=\"isBackwardNavDisabled()\" (click)=\"navBackward($event)\" pRipple>\n\t\t\t\t\t\t<span [ngClass]=\"{'p-carousel-prev-icon pi': true, 'pi-chevron-left': !isVertical(), 'pi-chevron-up': isVertical()}\"></span>\n\t\t\t\t\t</button>\n\t\t\t\t\t<div class=\"p-carousel-items-content\" [ngStyle]=\"{'height': isVertical() ? verticalViewPortHeight : 'auto'}\">\n\t\t\t\t\t\t<div #itemsContainer class=\"p-carousel-items-container\" (transitionend)=\"onTransitionEnd()\" (touchend)=\"onTouchEnd($event)\" (touchstart)=\"onTouchStart($event)\" (touchmove)=\"onTouchMove($event)\">\n                            <div *ngFor=\"let item of clonedItemsForStarting; let index = index\" [ngClass]= \"{'p-carousel-item p-carousel-item-cloned': true,\n                                'p-carousel-item-active': (totalShiftedItems * -1) === (value.length),\n\t\t\t\t\t\t\t    'p-carousel-item-start': 0 === index,\n\t\t\t\t\t\t\t    'p-carousel-item-end': (clonedItemsForStarting.length - 1) === index}\">\n\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item}\"></ng-container>\n\t\t\t\t\t\t\t</div>\n                            <div *ngFor=\"let item of value; let index = index\" [ngClass]= \"{'p-carousel-item': true,\n                                'p-carousel-item-active': (firstIndex() <= index && lastIndex() >= index),\n\t\t\t\t\t\t\t    'p-carousel-item-start': firstIndex() === index,\n\t\t\t\t\t\t\t    'p-carousel-item-end': lastIndex() === index}\">\n\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item}\"></ng-container>\n\t\t\t\t\t\t\t</div>\n                            <div *ngFor=\"let item of clonedItemsForFinishing; let index = index\" [ngClass]= \"{'p-carousel-item p-carousel-item-cloned': true,\n                                'p-carousel-item-active': ((totalShiftedItems *-1) === numVisible),\n\t\t\t\t\t\t\t    'p-carousel-item-start': 0 === index,\n\t\t\t\t\t\t\t    'p-carousel-item-end': (clonedItemsForFinishing.length - 1) === index}\">\n\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item}\"></ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<button type=\"button\" *ngIf=\"showNavigators\" [ngClass]=\"{'p-carousel-next p-link': true, 'p-disabled': isForwardNavDisabled()}\" [disabled]=\"isForwardNavDisabled()\" (click)=\"navForward($event)\" pRipple>\n\t\t\t\t\t\t<span [ngClass]=\"{'p-carousel-prev-icon pi': true, 'pi-chevron-right': !isVertical(), 'pi-chevron-down': isVertical()}\"></span>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<ul [ngClass]=\"'p-carousel-indicators p-reset'\" [class]=\"indicatorsContentClass\" [ngStyle]=\"indicatorsContentStyle\" *ngIf=\"showIndicators\">\n\t\t\t\t\t<li *ngFor=\"let totalDot of totalDotsArray(); let i = index\" [ngClass]=\"{'p-carousel-indicator':true,'p-highlight': _page === i}\">\n\t\t\t\t\t\t<button type=\"button\" [ngClass]=\"'p-link'\" (click)=\"onDotClick($event, i)\" [class]=\"indicatorStyleClass\" [ngStyle]=\"indicatorStyle\"></button>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div class=\"p-carousel-footer\" *ngIf=\"footerFacet || footerTemplate\">\n                <ng-content select=\"p-footer\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n\t\t\t</div>\n\t\t</div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./carousel.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Carousel implements AfterContentInit {\n\n\t@Input() get page():number {\n\t\treturn this._page;\n\t}\n\tset page(val:number) {\n\t\tif (this.isCreated && val !== this._page) {\n\t\t\tif (this.autoplayInterval) {\n\t\t\t\tthis.stopAutoplay();\n\t\t\t\tthis.allowAutoplay = false;\n\t\t\t}\n\n\t\t\tif (val > this._page && val <= (this.totalDots() - 1)) {\n\t\t\t\tthis.step(-1, val);\n\t\t\t}\n\t\t\telse if (val < this._page ) {\n\t\t\t\tthis.step(1, val);\n\t\t\t}\n\t\t}\n\n\t\tthis._page = val;\n\t}\n\n\t@Input() get numVisible():number {\n\t\treturn this._numVisible;\n\t}\n\tset numVisible(val:number) {\n\t\tthis._numVisible = val;\n\t}\n\n\t@Input() get numScroll():number {\n\t\treturn this._numVisible;\n\t}\n\tset numScroll(val:number) {\n\t\tthis._numScroll = val;\n\t}\n\n\t@Input() responsiveOptions: any[];\n\n\t@Input() orientation = \"horizontal\";\n\n\t@Input() verticalViewPortHeight = \"300px\";\n\n\t@Input() contentClass: string = \"\";\n\n\t@Input() indicatorsContentClass: string = \"\";\n\n\t@Input() indicatorsContentStyle: any;\n\n\t@Input() indicatorStyleClass: string = \"\";\n\n\t@Input() indicatorStyle: any;\n\n\t@Input() get value() :any[] {\n\t\treturn this._value;\n\t};\n\tset value(val) {\n\t\tthis._value = val;\n\t}\n\n\t@Input() circular: boolean = false;\n\n\t@Input() showIndicators: boolean = true;\n\n\t@Input() showNavigators: boolean = true;\n\n\t@Input() autoplayInterval:number = 0;\n\n\t@Input() style: any;\n\n\t@Input() styleClass: string;\n\n    @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n\t@ViewChild('itemsContainer') itemsContainer: ElementRef;\n\n\t@ContentChild(Header) headerFacet;\n\n    @ContentChild(Footer) footerFacet;\n\n\t@ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n\t_numVisible: number = 1;\n\n\t_numScroll: number = 1;\n\n\t_oldNumScroll: number = 0;\n\n\tprevState: any = {\n\t\tnumScroll:0,\n\t\tnumVisible:0,\n\t\tvalue: []\n\t};\n\n\tdefaultNumScroll:number = 1;\n\n\tdefaultNumVisible:number = 1;\n\n\t_page: number = 0;\n\n\t_value: any[];\n\n\tcarouselStyle:any;\n\n\tid:string;\n\n\ttotalShiftedItems;\n\n\tisRemainingItemsAdded:boolean = false;\n\n\tanimationTimeout:any;\n\n\ttranslateTimeout:any;\n\n\tremainingItems: number = 0;\n\n\t_items: any[];\n\n\tstartPos: any;\n\n\tdocumentResizeListener: any;\n\n\tclonedItemsForStarting: any[];\n\n\tclonedItemsForFinishing: any[];\n\n\tallowAutoplay: boolean;\n\n\tinterval: any;\n\n\tisCreated: boolean;\n\n\tswipeThreshold: number = 20;\n\n    itemTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n\tconstructor(public el: ElementRef, public zone: NgZone, public cd: ChangeDetectorRef) {\n\t\tthis.totalShiftedItems = this.page * this.numScroll * -1;\n\t}\n\n\tngOnChanges(simpleChange: SimpleChanges) {\n\t\tif (simpleChange.value) {\n\t\t\tif (this.circular && this._value) {\n\t\t\t\tthis.setCloneItems();\n\t\t\t}\n\t\t}\n\n\t\tif (this.isCreated) {\n\n\t\t\tif (simpleChange.numVisible) {\n\t\t\t\tif (this.responsiveOptions) {\n\t\t\t\t\tthis.defaultNumVisible = this.numVisible;\n\t\t\t\t}\n\n\t\t\t\tif (this.isCircular()) {\n\t\t\t\t\tthis.setCloneItems();\n\t\t\t\t}\n\n\t\t\t\tthis.createStyle();\n\t\t\t\tthis.calculatePosition();\n\t\t\t}\n\n\t\t\tif (simpleChange.numScroll) {\n\t\t\t\tif (this.responsiveOptions) {\n\t\t\t\t\tthis.defaultNumScroll = this.numScroll;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tngAfterContentInit() {\n\t\tthis.id = UniqueComponentId();\n\t\tthis.allowAutoplay = !!this.autoplayInterval;\n\n\t\tif (this.circular) {\n\t\t\tthis.setCloneItems();\n\t\t}\n\n\t\tif (this.responsiveOptions) {\n\t\t\tthis.defaultNumScroll = this._numScroll;\n\t\t\tthis.defaultNumVisible = this._numVisible;\n\t\t}\n\n\t\tthis.createStyle();\n\t\tthis.calculatePosition();\n\n\t\tif (this.responsiveOptions) {\n\t\t\tthis.bindDocumentListeners();\n\t\t}\n\n\t\tthis.templates.forEach((item) => {\n\t\t\tswitch (item.getType()) {\n\t\t\t\tcase 'item':\n\t\t\t\t\tthis.itemTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.itemTemplate = item.template;\n                break;\n\t\t\t}\n\t\t});\n\t}\n\n\tngAfterContentChecked() {\n\t\tconst isCircular = this.isCircular();\n\t\tlet totalShiftedItems = this.totalShiftedItems;\n\n\t\tif (this.value && this.itemsContainer && (this.prevState.numScroll !== this._numScroll || this.prevState.numVisible !== this._numVisible || this.prevState.value.length !== this.value.length)) {\n\t\t\tif (this.autoplayInterval) {\n\t\t\t\tthis.stopAutoplay();\n\t\t\t}\n\n\t\t\tthis.remainingItems = (this.value.length - this._numVisible) % this._numScroll;\n\n\t\t\tlet page = this._page;\n\t\t\tif (this.totalDots() !== 0 && page >= this.totalDots()) {\n                page = this.totalDots() - 1;\n\t\t\t\tthis._page = page;\n\t\t\t\tthis.onPage.emit({\n\t\t\t\t\tpage: this.page\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttotalShiftedItems = (page * this._numScroll) * -1;\n            if (isCircular) {\n                totalShiftedItems -= this._numVisible;\n            }\n\n\t\t\tif (page === (this.totalDots() - 1) && this.remainingItems > 0) {\n\t\t\t\ttotalShiftedItems += (-1 * this.remainingItems) + this._numScroll;\n\t\t\t\tthis.isRemainingItemsAdded = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.isRemainingItemsAdded = false;\n\t\t\t}\n\n\t\t\tif (totalShiftedItems !== this.totalShiftedItems) {\n                this.totalShiftedItems = totalShiftedItems;\n            }\n\n\t\t\tthis._oldNumScroll = this._numScroll;\n\t\t\tthis.prevState.numScroll = this._numScroll;\n\t\t\tthis.prevState.numVisible = this._numVisible;\n\t\t\tthis.prevState.value = [...this._value];\n\n\t\t\tif (this.totalDots() > 0  && this.itemsContainer.nativeElement) {\n\t\t\t\tthis.itemsContainer.nativeElement.style.transform = this.isVertical() ? `translate3d(0, ${totalShiftedItems * (100/ this._numVisible)}%, 0)` : `translate3d(${totalShiftedItems * (100/ this._numVisible)}%, 0, 0)`;\n\t\t\t}\n\n\t\t\tthis.isCreated = true;\n\n\t\t\tif (this.autoplayInterval && this.isAutoplay()) {\n\t\t\t\tthis.startAutoplay();\n\t\t\t}\n\t\t}\n\n\t\tif (isCircular) {\n            if (this.page === 0) {\n                totalShiftedItems = -1 * this._numVisible;\n            }\n            else if (totalShiftedItems === 0) {\n                totalShiftedItems = -1 * this.value.length;\n                if (this.remainingItems > 0) {\n                    this.isRemainingItemsAdded = true;\n                }\n            }\n\n            if (totalShiftedItems !== this.totalShiftedItems) {\n\t\t\t\tthis.totalShiftedItems = totalShiftedItems;\n            }\n\t\t}\n\t}\n\n\tcreateStyle() {\n\t\t\tif (!this.carouselStyle) {\n\t\t\t\tthis.carouselStyle = document.createElement('style');\n\t\t\t\tthis.carouselStyle.type = 'text/css';\n\t\t\t\tdocument.body.appendChild(this.carouselStyle);\n\t\t\t}\n\n\t\t\tlet innerHTML = `\n            #${this.id} .p-carousel-item {\n\t\t\t\tflex: 1 0 ${ (100/ this.numVisible) }%\n\t\t\t}\n        `;\n\n\t\t\tif (this.responsiveOptions) {\n\t\t\t\tthis.responsiveOptions.sort((data1, data2) => {\n\t\t\t\t\tconst value1 = data1.breakpoint;\n\t\t\t\t\tconst value2 = data2.breakpoint;\n\t\t\t\t\tlet result = null;\n\n\t\t\t\t\tif (value1 == null && value2 != null)\n\t\t\t\t\t\tresult = -1;\n\t\t\t\t\telse if (value1 != null && value2 == null)\n\t\t\t\t\t\tresult = 1;\n\t\t\t\t\telse if (value1 == null && value2 == null)\n\t\t\t\t\t\tresult = 0;\n\t\t\t\t\telse if (typeof value1 === 'string' && typeof value2 === 'string')\n\t\t\t\t\t\tresult = value1.localeCompare(value2, undefined, { numeric: true });\n\t\t\t\t\telse\n\t\t\t\t\t\tresult = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n\t\t\t\t\treturn -1 * result;\n\t\t\t\t});\n\n\t\t\t\tfor (let i = 0; i < this.responsiveOptions.length; i++) {\n\t\t\t\t\tlet res = this.responsiveOptions[i];\n\n\t\t\t\t\tinnerHTML += `\n                    @media screen and (max-width: ${res.breakpoint}) {\n                        #${this.id} .p-carousel-item {\n                            flex: 1 0 ${ (100/ res.numVisible) }%\n                        }\n                    }\n                `\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.carouselStyle.innerHTML = innerHTML;\n\t\t}\n\n\tcalculatePosition() {\n\t\tif (this.responsiveOptions) {\n\t\t\tlet windowWidth = window.innerWidth;\n\t\t\tlet matchedResponsiveData = {\n\t\t\t\tnumVisible: this.defaultNumVisible,\n\t\t\t\tnumScroll: this.defaultNumScroll\n\t\t\t};\n\n\t\t\tfor (let i = 0; i < this.responsiveOptions.length; i++) {\n\t\t\t\tlet res = this.responsiveOptions[i];\n\n\t\t\t\tif (parseInt(res.breakpoint, 10) >= windowWidth) {\n\t\t\t\t\tmatchedResponsiveData = res;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._numScroll !== matchedResponsiveData.numScroll) {\n\t\t\t\tlet page = this._page;\n\t\t\t\tpage = Math.floor((page * this._numScroll) / matchedResponsiveData.numScroll);\n\n\t\t\t\tlet totalShiftedItems = (matchedResponsiveData.numScroll * this.page) * -1;\n\n\t\t\t\tif (this.isCircular()) {\n\t\t\t\t\ttotalShiftedItems -= matchedResponsiveData.numVisible;\n\t\t\t\t}\n\n\t\t\t\tthis.totalShiftedItems = totalShiftedItems;\n\t\t\t\tthis._numScroll = matchedResponsiveData.numScroll;\n\n\t\t\t\tthis._page = page;\n\t\t\t\tthis.onPage.emit({\n\t\t\t\t\tpage: this.page\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this._numVisible !== matchedResponsiveData.numVisible) {\n\t\t\t\tthis._numVisible = matchedResponsiveData.numVisible;\n\t\t\t\tthis.setCloneItems();\n\t\t\t}\n\n\t\t\tthis.cd.markForCheck();\n\t\t}\n\t}\n\n\tsetCloneItems() {\n\t\tthis.clonedItemsForStarting = [];\n\t\tthis.clonedItemsForFinishing = [];\n\t\tif (this.isCircular()) {\n\t\t\tthis.clonedItemsForStarting.push(...this.value.slice(-1 * this._numVisible));\n\t\t\tthis.clonedItemsForFinishing.push(...this.value.slice(0, this._numVisible));\n\t\t}\n\t}\n\n\tfirstIndex() {\n\t\treturn this.isCircular() ? (-1 * (this.totalShiftedItems + this.numVisible)) : (this.totalShiftedItems * -1);\n\t}\n\n\tlastIndex() {\n\t\treturn this.firstIndex() + this.numVisible - 1;\n\t}\n\n\ttotalDots() {\n\t\treturn this.value ? Math.ceil((this.value.length - this._numVisible) / this._numScroll) + 1 : 0;\n\t}\n\n\ttotalDotsArray() {\n\t\tconst totalDots = this.totalDots();\n\t\treturn totalDots <= 0 ? [] : Array(totalDots).fill(0);\n\t}\n\n\tisVertical() {\n\t\treturn this.orientation === 'vertical';\n\t}\n\n\tisCircular() {\n\t\treturn this.circular && this.value && this.value.length >= this.numVisible;\n\t}\n\n\tisAutoplay() {\n\t\treturn this.autoplayInterval && this.allowAutoplay;\n\t}\n\n\tisForwardNavDisabled() {\n\t\treturn this.isEmpty() || (this._page >= (this.totalDots() - 1) && !this.isCircular());\n\t}\n\n\tisBackwardNavDisabled() {\n\t\treturn this.isEmpty() || (this._page <= 0  && !this.isCircular());\n\t}\n\n\tisEmpty() {\n\t\treturn !this.value || this.value.length === 0;\n\t}\n\n\tnavForward(e,index?) {\n\t\tif (this.isCircular() || this._page < (this.totalDots() - 1)) {\n\t\t\tthis.step(-1, index);\n\t\t}\n\n\t\tif (this.autoplayInterval) {\n\t\t\tthis.stopAutoplay();\n\t\t\tthis.allowAutoplay = false;\n\t\t}\n\n\t\tif (e && e.cancelable) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\tnavBackward(e,index?) {\n\t\tif (this.isCircular() || this._page !== 0) {\n\t\t\tthis.step(1, index);\n\t\t}\n\n\t\tif (this.autoplayInterval) {\n\t\t\tthis.stopAutoplay();\n\t\t\tthis.allowAutoplay = false;\n\t\t}\n\n\t\tif (e && e.cancelable) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\tonDotClick(e, index) {\n\t\tlet page = this._page;\n\n\t\tif (this.autoplayInterval) {\n\t\t\tthis.stopAutoplay();\n\t\t\tthis.allowAutoplay = false;\n\t\t}\n\n\t\tif (index > page) {\n\t\t\tthis.navForward(e, index);\n\t\t}\n\t\telse if (index < page) {\n\t\t\tthis.navBackward(e, index);\n\t\t}\n\t}\n\n\tstep(dir, page) {\n\t\tlet totalShiftedItems = this.totalShiftedItems;\n\t\tconst isCircular = this.isCircular();\n\n\t\tif (page != null) {\n\t\t\ttotalShiftedItems = (this._numScroll * page) * -1;\n\n\t\t\tif (isCircular) {\n\t\t\t\ttotalShiftedItems -= this._numVisible;\n\t\t\t}\n\n\t\t\tthis.isRemainingItemsAdded = false;\n\t\t}\n\t\telse {\n\t\t\ttotalShiftedItems += (this._numScroll * dir);\n\t\t\tif (this.isRemainingItemsAdded) {\n\t\t\t\ttotalShiftedItems += this.remainingItems - (this._numScroll * dir);\n\t\t\t\tthis.isRemainingItemsAdded = false;\n\t\t\t}\n\n\t\t\tlet originalShiftedItems = isCircular ? (totalShiftedItems + this._numVisible) : totalShiftedItems;\n\t\t\tpage = Math.abs(Math.floor((originalShiftedItems / this._numScroll)));\n\t\t}\n\n\t\tif (isCircular && this.page === (this.totalDots() - 1) && dir === -1) {\n\t\t\ttotalShiftedItems = -1 * (this.value.length + this._numVisible);\n\t\t\tpage = 0;\n\t\t}\n\t\telse if (isCircular && this.page === 0 && dir === 1) {\n\t\t\ttotalShiftedItems = 0;\n\t\t\tpage = (this.totalDots() - 1);\n\t\t}\n\t\telse if (page === (this.totalDots() - 1) && this.remainingItems > 0) {\n\t\t\ttotalShiftedItems += ((this.remainingItems * -1) - (this._numScroll * dir));\n\t\t\tthis.isRemainingItemsAdded = true;\n\t\t}\n\n\t\tif (this.itemsContainer) {\n\t\t\tthis.itemsContainer.nativeElement.style.transform = this.isVertical() ? `translate3d(0, ${totalShiftedItems * (100/ this._numVisible)}%, 0)` : `translate3d(${totalShiftedItems * (100/ this._numVisible)}%, 0, 0)`;\n\t\t\tthis.itemsContainer.nativeElement.style.transition = 'transform 500ms ease 0s';\n\t\t}\n\n\t\tthis.totalShiftedItems = totalShiftedItems;\n\t\tthis._page = page;\n\t\tthis.onPage.emit({\n\t\t\tpage: this.page\n\t\t});\n\t}\n\n\tstartAutoplay() {\n\t\tthis.interval = setInterval(() => {\n\t\t\tif (this.totalDots() > 0) {\n\t\t\t\tif (this.page === (this.totalDots() - 1)) {\n\t\t\t\t\tthis.step(-1, 0);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.step(-1, this.page + 1);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tthis.autoplayInterval);\n\t}\n\n\tstopAutoplay() {\n\t\tif (this.interval) {\n\t\t\tclearInterval(this.interval);\n\t\t}\n\t}\n\n\tonTransitionEnd() {\n\t\tif (this.itemsContainer) {\n\t\t\tthis.itemsContainer.nativeElement.style.transition = '';\n\n\t\t\tif ((this.page === 0 || this.page === (this.totalDots() - 1)) && this.isCircular()) {\n\t\t\t\tthis.itemsContainer.nativeElement.style.transform = this.isVertical() ? `translate3d(0, ${this.totalShiftedItems * (100/ this._numVisible)}%, 0)` : `translate3d(${this.totalShiftedItems * (100/ this._numVisible)}%, 0, 0)`;\n\t\t\t}\n\t\t}\n\t}\n\n\tonTouchStart(e) {\n\t\tlet touchobj = e.changedTouches[0];\n\n\t\tthis.startPos = {\n\t\t\tx: touchobj.pageX,\n\t\t\ty: touchobj.pageY\n\t\t};\n\t}\n\n\tonTouchMove(e) {\n\t\tif (e.cancelable) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\tonTouchEnd(e) {\n\t\tlet touchobj = e.changedTouches[0];\n\n\t\tif (this.isVertical()) {\n\t\t\tthis.changePageOnTouch(e, (touchobj.pageY - this.startPos.y));\n\t\t}\n\t\telse {\n\t\t\tthis.changePageOnTouch(e, (touchobj.pageX - this.startPos.x));\n\t\t}\n\t}\n\n\tchangePageOnTouch(e, diff) {\n\t\tif (Math.abs(diff) > this.swipeThreshold) {\n\t\t\tif (diff < 0) {\n\t\t\t\tthis.navForward(e);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.navBackward(e);\n\n\t\t\t}\n\t\t}\n\t}\n\n\tbindDocumentListeners() {\n\t\tif (!this.documentResizeListener) {\n\t\t\tthis.documentResizeListener = (e) => {\n\t\t\t\tthis.calculatePosition();\n\t\t\t};\n\n\t\t\twindow.addEventListener('resize', this.documentResizeListener);\n\t\t}\n\t}\n\n\tunbindDocumentListeners() {\n\t\tif (this.documentResizeListener) {\n\t\t\twindow.removeEventListener('resize', this.documentResizeListener);\n\t\t\tthis.documentResizeListener = null;\n\t\t}\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.responsiveOptions) {\n\t\t\tthis.unbindDocumentListeners();\n\t\t}\n\t\tif (this.autoplayInterval) {\n\t\t\tthis.stopAutoplay();\n\t\t}\n    }\n\n}\n\n@NgModule({\n\timports: [CommonModule, SharedModule, RippleModule],\n\texports: [CommonModule, Carousel, SharedModule],\n\tdeclarations: [Carousel]\n})\nexport class CarouselModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-cascadeselect.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-cascadeselect.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-cascadeselect.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,711 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/api';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { ObjectUtils, ZIndexUtils } from 'primeng/utils';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import { trigger, transition, style, animate } from '@angular/animations';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+
+const CASCADESELECT_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => CascadeSelect),
+    multi: true
+};
+class CascadeSelectSub {
+    constructor(cascadeSelect, el) {
+        this.el = el;
+        this.level = 0;
+        this.onSelect = new EventEmitter();
+        this.onGroupSelect = new EventEmitter();
+        this.activeOption = null;
+        this.cascadeSelect = cascadeSelect;
+    }
+    get parentActive() {
+        return this._parentActive;
+    }
+    ;
+    set parentActive(val) {
+        if (!val) {
+            this.activeOption = null;
+        }
+        this._parentActive = val;
+    }
+    ngOnInit() {
+        if (this.selectionPath && this.options && !this.dirty) {
+            for (let option of this.options) {
+                if (this.selectionPath.includes(option)) {
+                    this.activeOption = option;
+                    break;
+                }
+            }
+        }
+        if (!this.root) {
+            this.position();
+        }
+    }
+    onOptionClick(event, option) {
+        if (this.isOptionGroup(option)) {
+            this.activeOption = (this.activeOption === option) ? null : option;
+            this.onGroupSelect.emit({
+                originalEvent: event,
+                value: option
+            });
+        }
+        else {
+            this.onSelect.emit({
+                originalEvent: event,
+                value: this.getOptionValue(option)
+            });
+        }
+    }
+    onOptionSelect(event) {
+        this.onSelect.emit(event);
+    }
+    onOptionGroupSelect(event) {
+        this.onGroupSelect.emit(event);
+    }
+    getOptionLabel(option) {
+        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : option;
+    }
+    getOptionValue(option) {
+        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : option;
+    }
+    getOptionGroupLabel(optionGroup) {
+        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : null;
+    }
+    getOptionGroupChildren(optionGroup) {
+        return ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren[this.level]);
+    }
+    isOptionGroup(option) {
+        return Object.prototype.hasOwnProperty.call(option, this.optionGroupChildren[this.level]);
+    }
+    getOptionLabelToRender(option) {
+        return this.isOptionGroup(option) ? this.getOptionGroupLabel(option) : this.getOptionLabel(option);
+    }
+    getItemClass(option) {
+        return {
+            'p-cascadeselect-item': true,
+            'p-cascadeselect-item-group': this.isOptionGroup(option),
+            'p-cascadeselect-item-active p-highlight': this.isOptionActive(option)
+        };
+    }
+    isOptionActive(option) {
+        return this.activeOption === option;
+    }
+    onKeyDown(event, option, index) {
+        let listItem = event.currentTarget.parentElement;
+        switch (event.key) {
+            case 'Down':
+            case 'ArrowDown':
+                var nextItem = this.el.nativeElement.children[0].children[index + 1];
+                if (nextItem) {
+                    nextItem.children[0].focus();
+                }
+                event.preventDefault();
+                break;
+            case 'Up':
+            case 'ArrowUp':
+                var prevItem = this.el.nativeElement.children[0].children[index - 1];
+                if (prevItem) {
+                    prevItem.children[0].focus();
+                }
+                event.preventDefault();
+                break;
+            case 'Right':
+            case 'ArrowRight':
+                if (this.isOptionGroup(option)) {
+                    if (this.isOptionActive(option)) {
+                        listItem.children[1].children[0].children[0].children[0].focus();
+                    }
+                    else {
+                        this.activeOption = option;
+                    }
+                }
+                event.preventDefault();
+                break;
+            case 'Left':
+            case 'ArrowLeft':
+                this.activeOption = null;
+                var parentList = listItem.parentElement.parentElement.parentElement;
+                if (parentList) {
+                    parentList.children[0].focus();
+                }
+                event.preventDefault();
+                break;
+            case 'Enter':
+                this.onOptionClick(event, option);
+                event.preventDefault();
+                break;
+            case 'Tab':
+            case 'Escape':
+                this.cascadeSelect.hide();
+                event.preventDefault();
+                break;
+        }
+    }
+    position() {
+        const parentItem = this.el.nativeElement.parentElement;
+        const containerOffset = DomHandler.getOffset(parentItem);
+        const viewport = DomHandler.getViewport();
+        const sublistWidth = this.el.nativeElement.children[0].offsetParent ? this.el.nativeElement.children[0].offsetWidth : DomHandler.getHiddenElementOuterWidth(this.el.nativeElement.children[0]);
+        const itemOuterWidth = DomHandler.getOuterWidth(parentItem.children[0]);
+        if ((parseInt(containerOffset.left, 10) + itemOuterWidth + sublistWidth) > (viewport.width - DomHandler.calculateScrollbarWidth())) {
+            this.el.nativeElement.children[0].style.left = '-200%';
+        }
+    }
+}
+CascadeSelectSub.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CascadeSelectSub, deps: [{ token: forwardRef(() => CascadeSelect) }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+CascadeSelectSub.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: CascadeSelectSub, selector: "p-cascadeSelectSub", inputs: { selectionPath: "selectionPath", options: "options", optionGroupChildren: "optionGroupChildren", optionTemplate: "optionTemplate", level: "level", optionLabel: "optionLabel", optionValue: "optionValue", optionGroupLabel: "optionGroupLabel", dirty: "dirty", root: "root", parentActive: "parentActive" }, outputs: { onSelect: "onSelect", onGroupSelect: "onGroupSelect" }, ngImport: i0, template: `
+        <ul class="p-cascadeselect-panel p-cascadeselect-items" [ngClass]="{'p-cascadeselect-panel-root': root}" role="listbox" aria-orientation="horizontal">
+            <ng-template ngFor let-option [ngForOf]="options" let-i="index">
+                <li [ngClass]="getItemClass(option)" role="none">
+                    <div class="p-cascadeselect-item-content" (click)="onOptionClick($event, option)" tabindex="0" (keydown)="onKeyDown($event, option, i)" pRipple>
+                        <ng-container *ngIf="optionTemplate;else defaultOptionTemplate">
+                            <ng-container *ngTemplateOutlet="optionTemplate; context: {$implicit: option}"></ng-container>
+                        </ng-container>
+                        <ng-template #defaultOptionTemplate>
+                            <span class="p-cascadeselect-item-text">{{getOptionLabelToRender(option)}}</span>
+                        </ng-template>
+                        <span class="p-cascadeselect-group-icon pi pi-angle-right" *ngIf="isOptionGroup(option)"></span>
+                    </div>
+                    <p-cascadeSelectSub *ngIf="isOptionGroup(option) && isOptionActive(option)" class="p-cascadeselect-sublist" [selectionPath]="selectionPath" [options]="getOptionGroupChildren(option)"
+                        [optionLabel]="optionLabel" [optionValue]="optionValue" [level]="level + 1" (onSelect)="onOptionSelect($event)" (onOptionGroupSelect)="onOptionGroupSelect()"
+                        [optionGroupLabel]="optionGroupLabel" [optionGroupChildren]="optionGroupChildren" [parentActive]="isOptionActive(option)" [dirty]="dirty" [optionTemplate]="optionTemplate">
+                    </p-cascadeSelectSub>
+                </li>
+            </ng-template>
+        </ul>
+    `, isInline: true, components: [{ type: CascadeSelectSub, selector: "p-cascadeSelectSub", inputs: ["selectionPath", "options", "optionGroupChildren", "optionTemplate", "level", "optionLabel", "optionValue", "optionGroupLabel", "dirty", "root", "parentActive"], outputs: ["onSelect", "onGroupSelect"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.Ripple, selector: "[pRipple]" }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CascadeSelectSub, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-cascadeSelectSub',
+                    template: `
+        <ul class="p-cascadeselect-panel p-cascadeselect-items" [ngClass]="{'p-cascadeselect-panel-root': root}" role="listbox" aria-orientation="horizontal">
+            <ng-template ngFor let-option [ngForOf]="options" let-i="index">
+                <li [ngClass]="getItemClass(option)" role="none">
+                    <div class="p-cascadeselect-item-content" (click)="onOptionClick($event, option)" tabindex="0" (keydown)="onKeyDown($event, option, i)" pRipple>
+                        <ng-container *ngIf="optionTemplate;else defaultOptionTemplate">
+                            <ng-container *ngTemplateOutlet="optionTemplate; context: {$implicit: option}"></ng-container>
+                        </ng-container>
+                        <ng-template #defaultOptionTemplate>
+                            <span class="p-cascadeselect-item-text">{{getOptionLabelToRender(option)}}</span>
+                        </ng-template>
+                        <span class="p-cascadeselect-group-icon pi pi-angle-right" *ngIf="isOptionGroup(option)"></span>
+                    </div>
+                    <p-cascadeSelectSub *ngIf="isOptionGroup(option) && isOptionActive(option)" class="p-cascadeselect-sublist" [selectionPath]="selectionPath" [options]="getOptionGroupChildren(option)"
+                        [optionLabel]="optionLabel" [optionValue]="optionValue" [level]="level + 1" (onSelect)="onOptionSelect($event)" (onOptionGroupSelect)="onOptionGroupSelect()"
+                        [optionGroupLabel]="optionGroupLabel" [optionGroupChildren]="optionGroupChildren" [parentActive]="isOptionActive(option)" [dirty]="dirty" [optionTemplate]="optionTemplate">
+                    </p-cascadeSelectSub>
+                </li>
+            </ng-template>
+        </ul>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    changeDetection: ChangeDetectionStrategy.OnPush
+                }]
+        }], ctorParameters: function () { return [{ type: undefined, decorators: [{
+                    type: Inject,
+                    args: [forwardRef(() => CascadeSelect)]
+                }] }, { type: i0.ElementRef }]; }, propDecorators: { selectionPath: [{
+                type: Input
+            }], options: [{
+                type: Input
+            }], optionGroupChildren: [{
+                type: Input
+            }], optionTemplate: [{
+                type: Input
+            }], level: [{
+                type: Input
+            }], optionLabel: [{
+                type: Input
+            }], optionValue: [{
+                type: Input
+            }], optionGroupLabel: [{
+                type: Input
+            }], dirty: [{
+                type: Input
+            }], root: [{
+                type: Input
+            }], onSelect: [{
+                type: Output
+            }], onGroupSelect: [{
+                type: Output
+            }], parentActive: [{
+                type: Input
+            }] } });
+class CascadeSelect {
+    constructor(el, cd, config, overlayService) {
+        this.el = el;
+        this.cd = cd;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.onChange = new EventEmitter();
+        this.onGroupChange = new EventEmitter();
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.onBeforeShow = new EventEmitter();
+        this.onBeforeHide = new EventEmitter();
+        this.selectionPath = null;
+        this.focused = false;
+        this.filled = false;
+        this.overlayVisible = false;
+        this.dirty = false;
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    ngOnInit() {
+        this.updateSelectionPath();
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'value':
+                    this.valueTemplate = item.template;
+                    break;
+                case 'option':
+                    this.optionTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    onOptionSelect(event) {
+        this.value = event.value;
+        this.updateSelectionPath();
+        this.onModelChange(this.value);
+        this.onChange.emit(event);
+        this.hide();
+        this.focusInputEl.nativeElement.focus();
+    }
+    onOptionGroupSelect(event) {
+        this.dirty = true;
+        this.onGroupChange.emit(event);
+    }
+    getOptionLabel(option) {
+        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : option;
+    }
+    getOptionValue(option) {
+        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : option;
+    }
+    getOptionGroupChildren(optionGroup, level) {
+        return ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren[level]);
+    }
+    isOptionGroup(option, level) {
+        return Object.prototype.hasOwnProperty.call(option, this.optionGroupChildren[level]);
+    }
+    updateSelectionPath() {
+        let path;
+        if (this.value != null && this.options) {
+            for (let option of this.options) {
+                path = this.findModelOptionInGroup(option, 0);
+                if (path) {
+                    break;
+                }
+            }
+        }
+        this.selectionPath = path;
+        this.updateFilledState();
+    }
+    updateFilledState() {
+        this.filled = !(this.selectionPath == null || this.selectionPath.length == 0);
+    }
+    findModelOptionInGroup(option, level) {
+        if (this.isOptionGroup(option, level)) {
+            let selectedOption;
+            for (let childOption of this.getOptionGroupChildren(option, level)) {
+                selectedOption = this.findModelOptionInGroup(childOption, level + 1);
+                if (selectedOption) {
+                    selectedOption.unshift(option);
+                    return selectedOption;
+                }
+            }
+        }
+        else if ((ObjectUtils.equals(this.value, this.getOptionValue(option), this.dataKey))) {
+            return [option];
+        }
+        return null;
+    }
+    show() {
+        this.onBeforeShow.emit();
+        this.overlayVisible = true;
+    }
+    hide() {
+        this.onBeforeHide.emit();
+        this.overlayVisible = false;
+        this.cd.markForCheck();
+    }
+    onClick(event) {
+        if (this.disabled) {
+            return;
+        }
+        if (!this.overlayEl || !this.overlayEl || !this.overlayEl.contains(event.target)) {
+            if (this.overlayVisible) {
+                this.hide();
+            }
+            else {
+                this.show();
+            }
+            this.focusInputEl.nativeElement.focus();
+        }
+    }
+    onFocus() {
+        this.focused = true;
+    }
+    onBlur() {
+        this.focused = false;
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.overlayEl = event.element;
+                this.onOverlayEnter();
+                break;
+        }
+    }
+    onOverlayAnimationDone(event) {
+        switch (event.toState) {
+            case 'void':
+                this.onOverlayLeave();
+                break;
+        }
+    }
+    onOverlayEnter() {
+        ZIndexUtils.set('overlay', this.overlayEl, this.config.zIndex.overlay);
+        this.appendContainer();
+        this.alignOverlay();
+        this.bindOutsideClickListener();
+        this.bindScrollListener();
+        this.bindResizeListener();
+        this.onShow.emit();
+    }
+    onOverlayLeave() {
+        this.unbindOutsideClickListener();
+        this.unbindScrollListener();
+        this.unbindResizeListener();
+        this.onHide.emit();
+        ZIndexUtils.clear(this.overlayEl);
+        this.overlayEl = null;
+        this.dirty = false;
+    }
+    writeValue(value) {
+        this.value = value;
+        this.updateSelectionPath();
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    alignOverlay() {
+        if (this.appendTo) {
+            DomHandler.absolutePosition(this.overlayEl, this.containerEl.nativeElement);
+            this.overlayEl.style.minWidth = DomHandler.getOuterWidth(this.containerEl.nativeElement) + 'px';
+        }
+        else {
+            DomHandler.relativePosition(this.overlayEl, this.containerEl.nativeElement);
+        }
+    }
+    bindOutsideClickListener() {
+        if (!this.outsideClickListener) {
+            this.outsideClickListener = (event) => {
+                if (this.overlayVisible && this.overlayEl && !this.containerEl.nativeElement.contains(event.target) && !this.overlayEl.contains(event.target)) {
+                    this.hide();
+                }
+            };
+            document.addEventListener('click', this.outsideClickListener);
+        }
+    }
+    unbindOutsideClickListener() {
+        if (this.outsideClickListener) {
+            document.removeEventListener('click', this.outsideClickListener);
+            this.outsideClickListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerEl.nativeElement, () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    bindResizeListener() {
+        if (!this.resizeListener) {
+            this.resizeListener = () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            };
+            window.addEventListener('resize', this.resizeListener);
+        }
+    }
+    unbindResizeListener() {
+        if (this.resizeListener) {
+            window.removeEventListener('resize', this.resizeListener);
+            this.resizeListener = null;
+        }
+    }
+    appendContainer() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.overlayEl);
+            else
+                document.getElementById(this.appendTo).appendChild(this.overlayEl);
+        }
+    }
+    restoreAppend() {
+        if (this.overlayEl && this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.removeChild(this.overlayEl);
+            else
+                document.getElementById(this.appendTo).removeChild(this.overlayEl);
+        }
+    }
+    label() {
+        if (this.selectionPath)
+            return this.getOptionLabel(this.selectionPath[this.selectionPath.length - 1]);
+        else
+            return this.placeholder || 'p-emptylabel';
+    }
+    onKeyDown(event) {
+        switch (event.code) {
+            case 'Down':
+            case 'ArrowDown':
+                if (this.overlayVisible) {
+                    DomHandler.findSingle(this.overlayEl, '.p-cascadeselect-item').children[0].focus();
+                }
+                else if (event.altKey && this.options && this.options.length) {
+                    this.show();
+                }
+                event.preventDefault();
+                break;
+            case 'Space':
+            case 'Enter':
+                if (!this.overlayVisible)
+                    this.show();
+                else
+                    this.hide();
+                event.preventDefault();
+                break;
+            case 'Tab':
+            case 'Escape':
+                if (this.overlayVisible) {
+                    this.hide();
+                    event.preventDefault();
+                }
+                break;
+        }
+    }
+    containerClass() {
+        return {
+            'p-cascadeselect p-component p-inputwrapper': true,
+            'p-disabled': this.disabled,
+            'p-focus': this.focused
+        };
+    }
+    labelClass() {
+        return {
+            'p-cascadeselect-label': true,
+            'p-placeholder': this.label() === this.placeholder,
+            'p-cascadeselect-label-empty': !this.value && (this.label() === 'p-emptylabel' || this.label().length === 0)
+        };
+    }
+    ngOnDestroy() {
+        this.restoreAppend();
+        this.unbindOutsideClickListener();
+        this.unbindResizeListener();
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        this.overlayEl = null;
+    }
+}
+CascadeSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CascadeSelect, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i3.PrimeNGConfig }, { token: i3.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+CascadeSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: CascadeSelect, selector: "p-cascadeSelect", inputs: { styleClass: "styleClass", style: "style", options: "options", optionLabel: "optionLabel", optionValue: "optionValue", optionGroupLabel: "optionGroupLabel", optionGroupChildren: "optionGroupChildren", placeholder: "placeholder", value: "value", dataKey: "dataKey", inputId: "inputId", tabindex: "tabindex", ariaLabelledBy: "ariaLabelledBy", appendTo: "appendTo", disabled: "disabled", rounded: "rounded", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onChange: "onChange", onGroupChange: "onGroupChange", onShow: "onShow", onHide: "onHide", onBeforeShow: "onBeforeShow", onBeforeHide: "onBeforeHide" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "focused || overlayVisible" }, classAttribute: "p-element p-inputwrapper" }, providers: [CASCADESELECT_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "focusInputEl", first: true, predicate: ["focusInput"], descendants: true }, { propertyName: "containerEl", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input #focusInput type="text" [attr.id]="inputId" readonly [disabled]="disabled" (focus)="onFocus()" (blur)="onBlur()"  (keydown)="onKeyDown($event)" [attr.tabindex]="tabindex"
+                    aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible" [attr.aria-labelledby]="ariaLabelledBy">
+            </div>
+            <span [ngClass]="labelClass()">
+                <ng-container *ngIf="valueTemplate;else defaultValueTemplate">
+                        <ng-container *ngTemplateOutlet="valueTemplate; context: {$implicit: value, placeholder: placeholder}"></ng-container>
+                </ng-container>
+                <ng-template #defaultValueTemplate>
+                    {{label()}}
+                </ng-template>
+            </span>
+            <div class="p-cascadeselect-trigger" role="button" aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible">
+                <span class="p-cascadeselect-trigger-icon pi pi-chevron-down"></span>
+            </div>
+            <div class="p-cascadeselect-panel p-component" *ngIf="overlayVisible" (click)="onOverlayClick($event)"
+                [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationDone($event)">
+                <div class="p-cascadeselect-items-wrapper">
+                    <p-cascadeSelectSub [options]="options" [selectionPath]="selectionPath" class="p-cascadeselect-items"
+                        [optionLabel]="optionLabel" [optionValue]="optionValue" [level]="0" [optionTemplate]="optionTemplate"
+                        [optionGroupLabel]="optionGroupLabel" [optionGroupChildren]="optionGroupChildren"
+                        (onSelect)="onOptionSelect($event)" (onGroupSelect)="onOptionGroupSelect($event)" [dirty]="dirty" [root]="true">
+                    </p-cascadeSelectSub>
+                </div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-cascadeselect{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-cascadeselect-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-cascadeselect-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.p-cascadeselect-label-empty{overflow:hidden;visibility:hidden}.p-cascadeselect .p-cascadeselect-panel{min-width:100%}.p-cascadeselect-panel{position:absolute;top:0;left:0}.p-cascadeselect-item{cursor:pointer;font-weight:normal;white-space:nowrap}.p-cascadeselect-item-content{display:flex;align-items:center;overflow:hidden;position:relative}.p-cascadeselect-group-icon{margin-left:auto}.p-cascadeselect-items{margin:0;padding:0;list-style-type:none}.p-fluid .p-cascadeselect{display:flex}.p-fluid .p-cascadeselect .p-cascadeselect-label{width:1%}.p-cascadeselect-sublist{position:absolute;min-width:100%;z-index:1;display:none}.p-cascadeselect-item-active{overflow:visible!important}.p-cascadeselect-item-active>.p-cascadeselect-sublist{display:block;left:100%;top:0}\n"], components: [{ type: CascadeSelectSub, selector: "p-cascadeSelectSub", inputs: ["selectionPath", "options", "optionGroupChildren", "optionTemplate", "level", "optionLabel", "optionValue", "optionGroupLabel", "dirty", "root", "parentActive"], outputs: ["onSelect", "onGroupSelect"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CascadeSelect, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-cascadeSelect', template: `
+        <div #container [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input #focusInput type="text" [attr.id]="inputId" readonly [disabled]="disabled" (focus)="onFocus()" (blur)="onBlur()"  (keydown)="onKeyDown($event)" [attr.tabindex]="tabindex"
+                    aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible" [attr.aria-labelledby]="ariaLabelledBy">
+            </div>
+            <span [ngClass]="labelClass()">
+                <ng-container *ngIf="valueTemplate;else defaultValueTemplate">
+                        <ng-container *ngTemplateOutlet="valueTemplate; context: {$implicit: value, placeholder: placeholder}"></ng-container>
+                </ng-container>
+                <ng-template #defaultValueTemplate>
+                    {{label()}}
+                </ng-template>
+            </span>
+            <div class="p-cascadeselect-trigger" role="button" aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible">
+                <span class="p-cascadeselect-trigger-icon pi pi-chevron-down"></span>
+            </div>
+            <div class="p-cascadeselect-panel p-component" *ngIf="overlayVisible" (click)="onOverlayClick($event)"
+                [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationDone($event)">
+                <div class="p-cascadeselect-items-wrapper">
+                    <p-cascadeSelectSub [options]="options" [selectionPath]="selectionPath" class="p-cascadeselect-items"
+                        [optionLabel]="optionLabel" [optionValue]="optionValue" [level]="0" [optionTemplate]="optionTemplate"
+                        [optionGroupLabel]="optionGroupLabel" [optionGroupChildren]="optionGroupChildren"
+                        (onSelect)="onOptionSelect($event)" (onGroupSelect)="onOptionGroupSelect($event)" [dirty]="dirty" [root]="true">
+                    </p-cascadeSelectSub>
+                </div>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': 'filled',
+                        '[class.p-inputwrapper-focus]': 'focused || overlayVisible'
+                    }, providers: [CASCADESELECT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".p-cascadeselect{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-cascadeselect-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-cascadeselect-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.p-cascadeselect-label-empty{overflow:hidden;visibility:hidden}.p-cascadeselect .p-cascadeselect-panel{min-width:100%}.p-cascadeselect-panel{position:absolute;top:0;left:0}.p-cascadeselect-item{cursor:pointer;font-weight:normal;white-space:nowrap}.p-cascadeselect-item-content{display:flex;align-items:center;overflow:hidden;position:relative}.p-cascadeselect-group-icon{margin-left:auto}.p-cascadeselect-items{margin:0;padding:0;list-style-type:none}.p-fluid .p-cascadeselect{display:flex}.p-fluid .p-cascadeselect .p-cascadeselect-label{width:1%}.p-cascadeselect-sublist{position:absolute;min-width:100%;z-index:1;display:none}.p-cascadeselect-item-active{overflow:visible!important}.p-cascadeselect-item-active>.p-cascadeselect-sublist{display:block;left:100%;top:0}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i3.PrimeNGConfig }, { type: i3.OverlayService }]; }, propDecorators: { styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], options: [{
+                type: Input
+            }], optionLabel: [{
+                type: Input
+            }], optionValue: [{
+                type: Input
+            }], optionGroupLabel: [{
+                type: Input
+            }], optionGroupChildren: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], dataKey: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], rounded: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], focusInputEl: [{
+                type: ViewChild,
+                args: ['focusInput']
+            }], containerEl: [{
+                type: ViewChild,
+                args: ['container']
+            }], onChange: [{
+                type: Output
+            }], onGroupChange: [{
+                type: Output
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], onBeforeShow: [{
+                type: Output
+            }], onBeforeHide: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class CascadeSelectModule {
+}
+CascadeSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CascadeSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+CascadeSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CascadeSelectModule, declarations: [CascadeSelect, CascadeSelectSub], imports: [CommonModule, SharedModule, RippleModule], exports: [CascadeSelect, CascadeSelectSub, SharedModule] });
+CascadeSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CascadeSelectModule, imports: [[CommonModule, SharedModule, RippleModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CascadeSelectModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, RippleModule],
+                    exports: [CascadeSelect, CascadeSelectSub, SharedModule],
+                    declarations: [CascadeSelect, CascadeSelectSub]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { CASCADESELECT_VALUE_ACCESSOR, CascadeSelect, CascadeSelectModule, CascadeSelectSub };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-cascadeselect.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-cascadeselect.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-cascadeselect.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-cascadeselect.mjs","sources":["../../src/app/components/cascadeselect/cascadeselect.ts","../../src/app/components/cascadeselect/primeng-cascadeselect.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, TemplateRef, ContentChildren, QueryList, ElementRef, Output, EventEmitter, ViewChild, forwardRef, ChangeDetectorRef, Renderer2, OnDestroy, OnInit, AfterContentInit, Inject} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule, PrimeTemplate, PrimeNGConfig, OverlayService } from 'primeng/api';\nimport { ObjectUtils, ZIndexUtils } from 'primeng/utils';\nimport { DomHandler } from 'primeng/dom';\nimport { trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport { ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { RippleModule } from 'primeng/ripple';\n\nexport const CASCADESELECT_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => CascadeSelect),\n    multi: true\n};\n\n@Component({\n    selector: 'p-cascadeSelectSub',\n    template: `\n        <ul class=\"p-cascadeselect-panel p-cascadeselect-items\" [ngClass]=\"{'p-cascadeselect-panel-root': root}\" role=\"listbox\" aria-orientation=\"horizontal\">\n            <ng-template ngFor let-option [ngForOf]=\"options\" let-i=\"index\">\n                <li [ngClass]=\"getItemClass(option)\" role=\"none\">\n                    <div class=\"p-cascadeselect-item-content\" (click)=\"onOptionClick($event, option)\" tabindex=\"0\" (keydown)=\"onKeyDown($event, option, i)\" pRipple>\n                        <ng-container *ngIf=\"optionTemplate;else defaultOptionTemplate\">\n                            <ng-container *ngTemplateOutlet=\"optionTemplate; context: {$implicit: option}\"></ng-container>\n                        </ng-container>\n                        <ng-template #defaultOptionTemplate>\n                            <span class=\"p-cascadeselect-item-text\">{{getOptionLabelToRender(option)}}</span>\n                        </ng-template>\n                        <span class=\"p-cascadeselect-group-icon pi pi-angle-right\" *ngIf=\"isOptionGroup(option)\"></span>\n                    </div>\n                    <p-cascadeSelectSub *ngIf=\"isOptionGroup(option) && isOptionActive(option)\" class=\"p-cascadeselect-sublist\" [selectionPath]=\"selectionPath\" [options]=\"getOptionGroupChildren(option)\"\n                        [optionLabel]=\"optionLabel\" [optionValue]=\"optionValue\" [level]=\"level + 1\" (onSelect)=\"onOptionSelect($event)\" (onOptionGroupSelect)=\"onOptionGroupSelect()\"\n                        [optionGroupLabel]=\"optionGroupLabel\" [optionGroupChildren]=\"optionGroupChildren\" [parentActive]=\"isOptionActive(option)\" [dirty]=\"dirty\" [optionTemplate]=\"optionTemplate\">\n                    </p-cascadeSelectSub>\n                </li>\n            </ng-template>\n        </ul>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CascadeSelectSub implements OnInit {\n\n    @Input() selectionPath: any[];\n\n    @Input() options: any[];\n\n    @Input() optionGroupChildren: any[];\n\n    @Input() optionTemplate: TemplateRef<any>;\n\n    @Input() level: number = 0;\n\n    @Input() optionLabel: string;\n\n    @Input() optionValue: string;\n\n    @Input() optionGroupLabel: string;\n\n    @Input() dirty: boolean;\n\n    @Input() root: boolean;\n\n    @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onGroupSelect: EventEmitter<any> = new EventEmitter();\n\n    @Input() get parentActive(): boolean {\n        return this._parentActive;\n    };\n    set parentActive(val) {\n        if (!val) {\n            this.activeOption = null;\n        }\n\n        this._parentActive = val;\n    }\n\n    activeOption: any = null;\n\n    _parentActive: boolean;\n\n    cascadeSelect: CascadeSelect;\n\n    constructor(@Inject(forwardRef(() => CascadeSelect)) cascadeSelect, private el: ElementRef) {\n        this.cascadeSelect = cascadeSelect as CascadeSelect;\n    }\n\n    ngOnInit() {\n        if (this.selectionPath && this.options && !this.dirty) {\n            for (let option of this.options) {\n                if (this.selectionPath.includes(option)) {\n                    this.activeOption = option;\n                    break;\n                }\n            }\n        }\n\n        if (!this.root) {\n            this.position();\n        }\n    }\n\n    onOptionClick(event, option) {\n        if (this.isOptionGroup(option)) {\n            this.activeOption = (this.activeOption === option) ? null : option;\n\n            this.onGroupSelect.emit({\n                originalEvent: event,\n                value: option\n            });\n        }\n        else {\n            this.onSelect.emit({\n                originalEvent: event,\n                value: this.getOptionValue(option)\n            });\n        }\n    }\n\n    onOptionSelect(event) {\n        this.onSelect.emit(event);\n    }\n\n    onOptionGroupSelect(event) {\n        this.onGroupSelect.emit(event);\n    }\n\n    getOptionLabel(option) {\n        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : option;\n    }\n\n    getOptionValue(option) {\n        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : option;\n    }\n\n    getOptionGroupLabel(optionGroup) {\n        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : null;\n    }\n\n    getOptionGroupChildren(optionGroup) {\n        return ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren[this.level]);\n    }\n\n    isOptionGroup(option) {\n        return Object.prototype.hasOwnProperty.call(option, this.optionGroupChildren[this.level]);\n    }\n\n    getOptionLabelToRender(option) {\n        return this.isOptionGroup(option) ? this.getOptionGroupLabel(option) : this.getOptionLabel(option);\n    }\n\n    getItemClass(option) {\n        return {\n            'p-cascadeselect-item': true,\n            'p-cascadeselect-item-group': this.isOptionGroup(option),\n            'p-cascadeselect-item-active p-highlight': this.isOptionActive(option)\n        }\n    }\n\n    isOptionActive(option) {\n        return this.activeOption === option;\n    }\n\n    onKeyDown(event, option, index) {\n        let listItem = event.currentTarget.parentElement;\n\n        switch (event.key) {\n            case 'Down':\n            case 'ArrowDown':\n                var nextItem = this.el.nativeElement.children[0].children[index + 1];\n                if (nextItem) {\n                    nextItem.children[0].focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'Up':\n            case 'ArrowUp':\n                var prevItem = this.el.nativeElement.children[0].children[index - 1];\n                if (prevItem) {\n                    prevItem.children[0].focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'Right':\n            case 'ArrowRight':\n                if (this.isOptionGroup(option)) {\n                    if (this.isOptionActive(option)) {\n                        listItem.children[1].children[0].children[0].children[0].focus();\n                    }\n                    else {\n                        this.activeOption = option;\n                    }\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'Left':\n            case 'ArrowLeft':\n                this.activeOption = null;\n\n                var parentList = listItem.parentElement.parentElement.parentElement;\n                if (parentList) {\n                    parentList.children[0].focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'Enter':\n                this.onOptionClick(event, option);\n\n                event.preventDefault();\n            break;\n\n            case 'Tab':\n            case 'Escape':\n                this.cascadeSelect.hide();\n\n                event.preventDefault();\n            break;\n        }\n    }\n\n    position() {\n        const parentItem = this.el.nativeElement.parentElement;\n        const containerOffset = DomHandler.getOffset(parentItem);\n        const viewport = DomHandler.getViewport();\n        const sublistWidth = this.el.nativeElement.children[0].offsetParent ? this.el.nativeElement.children[0].offsetWidth : DomHandler.getHiddenElementOuterWidth(this.el.nativeElement.children[0]);\n        const itemOuterWidth = DomHandler.getOuterWidth(parentItem.children[0]);\n\n        if ((parseInt(containerOffset.left, 10) + itemOuterWidth + sublistWidth) > (viewport.width - DomHandler.calculateScrollbarWidth())) {\n            this.el.nativeElement.children[0].style.left = '-200%';\n        }\n    }\n}\n\n@Component({\n    selector: 'p-cascadeSelect',\n    template: `\n        <div #container [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\" (click)=\"onClick($event)\">\n            <div class=\"p-hidden-accessible\">\n                <input #focusInput type=\"text\" [attr.id]=\"inputId\" readonly [disabled]=\"disabled\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"  (keydown)=\"onKeyDown($event)\" [attr.tabindex]=\"tabindex\"\n                    aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible\" [attr.aria-labelledby]=\"ariaLabelledBy\">\n            </div>\n            <span [ngClass]=\"labelClass()\">\n                <ng-container *ngIf=\"valueTemplate;else defaultValueTemplate\">\n                        <ng-container *ngTemplateOutlet=\"valueTemplate; context: {$implicit: value, placeholder: placeholder}\"></ng-container>\n                </ng-container>\n                <ng-template #defaultValueTemplate>\n                    {{label()}}\n                </ng-template>\n            </span>\n            <div class=\"p-cascadeselect-trigger\" role=\"button\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible\">\n                <span class=\"p-cascadeselect-trigger-icon pi pi-chevron-down\"></span>\n            </div>\n            <div class=\"p-cascadeselect-panel p-component\" *ngIf=\"overlayVisible\" (click)=\"onOverlayClick($event)\"\n                [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationDone($event)\">\n                <div class=\"p-cascadeselect-items-wrapper\">\n                    <p-cascadeSelectSub [options]=\"options\" [selectionPath]=\"selectionPath\" class=\"p-cascadeselect-items\"\n                        [optionLabel]=\"optionLabel\" [optionValue]=\"optionValue\" [level]=\"0\" [optionTemplate]=\"optionTemplate\"\n                        [optionGroupLabel]=\"optionGroupLabel\" [optionGroupChildren]=\"optionGroupChildren\"\n                        (onSelect)=\"onOptionSelect($event)\" (onGroupSelect)=\"onOptionGroupSelect($event)\" [dirty]=\"dirty\" [root]=\"true\">\n                    </p-cascadeSelectSub>\n                </div>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focused || overlayVisible'\n    },\n    providers: [CASCADESELECT_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./cascadeselect.css']\n})\nexport class CascadeSelect implements OnInit, AfterContentInit, OnDestroy {\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() options: any[];\n\n    @Input() optionLabel: string;\n\n    @Input() optionValue: string;\n\n    @Input() optionGroupLabel: string;\n\n    @Input() optionGroupChildren: any[];\n\n    @Input() placeholder: string;\n\n    @Input() value: string;\n\n    @Input() dataKey: string;\n\n    @Input() inputId: string;\n\n    @Input() tabindex: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() appendTo: any;\n\n    @Input() disabled: boolean;\n\n    @Input() rounded: boolean;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @ViewChild('focusInput') focusInputEl: ElementRef;\n\n    @ViewChild('container') containerEl: ElementRef;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onGroupChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBeforeShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBeforeHide: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    selectionPath: any = null;\n\n    focused: boolean = false;\n\n    filled: boolean = false;\n\n    overlayVisible: boolean = false;\n\n    dirty: boolean = false;\n\n    valueTemplate: TemplateRef<any>;\n\n    optionTemplate: TemplateRef<any>;\n\n    outsideClickListener: any;\n\n    scrollHandler: any;\n\n    resizeListener: any;\n\n    overlayEl: any;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    constructor(private el: ElementRef, private cd: ChangeDetectorRef, private config: PrimeNGConfig, public overlayService: OverlayService) { }\n\n    ngOnInit() {\n        this.updateSelectionPath();\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'value':\n                    this.valueTemplate = item.template;\n                break;\n                case 'option':\n                    this.optionTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    onOptionSelect(event) {\n        this.value = event.value;\n        this.updateSelectionPath();\n        this.onModelChange(this.value);\n        this.onChange.emit(event);\n        this.hide();\n        this.focusInputEl.nativeElement.focus();\n    }\n\n    onOptionGroupSelect(event) {\n        this.dirty = true;\n        this.onGroupChange.emit(event);\n    }\n\n    getOptionLabel(option) {\n        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : option;\n    }\n\n    getOptionValue(option) {\n        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : option;\n    }\n\n    getOptionGroupChildren(optionGroup, level) {\n        return ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren[level]);\n    }\n\n    isOptionGroup(option, level) {\n        return Object.prototype.hasOwnProperty.call(option, this.optionGroupChildren[level]);\n    }\n\n    updateSelectionPath() {\n        let path;\n        if (this.value != null && this.options) {\n            for (let option of this.options) {\n                path = this.findModelOptionInGroup(option, 0);\n                if (path) {\n                    break;\n                }\n            }\n        }\n\n        this.selectionPath = path;\n        this.updateFilledState();\n    }\n\n    updateFilledState() {\n        this.filled = !(this.selectionPath == null || this.selectionPath.length == 0);\n    }\n\n    findModelOptionInGroup(option, level) {\n        if (this.isOptionGroup(option, level)) {\n            let selectedOption;\n            for (let childOption of this.getOptionGroupChildren(option, level)) {\n                selectedOption = this.findModelOptionInGroup(childOption, level + 1);\n                if (selectedOption) {\n                    selectedOption.unshift(option);\n                    return selectedOption;\n                }\n            }\n        }\n        else if ((ObjectUtils.equals(this.value, this.getOptionValue(option), this.dataKey))) {\n            return [option];\n        }\n\n        return null;\n    }\n\n    show() {\n        this.onBeforeShow.emit();\n        this.overlayVisible = true;\n    }\n\n    hide() {\n        this.onBeforeHide.emit();\n        this.overlayVisible = false;\n        this.cd.markForCheck();\n    }\n\n    onClick(event) {\n        if (this.disabled) {\n            return;\n        }\n\n        if (!this.overlayEl || !this.overlayEl || !this.overlayEl.contains(event.target)) {\n            if (this.overlayVisible){\n                this.hide();\n            }\n            else{\n                this.show();\n            }\n\n            this.focusInputEl.nativeElement.focus();\n        }\n    }\n\n    onFocus() {\n        this.focused = true;\n    }\n\n    onBlur() {\n        this.focused = false;\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n                this.overlayEl = event.element;\n                this.onOverlayEnter();\n            break;\n        }\n    }\n\n    onOverlayAnimationDone(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'void':\n                this.onOverlayLeave();\n            break;\n        }\n    }\n\n    onOverlayEnter() {\n        ZIndexUtils.set('overlay', this.overlayEl, this.config.zIndex.overlay);\n        this.appendContainer();\n        this.alignOverlay();\n        this.bindOutsideClickListener();\n        this.bindScrollListener();\n        this.bindResizeListener();\n        this.onShow.emit();\n    }\n\n    onOverlayLeave() {\n        this.unbindOutsideClickListener();\n        this.unbindScrollListener();\n        this.unbindResizeListener();\n        this.onHide.emit();\n        ZIndexUtils.clear(this.overlayEl);\n        this.overlayEl = null;\n        this.dirty = false;\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.updateSelectionPath();\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    alignOverlay() {\n        if (this.appendTo) {\n            DomHandler.absolutePosition(this.overlayEl, this.containerEl.nativeElement);\n            this.overlayEl.style.minWidth = DomHandler.getOuterWidth(this.containerEl.nativeElement) + 'px';\n        } else {\n            DomHandler.relativePosition(this.overlayEl, this.containerEl.nativeElement);\n        }\n    }\n\n    bindOutsideClickListener() {\n        if (!this.outsideClickListener) {\n            this.outsideClickListener = (event) => {\n                if (this.overlayVisible && this.overlayEl && !this.containerEl.nativeElement.contains(event.target) && !this.overlayEl.contains(event.target)) {\n                    this.hide();\n                }\n            };\n            document.addEventListener('click', this.outsideClickListener);\n        }\n    }\n\n    unbindOutsideClickListener() {\n        if (this.outsideClickListener) {\n            document.removeEventListener('click', this.outsideClickListener);\n            this.outsideClickListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerEl.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    bindResizeListener() {\n        if (!this.resizeListener) {\n            this.resizeListener = () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            };\n            window.addEventListener('resize', this.resizeListener);\n        }\n    }\n\n    unbindResizeListener() {\n        if (this.resizeListener) {\n            window.removeEventListener('resize', this.resizeListener);\n            this.resizeListener = null;\n        }\n    }\n\n    appendContainer() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlayEl);\n            else\n                document.getElementById(this.appendTo).appendChild(this.overlayEl);\n        }\n    }\n\n    restoreAppend() {\n        if (this.overlayEl && this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.removeChild(this.overlayEl);\n            else\n                document.getElementById(this.appendTo).removeChild(this.overlayEl);\n        }\n    }\n\n    label() {\n        if (this.selectionPath)\n            return this.getOptionLabel(this.selectionPath[this.selectionPath.length - 1]);\n        else\n            return this.placeholder||'p-emptylabel';\n    }\n\n    onKeyDown(event) {\n        switch(event.code) {\n            case 'Down':\n            case 'ArrowDown':\n                if (this.overlayVisible) {\n                    DomHandler.findSingle(this.overlayEl, '.p-cascadeselect-item').children[0].focus();\n                }\n                else if (event.altKey && this.options && this.options.length) {\n                    this.show();\n                }\n                event.preventDefault();\n            break;\n\n            case 'Space':\n            case 'Enter':\n                if (!this.overlayVisible)\n                    this.show();\n                else\n                    this.hide();\n\n                event.preventDefault();\n            break;\n\n            case 'Tab':\n            case 'Escape':\n                if (this.overlayVisible) {\n                    this.hide();\n                    event.preventDefault();\n                }\n            break;\n        }\n    }\n\n    containerClass() {\n        return {\n            'p-cascadeselect p-component p-inputwrapper': true,\n            'p-disabled': this.disabled,\n            'p-focus': this.focused\n        };\n    }\n\n    labelClass() {\n        return {\n            'p-cascadeselect-label': true,\n            'p-placeholder': this.label() === this.placeholder,\n            'p-cascadeselect-label-empty': !this.value && (this.label() === 'p-emptylabel' || this.label().length === 0)\n        };\n    }\n\n    ngOnDestroy() {\n        this.restoreAppend();\n        this.unbindOutsideClickListener();\n        this.unbindResizeListener();\n\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n        this.overlayEl = null;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule, SharedModule, RippleModule],\n    exports: [CascadeSelect, CascadeSelectSub, SharedModule],\n    declarations: [CascadeSelect, CascadeSelectSub]\n})\nexport class CascadeSelectModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;MAUa,4BAA4B,GAAQ;IAC7C,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;IAC5C,KAAK,EAAE,IAAI;EACb;MA4BW,gBAAgB;IA2CzB,YAAqD,aAAa,EAAU,EAAc;QAAd,OAAE,GAAF,EAAE,CAAY;QAjCjF,UAAK,GAAW,CAAC,CAAC;QAYjB,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEjD,kBAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;QAahE,iBAAY,GAAQ,IAAI,CAAC;QAOrB,IAAI,CAAC,aAAa,GAAG,aAA8B,CAAC;KACvD;IAnBD,IAAa,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;;IACD,IAAI,YAAY,CAAC,GAAG;QAChB,IAAI,CAAC,GAAG,EAAE;YACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;QAED,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;KAC5B;IAYD,QAAQ;QACJ,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnD,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACrC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;oBAC3B,MAAM;iBACT;aACJ;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnB;KACJ;IAED,aAAa,CAAC,KAAK,EAAE,MAAM;QACvB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;YAC5B,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC;YAEnE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACpB,aAAa,EAAE,KAAK;gBACpB,KAAK,EAAE,MAAM;aAChB,CAAC,CAAC;SACN;aACI;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACf,aAAa,EAAE,KAAK;gBACpB,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;aACrC,CAAC,CAAC;SACN;KACJ;IAED,cAAc,CAAC,KAAK;QAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;IAED,mBAAmB,CAAC,KAAK;QACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClC;IAED,cAAc,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;KAC7F;IAED,cAAc,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;KAC7F;IAED,mBAAmB,CAAC,WAAW;QAC3B,OAAO,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;KAC1G;IAED,sBAAsB,CAAC,WAAW;QAC9B,OAAO,WAAW,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KAC1F;IAED,aAAa,CAAC,MAAM;QAChB,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KAC7F;IAED,sBAAsB,CAAC,MAAM;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KACtG;IAED,YAAY,CAAC,MAAM;QACf,OAAO;YACH,sBAAsB,EAAE,IAAI;YAC5B,4BAA4B,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YACxD,yCAAyC,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;SACzE,CAAA;KACJ;IAED,cAAc,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC;KACvC;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK;QAC1B,IAAI,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC;QAEjD,QAAQ,KAAK,CAAC,GAAG;YACb,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW;gBACZ,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACrE,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;iBAChC;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YAEN,KAAK,IAAI,CAAC;YACV,KAAK,SAAS;gBACV,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACrE,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;iBAChC;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YAEN,KAAK,OAAO,CAAC;YACb,KAAK,YAAY;gBACb,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;oBAC5B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;wBAC7B,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBACpE;yBACI;wBACD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;qBAC9B;iBACJ;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YAEN,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW;gBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAEzB,IAAI,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC;gBACpE,IAAI,UAAU,EAAE;oBACZ,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;iBAClC;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YAEN,KAAK,OAAO;gBACR,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAElC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YAEN,KAAK,KAAK,CAAC;YACX,KAAK,QAAQ;gBACT,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;gBAE1B,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;SACT;KACJ;IAED,QAAQ;QACJ,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC;QACvD,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,UAAU,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/L,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,cAAc,GAAG,YAAY,KAAK,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,uBAAuB,EAAE,CAAC,EAAE;YAChI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;SAC1D;KACJ;;6GAtMQ,gBAAgB,kBA2CL,UAAU,CAAC,MAAM,aAAa,CAAC;iGA3C1C,gBAAgB,qbAxBf;;;;;;;;;;;;;;;;;;;;KAoBT,uCAIQ,gBAAgB;2FAAhB,gBAAgB;kBA1B5B,SAAS;mBAAC;oBACP,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;KAoBT;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAClD;;0BA4CgB,MAAM;2BAAC,UAAU,CAAC,MAAM,aAAa,CAAC;qEAzC1C,aAAa;sBAArB,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,mBAAmB;sBAA3B,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,gBAAgB;sBAAxB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEI,QAAQ;sBAAjB,MAAM;gBAEG,aAAa;sBAAtB,MAAM;gBAEM,YAAY;sBAAxB,KAAK;;MAmOG,aAAa;IAkFtB,YAAoB,EAAc,EAAU,EAAqB,EAAU,MAAqB,EAAS,cAA8B;QAAnH,OAAE,GAAF,EAAE,CAAY;QAAU,OAAE,GAAF,EAAE,CAAmB;QAAU,WAAM,GAAN,MAAM,CAAe;QAAS,mBAAc,GAAd,cAAc,CAAgB;QAhD9H,0BAAqB,GAAW,iCAAiC,CAAC;QAElE,0BAAqB,GAAW,YAAY,CAAC;QAM5C,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEjD,kBAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEtD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE/C,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE/C,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAI/D,kBAAa,GAAQ,IAAI,CAAC;QAE1B,YAAO,GAAY,KAAK,CAAC;QAEzB,WAAM,GAAY,KAAK,CAAC;QAExB,mBAAc,GAAY,KAAK,CAAC;QAEhC,UAAK,GAAY,KAAK,CAAC;QAcvB,kBAAa,GAAa,SAAQ,CAAC;QAEnC,mBAAc,GAAa,SAAQ,CAAC;KAEwG;IAE5I,QAAQ;QACJ,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC9B;IAED,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAO,IAAI,CAAC,OAAO,EAAE;gBACjB,KAAK,OAAO;oBACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACvC,MAAM;gBACN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;IAED,cAAc,CAAC,KAAK;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC3C;IAED,mBAAmB,CAAC,KAAK;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClC;IAED,cAAc,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;KAC7F;IAED,cAAc,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;KAC7F;IAED,sBAAsB,CAAC,WAAW,EAAE,KAAK;QACrC,OAAO,WAAW,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;KACrF;IAED,aAAa,CAAC,MAAM,EAAE,KAAK;QACvB,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;KACxF;IAED,mBAAmB;QACf,IAAI,IAAI,CAAC;QACT,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YACpC,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC7B,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9C,IAAI,IAAI,EAAE;oBACN,MAAM;iBACT;aACJ;SACJ;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;IAED,iBAAiB;QACb,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;KACjF;IAED,sBAAsB,CAAC,MAAM,EAAE,KAAK;QAChC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YACnC,IAAI,cAAc,CAAC;YACnB,KAAK,IAAI,WAAW,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;gBAChE,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACrE,IAAI,cAAc,EAAE;oBAChB,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC/B,OAAO,cAAc,CAAC;iBACzB;aACJ;SACJ;aACI,KAAK,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;YAClF,OAAO,CAAC,MAAM,CAAC,CAAC;SACnB;QAED,OAAO,IAAI,CAAC;KACf;IAED,IAAI;QACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC9B;IAED,IAAI;QACA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,OAAO,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC9E,IAAI,IAAI,CAAC,cAAc,EAAC;gBACpB,IAAI,CAAC,IAAI,EAAE,CAAC;aACf;iBACG;gBACA,IAAI,CAAC,IAAI,EAAE,CAAC;aACf;YAED,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC3C;KACJ;IAED,OAAO;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACvB;IAED,MAAM;QACF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;IAED,cAAc,CAAC,KAAK;QAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YACpB,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;SAChC,CAAC,CAAC;KACN;IAED,uBAAuB,CAAC,KAAqB;QACzC,QAAQ,KAAK,CAAC,OAAO;YACjB,KAAK,SAAS;gBACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1B,MAAM;SACT;KACJ;IAED,sBAAsB,CAAC,KAAqB;QACxC,QAAQ,KAAK,CAAC,OAAO;YACjB,KAAK,MAAM;gBACP,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1B,MAAM;SACT;KACJ;IAED,cAAc;QACV,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACtB;IAED,cAAc;QACV,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;IAED,UAAU,CAAC,KAAU;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,EAAY;QACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KAC3B;IAED,iBAAiB,CAAC,EAAY;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC5B;IAED,gBAAgB,CAAC,GAAY;QACzB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,YAAY;QACR,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAC5E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;SACnG;aAAM;YACH,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;SAC/E;KACJ;IAED,wBAAwB;QACpB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC5B,IAAI,CAAC,oBAAoB,GAAG,CAAC,KAAK;gBAC9B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBAC3I,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf;aACJ,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;SACjE;KACJ;IAED,0BAA0B;QACtB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;SACpC;KACJ;IAED,kBAAkB;QACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;gBACnF,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf;aACJ,CAAC,CAAC;SACN;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;KAC3C;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;SAC7C;KACJ;IAED,kBAAkB;QACd,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,cAAc,GAAG;gBAClB,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf;aACJ,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;SAC1D;KACJ;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC9B;KACJ;IAED,eAAe;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;gBACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;gBAE1C,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1E;KACJ;IAED,aAAa;QACT,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;gBACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;gBAE1C,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1E;KACJ;IAED,KAAK;QACD,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;YAE9E,OAAO,IAAI,CAAC,WAAW,IAAE,cAAc,CAAC;KAC/C;IAED,SAAS,CAAC,KAAK;QACX,QAAO,KAAK,CAAC,IAAI;YACb,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW;gBACZ,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;iBACtF;qBACI,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;oBAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YAEN,KAAK,OAAO,CAAC;YACb,KAAK,OAAO;gBACR,IAAI,CAAC,IAAI,CAAC,cAAc;oBACpB,IAAI,CAAC,IAAI,EAAE,CAAC;;oBAEZ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEhB,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YAEN,KAAK,KAAK,CAAC;YACX,KAAK,QAAQ;gBACT,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;iBAC1B;gBACL,MAAM;SACT;KACJ;IAED,cAAc;QACV,OAAO;YACH,4CAA4C,EAAE,IAAI;YAClD,YAAY,EAAE,IAAI,CAAC,QAAQ;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO;SAC1B,CAAC;KACL;IAED,UAAU;QACN,OAAO;YACH,uBAAuB,EAAE,IAAI;YAC7B,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,WAAW;YAClD,6BAA6B,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;SAC/G,CAAC;KACL;IAED,WAAW;QACP,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACzB;;0GA9ZQ,aAAa;8FAAb,aAAa,u3BALX,CAAC,4BAA4B,CAAC,oDA2DxB,aAAa,oOAxGpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BT,gqCAvOQ,gBAAgB,wmBAwOb;QACR,OAAO,CAAC,kBAAkB,EAAE;YACxB,UAAU,CAAC,QAAQ,EAAE;gBACjB,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAC,CAAC;gBAC7C,OAAO,CAAC,0BAA0B,CAAC;aACpC,CAAC;YACF,UAAU,CAAC,QAAQ,EAAE;gBACnB,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aAC3D,CAAC;SACP,CAAC;KACL;2FAWQ,aAAa;kBApDzB,SAAS;+BACI,iBAAiB,YACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BT,cACW;wBACR,OAAO,CAAC,kBAAkB,EAAE;4BACxB,UAAU,CAAC,QAAQ,EAAE;gCACjB,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAC,CAAC;gCAC7C,OAAO,CAAC,0BAA0B,CAAC;6BACpC,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;gCACnB,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;6BAC3D,CAAC;yBACP,CAAC;qBACL,QACK;wBACF,OAAO,EAAE,0BAA0B;wBACnC,+BAA+B,EAAE,QAAQ;wBACzC,8BAA8B,EAAE,2BAA2B;qBAC9D,aACU,CAAC,4BAA4B,CAAC,mBACxB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;0LAK5B,UAAU;sBAAlB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,gBAAgB;sBAAxB,KAAK;gBAEG,mBAAmB;sBAA3B,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEmB,YAAY;sBAApC,SAAS;uBAAC,YAAY;gBAEC,WAAW;sBAAlC,SAAS;uBAAC,WAAW;gBAEZ,QAAQ;sBAAjB,MAAM;gBAEG,aAAa;sBAAtB,MAAM;gBAEG,MAAM;sBAAf,MAAM;gBAEG,MAAM;sBAAf,MAAM;gBAEG,YAAY;sBAArB,MAAM;gBAEG,YAAY;sBAArB,MAAM;gBAEyB,SAAS;sBAAxC,eAAe;uBAAC,aAAa;;MAgXrB,mBAAmB;;gHAAnB,mBAAmB;iHAAnB,mBAAmB,iBAtanB,aAAa,EA7Pb,gBAAgB,aA+pBf,YAAY,EAAE,YAAY,EAAE,YAAY,aAlazC,aAAa,EA7Pb,gBAAgB,EAgqBkB,YAAY;iHAG9C,mBAAmB,YAJnB,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,EACR,YAAY;2FAG9C,mBAAmB;kBAL/B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;oBACnD,OAAO,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,YAAY,CAAC;oBACxD,YAAY,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;iBAClD;;;AC5sBD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-chart.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-chart.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-chart.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,141 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import Chart from 'chart.js/auto';
+
+class UIChart {
+    constructor(el) {
+        this.el = el;
+        this.plugins = [];
+        this.responsive = true;
+        this.onDataSelect = new EventEmitter();
+        this._options = {};
+    }
+    get data() {
+        return this._data;
+    }
+    set data(val) {
+        this._data = val;
+        this.reinit();
+    }
+    get options() {
+        return this._options;
+    }
+    set options(val) {
+        this._options = val;
+        this.reinit();
+    }
+    ngAfterViewInit() {
+        this.initChart();
+        this.initialized = true;
+    }
+    onCanvasClick(event) {
+        if (this.chart) {
+            const element = this.chart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, false);
+            const dataset = this.chart.getElementsAtEventForMode(event, 'dataset', { intersect: true }, false);
+            if (element && element[0] && dataset) {
+                this.onDataSelect.emit({ originalEvent: event, element: element[0], dataset: dataset });
+            }
+        }
+    }
+    initChart() {
+        let opts = this.options || {};
+        opts.responsive = this.responsive;
+        // allows chart to resize in responsive mode
+        if (opts.responsive && (this.height || this.width)) {
+            opts.maintainAspectRatio = false;
+        }
+        this.chart = new Chart(this.el.nativeElement.children[0].children[0], {
+            type: this.type,
+            data: this.data,
+            options: this.options,
+            plugins: this.plugins
+        });
+    }
+    getCanvas() {
+        return this.el.nativeElement.children[0].children[0];
+    }
+    getBase64Image() {
+        return this.chart.toBase64Image();
+    }
+    generateLegend() {
+        if (this.chart) {
+            return this.chart.generateLegend();
+        }
+    }
+    refresh() {
+        if (this.chart) {
+            this.chart.update();
+        }
+    }
+    reinit() {
+        if (this.chart) {
+            this.chart.destroy();
+            this.initChart();
+        }
+    }
+    ngOnDestroy() {
+        if (this.chart) {
+            this.chart.destroy();
+            this.initialized = false;
+            this.chart = null;
+        }
+    }
+}
+UIChart.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: UIChart, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+UIChart.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: UIChart, selector: "p-chart", inputs: { type: "type", plugins: "plugins", width: "width", height: "height", responsive: "responsive", data: "data", options: "options" }, outputs: { onDataSelect: "onDataSelect" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div style="position:relative" [style.width]="responsive && !width ? null : width" [style.height]="responsive && !height ? null : height">
+            <canvas [attr.width]="responsive && !width ? null : width" [attr.height]="responsive && !height ? null : height" (click)="onCanvasClick($event)"></canvas>
+        </div>
+    `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: UIChart, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-chart',
+                    template: `
+        <div style="position:relative" [style.width]="responsive && !width ? null : width" [style.height]="responsive && !height ? null : height">
+            <canvas [attr.width]="responsive && !width ? null : width" [attr.height]="responsive && !height ? null : height" (click)="onCanvasClick($event)"></canvas>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { type: [{
+                type: Input
+            }], plugins: [{
+                type: Input
+            }], width: [{
+                type: Input
+            }], height: [{
+                type: Input
+            }], responsive: [{
+                type: Input
+            }], onDataSelect: [{
+                type: Output
+            }], data: [{
+                type: Input
+            }], options: [{
+                type: Input
+            }] } });
+class ChartModule {
+}
+ChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChartModule, declarations: [UIChart], imports: [CommonModule], exports: [UIChart] });
+ChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChartModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChartModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [UIChart],
+                    declarations: [UIChart]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ChartModule, UIChart };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-chart.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-chart.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-chart.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-chart.mjs","sources":["../../src/app/components/chart/chart.ts","../../src/app/components/chart/primeng-chart.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,AfterViewInit,OnDestroy,Input,Output,EventEmitter,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport Chart from 'chart.js/auto';\n\n@Component({\n    selector: 'p-chart',\n    template: `\n        <div style=\"position:relative\" [style.width]=\"responsive && !width ? null : width\" [style.height]=\"responsive && !height ? null : height\">\n            <canvas [attr.width]=\"responsive && !width ? null : width\" [attr.height]=\"responsive && !height ? null : height\" (click)=\"onCanvasClick($event)\"></canvas>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class UIChart implements AfterViewInit, OnDestroy {\n\n    @Input() type: string;\n\n    @Input() plugins: any[] = [];\n\n    @Input() width: string;\n\n    @Input() height: string;\n\n    @Input() responsive: boolean = true;\n\n    @Output() onDataSelect: EventEmitter<any> = new EventEmitter();\n\n    initialized: boolean;\n\n    _data: any;\n\n    _options: any = {};\n\n    chart: any;\n\n    constructor(public el: ElementRef) {}\n\n    @Input() get data(): any {\n        return this._data;\n    }\n\n    set data(val:any) {\n        this._data = val;\n        this.reinit();\n    }\n\n    @Input() get options(): any {\n        return this._options;\n    }\n\n    set options(val:any) {\n        this._options = val;\n        this.reinit();\n    }\n\n    ngAfterViewInit() {\n        this.initChart();\n        this.initialized = true;\n    }\n\n    onCanvasClick(event) {\n        if (this.chart) {\n            const element = this.chart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, false);\n            const dataset = this.chart.getElementsAtEventForMode(event, 'dataset', { intersect: true }, false);\n\n            if (element && element[0] && dataset) {\n                this.onDataSelect.emit({originalEvent: event, element: element[0], dataset: dataset});\n            }\n        }\n    }\n\n    initChart() {\n        let opts = this.options||{};\n        opts.responsive = this.responsive;\n\n        // allows chart to resize in responsive mode\n        if (opts.responsive&&(this.height||this.width)) {\n            opts.maintainAspectRatio = false;\n        }\n\n        this.chart = new Chart(this.el.nativeElement.children[0].children[0], {\n            type: this.type,\n            data: this.data,\n            options: this.options,\n            plugins: this.plugins\n        });\n    }\n\n    getCanvas() {\n        return this.el.nativeElement.children[0].children[0];\n    }\n\n    getBase64Image() {\n        return this.chart.toBase64Image();\n    }\n\n    generateLegend() {\n        if (this.chart) {\n            return this.chart.generateLegend();\n        }\n    }\n\n    refresh() {\n        if (this.chart) {\n            this.chart.update();\n        }\n    }\n\n    reinit() {\n        if (this.chart) {\n            this.chart.destroy();\n            this.initChart();\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.chart) {\n            this.chart.destroy();\n            this.initialized = false;\n            this.chart = null;\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [UIChart],\n    declarations: [UIChart]\n})\nexport class ChartModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-checkbox.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-checkbox.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-checkbox.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,182 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { ObjectUtils } from 'primeng/utils';
+
+const CHECKBOX_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Checkbox),
+    multi: true
+};
+class Checkbox {
+    constructor(cd) {
+        this.cd = cd;
+        this.checkboxIcon = 'pi pi-check';
+        this.trueValue = true;
+        this.falseValue = false;
+        this.onChange = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+        this.focused = false;
+    }
+    onClick(event, checkbox, focus) {
+        event.preventDefault();
+        if (this.disabled || this.readonly) {
+            return;
+        }
+        this.updateModel(event);
+        if (focus) {
+            checkbox.focus();
+        }
+    }
+    updateModel(event) {
+        let newModelValue;
+        if (!this.binary) {
+            if (this.checked())
+                newModelValue = this.model.filter(val => !ObjectUtils.equals(val, this.value));
+            else
+                newModelValue = this.model ? [...this.model, this.value] : [this.value];
+            this.onModelChange(newModelValue);
+            this.model = newModelValue;
+            if (this.formControl) {
+                this.formControl.setValue(newModelValue);
+            }
+        }
+        else {
+            newModelValue = this.checked() ? this.falseValue : this.trueValue;
+            this.model = newModelValue;
+            this.onModelChange(newModelValue);
+        }
+        this.onChange.emit({ checked: newModelValue, originalEvent: event });
+    }
+    handleChange(event) {
+        if (!this.readonly) {
+            this.updateModel(event);
+        }
+    }
+    onFocus() {
+        this.focused = true;
+    }
+    onBlur() {
+        this.focused = false;
+        this.onModelTouched();
+    }
+    focus() {
+        this.inputViewChild.nativeElement.focus();
+    }
+    writeValue(model) {
+        this.model = model;
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    checked() {
+        return this.binary ? this.model === this.trueValue : ObjectUtils.contains(this.value, this.model);
+    }
+}
+Checkbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Checkbox, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Checkbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Checkbox, selector: "p-checkbox", inputs: { value: "value", name: "name", disabled: "disabled", binary: "binary", label: "label", ariaLabelledBy: "ariaLabelledBy", ariaLabel: "ariaLabel", tabindex: "tabindex", inputId: "inputId", style: "style", styleClass: "styleClass", labelStyleClass: "labelStyleClass", formControl: "formControl", checkboxIcon: "checkboxIcon", readonly: "readonly", required: "required", trueValue: "trueValue", falseValue: "falseValue" }, outputs: { onChange: "onChange" }, host: { classAttribute: "p-element" }, providers: [CHECKBOX_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputViewChild", first: true, predicate: ["cb"], descendants: true }], ngImport: i0, template: `
+        <div [ngStyle]="style" [ngClass]="{'p-checkbox p-component': true, 'p-checkbox-checked': checked(), 'p-checkbox-disabled': disabled, 'p-checkbox-focused': focused}" [class]="styleClass">
+            <div class="p-hidden-accessible">
+                <input #cb type="checkbox" [attr.id]="inputId" [attr.name]="name" [readonly]="readonly" [value]="value" [checked]="checked()" (focus)="onFocus()" (blur)="onBlur()"
+                (change)="handleChange($event)" [disabled]="disabled" [attr.tabindex]="tabindex" [attr.aria-labelledby]="ariaLabelledBy" [attr.aria-label]="ariaLabel" [attr.aria-checked]="checked()" [attr.required]="required">
+            </div>
+            <div class="p-checkbox-box" (click)="onClick($event,cb,true)"
+                        [ngClass]="{'p-highlight': checked(), 'p-disabled': disabled, 'p-focus': focused}">
+                <span class="p-checkbox-icon" [ngClass]="checked() ? checkboxIcon : null"></span>
+            </div>
+        </div>
+        <label (click)="onClick($event,cb,true)" [class]="labelStyleClass"
+                [ngClass]="{'p-checkbox-label': true, 'p-checkbox-label-active':checked(), 'p-disabled':disabled, 'p-checkbox-label-focus':focused}"
+                *ngIf="label" [attr.for]="inputId">{{label}}</label>
+    `, isInline: true, styles: [".p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;vertical-align:bottom;position:relative}.p-checkbox-disabled{cursor:default!important;pointer-events:none}.p-checkbox-box{display:flex;justify-content:center;align-items:center}p-checkbox{display:inline-flex;vertical-align:bottom;align-items:center}.p-checkbox-label{line-height:1}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Checkbox, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-checkbox', template: `
+        <div [ngStyle]="style" [ngClass]="{'p-checkbox p-component': true, 'p-checkbox-checked': checked(), 'p-checkbox-disabled': disabled, 'p-checkbox-focused': focused}" [class]="styleClass">
+            <div class="p-hidden-accessible">
+                <input #cb type="checkbox" [attr.id]="inputId" [attr.name]="name" [readonly]="readonly" [value]="value" [checked]="checked()" (focus)="onFocus()" (blur)="onBlur()"
+                (change)="handleChange($event)" [disabled]="disabled" [attr.tabindex]="tabindex" [attr.aria-labelledby]="ariaLabelledBy" [attr.aria-label]="ariaLabel" [attr.aria-checked]="checked()" [attr.required]="required">
+            </div>
+            <div class="p-checkbox-box" (click)="onClick($event,cb,true)"
+                        [ngClass]="{'p-highlight': checked(), 'p-disabled': disabled, 'p-focus': focused}">
+                <span class="p-checkbox-icon" [ngClass]="checked() ? checkboxIcon : null"></span>
+            </div>
+        </div>
+        <label (click)="onClick($event,cb,true)" [class]="labelStyleClass"
+                [ngClass]="{'p-checkbox-label': true, 'p-checkbox-label-active':checked(), 'p-disabled':disabled, 'p-checkbox-label-focus':focused}"
+                *ngIf="label" [attr.for]="inputId">{{label}}</label>
+    `, providers: [CHECKBOX_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;vertical-align:bottom;position:relative}.p-checkbox-disabled{cursor:default!important;pointer-events:none}.p-checkbox-box{display:flex;justify-content:center;align-items:center}p-checkbox{display:inline-flex;vertical-align:bottom;align-items:center}.p-checkbox-label{line-height:1}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { value: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], binary: [{
+                type: Input
+            }], label: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], labelStyleClass: [{
+                type: Input
+            }], formControl: [{
+                type: Input
+            }], checkboxIcon: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], required: [{
+                type: Input
+            }], trueValue: [{
+                type: Input
+            }], falseValue: [{
+                type: Input
+            }], inputViewChild: [{
+                type: ViewChild,
+                args: ['cb']
+            }], onChange: [{
+                type: Output
+            }] } });
+class CheckboxModule {
+}
+CheckboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+CheckboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CheckboxModule, declarations: [Checkbox], imports: [CommonModule], exports: [Checkbox] });
+CheckboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CheckboxModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CheckboxModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Checkbox],
+                    declarations: [Checkbox]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { CHECKBOX_VALUE_ACCESSOR, Checkbox, CheckboxModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-checkbox.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-checkbox.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-checkbox.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-checkbox.mjs","sources":["../../src/app/components/checkbox/checkbox.ts","../../src/app/components/checkbox/primeng-checkbox.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,EventEmitter,forwardRef,ChangeDetectorRef,ViewChild,ElementRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl} from '@angular/forms';\nimport { ObjectUtils } from 'primeng/utils';\n\nexport const CHECKBOX_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => Checkbox),\n  multi: true\n};\n\n@Component({\n    selector: 'p-checkbox',\n    template: `\n        <div [ngStyle]=\"style\" [ngClass]=\"{'p-checkbox p-component': true, 'p-checkbox-checked': checked(), 'p-checkbox-disabled': disabled, 'p-checkbox-focused': focused}\" [class]=\"styleClass\">\n            <div class=\"p-hidden-accessible\">\n                <input #cb type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [readonly]=\"readonly\" [value]=\"value\" [checked]=\"checked()\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n                (change)=\"handleChange($event)\" [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\" [attr.aria-labelledby]=\"ariaLabelledBy\" [attr.aria-label]=\"ariaLabel\" [attr.aria-checked]=\"checked()\" [attr.required]=\"required\">\n            </div>\n            <div class=\"p-checkbox-box\" (click)=\"onClick($event,cb,true)\"\n                        [ngClass]=\"{'p-highlight': checked(), 'p-disabled': disabled, 'p-focus': focused}\">\n                <span class=\"p-checkbox-icon\" [ngClass]=\"checked() ? checkboxIcon : null\"></span>\n            </div>\n        </div>\n        <label (click)=\"onClick($event,cb,true)\" [class]=\"labelStyleClass\"\n                [ngClass]=\"{'p-checkbox-label': true, 'p-checkbox-label-active':checked(), 'p-disabled':disabled, 'p-checkbox-label-focus':focused}\"\n                *ngIf=\"label\" [attr.for]=\"inputId\">{{label}}</label>\n    `,\n    providers: [CHECKBOX_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./checkbox.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Checkbox implements ControlValueAccessor {\n\n    @Input() value: any;\n\n    @Input() name: string;\n\n    @Input() disabled: boolean;\n\n    @Input() binary: boolean;\n\n    @Input() label: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() ariaLabel: string;\n\n    @Input() tabindex: number;\n\n    @Input() inputId: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() labelStyleClass: string;\n\n    @Input() formControl: FormControl;\n\n    @Input() checkboxIcon: string = 'pi pi-check';\n\n    @Input() readonly: boolean;\n\n    @Input() required: boolean;\n\n    @Input() trueValue: any = true;\n\n    @Input() falseValue: any = false;\n\n    @ViewChild('cb') inputViewChild: ElementRef;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    model: any;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    focused: boolean = false;\n\n    constructor(private cd: ChangeDetectorRef) {}\n\n    onClick(event,checkbox,focus:boolean) {\n        event.preventDefault();\n\n        if (this.disabled || this.readonly) {\n            return;\n        }\n\n        this.updateModel(event);\n\n        if (focus) {\n            checkbox.focus();\n        }\n    }\n\n    updateModel(event) {\n        let newModelValue;\n\n        if (!this.binary) {\n            if (this.checked())\n                newModelValue = this.model.filter(val => !ObjectUtils.equals(val, this.value));\n            else\n                newModelValue = this.model ? [...this.model, this.value] : [this.value];\n\n            this.onModelChange(newModelValue);\n            this.model = newModelValue;\n\n            if (this.formControl) {\n                this.formControl.setValue(newModelValue);\n            }\n        }\n        else {\n            newModelValue = this.checked() ? this.falseValue : this.trueValue;\n            this.model = newModelValue;\n            this.onModelChange(newModelValue);\n        }\n\n        this.onChange.emit({checked:newModelValue, originalEvent: event});\n    }\n\n    handleChange(event) {\n        if (!this.readonly) {\n            this.updateModel(event);\n        }\n    }\n\n    onFocus() {\n        this.focused = true;\n    }\n\n    onBlur() {\n        this.focused = false;\n        this.onModelTouched();\n    }\n\n    focus() {\n        this.inputViewChild.nativeElement.focus();\n    }\n\n    writeValue(model: any) : void {\n        this.model = model;\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    checked() {\n        return this.binary ? this.model === this.trueValue : ObjectUtils.contains(this.value, this.model);\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Checkbox],\n    declarations: [Checkbox]\n})\nexport class CheckboxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-chip.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-chip.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-chip.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,81 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class Chip {
+    constructor() {
+        this.removeIcon = "pi pi-times-circle";
+        this.onRemove = new EventEmitter();
+        this.visible = true;
+    }
+    containerClass() {
+        return {
+            'p-chip p-component': true,
+            'p-chip-image': this.image != null
+        };
+    }
+    close(event) {
+        this.visible = false;
+        this.onRemove.emit(event);
+    }
+}
+Chip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Chip, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Chip.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Chip, selector: "p-chip", inputs: { label: "label", icon: "icon", image: "image", style: "style", styleClass: "styleClass", removable: "removable", removeIcon: "removeIcon" }, outputs: { onRemove: "onRemove" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style" *ngIf="visible">
+            <ng-content></ng-content>
+            <img [src]="image" *ngIf="image;else iconTemplate">
+            <ng-template #iconTemplate><span *ngIf="icon" [class]="icon" [ngClass]="'p-chip-icon'"></span></ng-template>
+            <div class="p-chip-text" *ngIf="label">{{label}}</div>
+            <span *ngIf="removable" tabindex="0" [class]="removeIcon" [ngClass]="'pi-chip-remove-icon'" (click)="close($event)" (keydown.enter)="close($event)"></span>
+        </div>
+    `, isInline: true, styles: [".p-chip{display:inline-flex;align-items:center}.p-chip-text,.p-chip-icon.pi{line-height:1.5}.pi-chip-remove-icon{line-height:1.5;cursor:pointer}.p-chip img{border-radius:50%}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Chip, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-chip', template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style" *ngIf="visible">
+            <ng-content></ng-content>
+            <img [src]="image" *ngIf="image;else iconTemplate">
+            <ng-template #iconTemplate><span *ngIf="icon" [class]="icon" [ngClass]="'p-chip-icon'"></span></ng-template>
+            <div class="p-chip-text" *ngIf="label">{{label}}</div>
+            <span *ngIf="removable" tabindex="0" [class]="removeIcon" [ngClass]="'pi-chip-remove-icon'" (click)="close($event)" (keydown.enter)="close($event)"></span>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-chip{display:inline-flex;align-items:center}.p-chip-text,.p-chip-icon.pi{line-height:1.5}.pi-chip-remove-icon{line-height:1.5;cursor:pointer}.p-chip img{border-radius:50%}\n"] }]
+        }], propDecorators: { label: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], image: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], removable: [{
+                type: Input
+            }], removeIcon: [{
+                type: Input
+            }], onRemove: [{
+                type: Output
+            }] } });
+class ChipModule {
+}
+ChipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ChipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChipModule, declarations: [Chip], imports: [CommonModule], exports: [Chip] });
+ChipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChipModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChipModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Chip],
+                    declarations: [Chip]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Chip, ChipModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-chip.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-chip.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-chip.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-chip.mjs","sources":["../../src/app/components/chip/chip.ts","../../src/app/components/chip/primeng-chip.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'p-chip',\n    template: `\n        <div [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\" *ngIf=\"visible\">\n            <ng-content></ng-content>\n            <img [src]=\"image\" *ngIf=\"image;else iconTemplate\">\n            <ng-template #iconTemplate><span *ngIf=\"icon\" [class]=\"icon\" [ngClass]=\"'p-chip-icon'\"></span></ng-template>\n            <div class=\"p-chip-text\" *ngIf=\"label\">{{label}}</div>\n            <span *ngIf=\"removable\" tabindex=\"0\" [class]=\"removeIcon\" [ngClass]=\"'pi-chip-remove-icon'\" (click)=\"close($event)\" (keydown.enter)=\"close($event)\"></span>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./chip.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Chip {\n\n    @Input() label: string;\n\n    @Input() icon: string;\n\n    @Input() image: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() removable: boolean;\n\n    @Input() removeIcon: string = \"pi pi-times-circle\";\n\n    @Output() onRemove: EventEmitter<any> = new EventEmitter();\n\n    visible: boolean = true;\n\n    containerClass() {\n        return {\n            'p-chip p-component': true,\n            'p-chip-image': this.image != null\n        };\n    }\n\n    close(event) {\n        this.visible = false;\n        this.onRemove.emit(event)\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Chip],\n    declarations: [Chip]\n})\nexport class ChipModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAqBa,IAAI;IAlBjB;QAgCa,eAAU,GAAW,oBAAoB,CAAC;QAEzC,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE3D,YAAO,GAAY,IAAI,CAAC;KAa3B;IAXG,cAAc;QACV,OAAO;YACH,oBAAoB,EAAE,IAAI;YAC1B,cAAc,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;SACrC,CAAC;KACL;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC5B;;iGA9BQ,IAAI;qFAAJ,IAAI,8QAhBH;;;;;;;;KAQT;2FAQQ,IAAI;kBAlBhB,SAAS;+BACI,QAAQ,YACR;;;;;;;;KAQT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,KAAK;sBAAb,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEI,QAAQ;sBAAjB,MAAM;;MAsBE,UAAU;;uGAAV,UAAU;wGAAV,UAAU,iBAtCV,IAAI,aAkCH,YAAY,aAlCb,IAAI;wGAsCJ,UAAU,YAJV,CAAC,YAAY,CAAC;2FAId,UAAU;kBALtB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,CAAC,IAAI,CAAC;iBACvB;;;AC1DD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-chips.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-chips.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-chips.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,297 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { InputTextModule } from 'primeng/inputtext';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const CHIPS_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Chips),
+    multi: true
+};
+class Chips {
+    constructor(el, cd) {
+        this.el = el;
+        this.cd = cd;
+        this.allowDuplicate = true;
+        this.onAdd = new EventEmitter();
+        this.onRemove = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.onChipClick = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+        this.updateFilledState();
+    }
+    onClick() {
+        this.inputViewChild.nativeElement.focus();
+    }
+    onInput() {
+        this.updateFilledState();
+    }
+    onPaste(event) {
+        if (!this.disabled) {
+            if (this.separator) {
+                let pastedData = (event.clipboardData || window['clipboardData']).getData('Text');
+                pastedData.split(this.separator).forEach(val => {
+                    this.addItem(event, val, true);
+                });
+                this.inputViewChild.nativeElement.value = '';
+            }
+            this.updateFilledState();
+        }
+    }
+    updateFilledState() {
+        if (!this.value || this.value.length === 0) {
+            this.filled = (this.inputViewChild && this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value != '');
+        }
+        else {
+            this.filled = true;
+        }
+    }
+    onItemClick(event, item) {
+        this.onChipClick.emit({
+            originalEvent: event,
+            value: item
+        });
+    }
+    writeValue(value) {
+        this.value = value;
+        this.updateMaxedOut();
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    resolveFieldData(data, field) {
+        if (data && field) {
+            if (field.indexOf('.') == -1) {
+                return data[field];
+            }
+            else {
+                let fields = field.split('.');
+                let value = data;
+                for (var i = 0, len = fields.length; i < len; ++i) {
+                    value = value[fields[i]];
+                }
+                return value;
+            }
+        }
+        else {
+            return null;
+        }
+    }
+    onInputFocus(event) {
+        this.focus = true;
+        this.onFocus.emit(event);
+    }
+    onInputBlur(event) {
+        this.focus = false;
+        if (this.addOnBlur && this.inputViewChild.nativeElement.value) {
+            this.addItem(event, this.inputViewChild.nativeElement.value, false);
+        }
+        this.onModelTouched();
+        this.onBlur.emit(event);
+    }
+    removeItem(event, index) {
+        if (this.disabled) {
+            return;
+        }
+        let removedItem = this.value[index];
+        this.value = this.value.filter((val, i) => i != index);
+        this.onModelChange(this.value);
+        this.onRemove.emit({
+            originalEvent: event,
+            value: removedItem
+        });
+        this.updateFilledState();
+        this.updateMaxedOut();
+    }
+    addItem(event, item, preventDefault) {
+        this.value = this.value || [];
+        if (item && item.trim().length) {
+            if (this.allowDuplicate || this.value.indexOf(item) === -1) {
+                this.value = [...this.value, item];
+                this.onModelChange(this.value);
+                this.onAdd.emit({
+                    originalEvent: event,
+                    value: item
+                });
+            }
+        }
+        this.updateFilledState();
+        this.updateMaxedOut();
+        this.inputViewChild.nativeElement.value = '';
+        if (preventDefault) {
+            event.preventDefault();
+        }
+    }
+    onKeydown(event) {
+        switch (event.which) {
+            //backspace
+            case 8:
+                if (this.inputViewChild.nativeElement.value.length === 0 && this.value && this.value.length > 0) {
+                    this.value = [...this.value];
+                    let removedItem = this.value.pop();
+                    this.onModelChange(this.value);
+                    this.onRemove.emit({
+                        originalEvent: event,
+                        value: removedItem
+                    });
+                    this.updateFilledState();
+                }
+                break;
+            //enter
+            case 13:
+                this.addItem(event, this.inputViewChild.nativeElement.value, true);
+                break;
+            case 9:
+                if (this.addOnTab && this.inputViewChild.nativeElement.value !== '') {
+                    this.addItem(event, this.inputViewChild.nativeElement.value, true);
+                }
+                break;
+            default:
+                if (this.max && this.value && this.max === this.value.length) {
+                    event.preventDefault();
+                }
+                else if (this.separator) {
+                    if (this.separator === ',' && event.which === 188) {
+                        this.addItem(event, this.inputViewChild.nativeElement.value, true);
+                    }
+                }
+                break;
+        }
+    }
+    updateMaxedOut() {
+        if (this.inputViewChild && this.inputViewChild.nativeElement) {
+            if (this.max && this.value && this.max === this.value.length)
+                this.inputViewChild.nativeElement.disabled = true;
+            else
+                this.inputViewChild.nativeElement.disabled = this.disabled || false;
+        }
+    }
+}
+Chips.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Chips, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Chips.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Chips, selector: "p-chips", inputs: { style: "style", styleClass: "styleClass", disabled: "disabled", field: "field", placeholder: "placeholder", max: "max", ariaLabelledBy: "ariaLabelledBy", tabindex: "tabindex", inputId: "inputId", allowDuplicate: "allowDuplicate", inputStyle: "inputStyle", inputStyleClass: "inputStyleClass", addOnTab: "addOnTab", addOnBlur: "addOnBlur", separator: "separator" }, outputs: { onAdd: "onAdd", onRemove: "onRemove", onFocus: "onFocus", onBlur: "onBlur", onChipClick: "onChipClick" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "focus" }, classAttribute: "p-element p-inputwrapper" }, providers: [CHIPS_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "inputViewChild", first: true, predicate: ["inputtext"], descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="'p-chips p-component'" [ngStyle]="style" [class]="styleClass" (click)="onClick()">
+            <ul [ngClass]="{'p-inputtext p-chips-multiple-container':true,'p-focus':focus,'p-disabled':disabled}">
+                <li #token *ngFor="let item of value; let i = index;" class="p-chips-token" (click)="onItemClick($event, item)">
+                    <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+                    <span *ngIf="!itemTemplate" class="p-chips-token-label">{{field ? resolveFieldData(item,field) : item}}</span>
+                    <span *ngIf="!disabled" class="p-chips-token-icon pi pi-times-circle" (click)="removeItem($event,i)"></span>
+                </li>
+                <li class="p-chips-input-token">
+                    <input #inputtext type="text" [attr.id]="inputId" [attr.placeholder]="(value && value.length ? null : placeholder)" [attr.tabindex]="tabindex" (keydown)="onKeydown($event)"
+                    (input)="onInput()" (paste)="onPaste($event)" [attr.aria-labelledby]="ariaLabelledBy" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" [disabled]="disabled" [ngStyle]="inputStyle" [class]="inputStyleClass">
+                </li>
+            </ul>
+        </div>
+    `, isInline: true, styles: [".p-chips{display:inline-flex}.p-chips-multiple-container{margin:0;padding:0;list-style-type:none;cursor:text;overflow:hidden;display:flex;align-items:center;flex-wrap:wrap}.p-chips-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto}.p-chips-input-token{flex:1 1 auto;display:inline-flex}.p-chips-token-icon{cursor:pointer}.p-chips-input-token input{border:0 none;outline:0 none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0;width:100%}.p-fluid .p-chips{display:flex}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Chips, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-chips', template: `
+        <div [ngClass]="'p-chips p-component'" [ngStyle]="style" [class]="styleClass" (click)="onClick()">
+            <ul [ngClass]="{'p-inputtext p-chips-multiple-container':true,'p-focus':focus,'p-disabled':disabled}">
+                <li #token *ngFor="let item of value; let i = index;" class="p-chips-token" (click)="onItemClick($event, item)">
+                    <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+                    <span *ngIf="!itemTemplate" class="p-chips-token-label">{{field ? resolveFieldData(item,field) : item}}</span>
+                    <span *ngIf="!disabled" class="p-chips-token-icon pi pi-times-circle" (click)="removeItem($event,i)"></span>
+                </li>
+                <li class="p-chips-input-token">
+                    <input #inputtext type="text" [attr.id]="inputId" [attr.placeholder]="(value && value.length ? null : placeholder)" [attr.tabindex]="tabindex" (keydown)="onKeydown($event)"
+                    (input)="onInput()" (paste)="onPaste($event)" [attr.aria-labelledby]="ariaLabelledBy" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" [disabled]="disabled" [ngStyle]="inputStyle" [class]="inputStyleClass">
+                </li>
+            </ul>
+        </div>
+    `, host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': 'filled',
+                        '[class.p-inputwrapper-focus]': 'focus'
+                    }, providers: [CHIPS_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".p-chips{display:inline-flex}.p-chips-multiple-container{margin:0;padding:0;list-style-type:none;cursor:text;overflow:hidden;display:flex;align-items:center;flex-wrap:wrap}.p-chips-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto}.p-chips-input-token{flex:1 1 auto;display:inline-flex}.p-chips-token-icon{cursor:pointer}.p-chips-input-token input{border:0 none;outline:0 none;background-color:transparent;margin:0;padding:0;box-shadow:none;border-radius:0;width:100%}.p-fluid .p-chips{display:flex}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], field: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], max: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], allowDuplicate: [{
+                type: Input
+            }], inputStyle: [{
+                type: Input
+            }], inputStyleClass: [{
+                type: Input
+            }], addOnTab: [{
+                type: Input
+            }], addOnBlur: [{
+                type: Input
+            }], separator: [{
+                type: Input
+            }], onAdd: [{
+                type: Output
+            }], onRemove: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], onChipClick: [{
+                type: Output
+            }], inputViewChild: [{
+                type: ViewChild,
+                args: ['inputtext']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class ChipsModule {
+}
+ChipsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChipsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ChipsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChipsModule, declarations: [Chips], imports: [CommonModule, InputTextModule, SharedModule], exports: [Chips, InputTextModule, SharedModule] });
+ChipsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChipsModule, imports: [[CommonModule, InputTextModule, SharedModule], InputTextModule, SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ChipsModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, InputTextModule, SharedModule],
+                    exports: [Chips, InputTextModule, SharedModule],
+                    declarations: [Chips]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { CHIPS_VALUE_ACCESSOR, Chips, ChipsModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-chips.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-chips.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-chips.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-chips.mjs","sources":["../../src/app/components/chips/chips.ts","../../src/app/components/chips/primeng-chips.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,Input,Output,EventEmitter,AfterContentInit,ContentChildren,QueryList,TemplateRef,forwardRef,ViewChild,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SharedModule,PrimeTemplate} from 'primeng/api';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const CHIPS_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => Chips),\n  multi: true\n};\n\n@Component({\n    selector: 'p-chips',\n    template: `\n        <div [ngClass]=\"'p-chips p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\" (click)=\"onClick()\">\n            <ul [ngClass]=\"{'p-inputtext p-chips-multiple-container':true,'p-focus':focus,'p-disabled':disabled}\">\n                <li #token *ngFor=\"let item of value; let i = index;\" class=\"p-chips-token\" (click)=\"onItemClick($event, item)\">\n                    <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item}\"></ng-container>\n                    <span *ngIf=\"!itemTemplate\" class=\"p-chips-token-label\">{{field ? resolveFieldData(item,field) : item}}</span>\n                    <span *ngIf=\"!disabled\" class=\"p-chips-token-icon pi pi-times-circle\" (click)=\"removeItem($event,i)\"></span>\n                </li>\n                <li class=\"p-chips-input-token\">\n                    <input #inputtext type=\"text\" [attr.id]=\"inputId\" [attr.placeholder]=\"(value && value.length ? null : placeholder)\" [attr.tabindex]=\"tabindex\" (keydown)=\"onKeydown($event)\"\n                    (input)=\"onInput()\" (paste)=\"onPaste($event)\" [attr.aria-labelledby]=\"ariaLabelledBy\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\" [disabled]=\"disabled\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\">\n                </li>\n            </ul>\n        </div>\n    `,\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focus'\n    },\n    providers: [CHIPS_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./chips.css']\n})\nexport class Chips implements AfterContentInit,ControlValueAccessor {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() disabled: boolean;\n\n    @Input() field: string;\n\n    @Input() placeholder: string;\n\n    @Input() max: number;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() tabindex: number;\n\n    @Input() inputId: string;\n\n    @Input() allowDuplicate: boolean = true;\n\n    @Input() inputStyle: any;\n\n    @Input() inputStyleClass: any;\n\n    @Input() addOnTab: boolean;\n\n    @Input() addOnBlur: boolean;\n\n    @Input() separator: string;\n\n    @Output() onAdd: EventEmitter<any> = new EventEmitter();\n\n    @Output() onRemove: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onChipClick: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('inputtext') inputViewChild: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    public itemTemplate: TemplateRef<any>;\n\n    value: any;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    valueChanged: boolean;\n\n    focus: boolean;\n\n    filled: boolean;\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef) {}\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n\n        this.updateFilledState();\n    }\n\n    onClick() {\n        this.inputViewChild.nativeElement.focus();\n    }\n\n    onInput() {\n        this.updateFilledState();\n    }\n\n    onPaste(event) {\n        if (!this.disabled) {\n            if (this.separator) {\n                let pastedData = (event.clipboardData || window['clipboardData']).getData('Text');\n                pastedData.split(this.separator).forEach(val => {\n                    this.addItem(event, val, true);\n                });\n                this.inputViewChild.nativeElement.value = '';\n            }\n\n            this.updateFilledState();\n        }\n    }\n\n    updateFilledState() {\n        if (!this.value || this.value.length === 0) {\n            this.filled = (this.inputViewChild && this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value != '');\n        }\n        else {\n            this.filled = true;\n        }\n    }\n\n    onItemClick(event: Event, item: any) {\n        this.onChipClick.emit({\n            originalEvent: event,\n            value: item\n        });\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.updateMaxedOut();\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    resolveFieldData(data: any, field: string): any {\n        if (data && field) {\n            if (field.indexOf('.') == -1) {\n                return data[field];\n            }\n            else {\n                let fields: string[] = field.split('.');\n                let value = data;\n                for(var i = 0, len = fields.length; i < len; ++i) {\n                    value = value[fields[i]];\n                }\n                return value;\n            }\n        }\n        else {\n            return null;\n        }\n    }\n\n    onInputFocus(event: FocusEvent) {\n        this.focus = true;\n        this.onFocus.emit(event);\n    }\n\n    onInputBlur(event: FocusEvent) {\n        this.focus = false;\n        if (this.addOnBlur && this.inputViewChild.nativeElement.value) {\n            this.addItem(event, this.inputViewChild.nativeElement.value, false);\n        }\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    }\n\n    removeItem(event: Event, index: number): void {\n        if (this.disabled) {\n            return;\n        }\n\n        let removedItem = this.value[index];\n        this.value = this.value.filter((val, i) => i!=index);\n        this.onModelChange(this.value);\n        this.onRemove.emit({\n            originalEvent: event,\n            value: removedItem\n        });\n        this.updateFilledState();\n        this.updateMaxedOut();\n    }\n\n    addItem(event: Event, item: string, preventDefault: boolean): void {\n        this.value = this.value||[];\n        if (item && item.trim().length) {\n            if (this.allowDuplicate || this.value.indexOf(item) === -1) {\n                this.value = [...this.value, item];\n                this.onModelChange(this.value);\n                this.onAdd.emit({\n                    originalEvent: event,\n                    value: item\n                });\n            }\n        }\n        this.updateFilledState();\n        this.updateMaxedOut();\n        this.inputViewChild.nativeElement.value = '';\n\n        if (preventDefault) {\n            event.preventDefault();\n        }\n    }\n\n    onKeydown(event: KeyboardEvent): void {\n        switch(event.which) {\n            //backspace\n            case 8:\n                if (this.inputViewChild.nativeElement.value.length === 0 && this.value && this.value.length > 0) {\n                    this.value = [...this.value];\n                    let removedItem = this.value.pop();\n                    this.onModelChange(this.value);\n                    this.onRemove.emit({\n                        originalEvent: event,\n                        value: removedItem\n                    });\n                    this.updateFilledState();\n                }\n            break;\n\n            //enter\n            case 13:\n                this.addItem(event, this.inputViewChild.nativeElement.value, true);\n            break;\n\n            case 9:\n                if (this.addOnTab && this.inputViewChild.nativeElement.value !== '') {\n                    this.addItem(event, this.inputViewChild.nativeElement.value, true);\n                }\n            break;\n\n            default:\n                if (this.max && this.value && this.max === this.value.length) {\n                    event.preventDefault();\n                }\n                else if (this.separator) {\n                    if (this.separator === ',' && event.which === 188) {\n                        this.addItem(event, this.inputViewChild.nativeElement.value, true);\n                    }\n                }\n            break;\n        }\n    }\n\n    updateMaxedOut() {\n        if (this.inputViewChild && this.inputViewChild.nativeElement) {\n            if (this.max && this.value && this.max === this.value.length)\n                this.inputViewChild.nativeElement.disabled = true;\n            else\n                this.inputViewChild.nativeElement.disabled = this.disabled || false;\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,InputTextModule,SharedModule],\n    exports: [Chips,InputTextModule,SharedModule],\n    declarations: [Chips]\n})\nexport class ChipsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-codehighlighter.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-codehighlighter.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-codehighlighter.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,44 @@
+import * as i0 from '@angular/core';
+import { Directive, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+class CodeHighlighter {
+    constructor(el) {
+        this.el = el;
+    }
+    ngAfterViewInit() {
+        if (window['Prism']) {
+            window['Prism'].highlightElement(this.el.nativeElement);
+        }
+    }
+}
+CodeHighlighter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CodeHighlighter, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+CodeHighlighter.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: CodeHighlighter, selector: "[pCode]", host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CodeHighlighter, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pCode]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
+class CodeHighlighterModule {
+}
+CodeHighlighterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CodeHighlighterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+CodeHighlighterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CodeHighlighterModule, declarations: [CodeHighlighter], imports: [CommonModule], exports: [CodeHighlighter] });
+CodeHighlighterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CodeHighlighterModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CodeHighlighterModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [CodeHighlighter],
+                    declarations: [CodeHighlighter]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { CodeHighlighter, CodeHighlighterModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-codehighlighter.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-codehighlighter.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-codehighlighter.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-codehighlighter.mjs","sources":["../../src/app/components/codehighlighter/codehighlighter.ts","../../src/app/components/codehighlighter/primeng-codehighlighter.ts"],"sourcesContent":["import { NgModule, Directive, ElementRef, AfterViewInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Directive({\n    selector: '[pCode]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class CodeHighlighter implements AfterViewInit {\n\n    constructor(public el: ElementRef) { }\n\n    ngAfterViewInit() {\n        if (window['Prism']) {\n            window['Prism'].highlightElement(this.el.nativeElement);\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [CodeHighlighter],\n    declarations: [CodeHighlighter]\n})\nexport class CodeHighlighterModule { }\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MASa,eAAe;IAExB,YAAmB,EAAc;QAAd,OAAE,GAAF,EAAE,CAAY;KAAK;IAEtC,eAAe;QACX,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;YACjB,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;SAC3D;KACJ;;4GARQ,eAAe;gGAAf,eAAe;2FAAf,eAAe;kBAN3B,SAAS;mBAAC;oBACP,QAAQ,EAAE,SAAS;oBACnB,IAAI,EAAE;wBACF,OAAO,EAAE,WAAW;qBACvB;iBACJ;;MAiBY,qBAAqB;;kHAArB,qBAAqB;mHAArB,qBAAqB,iBAhBrB,eAAe,aAYd,YAAY,aAZb,eAAe;mHAgBf,qBAAqB,YAJrB,CAAC,YAAY,CAAC;2FAId,qBAAqB;kBALjC,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,YAAY,EAAE,CAAC,eAAe,CAAC;iBAClC;;;ACxBD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-colorpicker.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-colorpicker.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-colorpicker.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,664 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, NgModule } from '@angular/core';
+import { trigger, transition, style, animate } from '@angular/animations';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i1 from 'primeng/api';
+
+const COLORPICKER_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => ColorPicker),
+    multi: true
+};
+class ColorPicker {
+    constructor(el, renderer, cd, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.format = 'hex';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.onChange = new EventEmitter();
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.value = { h: 0, s: 100, b: 100 };
+        this.defaultColor = 'ff0000';
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    set colorSelector(element) {
+        this.colorSelectorViewChild = element;
+    }
+    set colorHandle(element) {
+        this.colorHandleViewChild = element;
+    }
+    set hue(element) {
+        this.hueViewChild = element;
+    }
+    set hueHandle(element) {
+        this.hueHandleViewChild = element;
+    }
+    onHueMousedown(event) {
+        if (this.disabled) {
+            return;
+        }
+        this.bindDocumentMousemoveListener();
+        this.bindDocumentMouseupListener();
+        this.hueDragging = true;
+        this.pickHue(event);
+    }
+    onHueTouchStart(event) {
+        if (this.disabled) {
+            return;
+        }
+        this.hueDragging = true;
+        this.pickHue(event, event.changedTouches[0]);
+    }
+    onColorTouchStart(event) {
+        if (this.disabled) {
+            return;
+        }
+        this.colorDragging = true;
+        this.pickColor(event, event.changedTouches[0]);
+    }
+    pickHue(event, position) {
+        let pageY = position ? position.pageY : event.pageY;
+        let top = this.hueViewChild.nativeElement.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);
+        this.value = this.validateHSB({
+            h: Math.floor(360 * (150 - Math.max(0, Math.min(150, (pageY - top)))) / 150),
+            s: this.value.s,
+            b: this.value.b
+        });
+        this.updateColorSelector();
+        this.updateUI();
+        this.updateModel();
+        this.onChange.emit({ originalEvent: event, value: this.getValueToUpdate() });
+    }
+    onColorMousedown(event) {
+        if (this.disabled) {
+            return;
+        }
+        this.bindDocumentMousemoveListener();
+        this.bindDocumentMouseupListener();
+        this.colorDragging = true;
+        this.pickColor(event);
+    }
+    onMove(event) {
+        if (this.colorDragging) {
+            this.pickColor(event, event.changedTouches[0]);
+            event.preventDefault();
+        }
+        if (this.hueDragging) {
+            this.pickHue(event, event.changedTouches[0]);
+            event.preventDefault();
+        }
+    }
+    onDragEnd() {
+        this.colorDragging = false;
+        this.hueDragging = false;
+        this.unbindDocumentMousemoveListener();
+        this.unbindDocumentMouseupListener();
+    }
+    pickColor(event, position) {
+        let pageX = position ? position.pageX : event.pageX;
+        let pageY = position ? position.pageY : event.pageY;
+        let rect = this.colorSelectorViewChild.nativeElement.getBoundingClientRect();
+        let top = rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);
+        let left = rect.left + document.body.scrollLeft;
+        let saturation = Math.floor(100 * (Math.max(0, Math.min(150, ((pageX) - left)))) / 150);
+        let brightness = Math.floor(100 * (150 - Math.max(0, Math.min(150, ((pageY) - top)))) / 150);
+        this.value = this.validateHSB({
+            h: this.value.h,
+            s: saturation,
+            b: brightness
+        });
+        this.updateUI();
+        this.updateModel();
+        this.onChange.emit({ originalEvent: event, value: this.getValueToUpdate() });
+    }
+    getValueToUpdate() {
+        let val;
+        switch (this.format) {
+            case 'hex':
+                val = '#' + this.HSBtoHEX(this.value);
+                break;
+            case 'rgb':
+                val = this.HSBtoRGB(this.value);
+                break;
+            case 'hsb':
+                val = this.value;
+                break;
+        }
+        return val;
+    }
+    updateModel() {
+        this.onModelChange(this.getValueToUpdate());
+    }
+    writeValue(value) {
+        if (value) {
+            switch (this.format) {
+                case 'hex':
+                    this.value = this.HEXtoHSB(value);
+                    break;
+                case 'rgb':
+                    this.value = this.RGBtoHSB(value);
+                    break;
+                case 'hsb':
+                    this.value = value;
+                    break;
+            }
+        }
+        else {
+            this.value = this.HEXtoHSB(this.defaultColor);
+        }
+        this.updateColorSelector();
+        this.updateUI();
+        this.cd.markForCheck();
+    }
+    updateColorSelector() {
+        if (this.colorSelectorViewChild) {
+            const hsb = {};
+            hsb.s = 100;
+            hsb.b = 100;
+            hsb.h = this.value.h;
+            this.colorSelectorViewChild.nativeElement.style.backgroundColor = '#' + this.HSBtoHEX(hsb);
+        }
+    }
+    updateUI() {
+        if (this.colorHandleViewChild && this.hueHandleViewChild.nativeElement) {
+            this.colorHandleViewChild.nativeElement.style.left = Math.floor(150 * this.value.s / 100) + 'px';
+            this.colorHandleViewChild.nativeElement.style.top = Math.floor(150 * (100 - this.value.b) / 100) + 'px';
+            this.hueHandleViewChild.nativeElement.style.top = Math.floor(150 - (150 * this.value.h / 360)) + 'px';
+        }
+        this.inputBgColor = '#' + this.HSBtoHEX(this.value);
+    }
+    onInputFocus() {
+        this.onModelTouched();
+    }
+    show() {
+        this.overlayVisible = true;
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                if (!this.inline) {
+                    this.overlay = event.element;
+                    this.appendOverlay();
+                    if (this.autoZIndex) {
+                        ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);
+                    }
+                    this.alignOverlay();
+                    this.bindDocumentClickListener();
+                    this.bindDocumentResizeListener();
+                    this.bindScrollListener();
+                    this.updateColorSelector();
+                    this.updateUI();
+                }
+                break;
+            case 'void':
+                this.onOverlayHide();
+                break;
+        }
+    }
+    onOverlayAnimationEnd(event) {
+        switch (event.toState) {
+            case 'visible':
+                if (!this.inline) {
+                    this.onShow.emit({});
+                }
+                break;
+            case 'void':
+                if (this.autoZIndex) {
+                    ZIndexUtils.clear(event.element);
+                }
+                this.onHide.emit({});
+                break;
+        }
+    }
+    appendOverlay() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.overlay);
+            else
+                DomHandler.appendChild(this.overlay, this.appendTo);
+        }
+    }
+    restoreOverlayAppend() {
+        if (this.overlay && this.appendTo) {
+            this.el.nativeElement.appendChild(this.overlay);
+        }
+    }
+    alignOverlay() {
+        if (this.appendTo)
+            DomHandler.absolutePosition(this.overlay, this.inputViewChild.nativeElement);
+        else
+            DomHandler.relativePosition(this.overlay, this.inputViewChild.nativeElement);
+    }
+    hide() {
+        this.overlayVisible = false;
+        this.cd.markForCheck();
+    }
+    onInputClick() {
+        this.selfClick = true;
+        this.togglePanel();
+    }
+    togglePanel() {
+        if (!this.overlayVisible)
+            this.show();
+        else
+            this.hide();
+    }
+    onInputKeydown(event) {
+        switch (event.which) {
+            //space
+            case 32:
+                this.togglePanel();
+                event.preventDefault();
+                break;
+            //escape and tab
+            case 27:
+            case 9:
+                this.hide();
+                break;
+        }
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+        this.selfClick = true;
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {
+                if (!this.selfClick) {
+                    this.overlayVisible = false;
+                    this.unbindDocumentClickListener();
+                }
+                this.selfClick = false;
+                this.cd.markForCheck();
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    bindDocumentMousemoveListener() {
+        if (!this.documentMousemoveListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentMousemoveListener = this.renderer.listen(documentTarget, 'mousemove', (event) => {
+                if (this.colorDragging) {
+                    this.pickColor(event);
+                }
+                if (this.hueDragging) {
+                    this.pickHue(event);
+                }
+            });
+        }
+    }
+    unbindDocumentMousemoveListener() {
+        if (this.documentMousemoveListener) {
+            this.documentMousemoveListener();
+            this.documentMousemoveListener = null;
+        }
+    }
+    bindDocumentMouseupListener() {
+        if (!this.documentMouseupListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentMouseupListener = this.renderer.listen(documentTarget, 'mouseup', () => {
+                this.colorDragging = false;
+                this.hueDragging = false;
+                this.unbindDocumentMousemoveListener();
+                this.unbindDocumentMouseupListener();
+            });
+        }
+    }
+    unbindDocumentMouseupListener() {
+        if (this.documentMouseupListener) {
+            this.documentMouseupListener();
+            this.documentMouseupListener = null;
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    onWindowResize() {
+        this.hide();
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    validateHSB(hsb) {
+        return {
+            h: Math.min(360, Math.max(0, hsb.h)),
+            s: Math.min(100, Math.max(0, hsb.s)),
+            b: Math.min(100, Math.max(0, hsb.b))
+        };
+    }
+    validateRGB(rgb) {
+        return {
+            r: Math.min(255, Math.max(0, rgb.r)),
+            g: Math.min(255, Math.max(0, rgb.g)),
+            b: Math.min(255, Math.max(0, rgb.b))
+        };
+    }
+    validateHEX(hex) {
+        var len = 6 - hex.length;
+        if (len > 0) {
+            var o = [];
+            for (var i = 0; i < len; i++) {
+                o.push('0');
+            }
+            o.push(hex);
+            hex = o.join('');
+        }
+        return hex;
+    }
+    HEXtoRGB(hex) {
+        let hexValue = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);
+        return { r: hexValue >> 16, g: (hexValue & 0x00FF00) >> 8, b: (hexValue & 0x0000FF) };
+    }
+    HEXtoHSB(hex) {
+        return this.RGBtoHSB(this.HEXtoRGB(hex));
+    }
+    RGBtoHSB(rgb) {
+        var hsb = {
+            h: 0,
+            s: 0,
+            b: 0
+        };
+        var min = Math.min(rgb.r, rgb.g, rgb.b);
+        var max = Math.max(rgb.r, rgb.g, rgb.b);
+        var delta = max - min;
+        hsb.b = max;
+        hsb.s = max != 0 ? 255 * delta / max : 0;
+        if (hsb.s != 0) {
+            if (rgb.r == max) {
+                hsb.h = (rgb.g - rgb.b) / delta;
+            }
+            else if (rgb.g == max) {
+                hsb.h = 2 + (rgb.b - rgb.r) / delta;
+            }
+            else {
+                hsb.h = 4 + (rgb.r - rgb.g) / delta;
+            }
+        }
+        else {
+            hsb.h = -1;
+        }
+        hsb.h *= 60;
+        if (hsb.h < 0) {
+            hsb.h += 360;
+        }
+        hsb.s *= 100 / 255;
+        hsb.b *= 100 / 255;
+        return hsb;
+    }
+    HSBtoRGB(hsb) {
+        var rgb = {
+            r: null, g: null, b: null
+        };
+        let h = hsb.h;
+        let s = hsb.s * 255 / 100;
+        let v = hsb.b * 255 / 100;
+        if (s == 0) {
+            rgb = {
+                r: v,
+                g: v,
+                b: v
+            };
+        }
+        else {
+            let t1 = v;
+            let t2 = (255 - s) * v / 255;
+            let t3 = (t1 - t2) * (h % 60) / 60;
+            if (h == 360)
+                h = 0;
+            if (h < 60) {
+                rgb.r = t1;
+                rgb.b = t2;
+                rgb.g = t2 + t3;
+            }
+            else if (h < 120) {
+                rgb.g = t1;
+                rgb.b = t2;
+                rgb.r = t1 - t3;
+            }
+            else if (h < 180) {
+                rgb.g = t1;
+                rgb.r = t2;
+                rgb.b = t2 + t3;
+            }
+            else if (h < 240) {
+                rgb.b = t1;
+                rgb.r = t2;
+                rgb.g = t1 - t3;
+            }
+            else if (h < 300) {
+                rgb.b = t1;
+                rgb.g = t2;
+                rgb.r = t2 + t3;
+            }
+            else if (h < 360) {
+                rgb.r = t1;
+                rgb.g = t2;
+                rgb.b = t1 - t3;
+            }
+            else {
+                rgb.r = 0;
+                rgb.g = 0;
+                rgb.b = 0;
+            }
+        }
+        return { r: Math.round(rgb.r), g: Math.round(rgb.g), b: Math.round(rgb.b) };
+    }
+    RGBtoHEX(rgb) {
+        var hex = [
+            rgb.r.toString(16),
+            rgb.g.toString(16),
+            rgb.b.toString(16)
+        ];
+        for (var key in hex) {
+            if (hex[key].length == 1) {
+                hex[key] = '0' + hex[key];
+            }
+        }
+        return hex.join('');
+    }
+    HSBtoHEX(hsb) {
+        return this.RGBtoHEX(this.HSBtoRGB(hsb));
+    }
+    onOverlayHide() {
+        this.unbindScrollListener();
+        this.unbindDocumentResizeListener();
+        this.unbindDocumentClickListener();
+        this.overlay = null;
+    }
+    ngOnDestroy() {
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        if (this.overlay && this.autoZIndex) {
+            ZIndexUtils.clear(this.overlay);
+        }
+        this.restoreOverlayAppend();
+        this.onOverlayHide();
+    }
+}
+ColorPicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColorPicker, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+ColorPicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ColorPicker, selector: "p-colorPicker", inputs: { style: "style", styleClass: "styleClass", inline: "inline", format: "format", appendTo: "appendTo", disabled: "disabled", tabindex: "tabindex", inputId: "inputId", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onChange: "onChange", onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "p-element" }, providers: [COLORPICKER_VALUE_ACCESSOR], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "inputViewChild", first: true, predicate: ["input"], descendants: true }, { propertyName: "colorSelector", first: true, predicate: ["colorSelector"], descendants: true }, { propertyName: "colorHandle", first: true, predicate: ["colorHandle"], descendants: true }, { propertyName: "hue", first: true, predicate: ["hue"], descendants: true }, { propertyName: "hueHandle", first: true, predicate: ["hueHandle"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngStyle]="style" [class]="styleClass" [ngClass]="{'p-colorpicker p-component':true,'p-colorpicker-overlay':!inline,'p-colorpicker-dragging':colorDragging||hueDragging}">
+            <input #input type="text" *ngIf="!inline" class="p-colorpicker-preview p-inputtext" readonly="readonly" [ngClass]="{'p-disabled': disabled}"
+                (focus)="onInputFocus()" (click)="onInputClick()" (keydown)="onInputKeydown($event)" [attr.id]="inputId" [attr.tabindex]="tabindex" [disabled]="disabled"
+                [style.backgroundColor]="inputBgColor">
+            <div *ngIf="inline || overlayVisible" [ngClass]="{'p-colorpicker-panel': true, 'p-colorpicker-overlay-panel':!inline, 'p-disabled': disabled}" (click)="onOverlayClick($event)"
+                [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="inline === true"
+                    (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)">
+                <div class="p-colorpicker-content">
+                    <div #colorSelector class="p-colorpicker-color-selector" (touchstart)="onColorTouchStart($event)" (touchmove)="onMove($event)" (touchend)="onDragEnd()" (mousedown)="onColorMousedown($event)">
+                        <div class="p-colorpicker-color">
+                            <div #colorHandle class="p-colorpicker-color-handle"></div>
+                        </div>
+                    </div>
+                    <div #hue class="p-colorpicker-hue" (mousedown)="onHueMousedown($event)" (touchstart)="onHueTouchStart($event)" (touchmove)="onMove($event)" (touchend)="onDragEnd()">
+                        <div #hueHandle class="p-colorpicker-hue-handle"></div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-colorpicker{display:inline-block}.p-colorpicker-dragging{cursor:pointer}.p-colorpicker-overlay{position:relative}.p-colorpicker-panel{position:relative;width:193px;height:166px}.p-colorpicker-overlay-panel{position:absolute;top:0;left:0}.p-colorpicker-preview{cursor:pointer}.p-colorpicker-panel .p-colorpicker-content{position:relative}.p-colorpicker-panel .p-colorpicker-color-selector{width:150px;height:150px;top:8px;left:8px;position:absolute}.p-colorpicker-panel .p-colorpicker-color{width:150px;height:150px}.p-colorpicker-panel .p-colorpicker-color-handle{position:absolute;top:0px;left:150px;border-radius:100%;width:10px;height:10px;border-width:1px;border-style:solid;margin:-5px 0 0 -5px;cursor:pointer;opacity:.85}.p-colorpicker-panel .p-colorpicker-hue{width:17px;height:150px;top:8px;left:167px;position:absolute;opacity:.85}.p-colorpicker-panel .p-colorpicker-hue-handle{position:absolute;top:150px;left:0px;width:21px;margin-left:-2px;margin-top:-5px;height:10px;border-width:2px;border-style:solid;opacity:.85;cursor:pointer}\n"], directives: [{ type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColorPicker, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-colorPicker', template: `
+        <div #container [ngStyle]="style" [class]="styleClass" [ngClass]="{'p-colorpicker p-component':true,'p-colorpicker-overlay':!inline,'p-colorpicker-dragging':colorDragging||hueDragging}">
+            <input #input type="text" *ngIf="!inline" class="p-colorpicker-preview p-inputtext" readonly="readonly" [ngClass]="{'p-disabled': disabled}"
+                (focus)="onInputFocus()" (click)="onInputClick()" (keydown)="onInputKeydown($event)" [attr.id]="inputId" [attr.tabindex]="tabindex" [disabled]="disabled"
+                [style.backgroundColor]="inputBgColor">
+            <div *ngIf="inline || overlayVisible" [ngClass]="{'p-colorpicker-panel': true, 'p-colorpicker-overlay-panel':!inline, 'p-disabled': disabled}" (click)="onOverlayClick($event)"
+                [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="inline === true"
+                    (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)">
+                <div class="p-colorpicker-content">
+                    <div #colorSelector class="p-colorpicker-color-selector" (touchstart)="onColorTouchStart($event)" (touchmove)="onMove($event)" (touchend)="onDragEnd()" (mousedown)="onColorMousedown($event)">
+                        <div class="p-colorpicker-color">
+                            <div #colorHandle class="p-colorpicker-color-handle"></div>
+                        </div>
+                    </div>
+                    <div #hue class="p-colorpicker-hue" (mousedown)="onHueMousedown($event)" (touchstart)="onHueTouchStart($event)" (touchmove)="onMove($event)" (touchend)="onDragEnd()">
+                        <div #hueHandle class="p-colorpicker-hue-handle"></div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], providers: [COLORPICKER_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-colorpicker{display:inline-block}.p-colorpicker-dragging{cursor:pointer}.p-colorpicker-overlay{position:relative}.p-colorpicker-panel{position:relative;width:193px;height:166px}.p-colorpicker-overlay-panel{position:absolute;top:0;left:0}.p-colorpicker-preview{cursor:pointer}.p-colorpicker-panel .p-colorpicker-content{position:relative}.p-colorpicker-panel .p-colorpicker-color-selector{width:150px;height:150px;top:8px;left:8px;position:absolute}.p-colorpicker-panel .p-colorpicker-color{width:150px;height:150px}.p-colorpicker-panel .p-colorpicker-color-handle{position:absolute;top:0px;left:150px;border-radius:100%;width:10px;height:10px;border-width:1px;border-style:solid;margin:-5px 0 0 -5px;cursor:pointer;opacity:.85}.p-colorpicker-panel .p-colorpicker-hue{width:17px;height:150px;top:8px;left:167px;position:absolute;opacity:.85}.p-colorpicker-panel .p-colorpicker-hue-handle{position:absolute;top:150px;left:0px;width:21px;margin-left:-2px;margin-top:-5px;height:10px;border-width:2px;border-style:solid;opacity:.85;cursor:pointer}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }, { type: i1.OverlayService }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], inline: [{
+                type: Input
+            }], format: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], onChange: [{
+                type: Output
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], inputViewChild: [{
+                type: ViewChild,
+                args: ['input']
+            }], colorSelector: [{
+                type: ViewChild,
+                args: ['colorSelector']
+            }], colorHandle: [{
+                type: ViewChild,
+                args: ['colorHandle']
+            }], hue: [{
+                type: ViewChild,
+                args: ['hue']
+            }], hueHandle: [{
+                type: ViewChild,
+                args: ['hueHandle']
+            }] } });
+class ColorPickerModule {
+}
+ColorPickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColorPickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ColorPickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColorPickerModule, declarations: [ColorPicker], imports: [CommonModule], exports: [ColorPicker] });
+ColorPickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColorPickerModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColorPickerModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [ColorPicker],
+                    declarations: [ColorPicker]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { COLORPICKER_VALUE_ACCESSOR, ColorPicker, ColorPickerModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-colorpicker.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-colorpicker.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-colorpicker.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-colorpicker.mjs","sources":["../../src/app/components/colorpicker/colorpicker.ts","../../src/app/components/colorpicker/primeng-colorpicker.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, Input, Output, OnDestroy, EventEmitter, forwardRef, Renderer2, ViewChild, ChangeDetectorRef, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\nimport { trigger, state, style, transition, animate, AnimationEvent } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { OverlayService, PrimeNGConfig } from 'primeng/api';\nimport { ZIndexUtils } from 'primeng/utils';\n\nexport const COLORPICKER_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => ColorPicker),\n    multi: true\n};\n\n@Component({\n    selector: 'p-colorPicker',\n    template: `\n        <div #container [ngStyle]=\"style\" [class]=\"styleClass\" [ngClass]=\"{'p-colorpicker p-component':true,'p-colorpicker-overlay':!inline,'p-colorpicker-dragging':colorDragging||hueDragging}\">\n            <input #input type=\"text\" *ngIf=\"!inline\" class=\"p-colorpicker-preview p-inputtext\" readonly=\"readonly\" [ngClass]=\"{'p-disabled': disabled}\"\n                (focus)=\"onInputFocus()\" (click)=\"onInputClick()\" (keydown)=\"onInputKeydown($event)\" [attr.id]=\"inputId\" [attr.tabindex]=\"tabindex\" [disabled]=\"disabled\"\n                [style.backgroundColor]=\"inputBgColor\">\n            <div *ngIf=\"inline || overlayVisible\" [ngClass]=\"{'p-colorpicker-panel': true, 'p-colorpicker-overlay-panel':!inline, 'p-disabled': disabled}\" (click)=\"onOverlayClick($event)\"\n                [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" [@.disabled]=\"inline === true\"\n                    (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\">\n                <div class=\"p-colorpicker-content\">\n                    <div #colorSelector class=\"p-colorpicker-color-selector\" (touchstart)=\"onColorTouchStart($event)\" (touchmove)=\"onMove($event)\" (touchend)=\"onDragEnd()\" (mousedown)=\"onColorMousedown($event)\">\n                        <div class=\"p-colorpicker-color\">\n                            <div #colorHandle class=\"p-colorpicker-color-handle\"></div>\n                        </div>\n                    </div>\n                    <div #hue class=\"p-colorpicker-hue\" (mousedown)=\"onHueMousedown($event)\" (touchstart)=\"onHueTouchStart($event)\" (touchmove)=\"onMove($event)\" (touchend)=\"onDragEnd()\">\n                        <div #hueHandle class=\"p-colorpicker-hue-handle\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    providers: [COLORPICKER_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./colorpicker.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ColorPicker implements ControlValueAccessor, OnDestroy {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() inline: boolean;\n\n    @Input() format: string = 'hex';\n\n    @Input() appendTo: any;\n\n    @Input() disabled: boolean;\n\n    @Input() tabindex: string;\n\n    @Input() inputId: string;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @ViewChild('input') inputViewChild: ElementRef;\n\n    value: any = {h:0, s: 100, b: 100};\n\n    inputBgColor: string;\n\n    shown: boolean;\n\n    overlayVisible: boolean;\n\n    defaultColor: string = 'ff0000';\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    documentClickListener: Function;\n\n    documentResizeListener: any;\n\n    documentMousemoveListener: Function;\n\n    documentMouseupListener: Function;\n\n    documentHueMoveListener: Function;\n\n    scrollHandler: any;\n\n    selfClick: boolean;\n\n    colorDragging: boolean;\n\n    hueDragging: boolean;\n\n    overlay: HTMLDivElement;\n\n    colorSelectorViewChild: ElementRef;\n\n    colorHandleViewChild: ElementRef;\n\n    hueViewChild: ElementRef;\n\n    hueHandleViewChild: ElementRef;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    @ViewChild('colorSelector') set colorSelector(element: ElementRef) {\n        this.colorSelectorViewChild = element;\n    }\n\n    @ViewChild('colorHandle') set colorHandle(element: ElementRef) {\n        this.colorHandleViewChild = element;\n    }\n\n    @ViewChild('hue') set hue(element: ElementRef) {\n        this.hueViewChild = element;\n    }\n\n    @ViewChild('hueHandle') set hueHandle(element: ElementRef) {\n        this.hueHandleViewChild = element;\n    }\n\n    onHueMousedown(event: MouseEvent) {\n        if (this.disabled) {\n            return;\n        }\n\n        this.bindDocumentMousemoveListener();\n        this.bindDocumentMouseupListener();\n\n        this.hueDragging = true;\n        this.pickHue(event);\n    }\n\n    onHueTouchStart(event) {\n        if (this.disabled) {\n            return;\n        }\n\n        this.hueDragging = true;\n        this.pickHue(event, event.changedTouches[0]);\n    }\n\n    onColorTouchStart(event) {\n        if (this.disabled) {\n            return;\n        }\n\n        this.colorDragging = true;\n        this.pickColor(event, event.changedTouches[0]);\n    }\n\n    pickHue(event, position?) {\n        let pageY = position ? position.pageY : event.pageY;\n        let top: number = this.hueViewChild.nativeElement.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);\n        this.value = this.validateHSB({\n            h: Math.floor(360 * (150 - Math.max(0, Math.min(150, (pageY - top)))) / 150),\n            s: this.value.s,\n            b: this.value.b\n        });\n\n        this.updateColorSelector();\n        this.updateUI();\n        this.updateModel();\n        this.onChange.emit({originalEvent: event, value: this.getValueToUpdate()});\n    }\n\n    onColorMousedown(event: MouseEvent) {\n        if (this.disabled) {\n            return;\n        }\n\n        this.bindDocumentMousemoveListener();\n        this.bindDocumentMouseupListener();\n\n        this.colorDragging = true;\n        this.pickColor(event);\n    }\n\n    onMove(event) {\n        if (this.colorDragging) {\n            this.pickColor(event, event.changedTouches[0]);\n            event.preventDefault();\n        }\n\n        if (this.hueDragging) {\n            this.pickHue(event, event.changedTouches[0]);\n            event.preventDefault();\n        }\n    }\n\n    onDragEnd() {\n        this.colorDragging = false;\n        this.hueDragging = false;\n\n        this.unbindDocumentMousemoveListener();\n        this.unbindDocumentMouseupListener();\n    }\n\n    pickColor(event, position?) {\n        let pageX = position ? position.pageX : event.pageX;\n        let pageY = position ? position.pageY : event.pageY;\n        let rect = this.colorSelectorViewChild.nativeElement.getBoundingClientRect();\n        let top = rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);\n        let left = rect.left + document.body.scrollLeft;\n        let saturation = Math.floor(100 * (Math.max(0, Math.min(150, ((pageX)- left)))) / 150);\n        let brightness = Math.floor(100 * (150 - Math.max(0, Math.min(150, ((pageY) - top)))) / 150);\n        this.value = this.validateHSB({\n            h: this.value.h,\n            s: saturation,\n            b: brightness\n        });\n\n        this.updateUI();\n        this.updateModel();\n        this.onChange.emit({originalEvent: event, value: this.getValueToUpdate()});\n    }\n\n    getValueToUpdate() {\n        let val: any;\n        switch(this.format) {\n            case 'hex':\n                val = '#' + this.HSBtoHEX(this.value);\n            break;\n\n            case 'rgb':\n                val = this.HSBtoRGB(this.value);\n            break;\n\n            case 'hsb':\n                val = this.value;\n            break;\n        }\n\n        return val;\n    }\n\n    updateModel(): void {\n        this.onModelChange(this.getValueToUpdate());\n    }\n\n    writeValue(value: any): void {\n        if (value) {\n            switch(this.format) {\n                case 'hex':\n                    this.value = this.HEXtoHSB(value);\n                break;\n\n                case 'rgb':\n                    this.value = this.RGBtoHSB(value);\n                break;\n\n                case 'hsb':\n                    this.value = value;\n                break;\n            }\n        }\n        else {\n            this.value = this.HEXtoHSB(this.defaultColor);\n        }\n\n        this.updateColorSelector();\n        this.updateUI();\n        this.cd.markForCheck();\n    }\n\n    updateColorSelector() {\n        if (this.colorSelectorViewChild) {\n            const hsb: any = {};\n            hsb.s = 100;\n            hsb.b = 100;\n            hsb.h = this.value.h;\n\n            this.colorSelectorViewChild.nativeElement.style.backgroundColor = '#' + this.HSBtoHEX(hsb);\n        }\n    }\n\n    updateUI() {\n        if (this.colorHandleViewChild && this.hueHandleViewChild.nativeElement) {\n            this.colorHandleViewChild.nativeElement.style.left =  Math.floor(150 * this.value.s / 100) + 'px';\n            this.colorHandleViewChild.nativeElement.style.top =  Math.floor(150 * (100 - this.value.b) / 100) + 'px';\n            this.hueHandleViewChild.nativeElement.style.top = Math.floor(150 - (150 * this.value.h / 360)) + 'px';\n\n        }\n\n        this.inputBgColor = '#' + this.HSBtoHEX(this.value);\n    }\n\n    onInputFocus() {\n        this.onModelTouched();\n    }\n\n    show() {\n        this.overlayVisible = true;\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                if (!this.inline) {\n                    this.overlay = event.element;\n                    this.appendOverlay();\n\n                    if (this.autoZIndex) {\n                        ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);\n                    }\n\n                    this.alignOverlay();\n                    this.bindDocumentClickListener();\n                    this.bindDocumentResizeListener();\n                    this.bindScrollListener();\n\n                    this.updateColorSelector();\n                    this.updateUI();\n                }\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                if (!this.inline) {\n                    this.onShow.emit({})\n                }\n            break;\n\n            case 'void':\n                if (this.autoZIndex) {\n                    ZIndexUtils.clear(event.element);\n                }\n\n                this.onHide.emit({})\n            break;\n        }\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                DomHandler.appendChild(this.overlay, this.appendTo);\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.overlay && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlay);\n        }\n    }\n\n    alignOverlay() {\n        if (this.appendTo)\n            DomHandler.absolutePosition(this.overlay, this.inputViewChild.nativeElement);\n        else\n            DomHandler.relativePosition(this.overlay, this.inputViewChild.nativeElement);\n    }\n\n    hide() {\n        this.overlayVisible = false;\n        this.cd.markForCheck();\n    }\n\n    onInputClick() {\n        this.selfClick = true;\n        this.togglePanel();\n    }\n\n    togglePanel() {\n        if (!this.overlayVisible)\n            this.show();\n        else\n            this.hide();\n    }\n\n    onInputKeydown(event: KeyboardEvent) {\n        switch(event.which) {\n            //space\n            case 32:\n                this.togglePanel();\n                event.preventDefault();\n            break;\n\n            //escape and tab\n            case 27:\n            case 9:\n                this.hide();\n            break;\n        }\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n\n        this.selfClick = true;\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {\n                if (!this.selfClick) {\n                    this.overlayVisible = false;\n                    this.unbindDocumentClickListener();\n                }\n\n                this.selfClick = false;\n                this.cd.markForCheck();\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentMousemoveListener() {\n        if (!this.documentMousemoveListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentMousemoveListener = this.renderer.listen(documentTarget, 'mousemove', (event: MouseEvent) => {\n                if (this.colorDragging) {\n                    this.pickColor(event);\n                }\n\n                if (this.hueDragging) {\n                    this.pickHue(event);\n                }\n            });\n        }\n    }\n\n    unbindDocumentMousemoveListener() {\n        if (this.documentMousemoveListener) {\n            this.documentMousemoveListener();\n            this.documentMousemoveListener = null;\n        }\n    }\n\n    bindDocumentMouseupListener() {\n        if (!this.documentMouseupListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentMouseupListener = this.renderer.listen(documentTarget, 'mouseup', () => {\n                this.colorDragging = false;\n                this.hueDragging = false;\n                this.unbindDocumentMousemoveListener();\n                this.unbindDocumentMouseupListener();\n            });\n        }\n    }\n\n    unbindDocumentMouseupListener() {\n        if (this.documentMouseupListener) {\n            this.documentMouseupListener();\n            this.documentMouseupListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    onWindowResize() {\n        this.hide();\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    validateHSB(hsb) {\n        return {\n            h: Math.min(360, Math.max(0, hsb.h)),\n            s: Math.min(100, Math.max(0, hsb.s)),\n            b: Math.min(100, Math.max(0, hsb.b))\n        };\n    }\n\n    validateRGB(rgb) {\n        return {\n            r: Math.min(255, Math.max(0, rgb.r)),\n            g: Math.min(255, Math.max(0, rgb.g)),\n            b: Math.min(255, Math.max(0, rgb.b))\n        };\n    }\n\n    validateHEX(hex) {\n        var len = 6 - hex.length;\n        if (len > 0) {\n            var o = [];\n            for (var i=0; i<len; i++) {\n                o.push('0');\n            }\n            o.push(hex);\n            hex = o.join('');\n        }\n        return hex;\n    }\n\n    HEXtoRGB(hex) {\n        let hexValue = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);\n        return {r: hexValue >> 16, g: (hexValue & 0x00FF00) >> 8, b: (hexValue & 0x0000FF)};\n    }\n\n    HEXtoHSB(hex) {\n        return this.RGBtoHSB(this.HEXtoRGB(hex));\n    }\n\n    RGBtoHSB(rgb) {\n        var hsb = {\n            h: 0,\n            s: 0,\n            b: 0\n        };\n        var min = Math.min(rgb.r, rgb.g, rgb.b);\n        var max = Math.max(rgb.r, rgb.g, rgb.b);\n        var delta = max - min;\n        hsb.b = max;\n        hsb.s = max != 0 ? 255 * delta / max : 0;\n        if (hsb.s != 0) {\n            if (rgb.r == max) {\n                hsb.h = (rgb.g - rgb.b) / delta;\n            } else if (rgb.g == max) {\n                hsb.h = 2 + (rgb.b - rgb.r) / delta;\n            } else {\n                hsb.h = 4 + (rgb.r - rgb.g) / delta;\n            }\n        } else {\n            hsb.h = -1;\n        }\n        hsb.h *= 60;\n        if (hsb.h < 0) {\n            hsb.h += 360;\n        }\n        hsb.s *= 100/255;\n        hsb.b *= 100/255;\n        return hsb;\n    }\n\n    HSBtoRGB(hsb) {\n        var rgb = {\n            r: null, g: null, b: null\n        };\n        let h: number = hsb.h;\n        let s: number = hsb.s*255/100;\n        let v: number = hsb.b*255/100;\n        if (s == 0) {\n            rgb = {\n                r: v,\n                g: v,\n                b: v\n            }\n        }\n        else {\n            let t1: number = v;\n            let t2: number = (255-s)*v/255;\n            let t3: number = (t1-t2)*(h%60)/60;\n            if (h==360) h = 0;\n            if (h<60) {rgb.r=t1;\trgb.b=t2; rgb.g=t2+t3}\n            else if (h<120) {rgb.g=t1; rgb.b=t2;\trgb.r=t1-t3}\n            else if (h<180) {rgb.g=t1; rgb.r=t2;\trgb.b=t2+t3}\n            else if (h<240) {rgb.b=t1; rgb.r=t2;\trgb.g=t1-t3}\n            else if (h<300) {rgb.b=t1; rgb.g=t2;\trgb.r=t2+t3}\n            else if (h<360) {rgb.r=t1; rgb.g=t2;\trgb.b=t1-t3}\n            else {rgb.r=0; rgb.g=0;\trgb.b=0}\n        }\n        return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};\n    }\n\n    RGBtoHEX(rgb) {\n        var hex = [\n            rgb.r.toString(16),\n            rgb.g.toString(16),\n            rgb.b.toString(16)\n        ];\n\n        for(var key in hex) {\n            if (hex[key].length == 1) {\n                hex[key] = '0' + hex[key];\n            }\n        }\n\n        return hex.join('');\n    }\n\n    HSBtoHEX(hsb) {\n        return this.RGBtoHEX(this.HSBtoRGB(hsb));\n    }\n\n    onOverlayHide() {\n        this.unbindScrollListener();\n        this.unbindDocumentResizeListener();\n        this.unbindDocumentClickListener();\n        this.overlay = null;\n    }\n\n    ngOnDestroy() {\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.overlay && this.autoZIndex) {\n            ZIndexUtils.clear(this.overlay);\n        }\n\n        this.restoreOverlayAppend();\n        this.onOverlayHide();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [ColorPicker],\n    declarations: [ColorPicker]\n})\nexport class ColorPickerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmdialog.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmdialog.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmdialog.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,538 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ContentChild, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import { animation, style, animate, trigger, transition, useAnimation } from '@angular/animations';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import * as i1 from 'primeng/api';
+import { ConfirmEventType, TranslationKeys, Footer, PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i4 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import { UniqueComponentId, ZIndexUtils } from 'primeng/utils';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+
+const showAnimation = animation([
+    style({ transform: '{{transform}}', opacity: 0 }),
+    animate('{{transition}}', style({ transform: 'none', opacity: 1 }))
+]);
+const hideAnimation = animation([
+    animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))
+]);
+class ConfirmDialog {
+    constructor(el, renderer, confirmationService, zone, cd, config) {
+        this.el = el;
+        this.renderer = renderer;
+        this.confirmationService = confirmationService;
+        this.zone = zone;
+        this.cd = cd;
+        this.config = config;
+        this.acceptIcon = 'pi pi-check';
+        this.acceptVisible = true;
+        this.rejectIcon = 'pi pi-times';
+        this.rejectVisible = true;
+        this.closeOnEscape = true;
+        this.blockScroll = true;
+        this.closable = true;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.transitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';
+        this.focusTrap = true;
+        this.defaultFocus = 'accept';
+        this.onHide = new EventEmitter();
+        this._position = "center";
+        this.transformOptions = "scale(0.7)";
+        this.id = UniqueComponentId();
+        this.subscription = this.confirmationService.requireConfirmation$.subscribe(confirmation => {
+            if (!confirmation) {
+                this.hide();
+                return;
+            }
+            if (confirmation.key === this.key) {
+                this.confirmation = confirmation;
+                this.confirmationOptions = {
+                    message: this.confirmation.message || this.message,
+                    icon: this.confirmation.icon || this.icon,
+                    header: this.confirmation.header || this.header,
+                    rejectVisible: this.confirmation.rejectVisible == null ? this.rejectVisible : this.confirmation.rejectVisible,
+                    acceptVisible: this.confirmation.acceptVisible == null ? this.acceptVisible : this.confirmation.acceptVisible,
+                    acceptLabel: this.confirmation.acceptLabel || this.acceptLabel,
+                    rejectLabel: this.confirmation.rejectLabel || this.rejectLabel,
+                    acceptIcon: this.confirmation.acceptIcon || this.acceptIcon,
+                    rejectIcon: this.confirmation.rejectIcon || this.rejectIcon,
+                    acceptButtonStyleClass: this.confirmation.acceptButtonStyleClass || this.acceptButtonStyleClass,
+                    rejectButtonStyleClass: this.confirmation.rejectButtonStyleClass || this.rejectButtonStyleClass,
+                    defaultFocus: this.confirmation.defaultFocus || this.defaultFocus,
+                    blockScroll: (this.confirmation.blockScroll === false || this.confirmation.blockScroll === true) ? this.confirmation.blockScroll : this.blockScroll,
+                    closeOnEscape: (this.confirmation.closeOnEscape === false || this.confirmation.closeOnEscape === true) ? this.confirmation.closeOnEscape : this.closeOnEscape,
+                    dismissableMask: (this.confirmation.dismissableMask === false || this.confirmation.dismissableMask === true) ? this.confirmation.dismissableMask : this.dismissableMask
+                };
+                if (this.confirmation.accept) {
+                    this.confirmation.acceptEvent = new EventEmitter();
+                    this.confirmation.acceptEvent.subscribe(this.confirmation.accept);
+                }
+                if (this.confirmation.reject) {
+                    this.confirmation.rejectEvent = new EventEmitter();
+                    this.confirmation.rejectEvent.subscribe(this.confirmation.reject);
+                }
+                this.visible = true;
+            }
+        });
+    }
+    get visible() {
+        return this._visible;
+    }
+    set visible(value) {
+        this._visible = value;
+        if (this._visible && !this.maskVisible) {
+            this.maskVisible = true;
+        }
+        this.cd.markForCheck();
+    }
+    get position() {
+        return this._position;
+    }
+    ;
+    set position(value) {
+        this._position = value;
+        switch (value) {
+            case 'top-left':
+            case 'bottom-left':
+            case 'left':
+                this.transformOptions = "translate3d(-100%, 0px, 0px)";
+                break;
+            case 'top-right':
+            case 'bottom-right':
+            case 'right':
+                this.transformOptions = "translate3d(100%, 0px, 0px)";
+                break;
+            case 'bottom':
+                this.transformOptions = "translate3d(0px, 100%, 0px)";
+                break;
+            case 'top':
+                this.transformOptions = "translate3d(0px, -100%, 0px)";
+                break;
+            default:
+                this.transformOptions = "scale(0.7)";
+                break;
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngOnInit() {
+        if (this.breakpoints) {
+            this.createStyle();
+        }
+        this.translationSubscription = this.config.translationObserver.subscribe(() => {
+            if (this.visible) {
+                this.cd.markForCheck();
+            }
+        });
+    }
+    option(name) {
+        const source = this.confirmationOptions || this;
+        if (source.hasOwnProperty(name)) {
+            return source[name];
+        }
+        return undefined;
+    }
+    onAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.container = event.element;
+                this.wrapper = this.container.parentElement;
+                this.contentContainer = DomHandler.findSingle(this.container, '.p-dialog-content');
+                this.container.setAttribute(this.id, '');
+                this.appendContainer();
+                this.moveOnTop();
+                this.bindGlobalListeners();
+                this.enableModality();
+                const element = this.getElementToFocus();
+                if (element) {
+                    element.focus();
+                }
+                break;
+        }
+    }
+    onAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                this.onOverlayHide();
+                break;
+        }
+    }
+    getElementToFocus() {
+        switch (this.option('defaultFocus')) {
+            case 'accept':
+                return DomHandler.findSingle(this.container, '.p-confirm-dialog-accept');
+            case 'reject':
+                return DomHandler.findSingle(this.container, '.p-confirm-dialog-reject');
+            case 'close':
+                return DomHandler.findSingle(this.container, '.p-dialog-header-close');
+            case 'none':
+                return null;
+            //backward compatibility
+            default:
+                return DomHandler.findSingle(this.container, '.p-confirm-dialog-accept');
+        }
+    }
+    appendContainer() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.wrapper);
+            else
+                DomHandler.appendChild(this.wrapper, this.appendTo);
+        }
+    }
+    restoreAppend() {
+        if (this.wrapper && this.appendTo) {
+            this.el.nativeElement.appendChild(this.wrapper);
+        }
+    }
+    enableModality() {
+        if (this.option('blockScroll')) {
+            DomHandler.addClass(document.body, 'p-overflow-hidden');
+        }
+        if (this.option('dismissableMask')) {
+            this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event) => {
+                if (this.wrapper && this.wrapper.isSameNode(event.target)) {
+                    this.close(event);
+                }
+            });
+        }
+    }
+    disableModality() {
+        this.maskVisible = false;
+        if (this.option('blockScroll')) {
+            DomHandler.removeClass(document.body, 'p-overflow-hidden');
+        }
+        if (this.dismissableMask) {
+            this.unbindMaskClickListener();
+        }
+        if (this.container && !this.cd['destroyed']) {
+            this.cd.detectChanges();
+        }
+    }
+    createStyle() {
+        if (!this.styleElement) {
+            this.styleElement = document.createElement('style');
+            this.styleElement.type = 'text/css';
+            document.head.appendChild(this.styleElement);
+            let innerHTML = '';
+            for (let breakpoint in this.breakpoints) {
+                innerHTML += `
+                    @media screen and (max-width: ${breakpoint}) {
+                        .p-dialog[${this.id}] {
+                            width: ${this.breakpoints[breakpoint]} !important;
+                        }
+                    }
+                `;
+            }
+            this.styleElement.innerHTML = innerHTML;
+        }
+    }
+    close(event) {
+        if (this.confirmation.rejectEvent) {
+            this.confirmation.rejectEvent.emit(ConfirmEventType.CANCEL);
+        }
+        this.hide(ConfirmEventType.CANCEL);
+        event.preventDefault();
+    }
+    hide(type) {
+        this.onHide.emit(type);
+        this.visible = false;
+        this.confirmation = null;
+        this.confirmationOptions = null;
+    }
+    moveOnTop() {
+        if (this.autoZIndex) {
+            ZIndexUtils.set('modal', this.container, this.baseZIndex + this.config.zIndex.modal);
+            this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);
+        }
+    }
+    getMaskClass() {
+        let maskClass = { 'p-dialog-mask p-component-overlay': true, 'p-dialog-mask-scrollblocker': this.blockScroll };
+        maskClass[this.getPositionClass().toString()] = true;
+        return maskClass;
+    }
+    getPositionClass() {
+        const positions = ['left', 'right', 'top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right'];
+        const pos = positions.find(item => item === this.position);
+        return pos ? `p-dialog-${pos}` : '';
+    }
+    bindGlobalListeners() {
+        if ((this.option('closeOnEscape') && this.closable) || this.focusTrap && !this.documentEscapeListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
+                if (event.which == 27 && (this.option('closeOnEscape') && this.closable)) {
+                    if (parseInt(this.container.style.zIndex) === ZIndexUtils.get(this.container) && this.visible) {
+                        this.close(event);
+                    }
+                }
+                if (event.which === 9 && this.focusTrap) {
+                    event.preventDefault();
+                    let focusableElements = DomHandler.getFocusableElements(this.container);
+                    if (focusableElements && focusableElements.length > 0) {
+                        if (!focusableElements[0].ownerDocument.activeElement) {
+                            focusableElements[0].focus();
+                        }
+                        else {
+                            let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);
+                            if (event.shiftKey) {
+                                if (focusedIndex == -1 || focusedIndex === 0)
+                                    focusableElements[focusableElements.length - 1].focus();
+                                else
+                                    focusableElements[focusedIndex - 1].focus();
+                            }
+                            else {
+                                if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))
+                                    focusableElements[0].focus();
+                                else
+                                    focusableElements[focusedIndex + 1].focus();
+                            }
+                        }
+                    }
+                }
+            });
+        }
+    }
+    unbindGlobalListeners() {
+        if (this.documentEscapeListener) {
+            this.documentEscapeListener();
+            this.documentEscapeListener = null;
+        }
+    }
+    unbindMaskClickListener() {
+        if (this.maskClickListener) {
+            this.maskClickListener();
+            this.maskClickListener = null;
+        }
+    }
+    onOverlayHide() {
+        if (this.container && this.autoZIndex) {
+            ZIndexUtils.clear(this.container);
+        }
+        this.disableModality();
+        this.unbindGlobalListeners();
+        this.container = null;
+    }
+    destroyStyle() {
+        if (this.styleElement) {
+            document.head.removeChild(this.styleElement);
+            this.styleElement = null;
+        }
+    }
+    ngOnDestroy() {
+        this.restoreAppend();
+        this.onOverlayHide();
+        this.subscription.unsubscribe();
+        if (this.translationSubscription) {
+            this.translationSubscription.unsubscribe();
+        }
+        this.destroyStyle();
+    }
+    accept() {
+        if (this.confirmation && this.confirmation.acceptEvent) {
+            this.confirmation.acceptEvent.emit();
+        }
+        this.hide(ConfirmEventType.ACCEPT);
+    }
+    reject() {
+        if (this.confirmation && this.confirmation.rejectEvent) {
+            this.confirmation.rejectEvent.emit(ConfirmEventType.REJECT);
+        }
+        this.hide(ConfirmEventType.REJECT);
+    }
+    get acceptButtonLabel() {
+        return this.option('acceptLabel') || this.config.getTranslation(TranslationKeys.ACCEPT);
+    }
+    get rejectButtonLabel() {
+        return this.option('rejectLabel') || this.config.getTranslation(TranslationKeys.REJECT);
+    }
+}
+ConfirmDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmDialog, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ConfirmationService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+ConfirmDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ConfirmDialog, selector: "p-confirmDialog", inputs: { header: "header", icon: "icon", message: "message", style: "style", styleClass: "styleClass", maskStyleClass: "maskStyleClass", acceptIcon: "acceptIcon", acceptLabel: "acceptLabel", acceptAriaLabel: "acceptAriaLabel", acceptVisible: "acceptVisible", rejectIcon: "rejectIcon", rejectLabel: "rejectLabel", rejectAriaLabel: "rejectAriaLabel", rejectVisible: "rejectVisible", acceptButtonStyleClass: "acceptButtonStyleClass", rejectButtonStyleClass: "rejectButtonStyleClass", closeOnEscape: "closeOnEscape", dismissableMask: "dismissableMask", blockScroll: "blockScroll", rtl: "rtl", closable: "closable", appendTo: "appendTo", key: "key", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", transitionOptions: "transitionOptions", focusTrap: "focusTrap", defaultFocus: "defaultFocus", breakpoints: "breakpoints", visible: "visible", position: "position" }, outputs: { onHide: "onHide" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "footer", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "contentViewChild", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: `
+        <div [class]="maskStyleClass" [ngClass]="getMaskClass()" *ngIf="maskVisible">
+            <div [ngClass]="{'p-dialog p-confirm-dialog p-component':true,'p-dialog-rtl':rtl}" [ngStyle]="style" [class]="styleClass" (mousedown)="moveOnTop()"
+                [@animation]="{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}" (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)" *ngIf="visible">
+                <div class="p-dialog-header" *ngIf="headerTemplate">
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                </div>
+                <div class="p-dialog-header" *ngIf="!headerTemplate">
+                    <span class="p-dialog-title" *ngIf="option('header')">{{option('header')}}</span>
+                    <div class="p-dialog-header-icons">
+                        <button *ngIf="closable" type="button" [ngClass]="{'p-dialog-header-icon p-dialog-header-close p-link':true}" (click)="close($event)" (keydown.enter)="close($event)">
+                            <span class="pi pi-times"></span>
+                        </button>
+                    </div>
+                </div>
+                <div #content class="p-dialog-content">
+                    <i [ngClass]="'p-confirm-dialog-icon'" [class]="option('icon')" *ngIf="option('icon')"></i>
+                    <span class="p-confirm-dialog-message" [innerHTML]="option('message')"></span>
+                </div>
+                <div class="p-dialog-footer" *ngIf="footer || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+                <div class="p-dialog-footer" *ngIf="!footer && !footerTemplate">
+                    <button type="button" pRipple pButton [icon]="option('rejectIcon')" [label]="rejectButtonLabel" (click)="reject()" [ngClass]="'p-confirm-dialog-reject'" [class]="option('rejectButtonStyleClass')" *ngIf="option('rejectVisible')" [attr.aria-label]="rejectAriaLabel"></button>
+                    <button type="button" pRipple pButton [icon]="option('acceptIcon')" [label]="acceptButtonLabel" (click)="accept()" [ngClass]="'p-confirm-dialog-accept'" [class]="option('acceptButtonStyleClass')" *ngIf="option('acceptVisible')" [attr.aria-label]="acceptAriaLabel"></button>
+                </div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translate(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0px!important;left:0px!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }], animations: [
+        trigger('animation', [
+            transition('void => visible', [
+                useAnimation(showAnimation)
+            ]),
+            transition('visible => void', [
+                useAnimation(hideAnimation)
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmDialog, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-confirmDialog', template: `
+        <div [class]="maskStyleClass" [ngClass]="getMaskClass()" *ngIf="maskVisible">
+            <div [ngClass]="{'p-dialog p-confirm-dialog p-component':true,'p-dialog-rtl':rtl}" [ngStyle]="style" [class]="styleClass" (mousedown)="moveOnTop()"
+                [@animation]="{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}" (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)" *ngIf="visible">
+                <div class="p-dialog-header" *ngIf="headerTemplate">
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                </div>
+                <div class="p-dialog-header" *ngIf="!headerTemplate">
+                    <span class="p-dialog-title" *ngIf="option('header')">{{option('header')}}</span>
+                    <div class="p-dialog-header-icons">
+                        <button *ngIf="closable" type="button" [ngClass]="{'p-dialog-header-icon p-dialog-header-close p-link':true}" (click)="close($event)" (keydown.enter)="close($event)">
+                            <span class="pi pi-times"></span>
+                        </button>
+                    </div>
+                </div>
+                <div #content class="p-dialog-content">
+                    <i [ngClass]="'p-confirm-dialog-icon'" [class]="option('icon')" *ngIf="option('icon')"></i>
+                    <span class="p-confirm-dialog-message" [innerHTML]="option('message')"></span>
+                </div>
+                <div class="p-dialog-footer" *ngIf="footer || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+                <div class="p-dialog-footer" *ngIf="!footer && !footerTemplate">
+                    <button type="button" pRipple pButton [icon]="option('rejectIcon')" [label]="rejectButtonLabel" (click)="reject()" [ngClass]="'p-confirm-dialog-reject'" [class]="option('rejectButtonStyleClass')" *ngIf="option('rejectVisible')" [attr.aria-label]="rejectAriaLabel"></button>
+                    <button type="button" pRipple pButton [icon]="option('acceptIcon')" [label]="acceptButtonLabel" (click)="accept()" [ngClass]="'p-confirm-dialog-accept'" [class]="option('acceptButtonStyleClass')" *ngIf="option('acceptVisible')" [attr.aria-label]="acceptAriaLabel"></button>
+                </div>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('animation', [
+                            transition('void => visible', [
+                                useAnimation(showAnimation)
+                            ]),
+                            transition('visible => void', [
+                                useAnimation(hideAnimation)
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translate(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0px!important;left:0px!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ConfirmationService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }]; }, propDecorators: { header: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], message: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], maskStyleClass: [{
+                type: Input
+            }], acceptIcon: [{
+                type: Input
+            }], acceptLabel: [{
+                type: Input
+            }], acceptAriaLabel: [{
+                type: Input
+            }], acceptVisible: [{
+                type: Input
+            }], rejectIcon: [{
+                type: Input
+            }], rejectLabel: [{
+                type: Input
+            }], rejectAriaLabel: [{
+                type: Input
+            }], rejectVisible: [{
+                type: Input
+            }], acceptButtonStyleClass: [{
+                type: Input
+            }], rejectButtonStyleClass: [{
+                type: Input
+            }], closeOnEscape: [{
+                type: Input
+            }], dismissableMask: [{
+                type: Input
+            }], blockScroll: [{
+                type: Input
+            }], rtl: [{
+                type: Input
+            }], closable: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], key: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], transitionOptions: [{
+                type: Input
+            }], focusTrap: [{
+                type: Input
+            }], defaultFocus: [{
+                type: Input
+            }], breakpoints: [{
+                type: Input
+            }], visible: [{
+                type: Input
+            }], position: [{
+                type: Input
+            }], onHide: [{
+                type: Output
+            }], footer: [{
+                type: ContentChild,
+                args: [Footer]
+            }], contentViewChild: [{
+                type: ViewChild,
+                args: ['content']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class ConfirmDialogModule {
+}
+ConfirmDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ConfirmDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmDialogModule, declarations: [ConfirmDialog], imports: [CommonModule, ButtonModule, RippleModule], exports: [ConfirmDialog, ButtonModule, SharedModule] });
+ConfirmDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmDialogModule, imports: [[CommonModule, ButtonModule, RippleModule], ButtonModule, SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmDialogModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ButtonModule, RippleModule],
+                    exports: [ConfirmDialog, ButtonModule, SharedModule],
+                    declarations: [ConfirmDialog]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ConfirmDialog, ConfirmDialogModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmdialog.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmdialog.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmdialog.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-confirmdialog.mjs","sources":["../../src/app/components/confirmdialog/confirmdialog.ts","../../src/app/components/confirmdialog/primeng-confirmdialog.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,Input,EventEmitter,Renderer2,ContentChild,NgZone,ViewChild,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, QueryList, TemplateRef, AfterContentInit, Output, OnInit} from '@angular/core';\nimport {trigger,style,transition,animate,AnimationEvent, useAnimation, animation} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\nimport {Footer,SharedModule, PrimeTemplate, PrimeNGConfig, TranslationKeys, ConfirmEventType} from 'primeng/api';\nimport {ButtonModule} from 'primeng/button';\nimport {Confirmation} from 'primeng/api';\nimport {ConfirmationService} from 'primeng/api';\nimport {Subscription} from 'rxjs';\nimport {UniqueComponentId, ZIndexUtils} from 'primeng/utils';\nimport { RippleModule } from 'primeng/ripple';\n\nconst showAnimation = animation([\n    style({ transform: '{{transform}}', opacity: 0 }),\n    animate('{{transition}}', style({ transform: 'none', opacity: 1 }))\n]);\n\nconst hideAnimation = animation([\n    animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))\n]);\n\n@Component({\n    selector: 'p-confirmDialog',\n    template: `\n        <div [class]=\"maskStyleClass\" [ngClass]=\"getMaskClass()\" *ngIf=\"maskVisible\">\n            <div [ngClass]=\"{'p-dialog p-confirm-dialog p-component':true,'p-dialog-rtl':rtl}\" [ngStyle]=\"style\" [class]=\"styleClass\" (mousedown)=\"moveOnTop()\"\n                [@animation]=\"{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}\" (@animation.start)=\"onAnimationStart($event)\" (@animation.done)=\"onAnimationEnd($event)\" *ngIf=\"visible\">\n                <div class=\"p-dialog-header\" *ngIf=\"headerTemplate\">\n                    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                </div>\n                <div class=\"p-dialog-header\" *ngIf=\"!headerTemplate\">\n                    <span class=\"p-dialog-title\" *ngIf=\"option('header')\">{{option('header')}}</span>\n                    <div class=\"p-dialog-header-icons\">\n                        <button *ngIf=\"closable\" type=\"button\" [ngClass]=\"{'p-dialog-header-icon p-dialog-header-close p-link':true}\" (click)=\"close($event)\" (keydown.enter)=\"close($event)\">\n                            <span class=\"pi pi-times\"></span>\n                        </button>\n                    </div>\n                </div>\n                <div #content class=\"p-dialog-content\">\n                    <i [ngClass]=\"'p-confirm-dialog-icon'\" [class]=\"option('icon')\" *ngIf=\"option('icon')\"></i>\n                    <span class=\"p-confirm-dialog-message\" [innerHTML]=\"option('message')\"></span>\n                </div>\n                <div class=\"p-dialog-footer\" *ngIf=\"footer || footerTemplate\">\n                    <ng-content select=\"p-footer\"></ng-content>\n                    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n                </div>\n                <div class=\"p-dialog-footer\" *ngIf=\"!footer && !footerTemplate\">\n                    <button type=\"button\" pRipple pButton [icon]=\"option('rejectIcon')\" [label]=\"rejectButtonLabel\" (click)=\"reject()\" [ngClass]=\"'p-confirm-dialog-reject'\" [class]=\"option('rejectButtonStyleClass')\" *ngIf=\"option('rejectVisible')\" [attr.aria-label]=\"rejectAriaLabel\"></button>\n                    <button type=\"button\" pRipple pButton [icon]=\"option('acceptIcon')\" [label]=\"acceptButtonLabel\" (click)=\"accept()\" [ngClass]=\"'p-confirm-dialog-accept'\" [class]=\"option('acceptButtonStyleClass')\" *ngIf=\"option('acceptVisible')\" [attr.aria-label]=\"acceptAriaLabel\"></button>\n                </div>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('animation', [\n            transition('void => visible', [\n                useAnimation(showAnimation)\n            ]),\n            transition('visible => void', [\n                useAnimation(hideAnimation)\n            ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['../dialog/dialog.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ConfirmDialog implements AfterContentInit,OnInit,OnDestroy {\n\n    @Input() header: string;\n\n    @Input() icon: string;\n\n    @Input() message: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() maskStyleClass: string;\n\n    @Input() acceptIcon: string = 'pi pi-check';\n\n    @Input() acceptLabel: string;\n\n    @Input() acceptAriaLabel: string;\n\n    @Input() acceptVisible: boolean = true;\n\n    @Input() rejectIcon: string = 'pi pi-times';\n\n    @Input() rejectLabel: string;\n\n    @Input() rejectAriaLabel: string;\n\n    @Input() rejectVisible: boolean = true;\n\n    @Input() acceptButtonStyleClass: string;\n\n    @Input() rejectButtonStyleClass: string;\n\n    @Input() closeOnEscape: boolean = true;\n\n    @Input() dismissableMask: boolean;\n\n    @Input() blockScroll: boolean = true;\n\n    @Input() rtl: boolean;\n\n    @Input() closable: boolean = true;\n\n    @Input() appendTo: any;\n\n    @Input() key: string;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() transitionOptions: string = '150ms cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() focusTrap: boolean = true;\n\n    @Input() defaultFocus: string = 'accept';\n\n    @Input() breakpoints: any;\n\n    @Input() get visible(): any {\n        return this._visible;\n    }\n    set visible(value:any) {\n        this._visible = value;\n\n        if (this._visible && !this.maskVisible) {\n            this.maskVisible = true;\n        }\n\n        this.cd.markForCheck();\n    }\n\n    @Input() get position(): string {\n        return this._position;\n    };\n\n    set position(value: string) {\n        this._position = value;\n\n        switch (value) {\n            case 'top-left':\n            case 'bottom-left':\n            case 'left':\n                this.transformOptions = \"translate3d(-100%, 0px, 0px)\";\n            break;\n            case 'top-right':\n            case 'bottom-right':\n            case 'right':\n                this.transformOptions = \"translate3d(100%, 0px, 0px)\";\n            break;\n            case 'bottom':\n                this.transformOptions = \"translate3d(0px, 100%, 0px)\";\n            break;\n            case 'top':\n                this.transformOptions = \"translate3d(0px, -100%, 0px)\";\n            break;\n            default:\n                this.transformOptions = \"scale(0.7)\";\n            break;\n        }\n    }\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @ContentChild(Footer) footer;\n\n    @ViewChild('content') contentViewChild: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    confirmation: Confirmation;\n\n    _visible: boolean;\n\n    maskVisible: boolean;\n\n    documentEscapeListener: any;\n\n    container: HTMLDivElement;\n\n    wrapper: HTMLElement;\n\n    contentContainer: HTMLDivElement;\n\n    subscription: Subscription;\n\n    maskClickListener: Function;\n\n    preWidth: number;\n\n    _position: string = \"center\";\n\n    transformOptions: any = \"scale(0.7)\";\n\n    styleElement: any;\n\n    id = UniqueComponentId();\n\n    confirmationOptions: Confirmation;\n\n    translationSubscription: Subscription;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, private confirmationService: ConfirmationService, public zone: NgZone, private cd: ChangeDetectorRef, public config: PrimeNGConfig) {\n        this.subscription = this.confirmationService.requireConfirmation$.subscribe(confirmation => {\n            if (!confirmation) {\n                this.hide();\n                return;\n            }\n\n            if (confirmation.key === this.key) {\n                this.confirmation = confirmation;\n                this.confirmationOptions = {\n                    message: this.confirmation.message||this.message,\n                    icon: this.confirmation.icon||this.icon,\n                    header: this.confirmation.header||this.header,\n                    rejectVisible: this.confirmation.rejectVisible == null ? this.rejectVisible : this.confirmation.rejectVisible,\n                    acceptVisible: this.confirmation.acceptVisible == null ? this.acceptVisible : this.confirmation.acceptVisible,\n                    acceptLabel: this.confirmation.acceptLabel||this.acceptLabel,\n                    rejectLabel: this.confirmation.rejectLabel||this.rejectLabel,\n                    acceptIcon: this.confirmation.acceptIcon || this.acceptIcon,\n                    rejectIcon: this.confirmation.rejectIcon || this.rejectIcon,\n                    acceptButtonStyleClass: this.confirmation.acceptButtonStyleClass || this.acceptButtonStyleClass,\n                    rejectButtonStyleClass: this.confirmation.rejectButtonStyleClass || this.rejectButtonStyleClass,\n                    defaultFocus: this.confirmation.defaultFocus || this.defaultFocus,\n                    blockScroll: (this.confirmation.blockScroll === false || this.confirmation.blockScroll === true) ? this.confirmation.blockScroll : this.blockScroll,\n                    closeOnEscape: (this.confirmation.closeOnEscape === false || this.confirmation.closeOnEscape === true) ? this.confirmation.closeOnEscape : this.closeOnEscape,\n                    dismissableMask: (this.confirmation.dismissableMask === false || this.confirmation.dismissableMask === true) ? this.confirmation.dismissableMask : this.dismissableMask\n                };\n\n                if (this.confirmation.accept) {\n                    this.confirmation.acceptEvent = new EventEmitter();\n                    this.confirmation.acceptEvent.subscribe(this.confirmation.accept);\n                }\n\n                if (this.confirmation.reject) {\n                    this.confirmation.rejectEvent = new EventEmitter();\n                    this.confirmation.rejectEvent.subscribe(this.confirmation.reject);\n                }\n\n                this.visible = true;\n            }\n        });\n    }\n\n    ngOnInit() {\n        if (this.breakpoints) {\n            this.createStyle();\n        }\n\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            if (this.visible) {\n                this.cd.markForCheck();\n            }\n        });\n    }\n\n    option(name: string) {\n        const source = this.confirmationOptions || this;\n        if (source.hasOwnProperty(name)) {\n            return source[name];\n        }\n        return undefined;\n    }\n\n    onAnimationStart(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                this.container = event.element;\n                this.wrapper = this.container.parentElement;\n                this.contentContainer = DomHandler.findSingle(this.container, '.p-dialog-content');\n                this.container.setAttribute(this.id, '');\n                this.appendContainer();\n                this.moveOnTop();\n                this.bindGlobalListeners();\n                this.enableModality();\n\n                const element = this.getElementToFocus();\n                if (element) {\n                    element.focus();\n                }\n            break;\n        }\n    }\n\n    onAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                this.onOverlayHide();\n            break;\n        }\n    }\n\n    getElementToFocus() {\n        switch(this.option('defaultFocus')) {\n            case 'accept':\n                return DomHandler.findSingle(this.container, '.p-confirm-dialog-accept');\n\n            case 'reject':\n                return DomHandler.findSingle(this.container, '.p-confirm-dialog-reject');\n\n            case 'close':\n                return DomHandler.findSingle(this.container, '.p-dialog-header-close');\n\n            case 'none':\n                return null;\n\n            //backward compatibility\n            default:\n                return DomHandler.findSingle(this.container, '.p-confirm-dialog-accept');\n        }\n    }\n\n    appendContainer() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.wrapper);\n            else\n                DomHandler.appendChild(this.wrapper, this.appendTo);\n        }\n    }\n\n    restoreAppend() {\n        if (this.wrapper && this.appendTo) {\n            this.el.nativeElement.appendChild(this.wrapper);\n        }\n    }\n\n    enableModality() {\n        if (this.option('blockScroll')) {\n            DomHandler.addClass(document.body, 'p-overflow-hidden');\n        }\n\n        if (this.option('dismissableMask')) {\n            this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event: any) => {\n                if (this.wrapper && this.wrapper.isSameNode(event.target)) {\n                    this.close(event);\n                }\n            });\n        }\n    }\n\n    disableModality() {\n        this.maskVisible = false;\n\n        if (this.option('blockScroll')) {\n            DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        }\n\n        if (this.dismissableMask) {\n            this.unbindMaskClickListener();\n        }\n\n        if (this.container && !this.cd['destroyed']) {\n            this.cd.detectChanges();\n        }\n    }\n\n    createStyle() {\n        if (!this.styleElement) {\n            this.styleElement = document.createElement('style');\n            this.styleElement.type = 'text/css';\n            document.head.appendChild(this.styleElement);\n            let innerHTML = '';\n            for (let breakpoint in this.breakpoints) {\n                innerHTML += `\n                    @media screen and (max-width: ${breakpoint}) {\n                        .p-dialog[${this.id}] {\n                            width: ${this.breakpoints[breakpoint]} !important;\n                        }\n                    }\n                `\n            }\n\n            this.styleElement.innerHTML = innerHTML;\n        }\n    }\n\n    close(event: Event) {\n        if (this.confirmation.rejectEvent) {\n            this.confirmation.rejectEvent.emit(ConfirmEventType.CANCEL);\n        }\n\n        this.hide(ConfirmEventType.CANCEL);\n        event.preventDefault();\n    }\n\n    hide(type?) {\n        this.onHide.emit(type);\n        this.visible = false;\n        this.confirmation = null;\n        this.confirmationOptions = null;\n    }\n\n    moveOnTop() {\n        if (this.autoZIndex) {\n            ZIndexUtils.set('modal', this.container, this.baseZIndex + this.config.zIndex.modal);\n            this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);\n        }\n    }\n\n    getMaskClass() {\n        let maskClass = {'p-dialog-mask p-component-overlay': true, 'p-dialog-mask-scrollblocker': this.blockScroll};\n        maskClass[this.getPositionClass().toString()] = true;\n        return maskClass;\n    }\n\n    getPositionClass() {\n        const positions = ['left', 'right', 'top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right'];\n        const pos = positions.find(item => item === this.position);\n\n        return pos ? `p-dialog-${pos}` : '';\n    }\n\n    bindGlobalListeners() {\n        if ((this.option('closeOnEscape') && this.closable) || this.focusTrap && !this.documentEscapeListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {\n                if (event.which == 27 && (this.option('closeOnEscape') && this.closable)) {\n                    if (parseInt(this.container.style.zIndex) === ZIndexUtils.get(this.container) && this.visible) {\n                        this.close(event);\n                    }\n                }\n\n                if (event.which === 9 && this.focusTrap) {\n                    event.preventDefault();\n\n                    let focusableElements = DomHandler.getFocusableElements(this.container);\n\n                    if (focusableElements && focusableElements.length > 0) {\n                        if (!focusableElements[0].ownerDocument.activeElement) {\n                            focusableElements[0].focus();\n                        }\n                        else {\n                            let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n                            if (event.shiftKey) {\n                                if (focusedIndex == -1 || focusedIndex === 0)\n                                    focusableElements[focusableElements.length - 1].focus();\n                                else\n                                    focusableElements[focusedIndex - 1].focus();\n                            }\n                            else {\n                                if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))\n                                    focusableElements[0].focus();\n                                else\n                                    focusableElements[focusedIndex + 1].focus();\n                            }\n                        }\n                    }\n                }\n            });\n        }\n    }\n\n    unbindGlobalListeners() {\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n    }\n\n    unbindMaskClickListener() {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n        }\n    }\n\n    onOverlayHide() {\n        if (this.container && this.autoZIndex) {\n            ZIndexUtils.clear(this.container);\n        }\n\n        this.disableModality();\n        this.unbindGlobalListeners();\n        this.container = null;\n    }\n\n    destroyStyle() {\n        if (this.styleElement) {\n            document.head.removeChild(this.styleElement);\n            this.styleElement = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.restoreAppend();\n        this.onOverlayHide();\n        this.subscription.unsubscribe();\n\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n\n        this.destroyStyle();\n    }\n\n    accept() {\n        if (this.confirmation && this.confirmation.acceptEvent) {\n            this.confirmation.acceptEvent.emit();\n        }\n\n        this.hide(ConfirmEventType.ACCEPT);\n    }\n\n    reject() {\n        if (this.confirmation && this.confirmation.rejectEvent) {\n            this.confirmation.rejectEvent.emit(ConfirmEventType.REJECT);\n        }\n\n        this.hide(ConfirmEventType.REJECT);\n    }\n\n    get acceptButtonLabel(): string {\n        return this.option('acceptLabel') || this.config.getTranslation(TranslationKeys.ACCEPT);\n    }\n\n    get rejectButtonLabel(): string {\n        return this.option('rejectLabel') || this.config.getTranslation(TranslationKeys.REJECT);\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule,RippleModule],\n    exports: [ConfirmDialog,ButtonModule,SharedModule],\n    declarations: [ConfirmDialog]\n})\nexport class ConfirmDialogModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAYA,MAAM,aAAa,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACjD,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;CAC/E,CAAC,CAAC;MAmDU,aAAa;IAgKtB,YAAmB,EAAc,EAAS,QAAmB,EAAU,mBAAwC,EAAS,IAAY,EAAU,EAAqB,EAAS,MAAqB;QAA9K,OAAE,GAAF,EAAE,CAAY;QAAS,aAAQ,GAAR,QAAQ,CAAW;QAAU,wBAAmB,GAAnB,mBAAmB,CAAqB;QAAS,SAAI,GAAJ,IAAI,CAAQ;QAAU,OAAE,GAAF,EAAE,CAAmB;QAAS,WAAM,GAAN,MAAM,CAAe;QAlJxL,eAAU,GAAW,aAAa,CAAC;QAMnC,kBAAa,GAAY,IAAI,CAAC;QAE9B,eAAU,GAAW,aAAa,CAAC;QAMnC,kBAAa,GAAY,IAAI,CAAC;QAM9B,kBAAa,GAAY,IAAI,CAAC;QAI9B,gBAAW,GAAY,IAAI,CAAC;QAI5B,aAAQ,GAAY,IAAI,CAAC;QAMzB,eAAU,GAAY,IAAI,CAAC;QAE3B,eAAU,GAAW,CAAC,CAAC;QAEvB,sBAAiB,GAAW,kCAAkC,CAAC;QAE/D,cAAS,GAAY,IAAI,CAAC;QAE1B,iBAAY,GAAW,QAAQ,CAAC;QA+C/B,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QA6CzD,cAAS,GAAW,QAAQ,CAAC;QAE7B,qBAAgB,GAAQ,YAAY,CAAC;QAIrC,OAAE,GAAG,iBAAiB,EAAE,CAAC;QAOrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,SAAS,CAAC,YAAY;YACpF,IAAI,CAAC,YAAY,EAAE;gBACf,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO;aACV;YAED,IAAI,YAAY,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;gBACjC,IAAI,CAAC,mBAAmB,GAAG;oBACvB,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,IAAE,IAAI,CAAC,OAAO;oBAChD,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,IAAE,IAAI,CAAC,IAAI;oBACvC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,IAAE,IAAI,CAAC,MAAM;oBAC7C,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;oBAC7G,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;oBAC7G,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,IAAE,IAAI,CAAC,WAAW;oBAC5D,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,IAAE,IAAI,CAAC,WAAW;oBAC5D,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;oBAC3D,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;oBAC3D,sBAAsB,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB;oBAC/F,sBAAsB,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB;oBAC/F,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;oBACjE,WAAW,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;oBACnJ,aAAa,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;oBAC7J,eAAe,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;iBAC1K,CAAC;gBAEF,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;oBAC1B,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;oBACnD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;iBACrE;gBAED,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;oBAC1B,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;oBACnD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;iBACrE;gBAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACvB;SACJ,CAAC,CAAC;KACN;IA5ID,IAAa,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IACD,IAAI,OAAO,CAAC,KAAS;QACjB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;QAED,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,IAAa,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;IAED,IAAI,QAAQ,CAAC,KAAa;QACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,QAAQ,KAAK;YACT,KAAK,UAAU,CAAC;YAChB,KAAK,aAAa,CAAC;YACnB,KAAK,MAAM;gBACP,IAAI,CAAC,gBAAgB,GAAG,8BAA8B,CAAC;gBAC3D,MAAM;YACN,KAAK,WAAW,CAAC;YACjB,KAAK,cAAc,CAAC;YACpB,KAAK,OAAO;gBACR,IAAI,CAAC,gBAAgB,GAAG,6BAA6B,CAAC;gBAC1D,MAAM;YACN,KAAK,QAAQ;gBACT,IAAI,CAAC,gBAAgB,GAAG,6BAA6B,CAAC;gBAC1D,MAAM;YACN,KAAK,KAAK;gBACN,IAAI,CAAC,gBAAgB,GAAG,8BAA8B,CAAC;gBAC3D,MAAM;YACN;gBACI,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC;gBACzC,MAAM;SACT;KACJ;IAUD,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAO,IAAI,CAAC,OAAO,EAAE;gBACjB,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBACN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;IAgFD,QAAQ;QACJ,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC;YACrE,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;aAC1B;SACJ,CAAC,CAAC;KACN;IAED,MAAM,CAAC,IAAY;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAChD,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;SACvB;QACD,OAAO,SAAS,CAAC;KACpB;IAED,gBAAgB,CAAC,KAAqB;QAClC,QAAO,KAAK,CAAC,OAAO;YAChB,KAAK,SAAS;gBACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;gBAC5C,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;gBACnF,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;gBAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzC,IAAI,OAAO,EAAE;oBACT,OAAO,CAAC,KAAK,EAAE,CAAC;iBACnB;gBACL,MAAM;SACT;KACJ;IAED,cAAc,CAAC,KAAqB;QAChC,QAAO,KAAK,CAAC,OAAO;YAChB,KAAK,MAAM;gBACP,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM;SACT;KACJ;IAED,iBAAiB;QACb,QAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YAC9B,KAAK,QAAQ;gBACT,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;YAE7E,KAAK,QAAQ;gBACT,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;YAE7E,KAAK,OAAO;gBACR,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;YAE3E,KAAK,MAAM;gBACP,OAAO,IAAI,CAAC;;YAGhB;gBACI,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;SAChF;KACJ;IAED,eAAe;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;gBACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAExC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC3D;KACJ;IAED,aAAa;QACT,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACnD;KACJ;IAED,cAAc;QACV,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;YAC5B,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;SAC3D;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;YAChC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,KAAU;gBAChF,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBACvD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBACrB;aACJ,CAAC,CAAC;SACN;KACJ;IAED,eAAe;QACX,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;YAC5B,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;SAC9D;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;QAED,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;YACzC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;SAC3B;KACJ;IAED,WAAW;QACP,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,UAAU,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,KAAK,IAAI,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;gBACrC,SAAS,IAAI;oDACuB,UAAU;oCAC1B,IAAI,CAAC,EAAE;qCACN,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;;;iBAGhD,CAAA;aACJ;YAED,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;SAC3C;KACJ;IAED,KAAK,CAAC,KAAY;QACd,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAC/B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;SAC/D;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,IAAI,CAAC,IAAK;QACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;KACnC;IAED,SAAS;QACL,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SACrF;KACJ;IAED,YAAY;QACR,IAAI,SAAS,GAAG,EAAC,mCAAmC,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC;QAC7G,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;QACrD,OAAO,SAAS,CAAC;KACpB;IAED,gBAAgB;QACZ,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;QAC7G,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3D,OAAO,GAAG,GAAG,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC;KACvC;IAED,mBAAmB;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACnG,MAAM,cAAc,GAAQ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,GAAG,UAAU,CAAC;YAEvF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,KAAK;gBAChF,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;oBACtE,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;wBAC3F,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;qBACrB;iBACJ;gBAED,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;oBACrC,KAAK,CAAC,cAAc,EAAE,CAAC;oBAEvB,IAAI,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAExE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,EAAE;4BACnD,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;yBAChC;6BACI;4BACD,IAAI,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;4BAE/F,IAAI,KAAK,CAAC,QAAQ,EAAE;gCAChB,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC;oCACxC,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;;oCAExD,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;6BACnD;iCACI;gCACD,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,YAAY,MAAM,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;oCACrE,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;;oCAE7B,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;6BACnD;yBACJ;qBACJ;iBACJ;aACJ,CAAC,CAAC;SACN;KACJ;IAED,qBAAqB;QACjB,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACtC;KACJ;IAED,uBAAuB;QACnB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SACjC;KACJ;IAED,aAAa;QACT,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACnC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACzB;IAED,YAAY;QACR,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;KACJ;IAED,WAAW;QACP,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC;SAC9C;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;IAED,MAAM;QACF,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YACpD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACxC;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;KACtC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YACpD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;SAC/D;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;KACtC;IAED,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KAC3F;IAED,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KAC3F;;0GA9dQ,aAAa;8FAAb,aAAa,igCAyGR,MAAM,+DAIH,aAAa,0IA5JpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6BT,y1EACW;QACR,OAAO,CAAC,WAAW,EAAE;YACjB,UAAU,CAAC,iBAAiB,EAAE;gBAC1B,YAAY,CAAC,aAAa,CAAC;aAC9B,CAAC;YACF,UAAU,CAAC,iBAAiB,EAAE;gBAC1B,YAAY,CAAC,aAAa,CAAC;aAC9B,CAAC;SACL,CAAC;KACL;2FAQQ,aAAa;kBAjDzB,SAAS;+BACI,iBAAiB,YACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6BT,cACW;wBACR,OAAO,CAAC,WAAW,EAAE;4BACjB,UAAU,CAAC,iBAAiB,EAAE;gCAC1B,YAAY,CAAC,aAAa,CAAC;6BAC9B,CAAC;4BACF,UAAU,CAAC,iBAAiB,EAAE;gCAC1B,YAAY,CAAC,aAAa,CAAC;6BAC9B,CAAC;yBACL,CAAC;qBACL,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;4OAIQ,MAAM;sBAAd,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,sBAAsB;sBAA9B,KAAK;gBAEG,sBAAsB;sBAA9B,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,GAAG;sBAAX,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,GAAG;sBAAX,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,iBAAiB;sBAAzB,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,YAAY;sBAApB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEO,OAAO;sBAAnB,KAAK;gBAaO,QAAQ;sBAApB,KAAK;gBA8BI,MAAM;sBAAf,MAAM;gBAEe,MAAM;sBAA3B,YAAY;uBAAC,MAAM;gBAEE,gBAAgB;sBAArC,SAAS;uBAAC,SAAS;gBAEY,SAAS;sBAAxC,eAAe;uBAAC,aAAa;;MAyXrB,mBAAmB;;gHAAnB,mBAAmB;iHAAnB,mBAAmB,iBAtenB,aAAa,aAkeZ,YAAY,EAAC,YAAY,EAAC,YAAY,aAlevC,aAAa,EAmeE,YAAY,EAAC,YAAY;iHAGxC,mBAAmB,YAJnB,CAAC,YAAY,EAAC,YAAY,EAAC,YAAY,CAAC,EACzB,YAAY,EAAC,YAAY;2FAGxC,mBAAmB;kBAL/B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAC,YAAY,EAAC,YAAY,CAAC;oBACjD,OAAO,EAAE,CAAC,aAAa,EAAC,YAAY,EAAC,YAAY,CAAC;oBAClD,YAAY,EAAE,CAAC,aAAa,CAAC;iBAChC;;;AC3iBD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmpopup.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmpopup.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmpopup.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,313 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i1 from 'primeng/api';
+import { TranslationKeys } from 'primeng/api';
+import * as i3 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import { ZIndexUtils } from 'primeng/utils';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+
+class ConfirmPopup {
+    constructor(el, confirmationService, renderer, cd, config, overlayService) {
+        this.el = el;
+        this.confirmationService = confirmationService;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.defaultFocus = "accept";
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.subscription = this.confirmationService.requireConfirmation$.subscribe(confirmation => {
+            if (!confirmation) {
+                this.hide();
+                return;
+            }
+            if (confirmation.key === this.key) {
+                this.confirmation = confirmation;
+                if (this.confirmation.accept) {
+                    this.confirmation.acceptEvent = new EventEmitter();
+                    this.confirmation.acceptEvent.subscribe(this.confirmation.accept);
+                }
+                if (this.confirmation.reject) {
+                    this.confirmation.rejectEvent = new EventEmitter();
+                    this.confirmation.rejectEvent.subscribe(this.confirmation.reject);
+                }
+                this.visible = true;
+            }
+        });
+    }
+    get visible() {
+        return this._visible;
+    }
+    set visible(value) {
+        this._visible = value;
+        this.cd.markForCheck();
+    }
+    onAnimationStart(event) {
+        if (event.toState === 'open') {
+            this.container = event.element;
+            document.body.appendChild(this.container);
+            this.align();
+            this.bindListeners();
+            const element = this.getElementToFocus();
+            if (element) {
+                element.focus();
+            }
+        }
+    }
+    onAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                this.onContainerDestroy();
+                break;
+        }
+    }
+    getElementToFocus() {
+        switch (this.defaultFocus) {
+            case 'accept':
+                return DomHandler.findSingle(this.container, '.p-confirm-popup-accept');
+            case 'reject':
+                return DomHandler.findSingle(this.container, '.p-confirm-popup-reject');
+            case 'none':
+                return null;
+        }
+    }
+    align() {
+        if (this.autoZIndex) {
+            ZIndexUtils.set('overlay', this.container, this.config.zIndex.overlay);
+        }
+        DomHandler.absolutePosition(this.container, this.confirmation.target);
+        const containerOffset = DomHandler.getOffset(this.container);
+        const targetOffset = DomHandler.getOffset(this.confirmation.target);
+        let arrowLeft = 0;
+        if (containerOffset.left < targetOffset.left) {
+            arrowLeft = targetOffset.left - containerOffset.left;
+        }
+        this.container.style.setProperty('--overlayArrowLeft', `${arrowLeft}px`);
+        if (containerOffset.top < targetOffset.top) {
+            DomHandler.addClass(this.container, 'p-confirm-popup-flipped');
+        }
+    }
+    hide() {
+        this.visible = false;
+    }
+    accept() {
+        if (this.confirmation.acceptEvent) {
+            this.confirmation.acceptEvent.emit();
+        }
+        this.hide();
+    }
+    reject() {
+        if (this.confirmation.rejectEvent) {
+            this.confirmation.rejectEvent.emit();
+        }
+        this.hide();
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+    }
+    bindListeners() {
+        this.bindDocumentClickListener();
+        this.bindDocumentResizeListener();
+        this.bindScrollListener();
+    }
+    unbindListeners() {
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            let documentEvent = DomHandler.isIOS() ? 'touchstart' : 'click';
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : document;
+            this.documentClickListener = this.renderer.listen(documentTarget, documentEvent, (event) => {
+                let targetElement = this.confirmation.target;
+                if (this.container !== event.target && !this.container.contains(event.target) &&
+                    targetElement !== event.target && !targetElement.contains(event.target)) {
+                    this.hide();
+                }
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    onWindowResize() {
+        this.hide();
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.confirmation.target, () => {
+                if (this.visible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    unsubscribeConfirmationSubscriptions() {
+        if (this.confirmation) {
+            if (this.confirmation.acceptEvent) {
+                this.confirmation.acceptEvent.unsubscribe();
+            }
+            if (this.confirmation.rejectEvent) {
+                this.confirmation.rejectEvent.unsubscribe();
+            }
+        }
+    }
+    onContainerDestroy() {
+        this.unbindListeners();
+        this.unsubscribeConfirmationSubscriptions();
+        if (this.autoZIndex) {
+            ZIndexUtils.clear(this.container);
+        }
+        this.confirmation = null;
+        this.container = null;
+    }
+    restoreAppend() {
+        if (this.container) {
+            document.body.removeChild(this.container);
+        }
+        this.onContainerDestroy();
+    }
+    get acceptButtonLabel() {
+        return this.confirmation.acceptLabel || this.config.getTranslation(TranslationKeys.ACCEPT);
+    }
+    get rejectButtonLabel() {
+        return this.confirmation.rejectLabel || this.config.getTranslation(TranslationKeys.REJECT);
+    }
+    ngOnDestroy() {
+        this.restoreAppend();
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+ConfirmPopup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmPopup, deps: [{ token: i0.ElementRef }, { token: i1.ConfirmationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+ConfirmPopup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ConfirmPopup, selector: "p-confirmPopup", inputs: { key: "key", defaultFocus: "defaultFocus", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", style: "style", styleClass: "styleClass", visible: "visible" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div *ngIf="visible" [ngClass]="'p-confirm-popup p-component'" [ngStyle]="style" [class]="styleClass" (click)="onOverlayClick($event)"
+            [@animation]="{value: 'open', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+            (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)">
+            <div #content class="p-confirm-popup-content">
+                <i [ngClass]="'p-confirm-popup-icon'" [class]="confirmation.icon" *ngIf="confirmation.icon"></i>
+                <span class="p-confirm-popup-message">{{confirmation.message}}</span>
+            </div>
+            <div class="p-confirm-popup-footer">
+                <button type="button" pButton [icon]="confirmation.rejectIcon" [label]="rejectButtonLabel" (click)="reject()" [ngClass]="'p-confirm-popup-reject p-button-sm'"
+                    [class]="confirmation.rejectButtonStyleClass || 'p-button-text'" *ngIf="confirmation.rejectVisible !== false" [attr.aria-label]="rejectButtonLabel"></button>
+                <button type="button" pButton [icon]="confirmation.acceptIcon" [label]="acceptButtonLabel" (click)="accept()" [ngClass]="'p-confirm-popup-accept p-button-sm'"
+                    [class]="confirmation.acceptButtonStyleClass" *ngIf="confirmation.acceptVisible !== false" [attr.aria-label]="acceptButtonLabel"></button>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-confirm-popup{position:absolute;margin-top:10px;top:0;left:0}.p-confirm-popup-flipped{margin-top:0;margin-bottom:10px}.p-confirm-popup:after,.p-confirm-popup:before{bottom:100%;left:calc(0 + 1.25rem);left:calc(var(--overlayArrowLeft, 0) + 1.25rem);content:\" \";height:0;width:0;position:absolute;pointer-events:none}.p-confirm-popup:after{border-width:8px;margin-left:-8px}.p-confirm-popup:before{border-width:10px;margin-left:-10px}.p-confirm-popup-flipped:after,.p-confirm-popup-flipped:before{bottom:auto;top:100%}.p-confirm-popup.p-confirm-popup-flipped:after,.p-confirm-popup.p-confirm-popup-flipped:before{border-bottom-color:transparent}.p-confirm-popup .p-confirm-popup-content{display:flex;align-items:center}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }], animations: [
+        trigger('animation', [
+            state('void', style({
+                transform: 'scaleY(0.8)',
+                opacity: 0
+            })),
+            state('open', style({
+                transform: 'translateY(0)',
+                opacity: 1
+            })),
+            transition('void => open', animate('{{showTransitionParams}}')),
+            transition('open => void', animate('{{hideTransitionParams}}')),
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmPopup, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-confirmPopup', template: `
+        <div *ngIf="visible" [ngClass]="'p-confirm-popup p-component'" [ngStyle]="style" [class]="styleClass" (click)="onOverlayClick($event)"
+            [@animation]="{value: 'open', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+            (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)">
+            <div #content class="p-confirm-popup-content">
+                <i [ngClass]="'p-confirm-popup-icon'" [class]="confirmation.icon" *ngIf="confirmation.icon"></i>
+                <span class="p-confirm-popup-message">{{confirmation.message}}</span>
+            </div>
+            <div class="p-confirm-popup-footer">
+                <button type="button" pButton [icon]="confirmation.rejectIcon" [label]="rejectButtonLabel" (click)="reject()" [ngClass]="'p-confirm-popup-reject p-button-sm'"
+                    [class]="confirmation.rejectButtonStyleClass || 'p-button-text'" *ngIf="confirmation.rejectVisible !== false" [attr.aria-label]="rejectButtonLabel"></button>
+                <button type="button" pButton [icon]="confirmation.acceptIcon" [label]="acceptButtonLabel" (click)="accept()" [ngClass]="'p-confirm-popup-accept p-button-sm'"
+                    [class]="confirmation.acceptButtonStyleClass" *ngIf="confirmation.acceptVisible !== false" [attr.aria-label]="acceptButtonLabel"></button>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('animation', [
+                            state('void', style({
+                                transform: 'scaleY(0.8)',
+                                opacity: 0
+                            })),
+                            state('open', style({
+                                transform: 'translateY(0)',
+                                opacity: 1
+                            })),
+                            transition('void => open', animate('{{showTransitionParams}}')),
+                            transition('open => void', animate('{{hideTransitionParams}}')),
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-confirm-popup{position:absolute;margin-top:10px;top:0;left:0}.p-confirm-popup-flipped{margin-top:0;margin-bottom:10px}.p-confirm-popup:after,.p-confirm-popup:before{bottom:100%;left:calc(0 + 1.25rem);left:calc(var(--overlayArrowLeft, 0) + 1.25rem);content:\" \";height:0;width:0;position:absolute;pointer-events:none}.p-confirm-popup:after{border-width:8px;margin-left:-8px}.p-confirm-popup:before{border-width:10px;margin-left:-10px}.p-confirm-popup-flipped:after,.p-confirm-popup-flipped:before{bottom:auto;top:100%}.p-confirm-popup.p-confirm-popup-flipped:after,.p-confirm-popup.p-confirm-popup-flipped:before{border-bottom-color:transparent}.p-confirm-popup .p-confirm-popup-content{display:flex;align-items:center}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ConfirmationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }, { type: i1.OverlayService }]; }, propDecorators: { key: [{
+                type: Input
+            }], defaultFocus: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], visible: [{
+                type: Input
+            }] } });
+class ConfirmPopupModule {
+}
+ConfirmPopupModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmPopupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ConfirmPopupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmPopupModule, declarations: [ConfirmPopup], imports: [CommonModule, ButtonModule], exports: [ConfirmPopup] });
+ConfirmPopupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmPopupModule, imports: [[CommonModule, ButtonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ConfirmPopupModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ButtonModule],
+                    exports: [ConfirmPopup],
+                    declarations: [ConfirmPopup]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ConfirmPopup, ConfirmPopupModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmpopup.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmpopup.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-confirmpopup.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-confirmpopup.mjs","sources":["../../src/app/components/confirmpopup/confirmpopup.ts","../../src/app/components/confirmpopup/primeng-confirmpopup.ts"],"sourcesContent":["import {NgModule ,Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, ChangeDetectorRef, OnDestroy, Input, EventEmitter, Renderer2} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {Confirmation, ConfirmationService, OverlayService, PrimeNGConfig, TranslationKeys} from 'primeng/api';\nimport {Subscription} from 'rxjs';\nimport {ButtonModule} from 'primeng/button';\nimport {ZIndexUtils} from 'primeng/utils';\nimport {trigger,state,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\n\n@Component({\n    selector: 'p-confirmPopup',\n    template: `\n        <div *ngIf=\"visible\" [ngClass]=\"'p-confirm-popup p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\" (click)=\"onOverlayClick($event)\"\n            [@animation]=\"{value: 'open', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\"\n            (@animation.start)=\"onAnimationStart($event)\" (@animation.done)=\"onAnimationEnd($event)\">\n            <div #content class=\"p-confirm-popup-content\">\n                <i [ngClass]=\"'p-confirm-popup-icon'\" [class]=\"confirmation.icon\" *ngIf=\"confirmation.icon\"></i>\n                <span class=\"p-confirm-popup-message\">{{confirmation.message}}</span>\n            </div>\n            <div class=\"p-confirm-popup-footer\">\n                <button type=\"button\" pButton [icon]=\"confirmation.rejectIcon\" [label]=\"rejectButtonLabel\" (click)=\"reject()\" [ngClass]=\"'p-confirm-popup-reject p-button-sm'\"\n                    [class]=\"confirmation.rejectButtonStyleClass || 'p-button-text'\" *ngIf=\"confirmation.rejectVisible !== false\" [attr.aria-label]=\"rejectButtonLabel\"></button>\n                <button type=\"button\" pButton [icon]=\"confirmation.acceptIcon\" [label]=\"acceptButtonLabel\" (click)=\"accept()\" [ngClass]=\"'p-confirm-popup-accept p-button-sm'\"\n                    [class]=\"confirmation.acceptButtonStyleClass\" *ngIf=\"confirmation.acceptVisible !== false\" [attr.aria-label]=\"acceptButtonLabel\"></button>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('animation', [\n            state('void', style({\n                transform: 'scaleY(0.8)',\n                opacity: 0\n            })),\n            state('open', style({\n                transform: 'translateY(0)',\n                opacity: 1\n            })),\n            transition('void => open', animate('{{showTransitionParams}}')),\n            transition('open => void', animate('{{hideTransitionParams}}')),\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./confirmpopup.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ConfirmPopup implements OnDestroy {\n\n    @Input() key: string;\n\n    @Input() defaultFocus: string = \"accept\";\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    container: HTMLDivElement;\n\n    subscription: Subscription;\n\n    confirmation: Confirmation;\n\n    _visible: boolean;\n\n    documentClickListener: any;\n\n    documentResizeListener: any;\n\n    scrollHandler: any;\n\n    @Input() get visible(): any {\n        return this._visible;\n    }\n    set visible(value:any) {\n        this._visible = value;\n        this.cd.markForCheck();\n    }\n\n    constructor(public el: ElementRef, private confirmationService: ConfirmationService, public renderer: Renderer2, private cd: ChangeDetectorRef, public config: PrimeNGConfig, public overlayService: OverlayService) {\n        this.subscription = this.confirmationService.requireConfirmation$.subscribe(confirmation => {\n            if (!confirmation) {\n                this.hide();\n                return;\n            }\n\n            if (confirmation.key === this.key) {\n                this.confirmation = confirmation;\n                if (this.confirmation.accept) {\n                    this.confirmation.acceptEvent = new EventEmitter();\n                    this.confirmation.acceptEvent.subscribe(this.confirmation.accept);\n                }\n\n                if (this.confirmation.reject) {\n                    this.confirmation.rejectEvent = new EventEmitter();\n                    this.confirmation.rejectEvent.subscribe(this.confirmation.reject);\n                }\n\n                this.visible = true;\n            }\n        });\n    }\n\n    onAnimationStart(event: AnimationEvent) {\n        if (event.toState === 'open') {\n            this.container = event.element;\n            document.body.appendChild(this.container);\n            this.align();\n            this.bindListeners();\n\n            const element = this.getElementToFocus();\n            if (element) {\n                element.focus();\n            }\n        }\n    }\n\n    onAnimationEnd(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'void':\n                this.onContainerDestroy();\n            break;\n        }\n    }\n\n    getElementToFocus() {\n        switch(this.defaultFocus) {\n            case 'accept':\n                return DomHandler.findSingle(this.container, '.p-confirm-popup-accept');\n\n            case 'reject':\n                return DomHandler.findSingle(this.container, '.p-confirm-popup-reject');\n\n            case 'none':\n                return null;\n        }\n    }\n\n    align() {\n        if (this.autoZIndex) {\n            ZIndexUtils.set('overlay', this.container, this.config.zIndex.overlay);\n        }\n\n        DomHandler.absolutePosition(this.container, this.confirmation.target);\n\n        const containerOffset = DomHandler.getOffset(this.container);\n        const targetOffset = DomHandler.getOffset(this.confirmation.target);\n        let arrowLeft = 0;\n\n        if (containerOffset.left < targetOffset.left) {\n            arrowLeft = targetOffset.left - containerOffset.left;\n        }\n        this.container.style.setProperty('--overlayArrowLeft', `${arrowLeft}px`);\n\n        if (containerOffset.top < targetOffset.top) {\n            DomHandler.addClass(this.container, 'p-confirm-popup-flipped');\n        }\n    }\n\n    hide() {\n        this.visible = false;\n    }\n\n    accept() {\n        if (this.confirmation.acceptEvent) {\n            this.confirmation.acceptEvent.emit();\n        }\n\n        this.hide();\n    }\n\n    reject() {\n        if (this.confirmation.rejectEvent) {\n            this.confirmation.rejectEvent.emit();\n        }\n\n        this.hide();\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    bindListeners() {\n        this.bindDocumentClickListener();\n        this.bindDocumentResizeListener();\n        this.bindScrollListener();\n    }\n\n    unbindListeners() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            let documentEvent = DomHandler.isIOS() ? 'touchstart' : 'click';\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : document;\n\n            this.documentClickListener = this.renderer.listen(documentTarget, documentEvent, (event) => {\n                let targetElement = <HTMLElement> this.confirmation.target;\n                if (this.container !== event.target && !this.container.contains(event.target) &&\n                    targetElement !== event.target && !targetElement.contains(event.target)) {\n                    this.hide();\n                }\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    onWindowResize() {\n        this.hide();\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.confirmation.target, () => {\n                if (this.visible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    unsubscribeConfirmationSubscriptions() {\n        if (this.confirmation) {\n            if (this.confirmation.acceptEvent) {\n                this.confirmation.acceptEvent.unsubscribe();\n            }\n\n            if (this.confirmation.rejectEvent) {\n                this.confirmation.rejectEvent.unsubscribe();\n            }\n        }\n    }\n\n    onContainerDestroy() {\n        this.unbindListeners();\n        this.unsubscribeConfirmationSubscriptions();\n\n        if (this.autoZIndex) {\n            ZIndexUtils.clear(this.container);\n        }\n\n        this.confirmation = null;\n        this.container = null;\n    }\n\n    restoreAppend() {\n        if (this.container) {\n            document.body.removeChild(this.container);\n        }\n\n        this.onContainerDestroy();\n    }\n\n    get acceptButtonLabel(): string {\n        return this.confirmation.acceptLabel || this.config.getTranslation(TranslationKeys.ACCEPT);\n    }\n\n    get rejectButtonLabel(): string {\n        return this.confirmation.rejectLabel || this.config.getTranslation(TranslationKeys.REJECT);\n    }\n\n    ngOnDestroy() {\n        this.restoreAppend();\n\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule],\n    exports: [ConfirmPopup],\n    declarations: [ConfirmPopup]\n})\nexport class ConfirmPopupModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-contextmenu.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-contextmenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-contextmenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,575 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, forwardRef, Component, ViewEncapsulation, Inject, Input, Output, ViewChild, ChangeDetectionStrategy, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import * as i5 from 'primeng/api';
+import { ContextMenuService } from 'primeng/api';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i4 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import { Subject } from 'rxjs';
+import { takeUntil } from 'rxjs/operators';
+import * as i2 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+
+class ContextMenuSub {
+    constructor(contextMenu) {
+        this.leafClick = new EventEmitter();
+        this.contextMenu = contextMenu;
+    }
+    ngOnInit() {
+        this.activeItemKeyChangeSubscription = this.contextMenu.contextMenuService.activeItemKeyChange$.pipe(takeUntil(this.contextMenu.ngDestroy$)).subscribe((activeItemKey) => {
+            this.activeItemKey = activeItemKey;
+            if (this.isActive(this.parentItemKey) && DomHandler.hasClass(this.sublistViewChild.nativeElement, 'p-submenu-list-active')) {
+                this.contextMenu.positionSubmenu(this.sublistViewChild.nativeElement);
+            }
+            this.contextMenu.cd.markForCheck();
+        });
+    }
+    onItemMouseEnter(event, item, key) {
+        if (this.hideTimeout) {
+            clearTimeout(this.hideTimeout);
+            this.hideTimeout = null;
+        }
+        if (item.disabled) {
+            return;
+        }
+        if (item.items) {
+            let childSublist = DomHandler.findSingle(event.currentTarget, '.p-submenu-list');
+            DomHandler.addClass(childSublist, 'p-submenu-list-active');
+        }
+        this.contextMenu.contextMenuService.changeKey(key);
+    }
+    onItemMouseLeave(event, item) {
+        if (item.disabled) {
+            return;
+        }
+        if (this.contextMenu.el.nativeElement.contains(event.toElement)) {
+            if (item.items) {
+                this.contextMenu.removeActiveFromSubLists(event.currentTarget);
+            }
+            if (!this.root) {
+                this.contextMenu.contextMenuService.changeKey(this.parentItemKey);
+            }
+        }
+    }
+    onItemClick(event, item, menuitem, key) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (!item.url && !item.routerLink) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        if (item.items) {
+            let childSublist = DomHandler.findSingle(menuitem, '.p-submenu-list');
+            if (childSublist) {
+                if (this.isActive(key) && DomHandler.hasClass(childSublist, 'p-submenu-list-active')) {
+                    this.contextMenu.removeActiveFromSubLists(menuitem);
+                }
+                else {
+                    DomHandler.addClass(childSublist, 'p-submenu-list-active');
+                }
+                this.contextMenu.contextMenuService.changeKey(key);
+            }
+        }
+        if (!item.items) {
+            this.onLeafClick();
+        }
+    }
+    onLeafClick() {
+        if (this.root) {
+            this.contextMenu.hide();
+        }
+        this.leafClick.emit();
+    }
+    getKey(index) {
+        return this.root ? String(index) : this.parentItemKey + '_' + index;
+    }
+    isActive(key) {
+        return (this.activeItemKey && (this.activeItemKey.startsWith(key + '_') || this.activeItemKey === key));
+    }
+}
+ContextMenuSub.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuSub, deps: [{ token: forwardRef(() => ContextMenu) }], target: i0.ɵɵFactoryTarget.Component });
+ContextMenuSub.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ContextMenuSub, selector: "p-contextMenuSub", inputs: { item: "item", root: "root", parentItemKey: "parentItemKey" }, outputs: { leafClick: "leafClick" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "sublistViewChild", first: true, predicate: ["sublist"], descendants: true }, { propertyName: "menuitemViewChild", first: true, predicate: ["menuitem"], descendants: true }], ngImport: i0, template: `
+        <ul #sublist [ngClass]="{'p-submenu-list':!root}">
+            <ng-template ngFor let-child let-index="index" [ngForOf]="(root ? item : item.items)">
+                <li *ngIf="child.separator" #menuitem class="p-menu-separator" [ngClass]="{'p-hidden': child.visible === false}" role="separator">
+                <li *ngIf="!child.separator" #menuitem [ngClass]="{'p-menuitem':true,'p-menuitem-active': isActive(getKey(index)),'p-hidden': child.visible === false}" [ngStyle]="child.style" [class]="child.styleClass" pTooltip [tooltipOptions]="child.tooltipOptions"
+                    (mouseenter)="onItemMouseEnter($event,child,getKey(index))" (mouseleave)="onItemMouseLeave($event,child)" role="none" [attr.data-ik]="getKey(index)">
+                    <a *ngIf="!child.routerLink" [attr.href]="child.url ? child.url : null" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id"
+                        [attr.tabindex]="child.disabled ? null : '0'" (click)="onItemClick($event, child, menuitem, getKey(index))" [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}" pRipple
+                        [attr.aria-haspopup]="item.items != null" [attr.aria-expanded]="isActive(getKey(index))">
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlLabel">{{child.label}}</span>
+                        <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <a *ngIf="child.routerLink" [routerLink]="child.routerLink" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'" role="menuitem"
+                        [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" [attr.tabindex]="child.disabled ? null : '0'"
+                        (click)="onItemClick($event, child, menuitem, getKey(index))" [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}"
+                         pRipple [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state">
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <p-contextMenuSub [parentItemKey]="getKey(index)" [item]="child" *ngIf="child.items" (leafClick)="onLeafClick()"></p-contextMenuSub>
+                </li>
+            </ng-template>
+        </ul>
+    `, isInline: true, components: [{ type: ContextMenuSub, selector: "p-contextMenuSub", inputs: ["item", "root", "parentItemKey"], outputs: ["leafClick"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuSub, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-contextMenuSub',
+                    template: `
+        <ul #sublist [ngClass]="{'p-submenu-list':!root}">
+            <ng-template ngFor let-child let-index="index" [ngForOf]="(root ? item : item.items)">
+                <li *ngIf="child.separator" #menuitem class="p-menu-separator" [ngClass]="{'p-hidden': child.visible === false}" role="separator">
+                <li *ngIf="!child.separator" #menuitem [ngClass]="{'p-menuitem':true,'p-menuitem-active': isActive(getKey(index)),'p-hidden': child.visible === false}" [ngStyle]="child.style" [class]="child.styleClass" pTooltip [tooltipOptions]="child.tooltipOptions"
+                    (mouseenter)="onItemMouseEnter($event,child,getKey(index))" (mouseleave)="onItemMouseLeave($event,child)" role="none" [attr.data-ik]="getKey(index)">
+                    <a *ngIf="!child.routerLink" [attr.href]="child.url ? child.url : null" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id"
+                        [attr.tabindex]="child.disabled ? null : '0'" (click)="onItemClick($event, child, menuitem, getKey(index))" [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}" pRipple
+                        [attr.aria-haspopup]="item.items != null" [attr.aria-expanded]="isActive(getKey(index))">
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlLabel">{{child.label}}</span>
+                        <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <a *ngIf="child.routerLink" [routerLink]="child.routerLink" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'" role="menuitem"
+                        [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" [attr.tabindex]="child.disabled ? null : '0'"
+                        (click)="onItemClick($event, child, menuitem, getKey(index))" [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}"
+                         pRipple [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state">
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <p-contextMenuSub [parentItemKey]="getKey(index)" [item]="child" *ngIf="child.items" (leafClick)="onLeafClick()"></p-contextMenuSub>
+                </li>
+            </ng-template>
+        </ul>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: undefined, decorators: [{
+                    type: Inject,
+                    args: [forwardRef(() => ContextMenu)]
+                }] }]; }, propDecorators: { item: [{
+                type: Input
+            }], root: [{
+                type: Input
+            }], parentItemKey: [{
+                type: Input
+            }], leafClick: [{
+                type: Output
+            }], sublistViewChild: [{
+                type: ViewChild,
+                args: ['sublist']
+            }], menuitemViewChild: [{
+                type: ViewChild,
+                args: ['menuitem']
+            }] } });
+class ContextMenu {
+    constructor(el, renderer, cd, zone, contextMenuService, config) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.zone = zone;
+        this.contextMenuService = contextMenuService;
+        this.config = config;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.triggerEvent = 'contextmenu';
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.ngDestroy$ = new Subject();
+    }
+    ngAfterViewInit() {
+        if (this.global) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.triggerEventListener = this.renderer.listen(documentTarget, this.triggerEvent, (event) => {
+                this.show(event);
+                event.preventDefault();
+            });
+        }
+        else if (this.target) {
+            this.triggerEventListener = this.renderer.listen(this.target, this.triggerEvent, (event) => {
+                this.show(event);
+                event.preventDefault();
+                event.stopPropagation();
+            });
+        }
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.containerViewChild.nativeElement);
+            else
+                DomHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);
+        }
+    }
+    show(event) {
+        this.clearActiveItem();
+        this.position(event);
+        this.moveOnTop();
+        this.containerViewChild.nativeElement.style.display = 'block';
+        DomHandler.fadeIn(this.containerViewChild.nativeElement, 250);
+        this.bindGlobalListeners();
+        if (event) {
+            event.preventDefault();
+        }
+        this.onShow.emit();
+    }
+    hide() {
+        this.containerViewChild.nativeElement.style.display = 'none';
+        if (this.autoZIndex) {
+            ZIndexUtils.clear(this.containerViewChild.nativeElement);
+        }
+        this.unbindGlobalListeners();
+        this.onHide.emit();
+    }
+    moveOnTop() {
+        if (this.autoZIndex && this.containerViewChild && this.containerViewChild.nativeElement.style.display !== 'block') {
+            ZIndexUtils.set('menu', this.containerViewChild.nativeElement, this.baseZIndex + this.config.zIndex.menu);
+        }
+    }
+    toggle(event) {
+        if (this.containerViewChild.nativeElement.offsetParent)
+            this.hide();
+        else
+            this.show(event);
+    }
+    position(event) {
+        if (event) {
+            let left = event.pageX + 1;
+            let top = event.pageY + 1;
+            let width = this.containerViewChild.nativeElement.offsetParent ? this.containerViewChild.nativeElement.offsetWidth : DomHandler.getHiddenElementOuterWidth(this.containerViewChild.nativeElement);
+            let height = this.containerViewChild.nativeElement.offsetParent ? this.containerViewChild.nativeElement.offsetHeight : DomHandler.getHiddenElementOuterHeight(this.containerViewChild.nativeElement);
+            let viewport = DomHandler.getViewport();
+            //flip
+            if (left + width - document.body.scrollLeft > viewport.width) {
+                left -= width;
+            }
+            //flip
+            if (top + height - document.body.scrollTop > viewport.height) {
+                top -= height;
+            }
+            //fit
+            if (left < document.body.scrollLeft) {
+                left = document.body.scrollLeft;
+            }
+            //fit
+            if (top < document.body.scrollTop) {
+                top = document.body.scrollTop;
+            }
+            this.containerViewChild.nativeElement.style.left = left + 'px';
+            this.containerViewChild.nativeElement.style.top = top + 'px';
+        }
+    }
+    positionSubmenu(sublist) {
+        let parentMenuItem = sublist.parentElement.parentElement;
+        let viewport = DomHandler.getViewport();
+        let sublistWidth = sublist.offsetParent ? sublist.offsetWidth : DomHandler.getHiddenElementOuterWidth(sublist);
+        let sublistHeight = sublist.offsetHeight ? sublist.offsetHeight : DomHandler.getHiddenElementOuterHeight(sublist);
+        let itemOuterWidth = DomHandler.getOuterWidth(parentMenuItem.children[0]);
+        let itemOuterHeight = DomHandler.getOuterHeight(parentMenuItem.children[0]);
+        let containerOffset = DomHandler.getOffset(parentMenuItem.parentElement);
+        sublist.style.zIndex = ++DomHandler.zindex;
+        if ((parseInt(containerOffset.top) + itemOuterHeight + sublistHeight) > (viewport.height - DomHandler.calculateScrollbarHeight())) {
+            sublist.style.removeProperty('top');
+            sublist.style.bottom = '0px';
+        }
+        else {
+            sublist.style.removeProperty('bottom');
+            sublist.style.top = '0px';
+        }
+        if ((parseInt(containerOffset.left) + itemOuterWidth + sublistWidth) > (viewport.width - DomHandler.calculateScrollbarWidth())) {
+            sublist.style.left = -sublistWidth + 'px';
+        }
+        else {
+            sublist.style.left = itemOuterWidth + 'px';
+        }
+    }
+    isItemMatched(menuitem) {
+        return DomHandler.hasClass(menuitem, 'p-menuitem') && !DomHandler.hasClass(menuitem.children[0], 'p-disabled');
+    }
+    findNextItem(menuitem, isRepeated) {
+        let nextMenuitem = menuitem.nextElementSibling;
+        if (nextMenuitem) {
+            return this.isItemMatched(nextMenuitem) ? nextMenuitem : this.findNextItem(nextMenuitem, isRepeated);
+        }
+        else {
+            let firstItem = menuitem.parentElement.children[0];
+            return this.isItemMatched(firstItem) ? firstItem : (!isRepeated ? this.findNextItem(firstItem, true) : null);
+        }
+    }
+    findPrevItem(menuitem, isRepeated) {
+        let prevMenuitem = menuitem.previousElementSibling;
+        if (prevMenuitem) {
+            return this.isItemMatched(prevMenuitem) ? prevMenuitem : this.findPrevItem(prevMenuitem, isRepeated);
+        }
+        else {
+            let lastItem = menuitem.parentElement.children[menuitem.parentElement.children.length - 1];
+            return this.isItemMatched(lastItem) ? lastItem : (!isRepeated ? this.findPrevItem(lastItem, true) : null);
+        }
+    }
+    getActiveItem() {
+        let activeItemKey = this.contextMenuService.activeItemKey;
+        return activeItemKey == null ? null : DomHandler.findSingle(this.containerViewChild.nativeElement, '.p-menuitem[data-ik="' + activeItemKey + '"]');
+    }
+    clearActiveItem() {
+        if (this.contextMenuService.activeItemKey) {
+            this.removeActiveFromSubLists(this.containerViewChild.nativeElement);
+            this.contextMenuService.reset();
+        }
+    }
+    removeActiveFromSubLists(el) {
+        let sublists = DomHandler.find(el, '.p-submenu-list-active');
+        for (let sublist of sublists) {
+            DomHandler.removeClass(sublist, 'p-submenu-list-active');
+        }
+    }
+    removeActiveFromSublist(menuitem) {
+        if (menuitem) {
+            let sublist = DomHandler.findSingle(menuitem, '.p-submenu-list');
+            if (sublist && DomHandler.hasClass(menuitem, 'p-submenu-list-active')) {
+                DomHandler.removeClass(menuitem, 'p-submenu-list-active');
+            }
+        }
+    }
+    bindGlobalListeners() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {
+                if (this.containerViewChild.nativeElement.offsetParent && this.isOutsideClicked(event) && !event.ctrlKey && event.button !== 2) {
+                    this.hide();
+                }
+            });
+        }
+        this.zone.runOutsideAngular(() => {
+            if (!this.windowResizeListener) {
+                this.windowResizeListener = this.onWindowResize.bind(this);
+                window.addEventListener('resize', this.windowResizeListener);
+            }
+        });
+        if (!this.documentKeydownListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentKeydownListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
+                let activeItem = this.getActiveItem();
+                switch (event.key) {
+                    case 'ArrowDown':
+                        if (activeItem) {
+                            this.removeActiveFromSublist(activeItem);
+                            activeItem = this.findNextItem(activeItem);
+                        }
+                        else {
+                            let firstItem = DomHandler.findSingle(this.containerViewChild.nativeElement, '.p-menuitem-link').parentElement;
+                            activeItem = this.isItemMatched(firstItem) ? firstItem : this.findNextItem(firstItem);
+                        }
+                        if (activeItem) {
+                            this.contextMenuService.changeKey(activeItem.getAttribute('data-ik'));
+                        }
+                        event.preventDefault();
+                        break;
+                    case 'ArrowUp':
+                        if (activeItem) {
+                            this.removeActiveFromSublist(activeItem);
+                            activeItem = this.findPrevItem(activeItem);
+                        }
+                        else {
+                            let sublist = DomHandler.findSingle(this.containerViewChild.nativeElement, 'ul');
+                            let lastItem = sublist.children[sublist.children.length - 1];
+                            activeItem = this.isItemMatched(lastItem) ? lastItem : this.findPrevItem(lastItem);
+                        }
+                        if (activeItem) {
+                            this.contextMenuService.changeKey(activeItem.getAttribute('data-ik'));
+                        }
+                        event.preventDefault();
+                        break;
+                    case 'ArrowRight':
+                        if (activeItem) {
+                            let sublist = DomHandler.findSingle(activeItem, '.p-submenu-list');
+                            if (sublist) {
+                                DomHandler.addClass(sublist, 'p-submenu-list-active');
+                                activeItem = DomHandler.findSingle(sublist, '.p-menuitem-link:not(.p-disabled)').parentElement;
+                                if (activeItem) {
+                                    this.contextMenuService.changeKey(activeItem.getAttribute('data-ik'));
+                                }
+                            }
+                        }
+                        event.preventDefault();
+                        break;
+                    case 'ArrowLeft':
+                        if (activeItem) {
+                            let sublist = activeItem.parentElement;
+                            if (sublist && DomHandler.hasClass(sublist, 'p-submenu-list-active')) {
+                                DomHandler.removeClass(sublist, 'p-submenu-list-active');
+                                activeItem = sublist.parentElement.parentElement;
+                                if (activeItem) {
+                                    this.contextMenuService.changeKey(activeItem.getAttribute('data-ik'));
+                                }
+                            }
+                        }
+                        event.preventDefault();
+                        break;
+                    case 'Escape':
+                        this.hide();
+                        event.preventDefault();
+                        break;
+                    case 'Enter':
+                        if (activeItem) {
+                            this.handleItemClick(event, this.findModelItemFromKey(this.contextMenuService.activeItemKey), activeItem);
+                        }
+                        event.preventDefault();
+                        break;
+                    default:
+                        break;
+                }
+            });
+        }
+    }
+    findModelItemFromKey(key) {
+        if (key == null || !this.model) {
+            return null;
+        }
+        let indexes = key.split('_');
+        return indexes.reduce((item, currentIndex) => {
+            return item ? item.items[currentIndex] : this.model[currentIndex];
+        }, null);
+    }
+    handleItemClick(event, item, menuitem) {
+        if (!item || item.disabled) {
+            return;
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        if (item.items) {
+            let childSublist = DomHandler.findSingle(menuitem, '.p-submenu-list');
+            if (childSublist) {
+                if (DomHandler.hasClass(childSublist, 'p-submenu-list-active')) {
+                    this.removeActiveFromSubLists(menuitem);
+                }
+                else {
+                    DomHandler.addClass(childSublist, 'p-submenu-list-active');
+                    this.positionSubmenu(childSublist);
+                }
+            }
+        }
+        if (!item.items) {
+            this.hide();
+        }
+    }
+    unbindGlobalListeners() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+        if (this.windowResizeListener) {
+            window.removeEventListener('resize', this.windowResizeListener);
+            this.windowResizeListener = null;
+        }
+        if (this.documentKeydownListener) {
+            this.documentKeydownListener();
+            this.documentKeydownListener = null;
+        }
+    }
+    onWindowResize(event) {
+        if (this.containerViewChild.nativeElement.offsetParent) {
+            this.hide();
+        }
+    }
+    isOutsideClicked(event) {
+        return !(this.containerViewChild.nativeElement.isSameNode(event.target) || this.containerViewChild.nativeElement.contains(event.target));
+    }
+    ngOnDestroy() {
+        this.unbindGlobalListeners();
+        if (this.triggerEventListener) {
+            this.triggerEventListener();
+        }
+        if (this.containerViewChild && this.autoZIndex) {
+            ZIndexUtils.clear(this.containerViewChild.nativeElement);
+        }
+        if (this.appendTo) {
+            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);
+        }
+        this.ngDestroy$.next(true);
+        this.ngDestroy$.complete();
+    }
+}
+ContextMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenu, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i5.ContextMenuService }, { token: i5.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+ContextMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ContextMenu, selector: "p-contextMenu", inputs: { model: "model", global: "global", target: "target", style: "style", styleClass: "styleClass", appendTo: "appendTo", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", triggerEvent: "triggerEvent" }, outputs: { onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="'p-contextmenu p-component'" [class]="styleClass" [ngStyle]="style">
+            <p-contextMenuSub [item]="model" [root]="true"></p-contextMenuSub>
+        </div>
+    `, isInline: true, styles: [".p-contextmenu{position:absolute;display:none}.p-contextmenu ul{margin:0;padding:0;list-style:none}.p-contextmenu .p-submenu-list{position:absolute;min-width:100%;z-index:1;display:none}.p-contextmenu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-contextmenu .p-menuitem-text{line-height:1}.p-contextmenu .p-menuitem{position:relative}.p-contextmenu .p-menuitem-link .p-submenu-icon{margin-left:auto}.p-contextmenu .p-menuitem-active>p-contextmenusub>.p-submenu-list.p-submenu-list-active{display:block!important}\n"], components: [{ type: ContextMenuSub, selector: "p-contextMenuSub", inputs: ["item", "root", "parentItemKey"], outputs: ["leafClick"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenu, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-contextMenu', template: `
+        <div #container [ngClass]="'p-contextmenu p-component'" [class]="styleClass" [ngStyle]="style">
+            <p-contextMenuSub [item]="model" [root]="true"></p-contextMenuSub>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-contextmenu{position:absolute;display:none}.p-contextmenu ul{margin:0;padding:0;list-style:none}.p-contextmenu .p-submenu-list{position:absolute;min-width:100%;z-index:1;display:none}.p-contextmenu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-contextmenu .p-menuitem-text{line-height:1}.p-contextmenu .p-menuitem{position:relative}.p-contextmenu .p-menuitem-link .p-submenu-icon{margin-left:auto}.p-contextmenu .p-menuitem-active>p-contextmenusub>.p-submenu-list.p-submenu-list-active{display:block!important}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i5.ContextMenuService }, { type: i5.PrimeNGConfig }]; }, propDecorators: { model: [{
+                type: Input
+            }], global: [{
+                type: Input
+            }], target: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], triggerEvent: [{
+                type: Input
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }] } });
+class ContextMenuModule {
+}
+ContextMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ContextMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuModule, declarations: [ContextMenu, ContextMenuSub], imports: [CommonModule, RouterModule, RippleModule, TooltipModule], exports: [ContextMenu, RouterModule, TooltipModule] });
+ContextMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuModule, providers: [ContextMenuService], imports: [[CommonModule, RouterModule, RippleModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, RippleModule, TooltipModule],
+                    exports: [ContextMenu, RouterModule, TooltipModule],
+                    declarations: [ContextMenu, ContextMenuSub],
+                    providers: [ContextMenuService]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ContextMenu, ContextMenuModule, ContextMenuSub };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-contextmenu.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-contextmenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-contextmenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-contextmenu.mjs","sources":["../../src/app/components/contextmenu/contextmenu.ts","../../src/app/components/contextmenu/primeng-contextmenu.ts"],"sourcesContent":["import { NgModule,Component,ElementRef,AfterViewInit,OnDestroy,Input,Output,Renderer2,Inject,forwardRef,ViewChild,NgZone,EventEmitter,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler } from 'primeng/dom';\nimport { MenuItem, ContextMenuService, PrimeNGConfig } from 'primeng/api';\nimport { RippleModule } from 'primeng/ripple';\nimport { ZIndexUtils } from 'primeng/utils';\nimport { RouterModule } from '@angular/router';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-contextMenuSub',\n    template: `\n        <ul #sublist [ngClass]=\"{'p-submenu-list':!root}\">\n            <ng-template ngFor let-child let-index=\"index\" [ngForOf]=\"(root ? item : item.items)\">\n                <li *ngIf=\"child.separator\" #menuitem class=\"p-menu-separator\" [ngClass]=\"{'p-hidden': child.visible === false}\" role=\"separator\">\n                <li *ngIf=\"!child.separator\" #menuitem [ngClass]=\"{'p-menuitem':true,'p-menuitem-active': isActive(getKey(index)),'p-hidden': child.visible === false}\" [ngStyle]=\"child.style\" [class]=\"child.styleClass\" pTooltip [tooltipOptions]=\"child.tooltipOptions\"\n                    (mouseenter)=\"onItemMouseEnter($event,child,getKey(index))\" (mouseleave)=\"onItemMouseLeave($event,child)\" role=\"none\" [attr.data-ik]=\"getKey(index)\">\n                    <a *ngIf=\"!child.routerLink\" [attr.href]=\"child.url ? child.url : null\" [attr.target]=\"child.target\" [attr.title]=\"child.title\" [attr.id]=\"child.id\"\n                        [attr.tabindex]=\"child.disabled ? null : '0'\" (click)=\"onItemClick($event, child, menuitem, getKey(index))\" [ngClass]=\"{'p-menuitem-link':true,'p-disabled':child.disabled}\" pRipple\n                        [attr.aria-haspopup]=\"item.items != null\" [attr.aria-expanded]=\"isActive(getKey(index))\">\n                        <span class=\"p-menuitem-icon\" *ngIf=\"child.icon\" [ngClass]=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlLabel\">{{child.label}}</span>\n                        <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                        <span class=\"p-submenu-icon pi pi-angle-right\" *ngIf=\"child.items\"></span>\n                    </a>\n                    <a *ngIf=\"child.routerLink\" [routerLink]=\"child.routerLink\" [queryParams]=\"child.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" role=\"menuitem\"\n                        [routerLinkActiveOptions]=\"child.routerLinkActiveOptions||{exact:false}\" [attr.target]=\"child.target\" [attr.title]=\"child.title\" [attr.id]=\"child.id\" [attr.tabindex]=\"child.disabled ? null : '0'\"\n                        (click)=\"onItemClick($event, child, menuitem, getKey(index))\" [ngClass]=\"{'p-menuitem-link':true,'p-disabled':child.disabled}\"\n                         pRipple [fragment]=\"child.fragment\" [queryParamsHandling]=\"child.queryParamsHandling\" [preserveFragment]=\"child.preserveFragment\" [skipLocationChange]=\"child.skipLocationChange\" [replaceUrl]=\"child.replaceUrl\" [state]=\"child.state\">\n                        <span class=\"p-menuitem-icon\" *ngIf=\"child.icon\" [ngClass]=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlRouteLabel\">{{child.label}}</span>\n                        <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                        <span class=\"p-submenu-icon pi pi-angle-right\" *ngIf=\"child.items\"></span>\n                    </a>\n                    <p-contextMenuSub [parentItemKey]=\"getKey(index)\" [item]=\"child\" *ngIf=\"child.items\" (leafClick)=\"onLeafClick()\"></p-contextMenuSub>\n                </li>\n            </ng-template>\n        </ul>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ContextMenuSub {\n\n    @Input() item: MenuItem;\n\n    @Input() root: boolean;\n\n    @Input() parentItemKey: any;\n\n    @Output() leafClick: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('sublist') sublistViewChild: ElementRef;\n\n    @ViewChild('menuitem') menuitemViewChild: ElementRef;\n\n    contextMenu: ContextMenu;\n\n    activeItemKey: string;\n\n    hideTimeout: any;\n\n    activeItemKeyChangeSubscription: Subscription;\n\n    constructor(@Inject(forwardRef(() => ContextMenu)) contextMenu) {\n        this.contextMenu = contextMenu as ContextMenu;\n    }\n\n    ngOnInit() {\n        this.activeItemKeyChangeSubscription = this.contextMenu.contextMenuService.activeItemKeyChange$.pipe(takeUntil(this.contextMenu.ngDestroy$)).subscribe((activeItemKey) => {\n            this.activeItemKey = activeItemKey;\n\n            if (this.isActive(this.parentItemKey) && DomHandler.hasClass(this.sublistViewChild.nativeElement, 'p-submenu-list-active')) {\n                this.contextMenu.positionSubmenu(this.sublistViewChild.nativeElement);\n            }\n\n            this.contextMenu.cd.markForCheck();\n        });\n    }\n\n    onItemMouseEnter(event, item, key) {\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n\n        if (item.disabled) {\n            return;\n        }\n\n        if (item.items) {\n            let childSublist = DomHandler.findSingle(event.currentTarget, '.p-submenu-list');\n            DomHandler.addClass(childSublist, 'p-submenu-list-active');\n        }\n\n        this.contextMenu.contextMenuService.changeKey(key);\n    }\n\n    onItemMouseLeave(event, item) {\n        if (item.disabled) {\n            return;\n        }\n\n        if (this.contextMenu.el.nativeElement.contains(<Node> event.toElement)) {\n            if (item.items) {\n                this.contextMenu.removeActiveFromSubLists(event.currentTarget);\n            }\n\n            if (!this.root) {\n                this.contextMenu.contextMenuService.changeKey(this.parentItemKey);\n            }\n        }\n    }\n\n    onItemClick(event, item, menuitem, key) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (!item.url && !item.routerLink) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        if (item.items) {\n            let childSublist = DomHandler.findSingle(menuitem, '.p-submenu-list');\n\n            if (childSublist) {\n                if (this.isActive(key) && DomHandler.hasClass(childSublist, 'p-submenu-list-active')) {\n                    this.contextMenu.removeActiveFromSubLists(menuitem);\n                }\n                else {\n                    DomHandler.addClass(childSublist, 'p-submenu-list-active');\n                }\n\n                this.contextMenu.contextMenuService.changeKey(key);\n            }\n        }\n\n        if (!item.items) {\n            this.onLeafClick();\n        }\n    }\n\n    onLeafClick() {\n        if (this.root) {\n            this.contextMenu.hide();\n        }\n\n        this.leafClick.emit();\n    }\n\n    getKey(index) {\n        return this.root ? String(index) : this.parentItemKey + '_' + index;\n    }\n\n    isActive(key) {\n        return (this.activeItemKey &&(this.activeItemKey.startsWith(key + '_') || this.activeItemKey === key));\n    }\n}\n\n@Component({\n    selector: 'p-contextMenu',\n    template: `\n        <div #container [ngClass]=\"'p-contextmenu p-component'\" [class]=\"styleClass\" [ngStyle]=\"style\">\n            <p-contextMenuSub [item]=\"model\" [root]=\"true\"></p-contextMenuSub>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./contextmenu.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ContextMenu implements AfterViewInit, OnDestroy {\n\n    @Input() model: MenuItem[];\n\n    @Input() global: boolean;\n\n    @Input() target: any;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() appendTo: any;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() triggerEvent: string = 'contextmenu';\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    documentClickListener: any;\n\n    documentKeydownListener: any;\n\n    windowResizeListener: any;\n\n    triggerEventListener: any;\n\n    ngDestroy$ = new Subject();\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public zone: NgZone, public contextMenuService: ContextMenuService, private config: PrimeNGConfig) { }\n\n    ngAfterViewInit() {\n        if (this.global) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.triggerEventListener = this.renderer.listen(documentTarget, this.triggerEvent, (event) => {\n                this.show(event);\n                event.preventDefault();\n            });\n        }\n        else if (this.target) {\n            this.triggerEventListener = this.renderer.listen(this.target, this.triggerEvent, (event) => {\n                this.show(event);\n                event.preventDefault();\n                event.stopPropagation();\n            });\n        }\n\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.containerViewChild.nativeElement);\n            else\n                DomHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);\n        }\n    }\n\n    show(event?: MouseEvent) {\n        this.clearActiveItem();\n        this.position(event);\n        this.moveOnTop();\n        this.containerViewChild.nativeElement.style.display = 'block';\n        DomHandler.fadeIn(this.containerViewChild.nativeElement, 250);\n        this.bindGlobalListeners();\n\n        if (event) {\n            event.preventDefault();\n        }\n\n        this.onShow.emit();\n    }\n\n    hide() {\n        this.containerViewChild.nativeElement.style.display = 'none';\n\n        if (this.autoZIndex) {\n            ZIndexUtils.clear(this.containerViewChild.nativeElement);\n        }\n\n        this.unbindGlobalListeners();\n        this.onHide.emit();\n    }\n\n    moveOnTop() {\n        if (this.autoZIndex && this.containerViewChild && this.containerViewChild.nativeElement.style.display !== 'block') {\n            ZIndexUtils.set('menu', this.containerViewChild.nativeElement, this.baseZIndex + this.config.zIndex.menu);\n        }\n    }\n\n    toggle(event?: MouseEvent) {\n        if (this.containerViewChild.nativeElement.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n    }\n\n    position(event?: MouseEvent) {\n        if (event) {\n            let left = event.pageX + 1;\n            let top = event.pageY + 1;\n            let width = this.containerViewChild.nativeElement.offsetParent ? this.containerViewChild.nativeElement.offsetWidth : DomHandler.getHiddenElementOuterWidth(this.containerViewChild.nativeElement);\n            let height = this.containerViewChild.nativeElement.offsetParent ? this.containerViewChild.nativeElement.offsetHeight : DomHandler.getHiddenElementOuterHeight(this.containerViewChild.nativeElement);\n            let viewport = DomHandler.getViewport();\n\n            //flip\n            if (left + width - document.body.scrollLeft > viewport.width) {\n                left -= width;\n            }\n\n            //flip\n            if (top + height - document.body.scrollTop > viewport.height) {\n                top -= height;\n            }\n\n            //fit\n            if (left < document.body.scrollLeft) {\n                left = document.body.scrollLeft;\n            }\n\n            //fit\n            if (top < document.body.scrollTop) {\n                top = document.body.scrollTop;\n            }\n\n            this.containerViewChild.nativeElement.style.left = left + 'px';\n            this.containerViewChild.nativeElement.style.top = top + 'px';\n        }\n    }\n\n    positionSubmenu(sublist) {\n        let parentMenuItem = sublist.parentElement.parentElement;\n        let viewport = DomHandler.getViewport();\n        let sublistWidth = sublist.offsetParent ? sublist.offsetWidth : DomHandler.getHiddenElementOuterWidth(sublist);\n        let sublistHeight = sublist.offsetHeight ? sublist.offsetHeight : DomHandler.getHiddenElementOuterHeight(sublist);\n        let itemOuterWidth = DomHandler.getOuterWidth(parentMenuItem.children[0]);\n        let itemOuterHeight = DomHandler.getOuterHeight(parentMenuItem.children[0]);\n        let containerOffset = DomHandler.getOffset(parentMenuItem.parentElement);\n\n        sublist.style.zIndex = ++DomHandler.zindex;\n\n        if ((parseInt(containerOffset.top) + itemOuterHeight + sublistHeight) > (viewport.height - DomHandler.calculateScrollbarHeight())) {\n            sublist.style.removeProperty('top');\n            sublist.style.bottom = '0px';\n        }\n        else {\n            sublist.style.removeProperty('bottom');\n            sublist.style.top = '0px';\n        }\n\n        if ((parseInt(containerOffset.left) + itemOuterWidth + sublistWidth) > (viewport.width - DomHandler.calculateScrollbarWidth())) {\n            sublist.style.left = -sublistWidth + 'px';\n        }\n        else {\n            sublist.style.left = itemOuterWidth + 'px';\n        }\n    }\n\n    isItemMatched(menuitem) {\n        return DomHandler.hasClass(menuitem, 'p-menuitem') && !DomHandler.hasClass(menuitem.children[0], 'p-disabled');\n    }\n\n    findNextItem(menuitem, isRepeated?) {\n        let nextMenuitem = menuitem.nextElementSibling;\n\n        if (nextMenuitem) {\n            return this.isItemMatched(nextMenuitem) ? nextMenuitem : this.findNextItem(nextMenuitem, isRepeated);\n        }\n        else {\n            let firstItem = menuitem.parentElement.children[0];\n\n            return this.isItemMatched(firstItem) ? firstItem : (!isRepeated ? this.findNextItem(firstItem, true) : null);\n        }\n    }\n\n    findPrevItem(menuitem, isRepeated?) {\n        let prevMenuitem = menuitem.previousElementSibling;\n\n        if (prevMenuitem) {\n            return this.isItemMatched(prevMenuitem) ? prevMenuitem : this.findPrevItem(prevMenuitem, isRepeated);\n        }\n        else {\n            let lastItem = menuitem.parentElement.children[menuitem.parentElement.children.length - 1];\n\n            return this.isItemMatched(lastItem) ? lastItem : (!isRepeated ? this.findPrevItem(lastItem, true) : null);\n        }\n    }\n\n    getActiveItem() {\n        let activeItemKey = this.contextMenuService.activeItemKey;\n\n        return activeItemKey == null ? null : DomHandler.findSingle(this.containerViewChild.nativeElement, '.p-menuitem[data-ik=\"' + activeItemKey + '\"]');\n    }\n\n    clearActiveItem() {\n        if (this.contextMenuService.activeItemKey) {\n            this.removeActiveFromSubLists(this.containerViewChild.nativeElement);\n            this.contextMenuService.reset();\n        }\n    }\n\n    removeActiveFromSubLists(el) {\n        let sublists = DomHandler.find(el, '.p-submenu-list-active');\n\n        for (let sublist of sublists) {\n            DomHandler.removeClass(sublist, 'p-submenu-list-active');\n        }\n    }\n\n    removeActiveFromSublist(menuitem) {\n        if (menuitem) {\n            let sublist = DomHandler.findSingle(menuitem, '.p-submenu-list');\n\n            if (sublist && DomHandler.hasClass(menuitem, 'p-submenu-list-active')) {\n                DomHandler.removeClass(menuitem, 'p-submenu-list-active');\n            }\n        }\n    }\n\n    bindGlobalListeners() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n                if (this.containerViewChild.nativeElement.offsetParent && this.isOutsideClicked(event) && !event.ctrlKey && event.button !== 2) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.zone.runOutsideAngular(() => {\n            if (!this.windowResizeListener) {\n            this.windowResizeListener = this.onWindowResize.bind(this);\n                window.addEventListener('resize', this.windowResizeListener);\n            }\n        });\n\n        if (!this.documentKeydownListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentKeydownListener = this.renderer.listen(documentTarget, 'keydown', (event) => {\n                let activeItem = this.getActiveItem();\n\n                switch (event.key) {\n                    case 'ArrowDown':\n                        if (activeItem) {\n                            this.removeActiveFromSublist(activeItem);\n                            activeItem = this.findNextItem(activeItem);\n                        }\n                        else {\n                            let firstItem = DomHandler.findSingle(this.containerViewChild.nativeElement, '.p-menuitem-link').parentElement;\n                            activeItem = this.isItemMatched(firstItem) ? firstItem : this.findNextItem(firstItem);\n                        }\n\n                        if (activeItem) {\n                            this.contextMenuService.changeKey(activeItem.getAttribute('data-ik'));\n                        }\n\n                        event.preventDefault();\n                        break;\n\n                    case 'ArrowUp':\n                        if (activeItem) {\n                            this.removeActiveFromSublist(activeItem);\n                            activeItem = this.findPrevItem(activeItem);\n                        }\n                        else {\n                            let sublist = DomHandler.findSingle(this.containerViewChild.nativeElement, 'ul');\n                            let lastItem = sublist.children[sublist.children.length - 1];\n                            activeItem = this.isItemMatched(lastItem) ? lastItem : this.findPrevItem(lastItem);\n                        }\n\n                        if (activeItem) {\n                            this.contextMenuService.changeKey(activeItem.getAttribute('data-ik'));\n                        }\n\n                        event.preventDefault();\n                        break;\n\n                    case 'ArrowRight':\n                        if (activeItem) {\n                            let sublist = DomHandler.findSingle(activeItem, '.p-submenu-list');\n\n                            if (sublist) {\n                                DomHandler.addClass(sublist, 'p-submenu-list-active');\n\n                                activeItem = DomHandler.findSingle(sublist, '.p-menuitem-link:not(.p-disabled)').parentElement;\n\n                                if (activeItem) {\n                                    this.contextMenuService.changeKey(activeItem.getAttribute('data-ik'));\n                                }\n                            }\n                        }\n\n                        event.preventDefault();\n                        break;\n\n                    case 'ArrowLeft':\n                        if (activeItem) {\n                            let sublist = activeItem.parentElement;\n\n                            if (sublist && DomHandler.hasClass(sublist, 'p-submenu-list-active')) {\n                                DomHandler.removeClass(sublist, 'p-submenu-list-active');\n\n                                activeItem = sublist.parentElement.parentElement;\n\n                                if (activeItem) {\n                                    this.contextMenuService.changeKey(activeItem.getAttribute('data-ik'));\n                                }\n                            }\n                        }\n\n                        event.preventDefault();\n                        break;\n\n                    case 'Escape':\n                        this.hide();\n                        event.preventDefault();\n\n                        break;\n\n                    case 'Enter':\n                        if (activeItem) {\n                            this.handleItemClick(event, this.findModelItemFromKey(this.contextMenuService.activeItemKey), activeItem);\n                        }\n\n                        event.preventDefault();\n                        break;\n\n                    default:\n                        break;\n                }\n            });\n        }\n    }\n\n    findModelItemFromKey(key) {\n        if (key == null || !this.model) {\n            return null;\n        }\n\n        let indexes = key.split('_');\n        return indexes.reduce((item, currentIndex) => {\n            return item ? item.items[currentIndex] : this.model[currentIndex];\n        }, null);\n    }\n\n    handleItemClick(event, item, menuitem) {\n        if (!item || item.disabled) {\n            return;\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        if (item.items) {\n            let childSublist = DomHandler.findSingle(menuitem, '.p-submenu-list');\n\n            if (childSublist) {\n                if (DomHandler.hasClass(childSublist, 'p-submenu-list-active')) {\n                    this.removeActiveFromSubLists(menuitem);\n                }\n                else {\n                    DomHandler.addClass(childSublist, 'p-submenu-list-active');\n                    this.positionSubmenu(childSublist);\n                }\n            }\n        }\n\n        if (!item.items) {\n            this.hide();\n        }\n    }\n\n    unbindGlobalListeners() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n\n        if (this.windowResizeListener) {\n            window.removeEventListener('resize', this.windowResizeListener);\n            this.windowResizeListener = null;\n        }\n\n        if (this.documentKeydownListener) {\n            this.documentKeydownListener();\n            this.documentKeydownListener = null;\n        }\n    }\n\n    onWindowResize(event) {\n        if (this.containerViewChild.nativeElement.offsetParent) {\n            this.hide();\n        }\n    }\n\n    isOutsideClicked(event: Event) {\n        return !(this.containerViewChild.nativeElement.isSameNode(event.target) || this.containerViewChild.nativeElement.contains(event.target));\n    }\n\n    ngOnDestroy() {\n        this.unbindGlobalListeners();\n\n        if (this.triggerEventListener) {\n            this.triggerEventListener();\n        }\n\n        if (this.containerViewChild && this.autoZIndex) {\n            ZIndexUtils.clear(this.containerViewChild.nativeElement);\n        }\n\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);\n        }\n\n        this.ngDestroy$.next(true);\n        this.ngDestroy$.complete();\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,RippleModule,TooltipModule],\n    exports: [ContextMenu,RouterModule,TooltipModule],\n    declarations: [ContextMenu,ContextMenuSub],\n    providers: [ContextMenuService]\n})\nexport class ContextMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dataview.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dataview.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dataview.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,422 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ContentChild, ContentChildren, NgModule } from '@angular/core';
+import * as i3 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { ObjectUtils } from 'primeng/utils';
+import * as i1 from 'primeng/api';
+import { TranslationKeys, Header, Footer, PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i2 from 'primeng/paginator';
+import { PaginatorModule } from 'primeng/paginator';
+
+class DataView {
+    constructor(el, cd, filterService, config) {
+        this.el = el;
+        this.cd = cd;
+        this.filterService = filterService;
+        this.config = config;
+        this.pageLinks = 5;
+        this.paginatorPosition = 'bottom';
+        this.alwaysShowPaginator = true;
+        this.paginatorDropdownScrollHeight = '200px';
+        this.currentPageReportTemplate = '{currentPage} of {totalPages}';
+        this.showFirstLastIcon = true;
+        this.showPageLinks = true;
+        this.emptyMessage = '';
+        this.onLazyLoad = new EventEmitter();
+        this.trackBy = (index, item) => item;
+        this.loadingIcon = 'pi pi-spinner';
+        this.first = 0;
+        this.onPage = new EventEmitter();
+        this.onSort = new EventEmitter();
+        this.onChangeLayout = new EventEmitter();
+        this._layout = 'list';
+    }
+    get layout() {
+        return this._layout;
+    }
+    set layout(layout) {
+        this._layout = layout;
+        if (this.initialized) {
+            this.changeLayout(layout);
+        }
+    }
+    ngOnInit() {
+        if (this.lazy) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        this.translationSubscription = this.config.translationObserver.subscribe(() => {
+            this.cd.markForCheck();
+        });
+        this.initialized = true;
+    }
+    ngOnChanges(simpleChanges) {
+        if (simpleChanges.value) {
+            this._value = simpleChanges.value.currentValue;
+            this.updateTotalRecords();
+            if (!this.lazy && this.hasFilter()) {
+                this.filter(this.filterValue);
+            }
+        }
+        if (simpleChanges.sortField || simpleChanges.sortOrder) {
+            //avoid triggering lazy load prior to lazy initialization at onInit
+            if (!this.lazy || this.initialized) {
+                this.sort();
+            }
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'listItem':
+                    this.listItemTemplate = item.template;
+                    break;
+                case 'gridItem':
+                    this.gridItemTemplate = item.template;
+                    break;
+                case 'paginatorleft':
+                    this.paginatorLeftTemplate = item.template;
+                    break;
+                case 'paginatorright':
+                    this.paginatorRightTemplate = item.template;
+                    break;
+                case 'paginatordropdownitem':
+                    this.paginatorDropdownItemTemplate = item.template;
+                    break;
+                case 'empty':
+                    this.emptyMessageTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+            }
+        });
+        this.updateItemTemplate();
+    }
+    updateItemTemplate() {
+        switch (this.layout) {
+            case 'list':
+                this.itemTemplate = this.listItemTemplate;
+                break;
+            case 'grid':
+                this.itemTemplate = this.gridItemTemplate;
+                break;
+        }
+    }
+    changeLayout(layout) {
+        this._layout = layout;
+        this.onChangeLayout.emit({
+            layout: this.layout
+        });
+        this.updateItemTemplate();
+        this.cd.markForCheck();
+    }
+    updateTotalRecords() {
+        this.totalRecords = this.lazy ? this.totalRecords : (this._value ? this._value.length : 0);
+    }
+    paginate(event) {
+        this.first = event.first;
+        this.rows = event.rows;
+        if (this.lazy) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        this.onPage.emit({
+            first: this.first,
+            rows: this.rows
+        });
+    }
+    sort() {
+        this.first = 0;
+        if (this.lazy) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        else if (this.value) {
+            this.value.sort((data1, data2) => {
+                let value1 = ObjectUtils.resolveFieldData(data1, this.sortField);
+                let value2 = ObjectUtils.resolveFieldData(data2, this.sortField);
+                let result = null;
+                if (value1 == null && value2 != null)
+                    result = -1;
+                else if (value1 != null && value2 == null)
+                    result = 1;
+                else if (value1 == null && value2 == null)
+                    result = 0;
+                else if (typeof value1 === 'string' && typeof value2 === 'string')
+                    result = value1.localeCompare(value2);
+                else
+                    result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
+                return (this.sortOrder * result);
+            });
+            if (this.hasFilter()) {
+                this.filter(this.filterValue);
+            }
+        }
+        this.onSort.emit({
+            sortField: this.sortField,
+            sortOrder: this.sortOrder
+        });
+    }
+    isEmpty() {
+        let data = this.filteredValue || this.value;
+        return data == null || data.length == 0;
+    }
+    createLazyLoadMetadata() {
+        return {
+            first: this.first,
+            rows: this.rows,
+            sortField: this.sortField,
+            sortOrder: this.sortOrder
+        };
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    get emptyMessageLabel() {
+        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
+    }
+    filter(filter, filterMatchMode = "contains") {
+        this.filterValue = filter;
+        if (this.value && this.value.length) {
+            let searchFields = this.filterBy.split(',');
+            this.filteredValue = this.filterService.filter(this.value, searchFields, filter, filterMatchMode, this.filterLocale);
+            if (this.filteredValue.length === this.value.length) {
+                this.filteredValue = null;
+            }
+            if (this.paginator) {
+                this.first = 0;
+                this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;
+            }
+            this.cd.markForCheck();
+        }
+    }
+    hasFilter() {
+        return this.filterValue && this.filterValue.trim().length > 0;
+    }
+    ngOnDestroy() {
+        if (this.translationSubscription) {
+            this.translationSubscription.unsubscribe();
+        }
+    }
+}
+DataView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DataView, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FilterService }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+DataView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: DataView, selector: "p-dataView", inputs: { paginator: "paginator", rows: "rows", totalRecords: "totalRecords", pageLinks: "pageLinks", rowsPerPageOptions: "rowsPerPageOptions", paginatorPosition: "paginatorPosition", alwaysShowPaginator: "alwaysShowPaginator", paginatorDropdownAppendTo: "paginatorDropdownAppendTo", paginatorDropdownScrollHeight: "paginatorDropdownScrollHeight", currentPageReportTemplate: "currentPageReportTemplate", showCurrentPageReport: "showCurrentPageReport", showJumpToPageDropdown: "showJumpToPageDropdown", showFirstLastIcon: "showFirstLastIcon", showPageLinks: "showPageLinks", lazy: "lazy", emptyMessage: "emptyMessage", style: "style", styleClass: "styleClass", trackBy: "trackBy", filterBy: "filterBy", filterLocale: "filterLocale", loading: "loading", loadingIcon: "loadingIcon", first: "first", sortField: "sortField", sortOrder: "sortOrder", value: "value", layout: "layout" }, outputs: { onLazyLoad: "onLazyLoad", onPage: "onPage", onSort: "onSort", onChangeLayout: "onChangeLayout" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "header", first: true, predicate: Header, descendants: true }, { propertyName: "footer", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], usesOnChanges: true, ngImport: i0, template: `
+        <div [ngClass]="{'p-dataview p-component': true, 'p-dataview-list': (layout === 'list'), 'p-dataview-grid': (layout === 'grid')}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-dataview-loading" *ngIf="loading">
+                <div class="p-dataview-loading-overlay p-component-overlay">
+                    <i [class]="'p-dataview-loading-icon pi-spin ' + loadingIcon"></i>
+                </div>
+            </div>
+            <div class="p-dataview-header" *ngIf="header || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            </div>
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="paginate($event)" styleClass="p-paginator-top" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'top' || paginatorPosition =='both')"
+                [dropdownAppendTo]="paginatorDropdownAppendTo" [dropdownScrollHeight]="paginatorDropdownScrollHeight" [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showPageLinks]="showPageLinks"></p-paginator>
+            <div class="p-dataview-content">
+                <div class="p-grid p-nogutter grid grid-nogutter">
+                    <ng-template ngFor let-rowData let-rowIndex="index" [ngForOf]="paginator ? ((filteredValue||value) | slice:(lazy ? 0 : first):((lazy ? 0 : first) + rows)) : (filteredValue||value)" [ngForTrackBy]="trackBy">
+                        <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: rowData, rowIndex: rowIndex}"></ng-container>
+                    </ng-template>
+                    <div *ngIf="isEmpty()" class="p-col col">
+                            <div class="p-dataview-emptymessage">
+                            <ng-container *ngIf="!emptyMessageTemplate; else emptyFilter">
+                                    {{emptyMessageLabel}}
+                            </ng-container>
+                            <ng-container #emptyFilter *ngTemplateOutlet="emptyMessageTemplate"></ng-container>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="paginate($event)" styleClass="p-paginator-bottom" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')"
+                [dropdownAppendTo]="paginatorDropdownAppendTo" [dropdownScrollHeight]="paginatorDropdownScrollHeight" [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showPageLinks]="showPageLinks"></p-paginator>
+            <div class="p-dataview-footer" *ngIf="footer || footerTemplate">
+                <ng-content select="p-footer"></ng-content>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-dataview{position:relative}.p-dataview .p-dataview-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}\n"], components: [{ type: i2.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "templateLeft", "templateRight", "dropdownAppendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "showPageLinks", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "slice": i3.SlicePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DataView, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-dataView', template: `
+        <div [ngClass]="{'p-dataview p-component': true, 'p-dataview-list': (layout === 'list'), 'p-dataview-grid': (layout === 'grid')}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-dataview-loading" *ngIf="loading">
+                <div class="p-dataview-loading-overlay p-component-overlay">
+                    <i [class]="'p-dataview-loading-icon pi-spin ' + loadingIcon"></i>
+                </div>
+            </div>
+            <div class="p-dataview-header" *ngIf="header || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            </div>
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="paginate($event)" styleClass="p-paginator-top" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'top' || paginatorPosition =='both')"
+                [dropdownAppendTo]="paginatorDropdownAppendTo" [dropdownScrollHeight]="paginatorDropdownScrollHeight" [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showPageLinks]="showPageLinks"></p-paginator>
+            <div class="p-dataview-content">
+                <div class="p-grid p-nogutter grid grid-nogutter">
+                    <ng-template ngFor let-rowData let-rowIndex="index" [ngForOf]="paginator ? ((filteredValue||value) | slice:(lazy ? 0 : first):((lazy ? 0 : first) + rows)) : (filteredValue||value)" [ngForTrackBy]="trackBy">
+                        <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: rowData, rowIndex: rowIndex}"></ng-container>
+                    </ng-template>
+                    <div *ngIf="isEmpty()" class="p-col col">
+                            <div class="p-dataview-emptymessage">
+                            <ng-container *ngIf="!emptyMessageTemplate; else emptyFilter">
+                                    {{emptyMessageLabel}}
+                            </ng-container>
+                            <ng-container #emptyFilter *ngTemplateOutlet="emptyMessageTemplate"></ng-container>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="paginate($event)" styleClass="p-paginator-bottom" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')"
+                [dropdownAppendTo]="paginatorDropdownAppendTo" [dropdownScrollHeight]="paginatorDropdownScrollHeight" [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showPageLinks]="showPageLinks"></p-paginator>
+            <div class="p-dataview-footer" *ngIf="footer || footerTemplate">
+                <ng-content select="p-footer"></ng-content>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-dataview{position:relative}.p-dataview .p-dataview-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FilterService }, { type: i1.PrimeNGConfig }]; }, propDecorators: { paginator: [{
+                type: Input
+            }], rows: [{
+                type: Input
+            }], totalRecords: [{
+                type: Input
+            }], pageLinks: [{
+                type: Input
+            }], rowsPerPageOptions: [{
+                type: Input
+            }], paginatorPosition: [{
+                type: Input
+            }], alwaysShowPaginator: [{
+                type: Input
+            }], paginatorDropdownAppendTo: [{
+                type: Input
+            }], paginatorDropdownScrollHeight: [{
+                type: Input
+            }], currentPageReportTemplate: [{
+                type: Input
+            }], showCurrentPageReport: [{
+                type: Input
+            }], showJumpToPageDropdown: [{
+                type: Input
+            }], showFirstLastIcon: [{
+                type: Input
+            }], showPageLinks: [{
+                type: Input
+            }], lazy: [{
+                type: Input
+            }], emptyMessage: [{
+                type: Input
+            }], onLazyLoad: [{
+                type: Output
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], trackBy: [{
+                type: Input
+            }], filterBy: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], loading: [{
+                type: Input
+            }], loadingIcon: [{
+                type: Input
+            }], first: [{
+                type: Input
+            }], sortField: [{
+                type: Input
+            }], sortOrder: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], onPage: [{
+                type: Output
+            }], onSort: [{
+                type: Output
+            }], onChangeLayout: [{
+                type: Output
+            }], header: [{
+                type: ContentChild,
+                args: [Header]
+            }], footer: [{
+                type: ContentChild,
+                args: [Footer]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], layout: [{
+                type: Input
+            }] } });
+class DataViewLayoutOptions {
+    constructor(dv) {
+        this.dv = dv;
+    }
+    changeLayout(event, layout) {
+        this.dv.changeLayout(layout);
+        event.preventDefault();
+    }
+}
+DataViewLayoutOptions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DataViewLayoutOptions, deps: [{ token: DataView }], target: i0.ɵɵFactoryTarget.Component });
+DataViewLayoutOptions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: DataViewLayoutOptions, selector: "p-dataViewLayoutOptions", inputs: { style: "style", styleClass: "styleClass" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="'p-dataview-layout-options p-selectbutton p-buttonset'" [ngStyle]="style" [class]="styleClass">
+            <button type="button" class="p-button p-button-icon-only" [ngClass]="{'p-highlight': dv.layout === 'list'}" (click)="changeLayout($event, 'list')" (keydown.enter)="changeLayout($event, 'list')">
+                <i class="pi pi-bars"></i>
+            </button><button type="button" class="p-button p-button-icon-only" [ngClass]="{'p-highlight': dv.layout === 'grid'}" (click)="changeLayout($event, 'grid')" (keydown.enter)="changeLayout($event, 'grid')">
+                <i class="pi pi-th-large"></i>
+            </button>
+        </div>
+    `, isInline: true, directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DataViewLayoutOptions, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-dataViewLayoutOptions',
+                    template: `
+        <div [ngClass]="'p-dataview-layout-options p-selectbutton p-buttonset'" [ngStyle]="style" [class]="styleClass">
+            <button type="button" class="p-button p-button-icon-only" [ngClass]="{'p-highlight': dv.layout === 'list'}" (click)="changeLayout($event, 'list')" (keydown.enter)="changeLayout($event, 'list')">
+                <i class="pi pi-bars"></i>
+            </button><button type="button" class="p-button p-button-icon-only" [ngClass]="{'p-highlight': dv.layout === 'grid'}" (click)="changeLayout($event, 'grid')" (keydown.enter)="changeLayout($event, 'grid')">
+                <i class="pi pi-th-large"></i>
+            </button>
+        </div>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: DataView }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }] } });
+class DataViewModule {
+}
+DataViewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DataViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+DataViewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DataViewModule, declarations: [DataView, DataViewLayoutOptions], imports: [CommonModule, SharedModule, PaginatorModule], exports: [DataView, SharedModule, DataViewLayoutOptions] });
+DataViewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DataViewModule, imports: [[CommonModule, SharedModule, PaginatorModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DataViewModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, PaginatorModule],
+                    exports: [DataView, SharedModule, DataViewLayoutOptions],
+                    declarations: [DataView, DataViewLayoutOptions]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { DataView, DataViewLayoutOptions, DataViewModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dataview.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dataview.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dataview.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-dataview.mjs","sources":["../../src/app/components/dataview/dataview.ts","../../src/app/components/dataview/primeng-dataview.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnInit,AfterContentInit,Input,Output,EventEmitter,ContentChild,ContentChildren,QueryList,TemplateRef,OnChanges,SimpleChanges,ChangeDetectionStrategy,ChangeDetectorRef, ViewEncapsulation, OnDestroy} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ObjectUtils} from 'primeng/utils';\nimport {Header,Footer,PrimeTemplate,SharedModule,FilterService, TranslationKeys, PrimeNGConfig} from 'primeng/api';\nimport {PaginatorModule} from 'primeng/paginator';\nimport {BlockableUI} from 'primeng/api';\nimport { Subscription } from 'rxjs';\n\n@Component({\n    selector: 'p-dataView',\n    template: `\n        <div [ngClass]=\"{'p-dataview p-component': true, 'p-dataview-list': (layout === 'list'), 'p-dataview-grid': (layout === 'grid')}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-dataview-loading\" *ngIf=\"loading\">\n                <div class=\"p-dataview-loading-overlay p-component-overlay\">\n                    <i [class]=\"'p-dataview-loading-icon pi-spin ' + loadingIcon\"></i>\n                </div>\n            </div>\n            <div class=\"p-dataview-header\" *ngIf=\"header || headerTemplate\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n            </div>\n            <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" [alwaysShow]=\"alwaysShowPaginator\"\n                (onPageChange)=\"paginate($event)\" styleClass=\"p-paginator-top\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\"\n                [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\" [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\"\n                [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n            <div class=\"p-dataview-content\">\n                <div class=\"p-grid p-nogutter grid grid-nogutter\">\n                    <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"paginator ? ((filteredValue||value) | slice:(lazy ? 0 : first):((lazy ? 0 : first) + rows)) : (filteredValue||value)\" [ngForTrackBy]=\"trackBy\">\n                        <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: rowData, rowIndex: rowIndex}\"></ng-container>\n                    </ng-template>\n                    <div *ngIf=\"isEmpty()\" class=\"p-col col\">\n                            <div class=\"p-dataview-emptymessage\">\n                            <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\">\n                                    {{emptyMessageLabel}}\n                            </ng-container>\n                            <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" [alwaysShow]=\"alwaysShowPaginator\"\n                (onPageChange)=\"paginate($event)\" styleClass=\"p-paginator-bottom\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\"\n                [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\" [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\"\n                [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n            <div class=\"p-dataview-footer\" *ngIf=\"footer || footerTemplate\">\n                <ng-content select=\"p-footer\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./dataview.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class DataView implements OnInit,AfterContentInit,OnDestroy,BlockableUI,OnChanges {\n\n    @Input() paginator: boolean;\n\n    @Input() rows: number;\n\n    @Input() totalRecords: number;\n\n    @Input() pageLinks: number = 5;\n\n    @Input() rowsPerPageOptions: any[];\n\n    @Input() paginatorPosition: string = 'bottom';\n\n    @Input() alwaysShowPaginator: boolean = true;\n\n    @Input() paginatorDropdownAppendTo: any;\n\n    @Input() paginatorDropdownScrollHeight: string = '200px';\n\n    @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n    @Input() showCurrentPageReport: boolean;\n\n    @Input() showJumpToPageDropdown: boolean;\n\n    @Input() showFirstLastIcon: boolean = true;\n\n    @Input() showPageLinks: boolean = true;\n\n    @Input() lazy: boolean;\n\n    @Input() emptyMessage: string = '';\n\n    @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() trackBy: Function = (index: number, item: any) => item;\n\n    @Input() filterBy: string;\n\n    @Input() filterLocale: string;\n\n    @Input() loading: boolean;\n\n    @Input() loadingIcon: string = 'pi pi-spinner';\n\n    @Input() first: number = 0;\n\n    @Input() sortField: string;\n\n    @Input() sortOrder: number;\n\n    @Input() value: any[];\n\n    @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSort: EventEmitter<any> = new EventEmitter();\n\n    @Output() onChangeLayout: EventEmitter<any> = new EventEmitter();\n\n    @ContentChild(Header) header;\n\n    @ContentChild(Footer) footer;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    _value: any[];\n\n    listItemTemplate: TemplateRef<any>;\n\n    gridItemTemplate: TemplateRef<any>;\n\n    itemTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    emptyMessageTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    paginatorLeftTemplate: TemplateRef<any>;\n\n    paginatorRightTemplate: TemplateRef<any>;\n\n    paginatorDropdownItemTemplate: TemplateRef<any>;\n\n    filteredValue: any[];\n\n    filterValue: string;\n\n    initialized: boolean;\n\n    _layout: string = 'list';\n\n    translationSubscription: Subscription;\n\n    @Input() get layout(): string {\n        return this._layout;\n    }\n\n    set layout(layout: string) {\n        this._layout = layout;\n\n        if (this.initialized) {\n            this.changeLayout(layout);\n        }\n    }\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef, public filterService: FilterService, public config: PrimeNGConfig) {}\n\n    ngOnInit() {\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.cd.markForCheck();\n        });\n        this.initialized = true;\n    }\n\n    ngOnChanges(simpleChanges: SimpleChanges) {\n        if (simpleChanges.value) {\n            this._value = simpleChanges.value.currentValue;\n            this.updateTotalRecords();\n\n            if (!this.lazy && this.hasFilter()) {\n                this.filter(this.filterValue);\n            }\n        }\n\n        if (simpleChanges.sortField || simpleChanges.sortOrder) {\n            //avoid triggering lazy load prior to lazy initialization at onInit\n            if (!this.lazy || this.initialized) {\n                this.sort();\n            }\n        }\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'listItem':\n                    this.listItemTemplate = item.template;\n                break;\n\n                case 'gridItem':\n                    this.gridItemTemplate = item.template;\n                break;\n\n                case 'paginatorleft':\n                    this.paginatorLeftTemplate = item.template;\n                break;\n\n                case 'paginatorright':\n                    this.paginatorRightTemplate = item.template;\n                break;\n\n                case 'paginatordropdownitem':\n                    this.paginatorDropdownItemTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyMessageTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n            }\n        });\n\n        this.updateItemTemplate();\n    }\n\n    updateItemTemplate() {\n        switch(this.layout) {\n            case 'list':\n                this.itemTemplate = this.listItemTemplate;\n            break;\n\n            case 'grid':\n                this.itemTemplate = this.gridItemTemplate;\n            break;\n        }\n    }\n\n    changeLayout(layout: string) {\n        this._layout = layout;\n        this.onChangeLayout.emit({\n            layout: this.layout\n        });\n        this.updateItemTemplate();\n\n        this.cd.markForCheck();\n    }\n\n    updateTotalRecords() {\n        this.totalRecords = this.lazy ? this.totalRecords : (this._value ? this._value.length : 0);\n    }\n\n    paginate(event) {\n        this.first = event.first;\n        this.rows = event.rows;\n\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n    }\n\n    sort() {\n        this.first = 0;\n\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else if (this.value) {\n            this.value.sort((data1, data2) => {\n                let value1 = ObjectUtils.resolveFieldData(data1, this.sortField);\n                let value2 = ObjectUtils.resolveFieldData(data2, this.sortField);\n                let result = null;\n\n                if (value1 == null && value2 != null)\n                    result = -1;\n                else if (value1 != null && value2 == null)\n                    result = 1;\n                else if (value1 == null && value2 == null)\n                    result = 0;\n                else if (typeof value1 === 'string' && typeof value2 === 'string')\n                    result = value1.localeCompare(value2);\n                else\n                    result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n                return (this.sortOrder * result);\n            });\n\n            if (this.hasFilter()) {\n                this.filter(this.filterValue);\n            }\n        }\n\n        this.onSort.emit({\n            sortField: this.sortField,\n            sortOrder: this.sortOrder\n        });\n    }\n\n    isEmpty() {\n        let data = this.filteredValue||this.value;\n        return data == null || data.length == 0;\n    }\n\n    createLazyLoadMetadata(): any {\n        return {\n            first: this.first,\n            rows: this.rows,\n            sortField: this.sortField,\n            sortOrder: this.sortOrder\n        };\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    filter(filter: string, filterMatchMode:string =\"contains\") {\n        this.filterValue = filter;\n\n        if (this.value && this.value.length) {\n            let searchFields = this.filterBy.split(',');\n            this.filteredValue = this.filterService.filter(this.value, searchFields, filter, filterMatchMode, this.filterLocale);\n\n            if (this.filteredValue.length === this.value.length ) {\n                this.filteredValue = null;\n            }\n\n            if (this.paginator) {\n                this.first = 0;\n                this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;\n            }\n\n            this.cd.markForCheck();\n        }\n    }\n\n    hasFilter() {\n        return this.filterValue && this.filterValue.trim().length > 0;\n    }\n\n    ngOnDestroy() {\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n    }\n}\n\n@Component({\n    selector: 'p-dataViewLayoutOptions',\n    template: `\n        <div [ngClass]=\"'p-dataview-layout-options p-selectbutton p-buttonset'\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <button type=\"button\" class=\"p-button p-button-icon-only\" [ngClass]=\"{'p-highlight': dv.layout === 'list'}\" (click)=\"changeLayout($event, 'list')\" (keydown.enter)=\"changeLayout($event, 'list')\">\n                <i class=\"pi pi-bars\"></i>\n            </button><button type=\"button\" class=\"p-button p-button-icon-only\" [ngClass]=\"{'p-highlight': dv.layout === 'grid'}\" (click)=\"changeLayout($event, 'grid')\" (keydown.enter)=\"changeLayout($event, 'grid')\">\n                <i class=\"pi pi-th-large\"></i>\n            </button>\n        </div>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class DataViewLayoutOptions  {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    constructor(public dv: DataView) {}\n\n    changeLayout(event: Event, layout: string) {\n        this.dv.changeLayout(layout);\n        event.preventDefault();\n    }\n}\n@NgModule({\n    imports: [CommonModule,SharedModule,PaginatorModule],\n    exports: [DataView,SharedModule,DataViewLayoutOptions],\n    declarations: [DataView,DataViewLayoutOptions]\n})\nexport class DataViewModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-defer.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-defer.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-defer.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,87 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, TemplateRef, Directive, Output, ContentChild, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+class DeferredLoader {
+    constructor(el, renderer, viewContainer, cd) {
+        this.el = el;
+        this.renderer = renderer;
+        this.viewContainer = viewContainer;
+        this.cd = cd;
+        this.onLoad = new EventEmitter();
+    }
+    ngAfterViewInit() {
+        if (this.shouldLoad()) {
+            this.load();
+        }
+        if (!this.isLoaded()) {
+            this.documentScrollListener = this.renderer.listen('window', 'scroll', () => {
+                if (this.shouldLoad()) {
+                    this.load();
+                    this.documentScrollListener();
+                    this.documentScrollListener = null;
+                }
+            });
+        }
+    }
+    shouldLoad() {
+        if (this.isLoaded()) {
+            return false;
+        }
+        else {
+            let rect = this.el.nativeElement.getBoundingClientRect();
+            let docElement = document.documentElement;
+            let winHeight = docElement.clientHeight;
+            return (winHeight >= rect.top);
+        }
+    }
+    load() {
+        this.view = this.viewContainer.createEmbeddedView(this.template);
+        this.onLoad.emit();
+        this.cd.detectChanges();
+    }
+    isLoaded() {
+        return this.view != null;
+    }
+    ngOnDestroy() {
+        this.view = null;
+        if (this.documentScrollListener) {
+            this.documentScrollListener();
+        }
+    }
+}
+DeferredLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DeferredLoader, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
+DeferredLoader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: DeferredLoader, selector: "[pDefer]", outputs: { onLoad: "onLoad" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DeferredLoader, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pDefer]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { onLoad: [{
+                type: Output
+            }], template: [{
+                type: ContentChild,
+                args: [TemplateRef]
+            }] } });
+class DeferModule {
+}
+DeferModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DeferModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+DeferModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DeferModule, declarations: [DeferredLoader], imports: [CommonModule], exports: [DeferredLoader] });
+DeferModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DeferModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DeferModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [DeferredLoader],
+                    declarations: [DeferredLoader]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { DeferModule, DeferredLoader };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-defer.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-defer.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-defer.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-defer.mjs","sources":["../../src/app/components/defer/defer.ts","../../src/app/components/defer/primeng-defer.ts"],"sourcesContent":["import {NgModule,Directive,ElementRef,AfterViewInit,OnDestroy,TemplateRef,EmbeddedViewRef,\n        ViewContainerRef,Renderer2,EventEmitter,Output,ContentChild, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\n@Directive({\n    selector: '[pDefer]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class DeferredLoader implements AfterViewInit,OnDestroy {\n\n    @Output() onLoad: EventEmitter<any> = new EventEmitter();\n\n    @ContentChild(TemplateRef) template: TemplateRef<any>;\n\n    documentScrollListener: Function;\n\n    view: EmbeddedViewRef<any>;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public viewContainer: ViewContainerRef, private cd: ChangeDetectorRef) {}\n\n    ngAfterViewInit() {\n        if (this.shouldLoad()) {\n            this.load();\n        }\n\n        if (!this.isLoaded()) {\n            this.documentScrollListener = this.renderer.listen('window', 'scroll', () => {\n                if (this.shouldLoad()) {\n                    this.load();\n                    this.documentScrollListener();\n                    this.documentScrollListener = null;\n                }\n            });\n        }\n    }\n\n    shouldLoad(): boolean {\n        if (this.isLoaded()) {\n            return false;\n        }\n        else {\n            let rect = this.el.nativeElement.getBoundingClientRect();\n            let docElement = document.documentElement;\n            let winHeight = docElement.clientHeight;\n\n            return (winHeight >= rect.top);\n        }\n    }\n\n    load(): void {\n        this.view = this.viewContainer.createEmbeddedView(this.template);\n        this.onLoad.emit();\n        this.cd.detectChanges();\n    }\n\n    isLoaded() {\n        return this.view != null;\n    }\n\n    ngOnDestroy() {\n        this.view = null;\n\n        if (this.documentScrollListener) {\n            this.documentScrollListener();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [DeferredLoader],\n    declarations: [DeferredLoader]\n})\nexport class DeferModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MAUa,cAAc;IAUvB,YAAmB,EAAc,EAAS,QAAmB,EAAS,aAA+B,EAAU,EAAqB;QAAjH,OAAE,GAAF,EAAE,CAAY;QAAS,aAAQ,GAAR,QAAQ,CAAW;QAAS,kBAAa,GAAb,aAAa,CAAkB;QAAU,OAAE,GAAF,EAAE,CAAmB;QAR1H,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;KAQ+E;IAExI,eAAe;QACX,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YAClB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE;gBACnE,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;oBACnB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAC9B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;iBACtC;aACJ,CAAC,CAAC;SACN;KACJ;IAED,UAAU;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;aACI;YACD,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;YACzD,IAAI,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC1C,IAAI,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC;YAExC,QAAQ,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;SAClC;KACJ;IAED,IAAI;QACA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;KAC3B;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;KAC5B;IAED,WAAW;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;SACjC;KACJ;;2GAzDQ,cAAc;+FAAd,cAAc,4JAIT,WAAW;2FAJhB,cAAc;kBAN1B,SAAS;mBAAC;oBACP,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE;wBACF,OAAO,EAAE,WAAW;qBACvB;iBACJ;wLAGa,MAAM;sBAAf,MAAM;gBAEoB,QAAQ;sBAAlC,YAAY;uBAAC,WAAW;;MA6DhB,WAAW;;wGAAX,WAAW;yGAAX,WAAW,iBAjEX,cAAc,aA6Db,YAAY,aA7Db,cAAc;yGAiEd,WAAW,YAJX,CAAC,YAAY,CAAC;2FAId,WAAW;kBALvB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,cAAc,CAAC;oBACzB,YAAY,EAAE,CAAC,cAAc,CAAC;iBACjC;;;AC1ED;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dialog.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dialog.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dialog.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,758 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChild, ContentChildren, ViewChild, Output, NgModule } from '@angular/core';
+import { animation, style, animate, trigger, transition, useAnimation } from '@angular/animations';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import * as i1 from 'primeng/api';
+import { Header, Footer, PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i3 from 'primeng/focustrap';
+import { FocusTrapModule } from 'primeng/focustrap';
+import * as i4 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { UniqueComponentId, ZIndexUtils } from 'primeng/utils';
+
+const showAnimation = animation([
+    style({ transform: '{{transform}}', opacity: 0 }),
+    animate('{{transition}}')
+]);
+const hideAnimation = animation([
+    animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))
+]);
+class Dialog {
+    constructor(el, renderer, zone, cd, config) {
+        this.el = el;
+        this.renderer = renderer;
+        this.zone = zone;
+        this.cd = cd;
+        this.config = config;
+        this.draggable = true;
+        this.resizable = true;
+        this.closeOnEscape = true;
+        this.closable = true;
+        this.showHeader = true;
+        this.blockScroll = false;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.minX = 0;
+        this.minY = 0;
+        this.focusOnShow = true;
+        this.keepInViewport = true;
+        this.focusTrap = true;
+        this.transitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';
+        this.closeIcon = 'pi pi-times';
+        this.closeTabindex = "-1";
+        this.minimizeIcon = 'pi pi-window-minimize';
+        this.maximizeIcon = 'pi pi-window-maximize';
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.visibleChange = new EventEmitter();
+        this.onResizeInit = new EventEmitter();
+        this.onResizeEnd = new EventEmitter();
+        this.onDragEnd = new EventEmitter();
+        this.onMaximize = new EventEmitter();
+        this.id = UniqueComponentId();
+        this._style = {};
+        this._position = "center";
+        this.transformOptions = "scale(0.7)";
+    }
+    get positionLeft() {
+        return 0;
+    }
+    ;
+    set positionLeft(_positionLeft) {
+        console.log("positionLeft property is deprecated.");
+    }
+    get positionTop() {
+        return 0;
+    }
+    ;
+    set positionTop(_positionTop) {
+        console.log("positionTop property is deprecated.");
+    }
+    get responsive() {
+        return false;
+    }
+    ;
+    set responsive(_responsive) {
+        console.log("Responsive property is deprecated.");
+    }
+    get breakpoint() {
+        return 649;
+    }
+    ;
+    set breakpoint(_breakpoint) {
+        console.log("Breakpoint property is not utilized and deprecated, use breakpoints or CSS media queries instead.");
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngOnInit() {
+        if (this.breakpoints) {
+            this.createStyle();
+        }
+    }
+    get visible() {
+        return this._visible;
+    }
+    set visible(value) {
+        this._visible = value;
+        if (this._visible && !this.maskVisible) {
+            this.maskVisible = true;
+        }
+    }
+    get style() {
+        return this._style;
+    }
+    set style(value) {
+        if (value) {
+            this._style = { ...value };
+            this.originalStyle = value;
+        }
+    }
+    get position() {
+        return this._position;
+    }
+    ;
+    set position(value) {
+        this._position = value;
+        switch (value) {
+            case 'topleft':
+            case 'bottomleft':
+            case 'left':
+                this.transformOptions = "translate3d(-100%, 0px, 0px)";
+                break;
+            case 'topright':
+            case 'bottomright':
+            case 'right':
+                this.transformOptions = "translate3d(100%, 0px, 0px)";
+                break;
+            case 'bottom':
+                this.transformOptions = "translate3d(0px, 100%, 0px)";
+                break;
+            case 'top':
+                this.transformOptions = "translate3d(0px, -100%, 0px)";
+                break;
+            default:
+                this.transformOptions = "scale(0.7)";
+                break;
+        }
+    }
+    focus() {
+        let focusable = DomHandler.findSingle(this.container, '[autofocus]');
+        if (focusable) {
+            this.zone.runOutsideAngular(() => {
+                setTimeout(() => focusable.focus(), 5);
+            });
+        }
+    }
+    close(event) {
+        this.visibleChange.emit(false);
+        event.preventDefault();
+    }
+    enableModality() {
+        if (this.closable && this.dismissableMask) {
+            this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event) => {
+                if (this.wrapper && this.wrapper.isSameNode(event.target)) {
+                    this.close(event);
+                }
+            });
+        }
+        if (this.modal) {
+            DomHandler.addClass(document.body, 'p-overflow-hidden');
+        }
+    }
+    disableModality() {
+        if (this.wrapper) {
+            if (this.dismissableMask) {
+                this.unbindMaskClickListener();
+            }
+            if (this.modal) {
+                DomHandler.removeClass(document.body, 'p-overflow-hidden');
+            }
+            if (!this.cd.destroyed) {
+                this.cd.detectChanges();
+            }
+        }
+    }
+    maximize() {
+        this.maximized = !this.maximized;
+        if (!this.modal && !this.blockScroll) {
+            if (this.maximized)
+                DomHandler.addClass(document.body, 'p-overflow-hidden');
+            else
+                DomHandler.removeClass(document.body, 'p-overflow-hidden');
+        }
+        this.onMaximize.emit({ 'maximized': this.maximized });
+    }
+    unbindMaskClickListener() {
+        if (this.maskClickListener) {
+            this.maskClickListener();
+            this.maskClickListener = null;
+        }
+    }
+    moveOnTop() {
+        if (this.autoZIndex) {
+            ZIndexUtils.set('modal', this.container, this.baseZIndex + this.config.zIndex.modal);
+            this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);
+        }
+    }
+    createStyle() {
+        if (!this.styleElement) {
+            this.styleElement = document.createElement('style');
+            this.styleElement.type = 'text/css';
+            document.head.appendChild(this.styleElement);
+            let innerHTML = '';
+            for (let breakpoint in this.breakpoints) {
+                innerHTML += `
+                    @media screen and (max-width: ${breakpoint}) {
+                        .p-dialog[${this.id}] {
+                            width: ${this.breakpoints[breakpoint]} !important;
+                        }
+                    }
+                `;
+            }
+            this.styleElement.innerHTML = innerHTML;
+        }
+    }
+    initDrag(event) {
+        if (DomHandler.hasClass(event.target, 'p-dialog-header-icon') || DomHandler.hasClass(event.target.parentElement, 'p-dialog-header-icon')) {
+            return;
+        }
+        if (this.draggable) {
+            this.dragging = true;
+            this.lastPageX = event.pageX;
+            this.lastPageY = event.pageY;
+            this.container.style.margin = '0';
+            DomHandler.addClass(document.body, 'p-unselectable-text');
+        }
+    }
+    onKeydown(event) {
+        if (this.focusTrap) {
+            if (event.which === 9) {
+                event.preventDefault();
+                let focusableElements = DomHandler.getFocusableElements(this.container);
+                if (focusableElements && focusableElements.length > 0) {
+                    if (!focusableElements[0].ownerDocument.activeElement) {
+                        focusableElements[0].focus();
+                    }
+                    else {
+                        let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);
+                        if (event.shiftKey) {
+                            if (focusedIndex == -1 || focusedIndex === 0)
+                                focusableElements[focusableElements.length - 1].focus();
+                            else
+                                focusableElements[focusedIndex - 1].focus();
+                        }
+                        else {
+                            if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))
+                                focusableElements[0].focus();
+                            else
+                                focusableElements[focusedIndex + 1].focus();
+                        }
+                    }
+                }
+            }
+        }
+    }
+    onDrag(event) {
+        if (this.dragging) {
+            let containerWidth = DomHandler.getOuterWidth(this.container);
+            let containerHeight = DomHandler.getOuterHeight(this.container);
+            let deltaX = event.pageX - this.lastPageX;
+            let deltaY = event.pageY - this.lastPageY;
+            let offset = DomHandler.getOffset(this.container);
+            let leftPos = offset.left + deltaX;
+            let topPos = offset.top + deltaY;
+            let viewport = DomHandler.getViewport();
+            this.container.style.position = 'fixed';
+            if (this.keepInViewport) {
+                if (leftPos >= this.minX && (leftPos + containerWidth) < viewport.width) {
+                    this._style.left = leftPos + 'px';
+                    this.lastPageX = event.pageX;
+                    this.container.style.left = leftPos + 'px';
+                }
+                if (topPos >= this.minY && (topPos + containerHeight) < viewport.height) {
+                    this._style.top = topPos + 'px';
+                    this.lastPageY = event.pageY;
+                    this.container.style.top = topPos + 'px';
+                }
+            }
+            else {
+                this.lastPageX = event.pageX;
+                this.container.style.left = leftPos + 'px';
+                this.lastPageY = event.pageY;
+                this.container.style.top = topPos + 'px';
+            }
+        }
+    }
+    endDrag(event) {
+        if (this.dragging) {
+            this.dragging = false;
+            DomHandler.removeClass(document.body, 'p-unselectable-text');
+            this.cd.detectChanges();
+            this.onDragEnd.emit(event);
+        }
+    }
+    resetPosition() {
+        this.container.style.position = '';
+        this.container.style.left = '';
+        this.container.style.top = '';
+        this.container.style.margin = '';
+    }
+    //backward compatibility
+    center() {
+        this.resetPosition();
+    }
+    initResize(event) {
+        if (this.resizable) {
+            this.resizing = true;
+            this.lastPageX = event.pageX;
+            this.lastPageY = event.pageY;
+            DomHandler.addClass(document.body, 'p-unselectable-text');
+            this.onResizeInit.emit(event);
+        }
+    }
+    onResize(event) {
+        if (this.resizing) {
+            let deltaX = event.pageX - this.lastPageX;
+            let deltaY = event.pageY - this.lastPageY;
+            let containerWidth = DomHandler.getOuterWidth(this.container);
+            let containerHeight = DomHandler.getOuterHeight(this.container);
+            let contentHeight = DomHandler.getOuterHeight(this.contentViewChild.nativeElement);
+            let newWidth = containerWidth + deltaX;
+            let newHeight = containerHeight + deltaY;
+            let minWidth = this.container.style.minWidth;
+            let minHeight = this.container.style.minHeight;
+            let offset = DomHandler.getOffset(this.container);
+            let viewport = DomHandler.getViewport();
+            let hasBeenDragged = !parseInt(this.container.style.top) || !parseInt(this.container.style.left);
+            if (hasBeenDragged) {
+                newWidth += deltaX;
+                newHeight += deltaY;
+            }
+            if ((!minWidth || newWidth > parseInt(minWidth)) && (offset.left + newWidth) < viewport.width) {
+                this._style.width = newWidth + 'px';
+                this.container.style.width = this._style.width;
+            }
+            if ((!minHeight || newHeight > parseInt(minHeight)) && (offset.top + newHeight) < viewport.height) {
+                this.contentViewChild.nativeElement.style.height = contentHeight + newHeight - containerHeight + 'px';
+                if (this._style.height) {
+                    this._style.height = newHeight + 'px';
+                    this.container.style.height = this._style.height;
+                }
+            }
+            this.lastPageX = event.pageX;
+            this.lastPageY = event.pageY;
+        }
+    }
+    resizeEnd(event) {
+        if (this.resizing) {
+            this.resizing = false;
+            DomHandler.removeClass(document.body, 'p-unselectable-text');
+            this.onResizeEnd.emit(event);
+        }
+    }
+    bindGlobalListeners() {
+        if (this.draggable) {
+            this.bindDocumentDragListener();
+            this.bindDocumentDragEndListener();
+        }
+        if (this.resizable) {
+            this.bindDocumentResizeListeners();
+        }
+        if (this.closeOnEscape && this.closable) {
+            this.bindDocumentEscapeListener();
+        }
+    }
+    unbindGlobalListeners() {
+        this.unbindDocumentDragListener();
+        this.unbindDocumentDragEndListener();
+        this.unbindDocumentResizeListeners();
+        this.unbindDocumentEscapeListener();
+    }
+    bindDocumentDragListener() {
+        this.zone.runOutsideAngular(() => {
+            this.documentDragListener = this.onDrag.bind(this);
+            window.document.addEventListener('mousemove', this.documentDragListener);
+        });
+    }
+    unbindDocumentDragListener() {
+        if (this.documentDragListener) {
+            window.document.removeEventListener('mousemove', this.documentDragListener);
+            this.documentDragListener = null;
+        }
+    }
+    bindDocumentDragEndListener() {
+        this.zone.runOutsideAngular(() => {
+            this.documentDragEndListener = this.endDrag.bind(this);
+            window.document.addEventListener('mouseup', this.documentDragEndListener);
+        });
+    }
+    unbindDocumentDragEndListener() {
+        if (this.documentDragEndListener) {
+            window.document.removeEventListener('mouseup', this.documentDragEndListener);
+            this.documentDragEndListener = null;
+        }
+    }
+    bindDocumentResizeListeners() {
+        this.zone.runOutsideAngular(() => {
+            this.documentResizeListener = this.onResize.bind(this);
+            this.documentResizeEndListener = this.resizeEnd.bind(this);
+            window.document.addEventListener('mousemove', this.documentResizeListener);
+            window.document.addEventListener('mouseup', this.documentResizeEndListener);
+        });
+    }
+    unbindDocumentResizeListeners() {
+        if (this.documentResizeListener && this.documentResizeEndListener) {
+            window.document.removeEventListener('mousemove', this.documentResizeListener);
+            window.document.removeEventListener('mouseup', this.documentResizeEndListener);
+            this.documentResizeListener = null;
+            this.documentResizeEndListener = null;
+        }
+    }
+    bindDocumentEscapeListener() {
+        const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+        this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
+            if (event.which == 27) {
+                this.close(event);
+            }
+        });
+    }
+    unbindDocumentEscapeListener() {
+        if (this.documentEscapeListener) {
+            this.documentEscapeListener();
+            this.documentEscapeListener = null;
+        }
+    }
+    appendContainer() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.wrapper);
+            else
+                DomHandler.appendChild(this.wrapper, this.appendTo);
+        }
+    }
+    restoreAppend() {
+        if (this.container && this.appendTo) {
+            this.el.nativeElement.appendChild(this.wrapper);
+        }
+    }
+    onAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.container = event.element;
+                this.wrapper = this.container.parentElement;
+                this.appendContainer();
+                this.moveOnTop();
+                this.bindGlobalListeners();
+                this.container.setAttribute(this.id, '');
+                if (this.modal) {
+                    this.enableModality();
+                }
+                if (!this.modal && this.blockScroll) {
+                    DomHandler.addClass(document.body, 'p-overflow-hidden');
+                }
+                if (this.focusOnShow) {
+                    this.focus();
+                }
+                break;
+            case 'void':
+                if (this.modal) {
+                    DomHandler.addClass(this.wrapper, 'p-component-overlay-leave');
+                }
+                break;
+        }
+    }
+    onAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                this.onContainerDestroy();
+                this.onHide.emit({});
+                break;
+            case 'visible':
+                this.onShow.emit({});
+                break;
+        }
+    }
+    onContainerDestroy() {
+        this.unbindGlobalListeners();
+        this.dragging = false;
+        this.maskVisible = false;
+        if (this.maximized) {
+            DomHandler.removeClass(document.body, 'p-overflow-hidden');
+            this.maximized = false;
+        }
+        if (this.modal) {
+            this.disableModality();
+        }
+        if (this.blockScroll) {
+            DomHandler.removeClass(document.body, 'p-overflow-hidden');
+        }
+        if (this.container && this.autoZIndex) {
+            ZIndexUtils.clear(this.container);
+        }
+        this.container = null;
+        this.wrapper = null;
+        this._style = this.originalStyle ? { ...this.originalStyle } : {};
+    }
+    destroyStyle() {
+        if (this.styleElement) {
+            document.head.removeChild(this.styleElement);
+            this.styleElement = null;
+        }
+    }
+    ngOnDestroy() {
+        if (this.container) {
+            this.restoreAppend();
+            this.onContainerDestroy();
+        }
+        this.destroyStyle();
+    }
+}
+Dialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Dialog, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+Dialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Dialog, selector: "p-dialog", inputs: { header: "header", draggable: "draggable", resizable: "resizable", positionLeft: "positionLeft", positionTop: "positionTop", contentStyle: "contentStyle", contentStyleClass: "contentStyleClass", modal: "modal", closeOnEscape: "closeOnEscape", dismissableMask: "dismissableMask", rtl: "rtl", closable: "closable", responsive: "responsive", appendTo: "appendTo", breakpoints: "breakpoints", styleClass: "styleClass", maskStyleClass: "maskStyleClass", showHeader: "showHeader", breakpoint: "breakpoint", blockScroll: "blockScroll", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", minX: "minX", minY: "minY", focusOnShow: "focusOnShow", maximizable: "maximizable", keepInViewport: "keepInViewport", focusTrap: "focusTrap", transitionOptions: "transitionOptions", closeIcon: "closeIcon", closeAriaLabel: "closeAriaLabel", closeTabindex: "closeTabindex", minimizeIcon: "minimizeIcon", maximizeIcon: "maximizeIcon", visible: "visible", style: "style", position: "position" }, outputs: { onShow: "onShow", onHide: "onHide", visibleChange: "visibleChange", onResizeInit: "onResizeInit", onResizeEnd: "onResizeEnd", onDragEnd: "onDragEnd", onMaximize: "onMaximize" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "headerFacet", first: true, predicate: Header, descendants: true }, { propertyName: "footerFacet", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "headerViewChild", first: true, predicate: ["titlebar"], descendants: true }, { propertyName: "contentViewChild", first: true, predicate: ["content"], descendants: true }, { propertyName: "footerViewChild", first: true, predicate: ["footer"], descendants: true }], ngImport: i0, template: `
+        <div *ngIf="maskVisible" [class]="maskStyleClass"
+            [ngClass]="{'p-dialog-mask': true, 'p-component-overlay p-component-overlay-enter': this.modal, 'p-dialog-mask-scrollblocker': this.modal || this.blockScroll,
+                'p-dialog-left': position === 'left',
+                'p-dialog-right': position === 'right',
+                'p-dialog-top': position === 'top',
+                'p-dialog-top-left': position === 'topleft' || position === 'top-left',
+                'p-dialog-top-right': position === 'topright' || position === 'top-right',
+                'p-dialog-bottom': position === 'bottom',
+                'p-dialog-bottom-left': position === 'bottomleft' || position === 'bottom-left',
+                'p-dialog-bottom-right': position === 'bottomright' || position === 'bottom-right'}">
+            <div #container [ngClass]="{'p-dialog p-component':true, 'p-dialog-rtl':rtl,'p-dialog-draggable':draggable,'p-dialog-resizable':resizable, 'p-dialog-maximized': maximized}"
+                [ngStyle]="style" [class]="styleClass" *ngIf="visible" pFocusTrap [pFocusTrapDisabled]="focusTrap === false"
+                [@animation]="{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}" (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)" role="dialog" [attr.aria-labelledby]="id + '-label'">
+                <div #titlebar class="p-dialog-header" (mousedown)="initDrag($event)" *ngIf="showHeader">
+                    <span [attr.id]="id + '-label'" class="p-dialog-title" *ngIf="!headerFacet && !headerTemplate">{{header}}</span>
+                    <span [attr.id]="id + '-label'" class="p-dialog-title" *ngIf="headerFacet">
+                        <ng-content select="p-header"></ng-content>
+                    </span>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                    <div class="p-dialog-header-icons">
+                        <button *ngIf="maximizable" type="button" [ngClass]="{'p-dialog-header-icon p-dialog-header-maximize p-link':true}" (click)="maximize()" (keydown.enter)="maximize()" tabindex="-1" pRipple>
+                            <span class="p-dialog-header-maximize-icon" [ngClass]="maximized ? minimizeIcon : maximizeIcon"></span>
+                        </button>
+                        <button *ngIf="closable" type="button" [ngClass]="{'p-dialog-header-icon p-dialog-header-close p-link':true}" [attr.aria-label]="closeAriaLabel" (click)="close($event)" (keydown.enter)="close($event)" [attr.tabindex]="closeTabindex" pRipple>
+                            <span class="p-dialog-header-close-icon" [ngClass]="closeIcon"></span>
+                        </button>
+                    </div>
+                </div>
+                <div #content [ngClass]="'p-dialog-content'" [ngStyle]="contentStyle" [class]="contentStyleClass">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+                <div #footer class="p-dialog-footer" *ngIf="footerFacet || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+                <div *ngIf="resizable" class="p-resizable-handle" style="z-index: 90;" (mousedown)="initResize($event)"></div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translate(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0px!important;left:0px!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.FocusTrap, selector: "[pFocusTrap]", inputs: ["pFocusTrapDisabled"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.Ripple, selector: "[pRipple]" }], animations: [
+        trigger('animation', [
+            transition('void => visible', [
+                useAnimation(showAnimation)
+            ]),
+            transition('visible => void', [
+                useAnimation(hideAnimation)
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Dialog, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-dialog', template: `
+        <div *ngIf="maskVisible" [class]="maskStyleClass"
+            [ngClass]="{'p-dialog-mask': true, 'p-component-overlay p-component-overlay-enter': this.modal, 'p-dialog-mask-scrollblocker': this.modal || this.blockScroll,
+                'p-dialog-left': position === 'left',
+                'p-dialog-right': position === 'right',
+                'p-dialog-top': position === 'top',
+                'p-dialog-top-left': position === 'topleft' || position === 'top-left',
+                'p-dialog-top-right': position === 'topright' || position === 'top-right',
+                'p-dialog-bottom': position === 'bottom',
+                'p-dialog-bottom-left': position === 'bottomleft' || position === 'bottom-left',
+                'p-dialog-bottom-right': position === 'bottomright' || position === 'bottom-right'}">
+            <div #container [ngClass]="{'p-dialog p-component':true, 'p-dialog-rtl':rtl,'p-dialog-draggable':draggable,'p-dialog-resizable':resizable, 'p-dialog-maximized': maximized}"
+                [ngStyle]="style" [class]="styleClass" *ngIf="visible" pFocusTrap [pFocusTrapDisabled]="focusTrap === false"
+                [@animation]="{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}" (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)" role="dialog" [attr.aria-labelledby]="id + '-label'">
+                <div #titlebar class="p-dialog-header" (mousedown)="initDrag($event)" *ngIf="showHeader">
+                    <span [attr.id]="id + '-label'" class="p-dialog-title" *ngIf="!headerFacet && !headerTemplate">{{header}}</span>
+                    <span [attr.id]="id + '-label'" class="p-dialog-title" *ngIf="headerFacet">
+                        <ng-content select="p-header"></ng-content>
+                    </span>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                    <div class="p-dialog-header-icons">
+                        <button *ngIf="maximizable" type="button" [ngClass]="{'p-dialog-header-icon p-dialog-header-maximize p-link':true}" (click)="maximize()" (keydown.enter)="maximize()" tabindex="-1" pRipple>
+                            <span class="p-dialog-header-maximize-icon" [ngClass]="maximized ? minimizeIcon : maximizeIcon"></span>
+                        </button>
+                        <button *ngIf="closable" type="button" [ngClass]="{'p-dialog-header-icon p-dialog-header-close p-link':true}" [attr.aria-label]="closeAriaLabel" (click)="close($event)" (keydown.enter)="close($event)" [attr.tabindex]="closeTabindex" pRipple>
+                            <span class="p-dialog-header-close-icon" [ngClass]="closeIcon"></span>
+                        </button>
+                    </div>
+                </div>
+                <div #content [ngClass]="'p-dialog-content'" [ngStyle]="contentStyle" [class]="contentStyleClass">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+                <div #footer class="p-dialog-footer" *ngIf="footerFacet || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+                <div *ngIf="resizable" class="p-resizable-handle" style="z-index: 90;" (mousedown)="initResize($event)"></div>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('animation', [
+                            transition('void => visible', [
+                                useAnimation(showAnimation)
+                            ]),
+                            transition('visible => void', [
+                                useAnimation(hideAnimation)
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translate(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0px!important;left:0px!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }]; }, propDecorators: { header: [{
+                type: Input
+            }], draggable: [{
+                type: Input
+            }], resizable: [{
+                type: Input
+            }], positionLeft: [{
+                type: Input
+            }], positionTop: [{
+                type: Input
+            }], contentStyle: [{
+                type: Input
+            }], contentStyleClass: [{
+                type: Input
+            }], modal: [{
+                type: Input
+            }], closeOnEscape: [{
+                type: Input
+            }], dismissableMask: [{
+                type: Input
+            }], rtl: [{
+                type: Input
+            }], closable: [{
+                type: Input
+            }], responsive: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], breakpoints: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], maskStyleClass: [{
+                type: Input
+            }], showHeader: [{
+                type: Input
+            }], breakpoint: [{
+                type: Input
+            }], blockScroll: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], minX: [{
+                type: Input
+            }], minY: [{
+                type: Input
+            }], focusOnShow: [{
+                type: Input
+            }], maximizable: [{
+                type: Input
+            }], keepInViewport: [{
+                type: Input
+            }], focusTrap: [{
+                type: Input
+            }], transitionOptions: [{
+                type: Input
+            }], closeIcon: [{
+                type: Input
+            }], closeAriaLabel: [{
+                type: Input
+            }], closeTabindex: [{
+                type: Input
+            }], minimizeIcon: [{
+                type: Input
+            }], maximizeIcon: [{
+                type: Input
+            }], headerFacet: [{
+                type: ContentChild,
+                args: [Header]
+            }], footerFacet: [{
+                type: ContentChild,
+                args: [Footer]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], headerViewChild: [{
+                type: ViewChild,
+                args: ['titlebar']
+            }], contentViewChild: [{
+                type: ViewChild,
+                args: ['content']
+            }], footerViewChild: [{
+                type: ViewChild,
+                args: ['footer']
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], visibleChange: [{
+                type: Output
+            }], onResizeInit: [{
+                type: Output
+            }], onResizeEnd: [{
+                type: Output
+            }], onDragEnd: [{
+                type: Output
+            }], onMaximize: [{
+                type: Output
+            }], visible: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], position: [{
+                type: Input
+            }] } });
+class DialogModule {
+}
+DialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+DialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DialogModule, declarations: [Dialog], imports: [CommonModule, FocusTrapModule, RippleModule], exports: [Dialog, SharedModule] });
+DialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DialogModule, imports: [[CommonModule, FocusTrapModule, RippleModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DialogModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, FocusTrapModule, RippleModule],
+                    exports: [Dialog, SharedModule],
+                    declarations: [Dialog]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Dialog, DialogModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dialog.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dialog.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dialog.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-dialog.mjs","sources":["../../src/app/components/dialog/dialog.ts","../../src/app/components/dialog/primeng-dialog.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,Input,Output,EventEmitter,Renderer2,\n    ContentChildren,QueryList,ViewChild,NgZone, ChangeDetectorRef,ViewRef,ChangeDetectionStrategy, ViewEncapsulation, AfterContentInit, TemplateRef, ContentChild, OnInit} from '@angular/core';\nimport {trigger,style,transition,animate, AnimationEvent, animation, useAnimation} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\nimport {Header,Footer,SharedModule, PrimeTemplate, PrimeNGConfig} from 'primeng/api';\nimport {FocusTrapModule} from 'primeng/focustrap';\nimport {RippleModule} from 'primeng/ripple';\nimport {UniqueComponentId, ZIndexUtils} from 'primeng/utils';\n\nconst showAnimation = animation([\n    style({ transform: '{{transform}}', opacity: 0 }),\n    animate('{{transition}}')\n]);\n\nconst hideAnimation = animation([\n    animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))\n]);\n\n@Component({\n    selector: 'p-dialog',\n    template: `\n        <div *ngIf=\"maskVisible\" [class]=\"maskStyleClass\"\n            [ngClass]=\"{'p-dialog-mask': true, 'p-component-overlay p-component-overlay-enter': this.modal, 'p-dialog-mask-scrollblocker': this.modal || this.blockScroll,\n                'p-dialog-left': position === 'left',\n                'p-dialog-right': position === 'right',\n                'p-dialog-top': position === 'top',\n                'p-dialog-top-left': position === 'topleft' || position === 'top-left',\n                'p-dialog-top-right': position === 'topright' || position === 'top-right',\n                'p-dialog-bottom': position === 'bottom',\n                'p-dialog-bottom-left': position === 'bottomleft' || position === 'bottom-left',\n                'p-dialog-bottom-right': position === 'bottomright' || position === 'bottom-right'}\">\n            <div #container [ngClass]=\"{'p-dialog p-component':true, 'p-dialog-rtl':rtl,'p-dialog-draggable':draggable,'p-dialog-resizable':resizable, 'p-dialog-maximized': maximized}\"\n                [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"visible\" pFocusTrap [pFocusTrapDisabled]=\"focusTrap === false\"\n                [@animation]=\"{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}\" (@animation.start)=\"onAnimationStart($event)\" (@animation.done)=\"onAnimationEnd($event)\" role=\"dialog\" [attr.aria-labelledby]=\"id + '-label'\">\n                <div #titlebar class=\"p-dialog-header\" (mousedown)=\"initDrag($event)\" *ngIf=\"showHeader\">\n                    <span [attr.id]=\"id + '-label'\" class=\"p-dialog-title\" *ngIf=\"!headerFacet && !headerTemplate\">{{header}}</span>\n                    <span [attr.id]=\"id + '-label'\" class=\"p-dialog-title\" *ngIf=\"headerFacet\">\n                        <ng-content select=\"p-header\"></ng-content>\n                    </span>\n                    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                    <div class=\"p-dialog-header-icons\">\n                        <button *ngIf=\"maximizable\" type=\"button\" [ngClass]=\"{'p-dialog-header-icon p-dialog-header-maximize p-link':true}\" (click)=\"maximize()\" (keydown.enter)=\"maximize()\" tabindex=\"-1\" pRipple>\n                            <span class=\"p-dialog-header-maximize-icon\" [ngClass]=\"maximized ? minimizeIcon : maximizeIcon\"></span>\n                        </button>\n                        <button *ngIf=\"closable\" type=\"button\" [ngClass]=\"{'p-dialog-header-icon p-dialog-header-close p-link':true}\" [attr.aria-label]=\"closeAriaLabel\" (click)=\"close($event)\" (keydown.enter)=\"close($event)\" [attr.tabindex]=\"closeTabindex\" pRipple>\n                            <span class=\"p-dialog-header-close-icon\" [ngClass]=\"closeIcon\"></span>\n                        </button>\n                    </div>\n                </div>\n                <div #content [ngClass]=\"'p-dialog-content'\" [ngStyle]=\"contentStyle\" [class]=\"contentStyleClass\">\n                    <ng-content></ng-content>\n                    <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                </div>\n                <div #footer class=\"p-dialog-footer\" *ngIf=\"footerFacet || footerTemplate\">\n                    <ng-content select=\"p-footer\"></ng-content>\n                    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n                </div>\n                <div *ngIf=\"resizable\" class=\"p-resizable-handle\" style=\"z-index: 90;\" (mousedown)=\"initResize($event)\"></div>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('animation', [\n            transition('void => visible', [\n                useAnimation(showAnimation)\n            ]),\n            transition('visible => void', [\n                useAnimation(hideAnimation)\n            ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['../dialog/dialog.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Dialog implements AfterContentInit,OnInit,OnDestroy {\n\n    @Input() header: string;\n\n    @Input() draggable: boolean = true;\n\n    @Input() resizable: boolean = true;\n\n    @Input() get positionLeft(): number {\n        return 0;\n    };\n\n    set positionLeft(_positionLeft: number) {\n        console.log(\"positionLeft property is deprecated.\");\n    }\n\n    @Input() get positionTop(): number {\n        return 0;\n    };\n\n    set positionTop(_positionTop: number) {\n        console.log(\"positionTop property is deprecated.\");\n    }\n\n    @Input() contentStyle: any;\n\n    @Input() contentStyleClass: string;\n\n    @Input() modal: boolean;\n\n    @Input() closeOnEscape: boolean = true;\n\n    @Input() dismissableMask: boolean;\n\n    @Input() rtl: boolean;\n\n    @Input() closable: boolean = true;\n\n    @Input() get responsive(): boolean {\n        return false;\n    };\n\n    set responsive(_responsive: boolean) {\n        console.log(\"Responsive property is deprecated.\");\n    }\n\n    @Input() appendTo: any;\n\n    @Input() breakpoints: any;\n\n    @Input() styleClass: string;\n\n    @Input() maskStyleClass: string;\n\n    @Input() showHeader: boolean = true;\n\n    @Input() get breakpoint(): number {\n        return 649;\n    };\n\n    set breakpoint(_breakpoint: number) {\n        console.log(\"Breakpoint property is not utilized and deprecated, use breakpoints or CSS media queries instead.\");\n    }\n\n    @Input() blockScroll: boolean = false;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() minX: number = 0;\n\n    @Input() minY: number = 0;\n\n    @Input() focusOnShow: boolean = true;\n\n    @Input() maximizable: boolean;\n\n    @Input() keepInViewport: boolean = true;\n\n    @Input() focusTrap: boolean = true;\n\n    @Input() transitionOptions: string = '150ms cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() closeIcon: string = 'pi pi-times';\n\n    @Input() closeAriaLabel: string;\n\n    @Input() closeTabindex: string = \"-1\";\n\n    @Input() minimizeIcon: string = 'pi pi-window-minimize';\n\n    @Input() maximizeIcon: string = 'pi pi-window-maximize';\n\n    @ContentChild(Header) headerFacet: QueryList<Header>;\n\n    @ContentChild(Footer) footerFacet: QueryList<Footer>;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @ViewChild('titlebar') headerViewChild: ElementRef;\n\n    @ViewChild('content') contentViewChild: ElementRef;\n\n    @ViewChild('footer') footerViewChild: ElementRef;\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @Output() visibleChange:EventEmitter<any> = new EventEmitter();\n\n    @Output() onResizeInit: EventEmitter<any> = new EventEmitter();\n\n    @Output() onResizeEnd: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDragEnd: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMaximize: EventEmitter<any> = new EventEmitter();\n\n    headerTemplate: TemplateRef<any>;\n\n    contentTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    _visible: boolean;\n\n    maskVisible: boolean;\n\n    container: HTMLDivElement;\n\n    wrapper: HTMLElement;\n\n    dragging: boolean;\n\n    documentDragListener: any;\n\n    documentDragEndListener: any;\n\n    resizing: boolean;\n\n    documentResizeListener: any;\n\n    documentResizeEndListener: any;\n\n    documentEscapeListener: Function;\n\n    maskClickListener: Function;\n\n    lastPageX: number;\n\n    lastPageY: number;\n\n    preventVisibleChangePropagation: boolean;\n\n    maximized: boolean;\n\n    preMaximizeContentHeight: number;\n\n    preMaximizeContainerWidth: number;\n\n    preMaximizeContainerHeight: number;\n\n    preMaximizePageX: number;\n\n    preMaximizePageY: number;\n\n    id: string = UniqueComponentId();\n\n    _style: any = {};\n\n    _position: string = \"center\";\n\n    originalStyle: any;\n\n    transformOptions: any = \"scale(0.7)\";\n\n    styleElement: any;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public zone: NgZone, private cd: ChangeDetectorRef, public config: PrimeNGConfig) { }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngOnInit() {\n        if (this.breakpoints) {\n            this.createStyle();\n        }\n    }\n\n    @Input() get visible(): any {\n        return this._visible;\n    }\n    set visible(value:any) {\n        this._visible = value;\n\n        if (this._visible && !this.maskVisible) {\n            this.maskVisible = true;\n        }\n    }\n\n    @Input() get style(): any {\n        return this._style;\n    }\n    set style(value:any) {\n        if (value) {\n            this._style = {...value};\n            this.originalStyle = value;\n        }\n    }\n\n    @Input() get position(): string {\n        return this._position;\n    };\n\n    set position(value: string) {\n        this._position = value;\n\n        switch (value) {\n            case 'topleft':\n            case 'bottomleft':\n            case 'left':\n                this.transformOptions = \"translate3d(-100%, 0px, 0px)\";\n            break;\n            case 'topright':\n            case 'bottomright':\n            case 'right':\n                this.transformOptions = \"translate3d(100%, 0px, 0px)\";\n            break;\n            case 'bottom':\n                this.transformOptions = \"translate3d(0px, 100%, 0px)\";\n            break;\n            case 'top':\n                this.transformOptions = \"translate3d(0px, -100%, 0px)\";\n            break;\n            default:\n                this.transformOptions = \"scale(0.7)\";\n            break;\n        }\n    }\n\n    focus() {\n        let focusable = DomHandler.findSingle(this.container, '[autofocus]');\n        if (focusable) {\n            this.zone.runOutsideAngular(() => {\n                setTimeout(() => focusable.focus(), 5);\n            });\n        }\n    }\n\n    close(event: Event) {\n        this.visibleChange.emit(false);\n        event.preventDefault();\n    }\n\n    enableModality() {\n        if (this.closable && this.dismissableMask) {\n            this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event: any) => {\n                if (this.wrapper && this.wrapper.isSameNode(event.target)) {\n                    this.close(event);\n                }\n            });\n        }\n\n        if (this.modal) {\n            DomHandler.addClass(document.body, 'p-overflow-hidden');\n        }\n    }\n\n    disableModality() {\n        if (this.wrapper) {\n            if (this.dismissableMask) {\n                this.unbindMaskClickListener();\n            }\n\n            if (this.modal) {\n                DomHandler.removeClass(document.body, 'p-overflow-hidden');\n            }\n\n            if (!(this.cd as ViewRef).destroyed) {\n                this.cd.detectChanges();\n            }\n        }\n    }\n\n    maximize() {\n        this.maximized = !this.maximized;\n\n        if (!this.modal && !this.blockScroll) {\n            if (this.maximized)\n                DomHandler.addClass(document.body, 'p-overflow-hidden');\n            else\n                DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        }\n\n        this.onMaximize.emit({'maximized': this.maximized});\n    }\n\n    unbindMaskClickListener() {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n        }\n    }\n\n    moveOnTop() {\n        if (this.autoZIndex) {\n            ZIndexUtils.set('modal', this.container, this.baseZIndex + this.config.zIndex.modal);\n            this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);\n        }\n    }\n\n    createStyle() {\n        if (!this.styleElement) {\n            this.styleElement = document.createElement('style');\n            this.styleElement.type = 'text/css';\n            document.head.appendChild(this.styleElement);\n            let innerHTML = '';\n            for (let breakpoint in this.breakpoints) {\n                innerHTML += `\n                    @media screen and (max-width: ${breakpoint}) {\n                        .p-dialog[${this.id}] {\n                            width: ${this.breakpoints[breakpoint]} !important;\n                        }\n                    }\n                `\n            }\n\n            this.styleElement.innerHTML = innerHTML;\n        }\n    }\n\n    initDrag(event: MouseEvent) {\n        if (DomHandler.hasClass(event.target, 'p-dialog-header-icon') || DomHandler.hasClass((<HTMLElement> event.target).parentElement, 'p-dialog-header-icon')) {\n            return;\n        }\n\n        if (this.draggable) {\n            this.dragging = true;\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n\n            this.container.style.margin = '0';\n            DomHandler.addClass(document.body, 'p-unselectable-text');\n        }\n    }\n\n    onKeydown(event: KeyboardEvent) {\n        if (this.focusTrap) {\n            if (event.which === 9) {\n                event.preventDefault();\n\n                let focusableElements = DomHandler.getFocusableElements(this.container);\n\n                if (focusableElements && focusableElements.length > 0) {\n                    if (!focusableElements[0].ownerDocument.activeElement) {\n                        focusableElements[0].focus();\n                    }\n                    else {\n                        let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n                        if (event.shiftKey) {\n                            if (focusedIndex == -1 || focusedIndex === 0)\n                                focusableElements[focusableElements.length - 1].focus();\n                            else\n                                focusableElements[focusedIndex - 1].focus();\n                        }\n                        else {\n                            if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))\n                                focusableElements[0].focus();\n                            else\n                                focusableElements[focusedIndex + 1].focus();\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    onDrag(event: MouseEvent) {\n        if (this.dragging) {\n            let containerWidth = DomHandler.getOuterWidth(this.container);\n            let containerHeight = DomHandler.getOuterHeight(this.container);\n            let deltaX = event.pageX - this.lastPageX;\n            let deltaY = event.pageY - this.lastPageY;\n            let offset = DomHandler.getOffset(this.container);\n            let leftPos = offset.left + deltaX;\n            let topPos = offset.top + deltaY;\n            let viewport = DomHandler.getViewport();\n\n            this.container.style.position = 'fixed';\n\n            if (this.keepInViewport) {\n                if (leftPos >= this.minX && (leftPos + containerWidth) < viewport.width) {\n                    this._style.left = leftPos + 'px';\n                    this.lastPageX = event.pageX;\n                    this.container.style.left = leftPos + 'px';\n                }\n\n                if (topPos >= this.minY && (topPos + containerHeight) < viewport.height) {\n                    this._style.top = topPos + 'px';\n                    this.lastPageY = event.pageY;\n                    this.container.style.top = topPos + 'px';\n                }\n            }\n            else {\n                this.lastPageX = event.pageX;\n                this.container.style.left = leftPos + 'px';\n                this.lastPageY = event.pageY;\n                this.container.style.top = topPos + 'px';\n            }\n        }\n    }\n\n    endDrag(event: MouseEvent) {\n        if (this.dragging) {\n            this.dragging = false;\n            DomHandler.removeClass(document.body, 'p-unselectable-text');\n            this.cd.detectChanges();\n            this.onDragEnd.emit(event);\n        }\n    }\n\n    resetPosition() {\n        this.container.style.position = '';\n        this.container.style.left = '';\n        this.container.style.top = '';\n        this.container.style.margin = '';\n    }\n\n    //backward compatibility\n    center() {\n        this.resetPosition();\n    }\n\n    initResize(event: MouseEvent) {\n        if (this.resizable) {\n            this.resizing = true;\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n            DomHandler.addClass(document.body, 'p-unselectable-text');\n            this.onResizeInit.emit(event);\n        }\n    }\n\n    onResize(event: MouseEvent) {\n        if (this.resizing) {\n            let deltaX = event.pageX - this.lastPageX;\n            let deltaY = event.pageY - this.lastPageY;\n            let containerWidth = DomHandler.getOuterWidth(this.container);\n            let containerHeight = DomHandler.getOuterHeight(this.container);\n            let contentHeight = DomHandler.getOuterHeight(this.contentViewChild.nativeElement);\n            let newWidth = containerWidth + deltaX;\n            let newHeight = containerHeight + deltaY;\n            let minWidth = this.container.style.minWidth;\n            let minHeight = this.container.style.minHeight;\n            let offset = DomHandler.getOffset(this.container);\n            let viewport = DomHandler.getViewport();\n            let hasBeenDragged = !parseInt(this.container.style.top) || !parseInt(this.container.style.left);\n\n            if (hasBeenDragged) {\n                newWidth += deltaX;\n                newHeight += deltaY;\n            }\n\n            if ((!minWidth || newWidth > parseInt(minWidth)) && (offset.left + newWidth) < viewport.width) {\n                this._style.width = newWidth + 'px';\n                this.container.style.width = this._style.width;\n            }\n\n            if ((!minHeight || newHeight > parseInt(minHeight)) && (offset.top + newHeight) < viewport.height) {\n                this.contentViewChild.nativeElement.style.height = contentHeight + newHeight - containerHeight + 'px';\n\n                if (this._style.height) {\n                    this._style.height = newHeight + 'px';\n                    this.container.style.height = this._style.height;\n                }\n            }\n\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n        }\n    }\n\n    resizeEnd(event) {\n        if (this.resizing) {\n            this.resizing = false;\n            DomHandler.removeClass(document.body, 'p-unselectable-text');\n            this.onResizeEnd.emit(event);\n        }\n    }\n\n    bindGlobalListeners() {\n        if (this.draggable) {\n            this.bindDocumentDragListener();\n            this.bindDocumentDragEndListener();\n        }\n\n        if (this.resizable) {\n            this.bindDocumentResizeListeners();\n        }\n\n        if (this.closeOnEscape && this.closable) {\n            this.bindDocumentEscapeListener();\n        }\n    }\n\n    unbindGlobalListeners() {\n        this.unbindDocumentDragListener();\n        this.unbindDocumentDragEndListener();\n        this.unbindDocumentResizeListeners();\n        this.unbindDocumentEscapeListener();\n    }\n\n    bindDocumentDragListener() {\n        this.zone.runOutsideAngular(() => {\n            this.documentDragListener = this.onDrag.bind(this);\n            window.document.addEventListener('mousemove', this.documentDragListener);\n        });\n    }\n\n    unbindDocumentDragListener() {\n        if (this.documentDragListener) {\n            window.document.removeEventListener('mousemove', this.documentDragListener);\n            this.documentDragListener = null;\n        }\n    }\n\n    bindDocumentDragEndListener() {\n        this.zone.runOutsideAngular(() => {\n            this.documentDragEndListener = this.endDrag.bind(this);\n            window.document.addEventListener('mouseup', this.documentDragEndListener);\n        });\n    }\n\n    unbindDocumentDragEndListener() {\n        if (this.documentDragEndListener) {\n            window.document.removeEventListener('mouseup', this.documentDragEndListener);\n            this.documentDragEndListener = null;\n        }\n    }\n\n    bindDocumentResizeListeners() {\n        this.zone.runOutsideAngular(() => {\n            this.documentResizeListener = this.onResize.bind(this);\n            this.documentResizeEndListener = this.resizeEnd.bind(this);\n            window.document.addEventListener('mousemove', this.documentResizeListener);\n            window.document.addEventListener('mouseup', this.documentResizeEndListener);\n        });\n    }\n\n    unbindDocumentResizeListeners() {\n        if (this.documentResizeListener && this.documentResizeEndListener) {\n            window.document.removeEventListener('mousemove', this.documentResizeListener);\n            window.document.removeEventListener('mouseup', this.documentResizeEndListener);\n            this.documentResizeListener = null;\n            this.documentResizeEndListener = null;\n        }\n    }\n\n    bindDocumentEscapeListener() {\n        const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n        this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {\n            if (event.which == 27) {\n                this.close(event);\n            }\n        });\n    }\n\n    unbindDocumentEscapeListener() {\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n    }\n\n    appendContainer() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.wrapper);\n            else\n                DomHandler.appendChild(this.wrapper, this.appendTo);\n        }\n    }\n\n    restoreAppend() {\n        if (this.container && this.appendTo) {\n            this.el.nativeElement.appendChild(this.wrapper);\n        }\n    }\n\n    onAnimationStart(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                this.container = event.element;\n                this.wrapper = this.container.parentElement;\n                this.appendContainer();\n                this.moveOnTop();\n                this.bindGlobalListeners();\n                this.container.setAttribute(this.id, '');\n\n                if (this.modal) {\n                    this.enableModality();\n                }\n\n                if (!this.modal && this.blockScroll) {\n                    DomHandler.addClass(document.body, 'p-overflow-hidden');\n                }\n\n                if (this.focusOnShow) {\n                    this.focus();\n                }\n            break;\n\n            case 'void':\n                if (this.modal) {\n                    DomHandler.addClass(this.wrapper, 'p-component-overlay-leave');\n                }\n            break;\n        }\n    }\n\n    onAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                this.onContainerDestroy();\n                this.onHide.emit({});\n            break;\n            case 'visible':\n                this.onShow.emit({});\n            break;\n        }\n    }\n\n    onContainerDestroy() {\n        this.unbindGlobalListeners();\n        this.dragging = false;\n\n        this.maskVisible = false;\n\n        if (this.maximized) {\n            DomHandler.removeClass(document.body, 'p-overflow-hidden');\n            this.maximized = false;\n        }\n\n        if (this.modal) {\n            this.disableModality();\n        }\n\n        if (this.blockScroll) {\n            DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        }\n\n        if (this.container && this.autoZIndex) {\n            ZIndexUtils.clear(this.container);\n        }\n\n        this.container = null;\n        this.wrapper = null;\n\n        this._style = this.originalStyle ? {...this.originalStyle} : {};\n    }\n\n    destroyStyle() {\n        if (this.styleElement) {\n            document.head.removeChild(this.styleElement);\n            this.styleElement = null;\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.container) {\n            this.restoreAppend();\n            this.onContainerDestroy();\n        }\n\n        this.destroyStyle();\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,FocusTrapModule,RippleModule],\n    exports: [Dialog,SharedModule],\n    declarations: [Dialog]\n})\nexport class DialogModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-divider.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-divider.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-divider.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,75 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class Divider {
+    constructor() {
+        this.layout = "horizontal";
+        this.type = "solid";
+    }
+    containerClass() {
+        return {
+            'p-divider p-component': true,
+            'p-divider-horizontal': this.layout === "horizontal",
+            'p-divider-vertical': this.layout === "vertical",
+            'p-divider-solid': this.type === "solid",
+            'p-divider-dashed': this.type === "dashed",
+            'p-divider-dotted': this.type === "dotted",
+            'p-divider-left': this.layout === 'horizontal' && (!this.align || this.align === 'left'),
+            'p-divider-center': (this.layout === 'horizontal' && this.align === 'center') || (this.layout === 'vertical' && (!this.align || this.align === 'center')),
+            'p-divider-right': this.layout === 'horizontal' && this.align === 'right',
+            'p-divider-top': this.layout === 'vertical' && (this.align === 'top'),
+            'p-divider-bottom': this.layout === 'vertical' && this.align === 'bottom'
+        };
+    }
+}
+Divider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Divider, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Divider.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Divider, selector: "p-divider", inputs: { styleClass: "styleClass", style: "style", layout: "layout", type: "type", align: "align" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style" role="separator">
+            <div class="p-divider-content">
+                <ng-content></ng-content>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-divider-horizontal{display:flex;width:100%;position:relative;align-items:center}.p-divider-horizontal:before{position:absolute;display:block;top:50%;left:0;width:100%;content:\"\"}.p-divider-horizontal.p-divider-left{justify-content:flex-start}.p-divider-horizontal.p-divider-right{justify-content:flex-end}.p-divider-horizontal.p-divider-center{justify-content:center}.p-divider-content{z-index:1}.p-divider-vertical{min-height:100%;margin:0 1rem;display:flex;position:relative;justify-content:center}.p-divider-vertical:before{position:absolute;display:block;top:0;left:50%;height:100%;content:\"\"}.p-divider-vertical.p-divider-top{align-items:flex-start}.p-divider-vertical.p-divider-center{align-items:center}.p-divider-vertical.p-divider-bottom{align-items:flex-end}.p-divider-solid.p-divider-horizontal:before{border-top-style:solid}.p-divider-solid.p-divider-vertical:before{border-left-style:solid}.p-divider-dashed.p-divider-horizontal:before{border-top-style:dashed}.p-divider-dashed.p-divider-vertical:before{border-left-style:dashed}.p-divider-dotted.p-divider-horizontal:before{border-top-style:dotted}.p-divider-dotted.p-divider-horizontal:before{border-left-style:dotted}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Divider, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-divider', template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style" role="separator">
+            <div class="p-divider-content">
+                <ng-content></ng-content>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-divider-horizontal{display:flex;width:100%;position:relative;align-items:center}.p-divider-horizontal:before{position:absolute;display:block;top:50%;left:0;width:100%;content:\"\"}.p-divider-horizontal.p-divider-left{justify-content:flex-start}.p-divider-horizontal.p-divider-right{justify-content:flex-end}.p-divider-horizontal.p-divider-center{justify-content:center}.p-divider-content{z-index:1}.p-divider-vertical{min-height:100%;margin:0 1rem;display:flex;position:relative;justify-content:center}.p-divider-vertical:before{position:absolute;display:block;top:0;left:50%;height:100%;content:\"\"}.p-divider-vertical.p-divider-top{align-items:flex-start}.p-divider-vertical.p-divider-center{align-items:center}.p-divider-vertical.p-divider-bottom{align-items:flex-end}.p-divider-solid.p-divider-horizontal:before{border-top-style:solid}.p-divider-solid.p-divider-vertical:before{border-left-style:solid}.p-divider-dashed.p-divider-horizontal:before{border-top-style:dashed}.p-divider-dashed.p-divider-vertical:before{border-left-style:dashed}.p-divider-dotted.p-divider-horizontal:before{border-top-style:dotted}.p-divider-dotted.p-divider-horizontal:before{border-left-style:dotted}\n"] }]
+        }], propDecorators: { styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], layout: [{
+                type: Input
+            }], type: [{
+                type: Input
+            }], align: [{
+                type: Input
+            }] } });
+class DividerModule {
+}
+DividerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DividerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+DividerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DividerModule, declarations: [Divider], imports: [CommonModule], exports: [Divider] });
+DividerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DividerModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DividerModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Divider],
+                    declarations: [Divider]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Divider, DividerModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-divider.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-divider.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-divider.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-divider.mjs","sources":["../../src/app/components/divider/divider.ts","../../src/app/components/divider/primeng-divider.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'p-divider',\n    template: `\n        <div [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\" role=\"separator\">\n            <div class=\"p-divider-content\">\n                <ng-content></ng-content>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./divider.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Divider {\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() layout: string = \"horizontal\";\n\n    @Input() type: string = \"solid\";\n\n    @Input() align: string;\n\n    containerClass() {\n        return {\n            'p-divider p-component': true,\n            'p-divider-horizontal': this.layout === \"horizontal\",\n            'p-divider-vertical': this.layout === \"vertical\",\n            'p-divider-solid': this.type === \"solid\",\n            'p-divider-dashed': this.type === \"dashed\",\n            'p-divider-dotted': this.type === \"dotted\",\n            'p-divider-left': this.layout === 'horizontal' && (!this.align || this.align === 'left'),\n            'p-divider-center': (this.layout === 'horizontal' && this.align === 'center') || (this.layout === 'vertical' && (!this.align || this.align === 'center')),\n            'p-divider-right': this.layout === 'horizontal' && this.align === 'right',\n            'p-divider-top': this.layout === 'vertical' && (this.align === 'top'),\n            'p-divider-bottom': this.layout === 'vertical' && this.align === 'bottom'\n        };\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Divider],\n    declarations: [Divider]\n})\nexport class DividerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAmBa,OAAO;IAhBpB;QAsBa,WAAM,GAAW,YAAY,CAAC;QAE9B,SAAI,GAAW,OAAO,CAAC;KAmBnC;IAfG,cAAc;QACV,OAAO;YACH,uBAAuB,EAAE,IAAI;YAC7B,sBAAsB,EAAE,IAAI,CAAC,MAAM,KAAK,YAAY;YACpD,oBAAoB,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU;YAChD,iBAAiB,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;YACxC,kBAAkB,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC1C,kBAAkB,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC1C,gBAAgB,EAAE,IAAI,CAAC,MAAM,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;YACxF,kBAAkB,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,MAAM,IAAI,CAAC,MAAM,KAAK,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;YACzJ,iBAAiB,EAAE,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;YACzE,eAAe,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;YACrE,kBAAkB,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;SAC5E,CAAC;KACL;;oGA1BQ,OAAO;wFAAP,OAAO,8LAdN;;;;;;KAMT;2FAQQ,OAAO;kBAhBnB,SAAS;+BACI,WAAW,YACX;;;;;;KAMT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,UAAU;sBAAlB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,MAAM;sBAAd,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,KAAK;sBAAb,KAAK;;MAwBG,aAAa;;0GAAb,aAAa;2GAAb,aAAa,iBAlCb,OAAO,aA8BN,YAAY,aA9Bb,OAAO;2GAkCP,aAAa,YAJb,CAAC,YAAY,CAAC;2FAId,aAAa;kBALzB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,YAAY,EAAE,CAAC,OAAO,CAAC;iBAC1B;;;ACpDD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dock.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dock.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dock.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,152 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i2 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i4 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+
+class Dock {
+    constructor(el, cd) {
+        this.el = el;
+        this.cd = cd;
+        this.model = null;
+        this.position = "bottom";
+        this.currentIndex = -3;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    onListMouseLeave() {
+        this.currentIndex = -3;
+        this.cd.markForCheck();
+    }
+    onItemMouseEnter(index) {
+        this.currentIndex = index;
+        if (index === 1) {
+        }
+        this.cd.markForCheck();
+    }
+    onItemClick(e, item) {
+        if (item.command) {
+            item.command({ originalEvent: e, item });
+        }
+    }
+    get containerClass() {
+        return {
+            ['p-dock p-component ' + ` p-dock-${this.position}`]: true
+        };
+    }
+    isClickableRouterLink(item) {
+        return item.routerLink && !item.disabled;
+    }
+    itemClass(index) {
+        return {
+            'p-dock-item': true,
+            'p-dock-item-second-prev': (this.currentIndex - 2) === index,
+            'p-dock-item-prev': (this.currentIndex - 1) === index,
+            'p-dock-item-current': this.currentIndex === index,
+            'p-dock-item-next': (this.currentIndex + 1) === index,
+            'p-dock-item-second-next': (this.currentIndex + 2) === index
+        };
+    }
+}
+Dock.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Dock, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Dock.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Dock, selector: "p-dock", inputs: { id: "id", style: "style", styleClass: "styleClass", model: "model", position: "position" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [attr.id]="id" [ngClass]="containerClass" [ngStyle]="style" [class]="styleClass">
+            <div class="p-dock-list-container">
+                <ul #list class="p-dock-list" role="menu" (mouseleave)="onListMouseLeave()">
+                    <li *ngFor="let item of model; let i = index" [ngClass]="itemClass(i)" (mouseenter)="onItemMouseEnter(i)">
+                        <a *ngIf="isClickableRouterLink(item); else elseBlock" pRipple [routerLink]="item.routerLink" [queryParams]="item.queryParams"
+                            [ngClass]="{'p-disabled':item.disabled}" class="p-dock-action"  role="menuitem" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" (click)="onItemClick($event, item)" (keydown.enter)="onItemClick($event, item, i)"
+                            [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')"  pTooltip [tooltipOptions]="item.tooltipOptions"
+                            [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                                <span class="p-dock-action-icon" *ngIf="item.icon && !itemTemplate" [ngClass]="item.icon"></span>
+                                <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+                        </a>
+                        <ng-template #elseBlock>
+                            <a [tooltipPosition]="item.tooltipPosition" [attr.href]="item.url||null" class="p-dock-action"  role="menuitem" pRipple (click)="onItemClick($event, item)"  pTooltip [tooltipOptions]="item.tooltipOptions"
+                                [ngClass]="{'p-disabled':item.disabled}" (keydown.enter)="onItemClick($event, item, i)" [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')">
+                                <span class="p-dock-action-icon" *ngIf="item.icon && !itemTemplate" [ngClass]="item.icon"></span>
+                                <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+                            </a>
+                        </ng-template>
+                    </li>
+                </ul>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-dock{position:absolute;z-index:1;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dock-list-container{display:flex;pointer-events:auto}.p-dock-list{margin:0;padding:0;list-style:none;display:flex;align-items:center;justify-content:center}.p-dock-item{transition:all .2s cubic-bezier(.4,0,.2,1);will-change:transform}.p-dock-action{display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:hidden;cursor:default}.p-dock-item-second-prev,.p-dock-item-second-next{transform:scale(1.2)}.p-dock-item-prev,.p-dock-item-next{transform:scale(1.4)}.p-dock-item-current{transform:scale(1.6);z-index:1}.p-dock-top{left:0;top:0;width:100%}.p-dock-top .p-dock-item{transform-origin:center top}.p-dock-bottom{left:0;bottom:0;width:100%}.p-dock-bottom .p-dock-item{transform-origin:center bottom}.p-dock-right{right:0;top:0;height:100%}.p-dock-right .p-dock-item{transform-origin:center right}.p-dock-right .p-dock-list{flex-direction:column}.p-dock-left{left:0;top:0;height:100%}.p-dock-left .p-dock-item{transform-origin:center left}.p-dock-left .p-dock-list{flex-direction:column}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Dock, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-dock', template: `
+        <div [attr.id]="id" [ngClass]="containerClass" [ngStyle]="style" [class]="styleClass">
+            <div class="p-dock-list-container">
+                <ul #list class="p-dock-list" role="menu" (mouseleave)="onListMouseLeave()">
+                    <li *ngFor="let item of model; let i = index" [ngClass]="itemClass(i)" (mouseenter)="onItemMouseEnter(i)">
+                        <a *ngIf="isClickableRouterLink(item); else elseBlock" pRipple [routerLink]="item.routerLink" [queryParams]="item.queryParams"
+                            [ngClass]="{'p-disabled':item.disabled}" class="p-dock-action"  role="menuitem" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" (click)="onItemClick($event, item)" (keydown.enter)="onItemClick($event, item, i)"
+                            [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')"  pTooltip [tooltipOptions]="item.tooltipOptions"
+                            [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                                <span class="p-dock-action-icon" *ngIf="item.icon && !itemTemplate" [ngClass]="item.icon"></span>
+                                <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+                        </a>
+                        <ng-template #elseBlock>
+                            <a [tooltipPosition]="item.tooltipPosition" [attr.href]="item.url||null" class="p-dock-action"  role="menuitem" pRipple (click)="onItemClick($event, item)"  pTooltip [tooltipOptions]="item.tooltipOptions"
+                                [ngClass]="{'p-disabled':item.disabled}" (keydown.enter)="onItemClick($event, item, i)" [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')">
+                                <span class="p-dock-action-icon" *ngIf="item.icon && !itemTemplate" [ngClass]="item.icon"></span>
+                                <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item}"></ng-container>
+                            </a>
+                        </ng-template>
+                    </li>
+                </ul>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-dock{position:absolute;z-index:1;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dock-list-container{display:flex;pointer-events:auto}.p-dock-list{margin:0;padding:0;list-style:none;display:flex;align-items:center;justify-content:center}.p-dock-item{transition:all .2s cubic-bezier(.4,0,.2,1);will-change:transform}.p-dock-action{display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:hidden;cursor:default}.p-dock-item-second-prev,.p-dock-item-second-next{transform:scale(1.2)}.p-dock-item-prev,.p-dock-item-next{transform:scale(1.4)}.p-dock-item-current{transform:scale(1.6);z-index:1}.p-dock-top{left:0;top:0;width:100%}.p-dock-top .p-dock-item{transform-origin:center top}.p-dock-bottom{left:0;bottom:0;width:100%}.p-dock-bottom .p-dock-item{transform-origin:center bottom}.p-dock-right{right:0;top:0;height:100%}.p-dock-right .p-dock-item{transform-origin:center right}.p-dock-right .p-dock-list{flex-direction:column}.p-dock-left{left:0;top:0;height:100%}.p-dock-left .p-dock-item{transform-origin:center left}.p-dock-left .p-dock-list{flex-direction:column}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], model: [{
+                type: Input
+            }], position: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class DockModule {
+}
+DockModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+DockModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DockModule, declarations: [Dock], imports: [CommonModule, RouterModule, RippleModule, TooltipModule], exports: [Dock, SharedModule, TooltipModule, RouterModule] });
+DockModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DockModule, imports: [[CommonModule, RouterModule, RippleModule, TooltipModule], SharedModule, TooltipModule, RouterModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DockModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, RippleModule, TooltipModule],
+                    exports: [Dock, SharedModule, TooltipModule, RouterModule],
+                    declarations: [Dock]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Dock, DockModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dock.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dock.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dock.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-dock.mjs","sources":["../../src/app/components/dock/dock.ts","../../src/app/components/dock/primeng-dock.ts"],"sourcesContent":["import { NgModule, Component, Input, ElementRef, ContentChild, ChangeDetectionStrategy, ViewEncapsulation, TemplateRef, AfterContentInit, ContentChildren, QueryList, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from 'primeng/ripple';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-dock',\n    template: `\n        <div [attr.id]=\"id\" [ngClass]=\"containerClass\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-dock-list-container\">\n                <ul #list class=\"p-dock-list\" role=\"menu\" (mouseleave)=\"onListMouseLeave()\">\n                    <li *ngFor=\"let item of model; let i = index\" [ngClass]=\"itemClass(i)\" (mouseenter)=\"onItemMouseEnter(i)\">\n                        <a *ngIf=\"isClickableRouterLink(item); else elseBlock\" pRipple [routerLink]=\"item.routerLink\" [queryParams]=\"item.queryParams\"\n                            [ngClass]=\"{'p-disabled':item.disabled}\" class=\"p-dock-action\"  role=\"menuitem\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{exact:false}\" (click)=\"onItemClick($event, item)\" (keydown.enter)=\"onItemClick($event, item, i)\"\n                            [attr.target]=\"item.target\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')\"  pTooltip [tooltipOptions]=\"item.tooltipOptions\"\n                            [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\" [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\">\n                                <span class=\"p-dock-action-icon\" *ngIf=\"item.icon && !itemTemplate\" [ngClass]=\"item.icon\"></span>\n                                <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item}\"></ng-container>\n                        </a>\n                        <ng-template #elseBlock>\n                            <a [tooltipPosition]=\"item.tooltipPosition\" [attr.href]=\"item.url||null\" class=\"p-dock-action\"  role=\"menuitem\" pRipple (click)=\"onItemClick($event, item)\"  pTooltip [tooltipOptions]=\"item.tooltipOptions\"\n                                [ngClass]=\"{'p-disabled':item.disabled}\" (keydown.enter)=\"onItemClick($event, item, i)\" [attr.target]=\"item.target\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')\">\n                                <span class=\"p-dock-action-icon\" *ngIf=\"item.icon && !itemTemplate\" [ngClass]=\"item.icon\"></span>\n                                <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item}\"></ng-container>\n                            </a>\n                        </ng-template>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./dock.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Dock implements AfterContentInit {\n\n    @Input() id: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() model: any[] = null;\n\n    @Input() position: string = \"bottom\";\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    itemTemplate: TemplateRef<any>;\n\n    currentIndex: number;\n\n    constructor(private el: ElementRef, public cd: ChangeDetectorRef) {\n        this.currentIndex = -3;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    onListMouseLeave() {\n        this.currentIndex = -3;\n        this.cd.markForCheck();\n    }\n\n    onItemMouseEnter(index) {\n        this.currentIndex = index;\n\n        if (index === 1) {\n\n        }\n\n        this.cd.markForCheck();\n    }\n\n    onItemClick(e, item) {\n        if (item.command) {\n            item.command({ originalEvent: e, item });\n        }\n    }\n\n    get containerClass() {\n        return {\n            ['p-dock p-component ' + ` p-dock-${this.position}`]: true\n        };\n    }\n\n    isClickableRouterLink(item: any) {\n        return item.routerLink && !item.disabled;\n    }\n\n    itemClass(index) {\n        return {\n            'p-dock-item': true,\n            'p-dock-item-second-prev': (this.currentIndex - 2) === index,\n            'p-dock-item-prev': (this.currentIndex - 1) === index,\n            'p-dock-item-current': this.currentIndex === index,\n            'p-dock-item-next': (this.currentIndex + 1) === index,\n            'p-dock-item-second-next': (this.currentIndex + 2) === index\n        }\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule, RouterModule, RippleModule, TooltipModule],\n    exports: [Dock, SharedModule, TooltipModule, RouterModule],\n    declarations: [Dock]\n})\nexport class DockModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dom.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dom.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dom.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,526 @@
+/**
+ * @dynamic is for runtime initializing DomHandler.browser
+ *
+ * If delete below comment, we can see this error message:
+ *  Metadata collected contains an error that will be reported at runtime:
+ *  Only initialized variables and constants can be referenced
+ *  because the value of this variable is needed by the template compiler.
+ */
+// @dynamic
+class DomHandler {
+    static addClass(element, className) {
+        if (element.classList)
+            element.classList.add(className);
+        else
+            element.className += ' ' + className;
+    }
+    static addMultipleClasses(element, className) {
+        if (element.classList) {
+            let styles = className.trim().split(' ');
+            for (let i = 0; i < styles.length; i++) {
+                element.classList.add(styles[i]);
+            }
+        }
+        else {
+            let styles = className.split(' ');
+            for (let i = 0; i < styles.length; i++) {
+                element.className += ' ' + styles[i];
+            }
+        }
+    }
+    static removeClass(element, className) {
+        if (element.classList)
+            element.classList.remove(className);
+        else
+            element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
+    }
+    static hasClass(element, className) {
+        if (element.classList)
+            return element.classList.contains(className);
+        else
+            return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);
+    }
+    static siblings(element) {
+        return Array.prototype.filter.call(element.parentNode.children, function (child) {
+            return child !== element;
+        });
+    }
+    static find(element, selector) {
+        return Array.from(element.querySelectorAll(selector));
+    }
+    static findSingle(element, selector) {
+        if (element) {
+            return element.querySelector(selector);
+        }
+        return null;
+    }
+    static index(element) {
+        let children = element.parentNode.childNodes;
+        let num = 0;
+        for (var i = 0; i < children.length; i++) {
+            if (children[i] == element)
+                return num;
+            if (children[i].nodeType == 1)
+                num++;
+        }
+        return -1;
+    }
+    static indexWithinGroup(element, attributeName) {
+        let children = element.parentNode ? element.parentNode.childNodes : [];
+        let num = 0;
+        for (var i = 0; i < children.length; i++) {
+            if (children[i] == element)
+                return num;
+            if (children[i].attributes && children[i].attributes[attributeName] && children[i].nodeType == 1)
+                num++;
+        }
+        return -1;
+    }
+    static relativePosition(element, target) {
+        let elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);
+        const targetHeight = target.offsetHeight;
+        const targetOffset = target.getBoundingClientRect();
+        const viewport = this.getViewport();
+        let top, left;
+        if ((targetOffset.top + targetHeight + elementDimensions.height) > viewport.height) {
+            top = -1 * (elementDimensions.height);
+            element.style.transformOrigin = 'bottom';
+            if (targetOffset.top + top < 0) {
+                top = -1 * targetOffset.top;
+            }
+        }
+        else {
+            top = targetHeight;
+            element.style.transformOrigin = 'top';
+        }
+        if (elementDimensions.width > viewport.width) {
+            // element wider then viewport and cannot fit on screen (align at left side of viewport)
+            left = targetOffset.left * -1;
+        }
+        else if ((targetOffset.left + elementDimensions.width) > viewport.width) {
+            // element wider then viewport but can be fit on screen (align at right side of viewport)
+            left = (targetOffset.left + elementDimensions.width - viewport.width) * -1;
+        }
+        else {
+            // element fits on screen (align with target)
+            left = 0;
+        }
+        element.style.top = top + 'px';
+        element.style.left = left + 'px';
+    }
+    static absolutePosition(element, target) {
+        let elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);
+        let elementOuterHeight = elementDimensions.height;
+        let elementOuterWidth = elementDimensions.width;
+        let targetOuterHeight = target.offsetHeight;
+        let targetOuterWidth = target.offsetWidth;
+        let targetOffset = target.getBoundingClientRect();
+        let windowScrollTop = this.getWindowScrollTop();
+        let windowScrollLeft = this.getWindowScrollLeft();
+        let viewport = this.getViewport();
+        let top, left;
+        if (targetOffset.top + targetOuterHeight + elementOuterHeight > viewport.height) {
+            top = targetOffset.top + windowScrollTop - elementOuterHeight;
+            element.style.transformOrigin = 'bottom';
+            if (top < 0) {
+                top = windowScrollTop;
+            }
+        }
+        else {
+            top = targetOuterHeight + targetOffset.top + windowScrollTop;
+            element.style.transformOrigin = 'top';
+        }
+        if (targetOffset.left + elementOuterWidth > viewport.width)
+            left = Math.max(0, targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth);
+        else
+            left = targetOffset.left + windowScrollLeft;
+        element.style.top = top + 'px';
+        element.style.left = left + 'px';
+    }
+    static getParents(element, parents = []) {
+        return element['parentNode'] === null ? parents : this.getParents(element.parentNode, parents.concat([element.parentNode]));
+    }
+    static getScrollableParents(element) {
+        let scrollableParents = [];
+        if (element) {
+            let parents = this.getParents(element);
+            const overflowRegex = /(auto|scroll)/;
+            const overflowCheck = (node) => {
+                let styleDeclaration = window['getComputedStyle'](node, null);
+                return overflowRegex.test(styleDeclaration.getPropertyValue('overflow')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowX')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowY'));
+            };
+            for (let parent of parents) {
+                let scrollSelectors = parent.nodeType === 1 && parent.dataset['scrollselectors'];
+                if (scrollSelectors) {
+                    let selectors = scrollSelectors.split(',');
+                    for (let selector of selectors) {
+                        let el = this.findSingle(parent, selector);
+                        if (el && overflowCheck(el)) {
+                            scrollableParents.push(el);
+                        }
+                    }
+                }
+                if (parent.nodeType !== 9 && overflowCheck(parent)) {
+                    scrollableParents.push(parent);
+                }
+            }
+        }
+        return scrollableParents;
+    }
+    static getHiddenElementOuterHeight(element) {
+        element.style.visibility = 'hidden';
+        element.style.display = 'block';
+        let elementHeight = element.offsetHeight;
+        element.style.display = 'none';
+        element.style.visibility = 'visible';
+        return elementHeight;
+    }
+    static getHiddenElementOuterWidth(element) {
+        element.style.visibility = 'hidden';
+        element.style.display = 'block';
+        let elementWidth = element.offsetWidth;
+        element.style.display = 'none';
+        element.style.visibility = 'visible';
+        return elementWidth;
+    }
+    static getHiddenElementDimensions(element) {
+        let dimensions = {};
+        element.style.visibility = 'hidden';
+        element.style.display = 'block';
+        dimensions.width = element.offsetWidth;
+        dimensions.height = element.offsetHeight;
+        element.style.display = 'none';
+        element.style.visibility = 'visible';
+        return dimensions;
+    }
+    static scrollInView(container, item) {
+        let borderTopValue = getComputedStyle(container).getPropertyValue('borderTopWidth');
+        let borderTop = borderTopValue ? parseFloat(borderTopValue) : 0;
+        let paddingTopValue = getComputedStyle(container).getPropertyValue('paddingTop');
+        let paddingTop = paddingTopValue ? parseFloat(paddingTopValue) : 0;
+        let containerRect = container.getBoundingClientRect();
+        let itemRect = item.getBoundingClientRect();
+        let offset = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;
+        let scroll = container.scrollTop;
+        let elementHeight = container.clientHeight;
+        let itemHeight = this.getOuterHeight(item);
+        if (offset < 0) {
+            container.scrollTop = scroll + offset;
+        }
+        else if ((offset + itemHeight) > elementHeight) {
+            container.scrollTop = scroll + offset - elementHeight + itemHeight;
+        }
+    }
+    static fadeIn(element, duration) {
+        element.style.opacity = 0;
+        let last = +new Date();
+        let opacity = 0;
+        let tick = function () {
+            opacity = +element.style.opacity.replace(",", ".") + (new Date().getTime() - last) / duration;
+            element.style.opacity = opacity;
+            last = +new Date();
+            if (+opacity < 1) {
+                (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
+            }
+        };
+        tick();
+    }
+    static fadeOut(element, ms) {
+        var opacity = 1, interval = 50, duration = ms, gap = interval / duration;
+        let fading = setInterval(() => {
+            opacity = opacity - gap;
+            if (opacity <= 0) {
+                opacity = 0;
+                clearInterval(fading);
+            }
+            element.style.opacity = opacity;
+        }, interval);
+    }
+    static getWindowScrollTop() {
+        let doc = document.documentElement;
+        return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
+    }
+    static getWindowScrollLeft() {
+        let doc = document.documentElement;
+        return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);
+    }
+    static matches(element, selector) {
+        var p = Element.prototype;
+        var f = p['matches'] || p.webkitMatchesSelector || p['mozMatchesSelector'] || p['msMatchesSelector'] || function (s) {
+            return [].indexOf.call(document.querySelectorAll(s), this) !== -1;
+        };
+        return f.call(element, selector);
+    }
+    static getOuterWidth(el, margin) {
+        let width = el.offsetWidth;
+        if (margin) {
+            let style = getComputedStyle(el);
+            width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);
+        }
+        return width;
+    }
+    static getHorizontalPadding(el) {
+        let style = getComputedStyle(el);
+        return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
+    }
+    static getHorizontalMargin(el) {
+        let style = getComputedStyle(el);
+        return parseFloat(style.marginLeft) + parseFloat(style.marginRight);
+    }
+    static innerWidth(el) {
+        let width = el.offsetWidth;
+        let style = getComputedStyle(el);
+        width += parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
+        return width;
+    }
+    static width(el) {
+        let width = el.offsetWidth;
+        let style = getComputedStyle(el);
+        width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
+        return width;
+    }
+    static getInnerHeight(el) {
+        let height = el.offsetHeight;
+        let style = getComputedStyle(el);
+        height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);
+        return height;
+    }
+    static getOuterHeight(el, margin) {
+        let height = el.offsetHeight;
+        if (margin) {
+            let style = getComputedStyle(el);
+            height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);
+        }
+        return height;
+    }
+    static getHeight(el) {
+        let height = el.offsetHeight;
+        let style = getComputedStyle(el);
+        height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
+        return height;
+    }
+    static getWidth(el) {
+        let width = el.offsetWidth;
+        let style = getComputedStyle(el);
+        width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) + parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);
+        return width;
+    }
+    static getViewport() {
+        let win = window, d = document, e = d.documentElement, g = d.getElementsByTagName('body')[0], w = win.innerWidth || e.clientWidth || g.clientWidth, h = win.innerHeight || e.clientHeight || g.clientHeight;
+        return { width: w, height: h };
+    }
+    static getOffset(el) {
+        var rect = el.getBoundingClientRect();
+        return {
+            top: rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0),
+            left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0),
+        };
+    }
+    static replaceElementWith(element, replacementElement) {
+        let parentNode = element.parentNode;
+        if (!parentNode)
+            throw `Can't replace element`;
+        return parentNode.replaceChild(replacementElement, element);
+    }
+    static getUserAgent() {
+        return navigator.userAgent;
+    }
+    static isIE() {
+        var ua = window.navigator.userAgent;
+        var msie = ua.indexOf('MSIE ');
+        if (msie > 0) {
+            // IE 10 or older => return version number
+            return true;
+        }
+        var trident = ua.indexOf('Trident/');
+        if (trident > 0) {
+            // IE 11 => return version number
+            var rv = ua.indexOf('rv:');
+            return true;
+        }
+        var edge = ua.indexOf('Edge/');
+        if (edge > 0) {
+            // Edge (IE 12+) => return version number
+            return true;
+        }
+        // other browser
+        return false;
+    }
+    static isIOS() {
+        return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window['MSStream'];
+    }
+    static isAndroid() {
+        return /(android)/i.test(navigator.userAgent);
+    }
+    static isTouchDevice() {
+        return (('ontouchstart' in window) || (navigator.maxTouchPoints > 0));
+    }
+    static appendChild(element, target) {
+        if (this.isElement(target))
+            target.appendChild(element);
+        else if (target.el && target.el.nativeElement)
+            target.el.nativeElement.appendChild(element);
+        else
+            throw 'Cannot append ' + target + ' to ' + element;
+    }
+    static removeChild(element, target) {
+        if (this.isElement(target))
+            target.removeChild(element);
+        else if (target.el && target.el.nativeElement)
+            target.el.nativeElement.removeChild(element);
+        else
+            throw 'Cannot remove ' + element + ' from ' + target;
+    }
+    static removeElement(element) {
+        if (!('remove' in Element.prototype))
+            element.parentNode.removeChild(element);
+        else
+            element.remove();
+    }
+    static isElement(obj) {
+        return (typeof HTMLElement === "object" ? obj instanceof HTMLElement :
+            obj && typeof obj === "object" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === "string");
+    }
+    static calculateScrollbarWidth(el) {
+        if (el) {
+            let style = getComputedStyle(el);
+            return (el.offsetWidth - el.clientWidth - parseFloat(style.borderLeftWidth) - parseFloat(style.borderRightWidth));
+        }
+        else {
+            if (this.calculatedScrollbarWidth !== null)
+                return this.calculatedScrollbarWidth;
+            let scrollDiv = document.createElement("div");
+            scrollDiv.className = "p-scrollbar-measure";
+            document.body.appendChild(scrollDiv);
+            let scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+            document.body.removeChild(scrollDiv);
+            this.calculatedScrollbarWidth = scrollbarWidth;
+            return scrollbarWidth;
+        }
+    }
+    static calculateScrollbarHeight() {
+        if (this.calculatedScrollbarHeight !== null)
+            return this.calculatedScrollbarHeight;
+        let scrollDiv = document.createElement("div");
+        scrollDiv.className = "p-scrollbar-measure";
+        document.body.appendChild(scrollDiv);
+        let scrollbarHeight = scrollDiv.offsetHeight - scrollDiv.clientHeight;
+        document.body.removeChild(scrollDiv);
+        this.calculatedScrollbarWidth = scrollbarHeight;
+        return scrollbarHeight;
+    }
+    static invokeElementMethod(element, methodName, args) {
+        element[methodName].apply(element, args);
+    }
+    static clearSelection() {
+        if (window.getSelection) {
+            if (window.getSelection().empty) {
+                window.getSelection().empty();
+            }
+            else if (window.getSelection().removeAllRanges && window.getSelection().rangeCount > 0 && window.getSelection().getRangeAt(0).getClientRects().length > 0) {
+                window.getSelection().removeAllRanges();
+            }
+        }
+        else if (document['selection'] && document['selection'].empty) {
+            try {
+                document['selection'].empty();
+            }
+            catch (error) {
+                //ignore IE bug
+            }
+        }
+    }
+    static getBrowser() {
+        if (!this.browser) {
+            let matched = this.resolveUserAgent();
+            this.browser = {};
+            if (matched.browser) {
+                this.browser[matched.browser] = true;
+                this.browser['version'] = matched.version;
+            }
+            if (this.browser['chrome']) {
+                this.browser['webkit'] = true;
+            }
+            else if (this.browser['webkit']) {
+                this.browser['safari'] = true;
+            }
+        }
+        return this.browser;
+    }
+    static resolveUserAgent() {
+        let ua = navigator.userAgent.toLowerCase();
+        let match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+            /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+            /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+            /(msie) ([\w.]+)/.exec(ua) ||
+            ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+            [];
+        return {
+            browser: match[1] || "",
+            version: match[2] || "0"
+        };
+    }
+    static isInteger(value) {
+        if (Number.isInteger) {
+            return Number.isInteger(value);
+        }
+        else {
+            return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
+        }
+    }
+    static isHidden(element) {
+        return element.offsetParent === null;
+    }
+    static getFocusableElements(element) {
+        let focusableElements = DomHandler.find(element, `button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),
+                [href][clientHeight][clientWidth]:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),
+                input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),
+                textarea:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]), [tabIndex]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]),
+                [contenteditable]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden]:not(.p-disabled))`);
+        let visibleFocusableElements = [];
+        for (let focusableElement of focusableElements) {
+            if (getComputedStyle(focusableElement).display != "none" && getComputedStyle(focusableElement).visibility != "hidden")
+                visibleFocusableElements.push(focusableElement);
+        }
+        return visibleFocusableElements;
+    }
+    static generateZIndex() {
+        this.zindex = this.zindex || 999;
+        return ++this.zindex;
+    }
+}
+DomHandler.zindex = 1000;
+DomHandler.calculatedScrollbarWidth = null;
+DomHandler.calculatedScrollbarHeight = null;
+
+class ConnectedOverlayScrollHandler {
+    constructor(element, listener = () => { }) {
+        this.element = element;
+        this.listener = listener;
+    }
+    bindScrollListener() {
+        this.scrollableParents = DomHandler.getScrollableParents(this.element);
+        for (let i = 0; i < this.scrollableParents.length; i++) {
+            this.scrollableParents[i].addEventListener('scroll', this.listener);
+        }
+    }
+    unbindScrollListener() {
+        if (this.scrollableParents) {
+            for (let i = 0; i < this.scrollableParents.length; i++) {
+                this.scrollableParents[i].removeEventListener('scroll', this.listener);
+            }
+        }
+    }
+    destroy() {
+        this.unbindScrollListener();
+        this.element = null;
+        this.listener = null;
+        this.scrollableParents = null;
+    }
+}
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ConnectedOverlayScrollHandler, DomHandler };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dom.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dom.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dom.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-dom.mjs","sources":["../../src/app/components/dom/domhandler.ts","../../src/app/components/dom/connectedoverlayscrollhandler.ts","../../src/app/components/dom/primeng-dom.ts"],"sourcesContent":["/**\n * @dynamic is for runtime initializing DomHandler.browser\n *\n * If delete below comment, we can see this error message:\n *  Metadata collected contains an error that will be reported at runtime:\n *  Only initialized variables and constants can be referenced\n *  because the value of this variable is needed by the template compiler.\n */\n// @dynamic\nexport class DomHandler {\n\n    public static zindex: number = 1000;\n\n    private static calculatedScrollbarWidth: number = null;\n\n    private static calculatedScrollbarHeight: number = null;\n\n    private static browser: any;\n\n    public static addClass(element: any, className: string): void {\n        if (element.classList)\n            element.classList.add(className);\n        else\n            element.className += ' ' + className;\n    }\n\n    public static addMultipleClasses(element: any, className: string): void {\n        if (element.classList) {\n            let styles: string[] = className.trim().split(' ');\n            for (let i = 0; i < styles.length; i++) {\n                element.classList.add(styles[i]);\n            }\n\n        }\n        else {\n            let styles: string[] = className.split(' ');\n            for (let i = 0; i < styles.length; i++) {\n                element.className += ' ' + styles[i];\n            }\n        }\n    }\n\n    public static removeClass(element: any, className: string): void {\n        if (element.classList)\n            element.classList.remove(className);\n        else\n            element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n    }\n\n    public static hasClass(element: any, className: string): boolean {\n        if (element.classList)\n            return element.classList.contains(className);\n        else\n            return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n    }\n\n    public static siblings(element: any): any {\n        return Array.prototype.filter.call(element.parentNode.children, function (child) {\n            return child !== element;\n        });\n    }\n\n    public static find(element: any, selector: string): any[] {\n        return Array.from(element.querySelectorAll(selector));\n    }\n\n    public static findSingle(element: any, selector: string): any {\n        if (element) {\n            return element.querySelector(selector);\n        }\n        return null;\n    }\n\n    public static index(element: any): number {\n        let children = element.parentNode.childNodes;\n        let num = 0;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i] == element) return num;\n            if (children[i].nodeType == 1) num++;\n        }\n        return -1;\n    }\n\n    public static indexWithinGroup(element: any, attributeName: string): number {\n        let children = element.parentNode ? element.parentNode.childNodes : [];\n        let num = 0;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i] == element) return num;\n            if (children[i].attributes && children[i].attributes[attributeName] && children[i].nodeType == 1) num++;\n        }\n        return -1;\n    }\n\n    public static relativePosition(element: any, target: any): void {\n        let elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n        const targetHeight = target.offsetHeight;\n        const targetOffset = target.getBoundingClientRect();\n        const viewport = this.getViewport();\n        let top: number, left: number;\n\n        if ((targetOffset.top + targetHeight + elementDimensions.height) > viewport.height) {\n            top = -1 * (elementDimensions.height);\n            element.style.transformOrigin = 'bottom';\n            if (targetOffset.top + top < 0) {\n                top = -1 * targetOffset.top;\n            }\n        }\n        else {\n            top = targetHeight;\n            element.style.transformOrigin = 'top';\n        }\n\n        if (elementDimensions.width > viewport.width) {\n            // element wider then viewport and cannot fit on screen (align at left side of viewport)\n            left = targetOffset.left * -1;\n        }\n        else if ((targetOffset.left + elementDimensions.width) > viewport.width) {\n            // element wider then viewport but can be fit on screen (align at right side of viewport)\n            left = (targetOffset.left + elementDimensions.width - viewport.width) * -1;\n        }\n        else {\n            // element fits on screen (align with target)\n            left = 0;\n        }\n\n        element.style.top = top + 'px';\n        element.style.left = left + 'px';\n    }\n\n    public static absolutePosition(element: any, target: any): void {\n        let elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n        let elementOuterHeight = elementDimensions.height;\n        let elementOuterWidth = elementDimensions.width;\n        let targetOuterHeight = target.offsetHeight;\n        let targetOuterWidth = target.offsetWidth;\n        let targetOffset = target.getBoundingClientRect();\n        let windowScrollTop = this.getWindowScrollTop();\n        let windowScrollLeft = this.getWindowScrollLeft();\n        let viewport = this.getViewport();\n        let top, left;\n\n        if (targetOffset.top + targetOuterHeight + elementOuterHeight > viewport.height) {\n            top = targetOffset.top + windowScrollTop - elementOuterHeight;\n            element.style.transformOrigin = 'bottom';\n\n            if (top < 0) {\n                top = windowScrollTop;\n            }\n        }\n        else {\n            top = targetOuterHeight + targetOffset.top + windowScrollTop;\n            element.style.transformOrigin = 'top';\n        }\n\n        if (targetOffset.left + elementOuterWidth > viewport.width)\n            left = Math.max(0, targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth);\n        else\n            left = targetOffset.left + windowScrollLeft;\n\n        element.style.top = top + 'px';\n        element.style.left = left + 'px';\n    }\n\n    static getParents(element: any, parents:any = []): any {\n        return element['parentNode'] === null ? parents : this.getParents(element.parentNode, parents.concat([element.parentNode]));\n    }\n\n    static getScrollableParents(element: any) {\n        let scrollableParents = [];\n\n        if (element) {\n            let parents = this.getParents(element);\n            const overflowRegex = /(auto|scroll)/;\n            const overflowCheck = (node: any) => {\n                let styleDeclaration = window['getComputedStyle'](node, null);\n                return overflowRegex.test(styleDeclaration.getPropertyValue('overflow')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowX')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowY'));\n            };\n\n            for (let parent of parents) {\n                let scrollSelectors = parent.nodeType === 1 && parent.dataset['scrollselectors'];\n                if (scrollSelectors) {\n                    let selectors = scrollSelectors.split(',');\n                    for (let selector of selectors) {\n                        let el = this.findSingle(parent, selector);\n                        if (el && overflowCheck(el)) {\n                            scrollableParents.push(el);\n                        }\n                    }\n                }\n\n                if (parent.nodeType !== 9 && overflowCheck(parent)) {\n                    scrollableParents.push(parent);\n                }\n            }\n        }\n\n        return scrollableParents;\n    }\n\n    public static getHiddenElementOuterHeight(element: any): number {\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        let elementHeight = element.offsetHeight;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n\n        return elementHeight;\n    }\n\n    public static getHiddenElementOuterWidth(element: any): number {\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        let elementWidth = element.offsetWidth;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n\n        return elementWidth;\n    }\n\n    public static getHiddenElementDimensions(element: any): any {\n        let dimensions: any = {};\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        dimensions.width = element.offsetWidth;\n        dimensions.height = element.offsetHeight;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n\n        return dimensions;\n    }\n\n    public static scrollInView(container, item) {\n        let borderTopValue: string = getComputedStyle(container).getPropertyValue('borderTopWidth');\n        let borderTop: number = borderTopValue ? parseFloat(borderTopValue) : 0;\n        let paddingTopValue: string = getComputedStyle(container).getPropertyValue('paddingTop');\n        let paddingTop: number = paddingTopValue ? parseFloat(paddingTopValue) : 0;\n        let containerRect = container.getBoundingClientRect();\n        let itemRect = item.getBoundingClientRect();\n        let offset = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;\n        let scroll = container.scrollTop;\n        let elementHeight = container.clientHeight;\n        let itemHeight = this.getOuterHeight(item);\n\n        if (offset < 0) {\n            container.scrollTop = scroll + offset;\n        }\n        else if ((offset + itemHeight) > elementHeight) {\n            container.scrollTop = scroll + offset - elementHeight + itemHeight;\n        }\n    }\n\n    public static fadeIn(element, duration: number): void {\n        element.style.opacity = 0;\n\n        let last = +new Date();\n        let opacity = 0;\n        let tick = function () {\n            opacity = +element.style.opacity.replace(\",\", \".\") + (new Date().getTime() - last) / duration;\n            element.style.opacity = opacity;\n            last = +new Date();\n\n            if (+opacity < 1) {\n                (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n            }\n        };\n\n        tick();\n    }\n\n    public static fadeOut(element, ms) {\n        var opacity = 1,\n            interval = 50,\n            duration = ms,\n            gap = interval / duration;\n\n        let fading = setInterval(() => {\n            opacity = opacity - gap;\n\n            if (opacity <= 0) {\n                opacity = 0;\n                clearInterval(fading);\n            }\n\n            element.style.opacity = opacity;\n        }, interval);\n    }\n\n    public static getWindowScrollTop(): number {\n        let doc = document.documentElement;\n        return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n    }\n\n    public static getWindowScrollLeft(): number {\n        let doc = document.documentElement;\n        return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n    }\n\n    public static matches(element, selector: string): boolean {\n        var p = Element.prototype;\n        var f = p['matches'] || p.webkitMatchesSelector || p['mozMatchesSelector'] || p['msMatchesSelector'] || function (s) {\n            return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n        };\n        return f.call(element, selector);\n    }\n\n    public static getOuterWidth(el, margin?) {\n        let width = el.offsetWidth;\n\n        if (margin) {\n            let style = getComputedStyle(el);\n            width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n        }\n\n        return width;\n    }\n\n    public static getHorizontalPadding(el) {\n        let style = getComputedStyle(el);\n        return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n    }\n\n    public static getHorizontalMargin(el) {\n        let style = getComputedStyle(el);\n        return parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n    }\n\n    public static innerWidth(el) {\n        let width = el.offsetWidth;\n        let style = getComputedStyle(el);\n\n        width += parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n        return width;\n    }\n\n    public static width(el) {\n        let width = el.offsetWidth;\n        let style = getComputedStyle(el);\n\n        width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n        return width;\n    }\n\n    public static getInnerHeight(el) {\n        let height = el.offsetHeight;\n        let style = getComputedStyle(el);\n\n        height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n        return height;\n    }\n\n    public static getOuterHeight(el, margin?) {\n        let height = el.offsetHeight;\n\n        if (margin) {\n            let style = getComputedStyle(el);\n            height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n        }\n\n        return height;\n    }\n\n    public static getHeight(el): number {\n        let height = el.offsetHeight;\n        let style = getComputedStyle(el);\n\n        height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\n        return height;\n    }\n\n    public static getWidth(el): number {\n        let width = el.offsetWidth;\n        let style = getComputedStyle(el);\n\n        width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) + parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);\n\n        return width;\n    }\n\n    public static getViewport(): any {\n        let win = window,\n            d = document,\n            e = d.documentElement,\n            g = d.getElementsByTagName('body')[0],\n            w = win.innerWidth || e.clientWidth || g.clientWidth,\n            h = win.innerHeight || e.clientHeight || g.clientHeight;\n\n        return { width: w, height: h };\n    }\n\n    public static getOffset(el) {\n        var rect = el.getBoundingClientRect();\n\n        return {\n            top: rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0),\n            left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0),\n        };\n    }\n\n    public static replaceElementWith(element: any, replacementElement: any): any {\n        let parentNode = element.parentNode;\n        if (!parentNode)\n            throw `Can't replace element`;\n        return parentNode.replaceChild(replacementElement, element);\n    }\n\n    public static getUserAgent(): string {\n        return navigator.userAgent;\n    }\n\n    public static  isIE() {\n        var ua = window.navigator.userAgent;\n\n        var msie = ua.indexOf('MSIE ');\n        if (msie > 0) {\n            // IE 10 or older => return version number\n            return true;\n        }\n\n        var trident = ua.indexOf('Trident/');\n        if (trident > 0) {\n            // IE 11 => return version number\n            var rv = ua.indexOf('rv:');\n            return true;\n        }\n\n        var edge = ua.indexOf('Edge/');\n        if (edge > 0) {\n           // Edge (IE 12+) => return version number\n           return true;\n        }\n\n        // other browser\n        return false;\n    }\n\n    public static isIOS() {\n        return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window['MSStream'];\n    }\n\n    public static isAndroid() {\n        return /(android)/i.test(navigator.userAgent);\n    }\n\n    public static isTouchDevice() {\n        return (('ontouchstart' in window) || (navigator.maxTouchPoints > 0));\n    }\n\n    public static appendChild(element: any, target: any) {\n        if (this.isElement(target))\n            target.appendChild(element);\n        else if (target.el && target.el.nativeElement)\n            target.el.nativeElement.appendChild(element);\n        else\n            throw 'Cannot append ' + target + ' to ' + element;\n    }\n\n    public static removeChild(element: any, target: any) {\n        if (this.isElement(target))\n            target.removeChild(element);\n        else if (target.el && target.el.nativeElement)\n            target.el.nativeElement.removeChild(element);\n        else\n            throw 'Cannot remove ' + element + ' from ' + target;\n    }\n\n    public static removeElement(element: Element) {\n        if (!('remove' in Element.prototype))\n            element.parentNode.removeChild(element);\n        else\n            element.remove();\n    }\n\n    public static isElement(obj: any) {\n        return (typeof HTMLElement === \"object\" ? obj instanceof HTMLElement :\n            obj && typeof obj === \"object\" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === \"string\"\n        );\n    }\n\n    public static calculateScrollbarWidth(el?: HTMLElement): number {\n        if (el) {\n            let style = getComputedStyle(el);\n            return (el.offsetWidth - el.clientWidth - parseFloat(style.borderLeftWidth) - parseFloat(style.borderRightWidth));\n        }\n        else {\n            if (this.calculatedScrollbarWidth !== null)\n                return this.calculatedScrollbarWidth;\n\n            let scrollDiv = document.createElement(\"div\");\n            scrollDiv.className = \"p-scrollbar-measure\";\n            document.body.appendChild(scrollDiv);\n\n            let scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n            document.body.removeChild(scrollDiv);\n\n            this.calculatedScrollbarWidth = scrollbarWidth;\n\n            return scrollbarWidth;\n        }\n    }\n\n    public static calculateScrollbarHeight(): number {\n        if (this.calculatedScrollbarHeight !== null)\n            return this.calculatedScrollbarHeight;\n\n        let scrollDiv = document.createElement(\"div\");\n        scrollDiv.className = \"p-scrollbar-measure\";\n        document.body.appendChild(scrollDiv);\n\n        let scrollbarHeight = scrollDiv.offsetHeight - scrollDiv.clientHeight;\n        document.body.removeChild(scrollDiv);\n\n        this.calculatedScrollbarWidth = scrollbarHeight;\n\n        return scrollbarHeight;\n    }\n\n    public static invokeElementMethod(element: any, methodName: string, args?: any[]): void {\n        (element as any)[methodName].apply(element, args);\n    }\n\n    public static clearSelection(): void {\n        if (window.getSelection) {\n            if (window.getSelection().empty) {\n                window.getSelection().empty();\n            } else if (window.getSelection().removeAllRanges && window.getSelection().rangeCount > 0 && window.getSelection().getRangeAt(0).getClientRects().length > 0) {\n                window.getSelection().removeAllRanges();\n            }\n        }\n        else if (document['selection'] && document['selection'].empty) {\n            try {\n                document['selection'].empty();\n            } catch(error) {\n                //ignore IE bug\n            }\n        }\n    }\n\n    public static getBrowser() {\n        if (!this.browser) {\n            let matched = this.resolveUserAgent();\n            this.browser = {};\n\n            if (matched.browser) {\n                this.browser[matched.browser] = true;\n                this.browser['version'] = matched.version;\n            }\n\n            if (this.browser['chrome']) {\n                this.browser['webkit'] = true;\n            } else if (this.browser['webkit']) {\n                this.browser['safari'] = true;\n            }\n        }\n\n        return this.browser;\n    }\n\n    public static resolveUserAgent() {\n        let ua = navigator.userAgent.toLowerCase();\n        let match = /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(msie) ([\\w.]+)/.exec(ua) ||\n            ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) ||\n            [];\n\n        return {\n            browser: match[1] || \"\",\n            version: match[2] || \"0\"\n        };\n    }\n\n    public static isInteger(value): boolean {\n        if (Number.isInteger) {\n            return Number.isInteger(value);\n        }\n        else {\n            return typeof value === \"number\" && isFinite(value) &&  Math.floor(value) === value;\n        }\n    }\n\n    public static isHidden(element: HTMLElement): boolean {\n        return element.offsetParent === null;\n    }\n\n    public static getFocusableElements(element:HTMLElement) {\n        let focusableElements = DomHandler.find(element,`button:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]),\n                [href][clientHeight][clientWidth]:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]),\n                input:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]), select:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]),\n                textarea:not([tabindex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]), [tabIndex]:not([tabIndex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]),\n                [contenteditable]:not([tabIndex = \"-1\"]):not([disabled]):not([style*=\"display:none\"]):not([hidden]:not(.p-disabled))`\n            );\n\n            let visibleFocusableElements = [];\n            for(let focusableElement of focusableElements) {\n                if (getComputedStyle(focusableElement).display != \"none\" && getComputedStyle(focusableElement).visibility != \"hidden\")\n                    visibleFocusableElements.push(focusableElement);\n            }\n        return visibleFocusableElements;\n    }\n\n    static generateZIndex() {\n        this.zindex = this.zindex||999;\n        return ++this.zindex;\n    }\n}\n","import {DomHandler} from './domhandler';\n\nexport class ConnectedOverlayScrollHandler {\n\n    element: any;\n\n    listener: any;\n\n    scrollableParents: any;\n\n    constructor(element: any, listener: any = () => {}) {\n        this.element = element;\n        this.listener = listener;\n    }\n\n    bindScrollListener() {\n        this.scrollableParents = DomHandler.getScrollableParents(this.element);\n        for (let i = 0; i < this.scrollableParents.length; i++) {\n            this.scrollableParents[i].addEventListener('scroll', this.listener);\n        }\n    }\n\n    unbindScrollListener() {\n        if (this.scrollableParents) {\n            for (let i = 0; i < this.scrollableParents.length; i++) {\n                this.scrollableParents[i].removeEventListener('scroll', this.listener);\n            }\n        }\n    }\n\n    destroy() {\n        this.unbindScrollListener();\n        this.element = null;\n        this.listener = null;\n        this.scrollableParents = null;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dragdrop.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dragdrop.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dragdrop.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,259 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Directive, Input, Output, HostListener, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+
+class Draggable {
+    constructor(el, zone) {
+        this.el = el;
+        this.zone = zone;
+        this.onDragStart = new EventEmitter();
+        this.onDragEnd = new EventEmitter();
+        this.onDrag = new EventEmitter();
+    }
+    get pDraggableDisabled() {
+        return this._pDraggableDisabled;
+    }
+    set pDraggableDisabled(_pDraggableDisabled) {
+        this._pDraggableDisabled = _pDraggableDisabled;
+        if (this._pDraggableDisabled) {
+            this.unbindMouseListeners();
+        }
+        else {
+            this.el.nativeElement.draggable = true;
+            this.bindMouseListeners();
+        }
+    }
+    ngAfterViewInit() {
+        if (!this.pDraggableDisabled) {
+            this.el.nativeElement.draggable = true;
+            this.bindMouseListeners();
+        }
+    }
+    bindDragListener() {
+        if (!this.dragListener) {
+            this.zone.runOutsideAngular(() => {
+                this.dragListener = this.drag.bind(this);
+                this.el.nativeElement.addEventListener('drag', this.dragListener);
+            });
+        }
+    }
+    unbindDragListener() {
+        if (this.dragListener) {
+            this.zone.runOutsideAngular(() => {
+                this.el.nativeElement.removeEventListener('drag', this.dragListener);
+                this.dragListener = null;
+            });
+        }
+    }
+    bindMouseListeners() {
+        if (!this.mouseDownListener && !this.mouseUpListener) {
+            this.zone.runOutsideAngular(() => {
+                this.mouseDownListener = this.mousedown.bind(this);
+                this.mouseUpListener = this.mouseup.bind(this);
+                this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);
+                this.el.nativeElement.addEventListener('mouseup', this.mouseUpListener);
+            });
+        }
+    }
+    unbindMouseListeners() {
+        if (this.mouseDownListener && this.mouseUpListener) {
+            this.zone.runOutsideAngular(() => {
+                this.el.nativeElement.removeEventListener('mousedown', this.mouseDownListener);
+                this.el.nativeElement.removeEventListener('mouseup', this.mouseUpListener);
+                this.mouseDownListener = null;
+                this.mouseUpListener = null;
+            });
+        }
+    }
+    drag(event) {
+        this.onDrag.emit(event);
+    }
+    dragStart(event) {
+        if (this.allowDrag() && !this.pDraggableDisabled) {
+            if (this.dragEffect) {
+                event.dataTransfer.effectAllowed = this.dragEffect;
+            }
+            event.dataTransfer.setData('text', this.scope);
+            this.onDragStart.emit(event);
+            this.bindDragListener();
+        }
+        else {
+            event.preventDefault();
+        }
+    }
+    dragEnd(event) {
+        this.onDragEnd.emit(event);
+        this.unbindDragListener();
+    }
+    mousedown(event) {
+        this.handle = event.target;
+    }
+    mouseup(event) {
+        this.handle = null;
+    }
+    allowDrag() {
+        if (this.dragHandle && this.handle)
+            return DomHandler.matches(this.handle, this.dragHandle);
+        else
+            return true;
+    }
+    ngOnDestroy() {
+        this.unbindDragListener();
+        this.unbindMouseListeners();
+    }
+}
+Draggable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Draggable, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+Draggable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: Draggable, selector: "[pDraggable]", inputs: { scope: ["pDraggable", "scope"], dragEffect: "dragEffect", dragHandle: "dragHandle", pDraggableDisabled: "pDraggableDisabled" }, outputs: { onDragStart: "onDragStart", onDragEnd: "onDragEnd", onDrag: "onDrag" }, host: { listeners: { "dragstart": "dragStart($event)", "dragend": "dragEnd($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Draggable, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pDraggable]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { scope: [{
+                type: Input,
+                args: ['pDraggable']
+            }], dragEffect: [{
+                type: Input
+            }], dragHandle: [{
+                type: Input
+            }], onDragStart: [{
+                type: Output
+            }], onDragEnd: [{
+                type: Output
+            }], onDrag: [{
+                type: Output
+            }], pDraggableDisabled: [{
+                type: Input
+            }], dragStart: [{
+                type: HostListener,
+                args: ['dragstart', ['$event']]
+            }], dragEnd: [{
+                type: HostListener,
+                args: ['dragend', ['$event']]
+            }] } });
+class Droppable {
+    constructor(el, zone) {
+        this.el = el;
+        this.zone = zone;
+        this.onDragEnter = new EventEmitter();
+        this.onDragLeave = new EventEmitter();
+        this.onDrop = new EventEmitter();
+    }
+    ngAfterViewInit() {
+        if (!this.pDroppableDisabled) {
+            this.bindDragOverListener();
+        }
+    }
+    bindDragOverListener() {
+        if (!this.dragOverListener) {
+            this.zone.runOutsideAngular(() => {
+                this.dragOverListener = this.dragOver.bind(this);
+                this.el.nativeElement.addEventListener('dragover', this.dragOverListener);
+            });
+        }
+    }
+    unbindDragOverListener() {
+        if (this.dragOverListener) {
+            this.zone.runOutsideAngular(() => {
+                this.el.nativeElement.removeEventListener('dragover', this.dragOverListener);
+                this.dragOverListener = null;
+            });
+        }
+    }
+    dragOver(event) {
+        event.preventDefault();
+    }
+    drop(event) {
+        if (this.allowDrop(event)) {
+            DomHandler.removeClass(this.el.nativeElement, 'p-draggable-enter');
+            event.preventDefault();
+            this.onDrop.emit(event);
+        }
+    }
+    dragEnter(event) {
+        event.preventDefault();
+        if (this.dropEffect) {
+            event.dataTransfer.dropEffect = this.dropEffect;
+        }
+        DomHandler.addClass(this.el.nativeElement, 'p-draggable-enter');
+        this.onDragEnter.emit(event);
+    }
+    dragLeave(event) {
+        event.preventDefault();
+        DomHandler.removeClass(this.el.nativeElement, 'p-draggable-enter');
+        this.onDragLeave.emit(event);
+    }
+    allowDrop(event) {
+        let dragScope = event.dataTransfer.getData('text');
+        if (typeof (this.scope) == "string" && dragScope == this.scope) {
+            return true;
+        }
+        else if (this.scope instanceof Array) {
+            for (let j = 0; j < this.scope.length; j++) {
+                if (dragScope == this.scope[j]) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    ngOnDestroy() {
+        this.unbindDragOverListener();
+    }
+}
+Droppable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Droppable, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+Droppable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: Droppable, selector: "[pDroppable]", inputs: { scope: ["pDroppable", "scope"], pDroppableDisabled: "pDroppableDisabled", dropEffect: "dropEffect" }, outputs: { onDragEnter: "onDragEnter", onDragLeave: "onDragLeave", onDrop: "onDrop" }, host: { listeners: { "drop": "drop($event)", "dragenter": "dragEnter($event)", "dragleave": "dragLeave($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Droppable, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pDroppable]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { scope: [{
+                type: Input,
+                args: ['pDroppable']
+            }], pDroppableDisabled: [{
+                type: Input
+            }], dropEffect: [{
+                type: Input
+            }], onDragEnter: [{
+                type: Output
+            }], onDragLeave: [{
+                type: Output
+            }], onDrop: [{
+                type: Output
+            }], drop: [{
+                type: HostListener,
+                args: ['drop', ['$event']]
+            }], dragEnter: [{
+                type: HostListener,
+                args: ['dragenter', ['$event']]
+            }], dragLeave: [{
+                type: HostListener,
+                args: ['dragleave', ['$event']]
+            }] } });
+class DragDropModule {
+}
+DragDropModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+DragDropModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DragDropModule, declarations: [Draggable, Droppable], imports: [CommonModule], exports: [Draggable, Droppable] });
+DragDropModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DragDropModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DragDropModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Draggable, Droppable],
+                    declarations: [Draggable, Droppable]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { DragDropModule, Draggable, Droppable };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dragdrop.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dragdrop.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dragdrop.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-dragdrop.mjs","sources":["../../src/app/components/dragdrop/dragdrop.ts","../../src/app/components/dragdrop/primeng-dragdrop.ts"],"sourcesContent":["import {NgModule,Directive,OnDestroy,AfterViewInit,ElementRef,HostListener,Input,Output,EventEmitter,NgZone} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\n\n@Directive({\n    selector: '[pDraggable]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Draggable implements AfterViewInit, OnDestroy {\n\n    @Input('pDraggable') scope: string;\n\n    @Input() dragEffect: string;\n\n    @Input() dragHandle: string;\n\n    @Output() onDragStart: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDragEnd: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDrag: EventEmitter<any> = new EventEmitter();\n\n    handle: any;\n\n    dragListener: any;\n\n    mouseDownListener: any;\n\n    mouseUpListener: any;\n\n    _pDraggableDisabled: boolean;\n\n    constructor(public el: ElementRef, public zone: NgZone) {}\n\n    @Input() get pDraggableDisabled(): boolean {\n        return this._pDraggableDisabled;\n    }\n    set pDraggableDisabled(_pDraggableDisabled:boolean) {\n        this._pDraggableDisabled = _pDraggableDisabled;\n\n        if (this._pDraggableDisabled) {\n            this.unbindMouseListeners();\n        }\n        else {\n            this.el.nativeElement.draggable = true;\n            this.bindMouseListeners();\n        }\n    }\n\n    ngAfterViewInit() {\n        if (!this.pDraggableDisabled) {\n            this.el.nativeElement.draggable = true;\n            this.bindMouseListeners();\n        }\n    }\n\n    bindDragListener() {\n        if (!this.dragListener) {\n            this.zone.runOutsideAngular(() => {\n                this.dragListener = this.drag.bind(this);\n                this.el.nativeElement.addEventListener('drag', this.dragListener);\n            });\n        }\n    }\n\n    unbindDragListener() {\n        if (this.dragListener) {\n            this.zone.runOutsideAngular(() => {\n                this.el.nativeElement.removeEventListener('drag', this.dragListener);\n                this.dragListener = null;\n            });\n        }\n    }\n\n    bindMouseListeners() {\n        if (!this.mouseDownListener && !this.mouseUpListener) {\n            this.zone.runOutsideAngular(() => {\n                this.mouseDownListener = this.mousedown.bind(this);\n                this.mouseUpListener = this.mouseup.bind(this);\n                this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n                this.el.nativeElement.addEventListener('mouseup', this.mouseUpListener);\n            });\n        }\n    }\n\n    unbindMouseListeners() {\n        if (this.mouseDownListener && this.mouseUpListener) {\n            this.zone.runOutsideAngular(() => {\n                this.el.nativeElement.removeEventListener('mousedown', this.mouseDownListener);\n                this.el.nativeElement.removeEventListener('mouseup', this.mouseUpListener);\n                this.mouseDownListener = null;\n                this.mouseUpListener = null;\n            });\n        }\n    }\n\n    drag(event) {\n        this.onDrag.emit(event);\n    }\n\n    @HostListener('dragstart', ['$event'])\n    dragStart(event) {\n        if (this.allowDrag() && !this.pDraggableDisabled) {\n            if (this.dragEffect) {\n                event.dataTransfer.effectAllowed = this.dragEffect;\n            }\n            event.dataTransfer.setData('text', this.scope);\n\n            this.onDragStart.emit(event);\n\n            this.bindDragListener();\n        }\n        else {\n            event.preventDefault();\n        }\n    }\n\n    @HostListener('dragend', ['$event'])\n    dragEnd(event) {\n        this.onDragEnd.emit(event);\n        this.unbindDragListener();\n    }\n\n    mousedown(event) {\n        this.handle = event.target;\n    }\n\n    mouseup(event) {\n        this.handle = null;\n    }\n\n    allowDrag() : boolean {\n        if (this.dragHandle && this.handle)\n            return DomHandler.matches(this.handle, this.dragHandle);\n        else\n            return true;\n    }\n\n    ngOnDestroy() {\n        this.unbindDragListener();\n        this.unbindMouseListeners();\n    }\n\n}\n\n@Directive({\n    selector: '[pDroppable]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Droppable implements AfterViewInit, OnDestroy {\n\n    @Input('pDroppable') scope: string|string[];\n\n    @Input() pDroppableDisabled: boolean;\n\n    @Input() dropEffect: string;\n\n    @Output() onDragEnter: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDragLeave: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDrop: EventEmitter<any> = new EventEmitter();\n\n    constructor(public el: ElementRef, public zone: NgZone) {}\n\n    dragOverListener: any;\n\n    ngAfterViewInit() {\n        if (!this.pDroppableDisabled) {\n            this.bindDragOverListener();\n        }\n    }\n\n    bindDragOverListener() {\n        if (!this.dragOverListener) {\n            this.zone.runOutsideAngular(() => {\n                this.dragOverListener = this.dragOver.bind(this);\n                this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n            });\n        }\n    }\n\n    unbindDragOverListener() {\n        if (this.dragOverListener) {\n            this.zone.runOutsideAngular(() => {\n                this.el.nativeElement.removeEventListener('dragover', this.dragOverListener);\n                this.dragOverListener = null;\n            });\n        }\n    }\n\n    dragOver(event) {\n        event.preventDefault();\n    }\n\n    @HostListener('drop', ['$event'])\n    drop(event) {\n        if (this.allowDrop(event)) {\n            DomHandler.removeClass(this.el.nativeElement, 'p-draggable-enter');\n            event.preventDefault();\n            this.onDrop.emit(event);\n        }\n    }\n\n    @HostListener('dragenter', ['$event'])\n    dragEnter(event) {\n        event.preventDefault();\n\n        if (this.dropEffect) {\n            event.dataTransfer.dropEffect = this.dropEffect;\n        }\n\n        DomHandler.addClass(this.el.nativeElement, 'p-draggable-enter');\n        this.onDragEnter.emit(event);\n    }\n\n    @HostListener('dragleave', ['$event'])\n    dragLeave(event) {\n        event.preventDefault();\n\n        DomHandler.removeClass(this.el.nativeElement, 'p-draggable-enter');\n        this.onDragLeave.emit(event);\n    }\n\n    allowDrop(event): boolean {\n        let dragScope = event.dataTransfer.getData('text');\n        if (typeof (this.scope) == \"string\" && dragScope == this.scope) {\n            return true;\n        }\n        else if (this.scope instanceof Array) {\n            for(let j = 0; j < this.scope.length; j++) {\n                if (dragScope == this.scope[j]) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    ngOnDestroy() {\n        this.unbindDragOverListener();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Draggable,Droppable],\n    declarations: [Draggable,Droppable]\n})\nexport class DragDropModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dropdown.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dropdown.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dropdown.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1207 @@
+import * as i4 from '@angular/cdk/scrolling';
+import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, Input, Output, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import { trigger, transition, style, animate } from '@angular/animations';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/api';
+import { TranslationKeys, PrimeTemplate, SharedModule } from 'primeng/api';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import { UniqueComponentId, ObjectUtils, ZIndexUtils } from 'primeng/utils';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import * as i5 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+import * as i1 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+
+const DROPDOWN_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Dropdown),
+    multi: true
+};
+class DropdownItem {
+    constructor() {
+        this.onClick = new EventEmitter();
+    }
+    onOptionClick(event) {
+        this.onClick.emit({
+            originalEvent: event,
+            option: this.option
+        });
+    }
+}
+DropdownItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DropdownItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
+DropdownItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: DropdownItem, selector: "p-dropdownItem", inputs: { option: "option", selected: "selected", label: "label", disabled: "disabled", visible: "visible", itemSize: "itemSize", template: "template" }, outputs: { onClick: "onClick" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <li (click)="onOptionClick($event)" role="option" pRipple
+            [attr.aria-label]="label" [attr.aria-selected]="selected"
+            [ngStyle]="{'height': itemSize + 'px'}" [id]="selected ? 'p-highlighted-option':''"
+            [ngClass]="{'p-dropdown-item':true, 'p-highlight': selected, 'p-disabled': disabled}">
+            <span *ngIf="!template">{{label||'empty'}}</span>
+            <ng-container *ngTemplateOutlet="template; context: {$implicit: option}"></ng-container>
+        </li>
+    `, isInline: true, directives: [{ type: i1.Ripple, selector: "[pRipple]" }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DropdownItem, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-dropdownItem',
+                    template: `
+        <li (click)="onOptionClick($event)" role="option" pRipple
+            [attr.aria-label]="label" [attr.aria-selected]="selected"
+            [ngStyle]="{'height': itemSize + 'px'}" [id]="selected ? 'p-highlighted-option':''"
+            [ngClass]="{'p-dropdown-item':true, 'p-highlight': selected, 'p-disabled': disabled}">
+            <span *ngIf="!template">{{label||'empty'}}</span>
+            <ng-container *ngTemplateOutlet="template; context: {$implicit: option}"></ng-container>
+        </li>
+    `,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], propDecorators: { option: [{
+                type: Input
+            }], selected: [{
+                type: Input
+            }], label: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], visible: [{
+                type: Input
+            }], itemSize: [{
+                type: Input
+            }], template: [{
+                type: Input
+            }], onClick: [{
+                type: Output
+            }] } });
+class Dropdown {
+    constructor(el, renderer, cd, zone, filterService, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.zone = zone;
+        this.filterService = filterService;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.scrollHeight = '200px';
+        this.resetFilterOnHide = false;
+        this.dropdownIcon = 'pi pi-chevron-down';
+        this.optionGroupChildren = "items";
+        this.autoDisplayFirst = true;
+        this.emptyFilterMessage = '';
+        this.emptyMessage = '';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.filterMatchMode = "contains";
+        this.tooltip = '';
+        this.tooltipPosition = 'right';
+        this.tooltipPositionStyle = 'absolute';
+        this.autofocusFilter = true;
+        this.onChange = new EventEmitter();
+        this.onFilter = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.onClick = new EventEmitter();
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.onClear = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+        this.viewPortOffsetTop = 0;
+        this.id = UniqueComponentId();
+    }
+    get disabled() {
+        return this._disabled;
+    }
+    ;
+    set disabled(_disabled) {
+        if (_disabled) {
+            this.focused = false;
+            if (this.overlayVisible)
+                this.hide();
+        }
+        this._disabled = _disabled;
+        if (!this.cd.destroyed) {
+            this.cd.detectChanges();
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                case 'selectedItem':
+                    this.selectedItemTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                case 'emptyfilter':
+                    this.emptyFilterTemplate = item.template;
+                    break;
+                case 'empty':
+                    this.emptyTemplate = item.template;
+                    break;
+                case 'group':
+                    this.groupTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngOnInit() {
+        this.optionsToDisplay = this.options;
+        this.updateSelectedOption(null);
+        this.labelId = this.id + '_label';
+        this.listId = this.id + '_list';
+    }
+    get options() {
+        return this._options;
+    }
+    set options(val) {
+        this._options = val;
+        this.optionsToDisplay = this._options;
+        this.updateSelectedOption(this.value);
+        this.optionsChanged = true;
+        if (this._filterValue && this._filterValue.length) {
+            this.activateFilter();
+        }
+    }
+    get filterValue() {
+        return this._filterValue;
+    }
+    set filterValue(val) {
+        this._filterValue = val;
+        this.activateFilter();
+    }
+    ngAfterViewInit() {
+        if (this.editable) {
+            this.updateEditableLabel();
+        }
+    }
+    get label() {
+        return this.selectedOption ? this.getOptionLabel(this.selectedOption) : null;
+    }
+    get emptyMessageLabel() {
+        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
+    }
+    get emptyFilterMessageLabel() {
+        return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);
+    }
+    get filled() {
+        return this.value || this.value != null || this.value != undefined;
+    }
+    updateEditableLabel() {
+        if (this.editableInputViewChild && this.editableInputViewChild.nativeElement) {
+            this.editableInputViewChild.nativeElement.value = (this.selectedOption ? this.getOptionLabel(this.selectedOption) : this.value || '');
+        }
+    }
+    getOptionLabel(option) {
+        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);
+    }
+    getOptionValue(option) {
+        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);
+    }
+    isOptionDisabled(option) {
+        return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);
+    }
+    getOptionGroupLabel(optionGroup) {
+        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);
+    }
+    getOptionGroupChildren(optionGroup) {
+        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;
+    }
+    onItemClick(event) {
+        const option = event.option;
+        if (!this.isOptionDisabled(option)) {
+            this.selectItem(event, option);
+            this.accessibleViewChild.nativeElement.focus();
+        }
+        setTimeout(() => {
+            this.hide();
+        }, 150);
+    }
+    selectItem(event, option) {
+        if (this.selectedOption != option) {
+            this.selectedOption = option;
+            this.value = this.getOptionValue(option);
+            this.onModelChange(this.value);
+            this.updateEditableLabel();
+            this.onChange.emit({
+                originalEvent: event.originalEvent,
+                value: this.value
+            });
+            if (this.virtualScroll) {
+                setTimeout(() => {
+                    this.viewPortOffsetTop = this.viewPort ? this.viewPort.measureScrollOffset() : 0;
+                }, 1);
+            }
+        }
+    }
+    ngAfterViewChecked() {
+        if (this.optionsChanged && this.overlayVisible) {
+            this.optionsChanged = false;
+            if (this.virtualScroll) {
+                this.updateVirtualScrollSelectedIndex(true);
+            }
+            this.zone.runOutsideAngular(() => {
+                setTimeout(() => {
+                    this.alignOverlay();
+                }, 1);
+            });
+        }
+        if (this.selectedOptionUpdated && this.itemsWrapper) {
+            if (this.virtualScroll && this.viewPort) {
+                let range = this.viewPort.getRenderedRange();
+                this.updateVirtualScrollSelectedIndex(false);
+                if (range.start > this.virtualScrollSelectedIndex || range.end < this.virtualScrollSelectedIndex) {
+                    this.viewPort.scrollToIndex(this.virtualScrollSelectedIndex);
+                }
+            }
+            let selectedItem = DomHandler.findSingle(this.overlay, 'li.p-highlight');
+            if (selectedItem) {
+                DomHandler.scrollInView(this.itemsWrapper, DomHandler.findSingle(this.overlay, 'li.p-highlight'));
+            }
+            this.selectedOptionUpdated = false;
+        }
+    }
+    writeValue(value) {
+        if (this.filter) {
+            this.resetFilter();
+        }
+        this.value = value;
+        this.updateSelectedOption(value);
+        this.updateEditableLabel();
+        this.cd.markForCheck();
+    }
+    resetFilter() {
+        this._filterValue = null;
+        if (this.filterViewChild && this.filterViewChild.nativeElement) {
+            this.filterViewChild.nativeElement.value = '';
+        }
+        this.optionsToDisplay = this.options;
+    }
+    updateSelectedOption(val) {
+        this.selectedOption = this.findOption(val, this.optionsToDisplay);
+        if (this.autoDisplayFirst && !this.placeholder && !this.selectedOption && this.optionsToDisplay && this.optionsToDisplay.length && !this.editable) {
+            this.selectedOption = this.optionsToDisplay[0];
+            this.value = this.getOptionValue(this.selectedOption);
+            this.onModelChange(this.value);
+        }
+        this.selectedOptionUpdated = true;
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    onMouseclick(event) {
+        if (this.disabled || this.readonly || this.isInputClick(event)) {
+            return;
+        }
+        this.onClick.emit(event);
+        this.accessibleViewChild.nativeElement.focus();
+        if (this.overlayVisible)
+            this.hide();
+        else
+            this.show();
+        this.cd.detectChanges();
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+    }
+    isInputClick(event) {
+        return DomHandler.hasClass(event.target, 'p-dropdown-clear-icon') ||
+            event.target.isSameNode(this.accessibleViewChild.nativeElement) ||
+            (this.editableInputViewChild && event.target.isSameNode(this.editableInputViewChild.nativeElement));
+    }
+    isOutsideClicked(event) {
+        return !(this.el.nativeElement.isSameNode(event.target) || this.el.nativeElement.contains(event.target) || (this.overlay && this.overlay.contains(event.target)));
+    }
+    isEmpty() {
+        return !this.optionsToDisplay || (this.optionsToDisplay && this.optionsToDisplay.length === 0);
+    }
+    onEditableInputClick() {
+        this.bindDocumentClickListener();
+    }
+    onEditableInputFocus(event) {
+        this.focused = true;
+        this.hide();
+        this.onFocus.emit(event);
+    }
+    onEditableInputChange(event) {
+        this.value = event.target.value;
+        this.updateSelectedOption(this.value);
+        this.onModelChange(this.value);
+        this.onChange.emit({
+            originalEvent: event,
+            value: this.value
+        });
+    }
+    show() {
+        this.overlayVisible = true;
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.overlay = event.element;
+                let itemsWrapperSelector = this.virtualScroll ? '.cdk-virtual-scroll-viewport' : '.p-dropdown-items-wrapper';
+                this.itemsWrapper = DomHandler.findSingle(this.overlay, itemsWrapperSelector);
+                this.appendOverlay();
+                if (this.autoZIndex) {
+                    ZIndexUtils.set('overlay', this.overlay, this.baseZIndex + this.config.zIndex.overlay);
+                }
+                this.alignOverlay();
+                this.bindDocumentClickListener();
+                this.bindDocumentResizeListener();
+                this.bindScrollListener();
+                if (this.options && this.options.length) {
+                    if (!this.virtualScroll) {
+                        let selectedListItem = DomHandler.findSingle(this.itemsWrapper, '.p-dropdown-item.p-highlight');
+                        if (selectedListItem) {
+                            selectedListItem.scrollIntoView({ block: 'nearest', inline: 'start' });
+                        }
+                    }
+                }
+                if (this.filterViewChild && this.filterViewChild.nativeElement) {
+                    this.preventModelTouched = true;
+                    if (this.autofocusFilter) {
+                        this.filterViewChild.nativeElement.focus();
+                    }
+                }
+                this.onShow.emit(event);
+                break;
+            case 'void':
+                this.onOverlayHide();
+                this.onHide.emit(event);
+                break;
+        }
+    }
+    onOverlayAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                ZIndexUtils.clear(event.element);
+                break;
+        }
+    }
+    scrollToSelectedVirtualScrollElement() {
+        if (!this.virtualAutoScrolled) {
+            if (this.viewPortOffsetTop) {
+                this.viewPort.scrollToOffset(this.viewPortOffsetTop);
+            }
+            else if (this.virtualScrollSelectedIndex > -1) {
+                this.viewPort.scrollToIndex(this.virtualScrollSelectedIndex);
+            }
+        }
+        this.virtualAutoScrolled = true;
+    }
+    updateVirtualScrollSelectedIndex(resetOffset) {
+        if (this.selectedOption && this.optionsToDisplay && this.optionsToDisplay.length) {
+            if (resetOffset) {
+                this.viewPortOffsetTop = 0;
+            }
+            this.virtualScrollSelectedIndex = this.findOptionIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay);
+        }
+    }
+    appendOverlay() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.overlay);
+            else
+                DomHandler.appendChild(this.overlay, this.appendTo);
+            if (!this.overlay.style.minWidth) {
+                this.overlay.style.minWidth = DomHandler.getWidth(this.containerViewChild.nativeElement) + 'px';
+            }
+        }
+    }
+    restoreOverlayAppend() {
+        if (this.overlay && this.appendTo) {
+            this.el.nativeElement.appendChild(this.overlay);
+        }
+    }
+    hide() {
+        this.overlayVisible = false;
+        if (this.filter && this.resetFilterOnHide) {
+            this.resetFilter();
+        }
+        if (this.virtualScroll) {
+            this.virtualAutoScrolled = false;
+        }
+        this.cd.markForCheck();
+    }
+    alignOverlay() {
+        if (this.overlay) {
+            if (this.appendTo)
+                DomHandler.absolutePosition(this.overlay, this.containerViewChild.nativeElement);
+            else
+                DomHandler.relativePosition(this.overlay, this.containerViewChild.nativeElement);
+        }
+    }
+    onInputFocus(event) {
+        this.focused = true;
+        this.onFocus.emit(event);
+    }
+    onInputBlur(event) {
+        this.focused = false;
+        this.onBlur.emit(event);
+        if (!this.preventModelTouched) {
+            this.onModelTouched();
+        }
+        this.preventModelTouched = false;
+    }
+    findPrevEnabledOption(index) {
+        let prevEnabledOption;
+        if (this.optionsToDisplay && this.optionsToDisplay.length) {
+            for (let i = (index - 1); 0 <= i; i--) {
+                let option = this.optionsToDisplay[i];
+                if (option.disabled) {
+                    continue;
+                }
+                else {
+                    prevEnabledOption = option;
+                    break;
+                }
+            }
+            if (!prevEnabledOption) {
+                for (let i = this.optionsToDisplay.length - 1; i >= index; i--) {
+                    let option = this.optionsToDisplay[i];
+                    if (this.isOptionDisabled(option)) {
+                        continue;
+                    }
+                    else {
+                        prevEnabledOption = option;
+                        break;
+                    }
+                }
+            }
+        }
+        return prevEnabledOption;
+    }
+    findNextEnabledOption(index) {
+        let nextEnabledOption;
+        if (this.optionsToDisplay && this.optionsToDisplay.length) {
+            for (let i = (index + 1); i < this.optionsToDisplay.length; i++) {
+                let option = this.optionsToDisplay[i];
+                if (this.isOptionDisabled(option)) {
+                    continue;
+                }
+                else {
+                    nextEnabledOption = option;
+                    break;
+                }
+            }
+            if (!nextEnabledOption) {
+                for (let i = 0; i < index; i++) {
+                    let option = this.optionsToDisplay[i];
+                    if (this.isOptionDisabled(option)) {
+                        continue;
+                    }
+                    else {
+                        nextEnabledOption = option;
+                        break;
+                    }
+                }
+            }
+        }
+        return nextEnabledOption;
+    }
+    onKeydown(event, search) {
+        if (this.readonly || !this.optionsToDisplay || this.optionsToDisplay.length === null) {
+            return;
+        }
+        switch (event.which) {
+            //down
+            case 40:
+                if (!this.overlayVisible && event.altKey) {
+                    this.show();
+                }
+                else {
+                    if (this.group) {
+                        let selectedItemIndex = this.selectedOption ? this.findOptionGroupIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;
+                        if (selectedItemIndex !== -1) {
+                            let nextItemIndex = selectedItemIndex.itemIndex + 1;
+                            if (nextItemIndex < (this.getOptionGroupChildren(this.optionsToDisplay[selectedItemIndex.groupIndex]).length)) {
+                                this.selectItem(event, this.getOptionGroupChildren(this.optionsToDisplay[selectedItemIndex.groupIndex])[nextItemIndex]);
+                                this.selectedOptionUpdated = true;
+                            }
+                            else if (this.optionsToDisplay[selectedItemIndex.groupIndex + 1]) {
+                                this.selectItem(event, this.getOptionGroupChildren(this.optionsToDisplay[selectedItemIndex.groupIndex + 1])[0]);
+                                this.selectedOptionUpdated = true;
+                            }
+                        }
+                        else {
+                            if (this.optionsToDisplay && this.optionsToDisplay.length > 0) {
+                                this.selectItem(event, this.getOptionGroupChildren(this.optionsToDisplay[0])[0]);
+                            }
+                        }
+                    }
+                    else {
+                        let selectedItemIndex = this.selectedOption ? this.findOptionIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;
+                        let nextEnabledOption = this.findNextEnabledOption(selectedItemIndex);
+                        if (nextEnabledOption) {
+                            this.selectItem(event, nextEnabledOption);
+                            this.selectedOptionUpdated = true;
+                        }
+                    }
+                }
+                event.preventDefault();
+                break;
+            //up
+            case 38:
+                if (this.group) {
+                    let selectedItemIndex = this.selectedOption ? this.findOptionGroupIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;
+                    if (selectedItemIndex !== -1) {
+                        let prevItemIndex = selectedItemIndex.itemIndex - 1;
+                        if (prevItemIndex >= 0) {
+                            this.selectItem(event, this.getOptionGroupChildren(this.optionsToDisplay[selectedItemIndex.groupIndex])[prevItemIndex]);
+                            this.selectedOptionUpdated = true;
+                        }
+                        else if (prevItemIndex < 0) {
+                            let prevGroup = this.optionsToDisplay[selectedItemIndex.groupIndex - 1];
+                            if (prevGroup) {
+                                this.selectItem(event, this.getOptionGroupChildren(prevGroup)[this.getOptionGroupChildren(prevGroup).length - 1]);
+                                this.selectedOptionUpdated = true;
+                            }
+                        }
+                    }
+                }
+                else {
+                    let selectedItemIndex = this.selectedOption ? this.findOptionIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;
+                    let prevEnabledOption = this.findPrevEnabledOption(selectedItemIndex);
+                    if (prevEnabledOption) {
+                        this.selectItem(event, prevEnabledOption);
+                        this.selectedOptionUpdated = true;
+                    }
+                }
+                event.preventDefault();
+                break;
+            //space
+            case 32:
+                if (search) {
+                    if (!this.overlayVisible) {
+                        this.show();
+                    }
+                    else {
+                        this.hide();
+                    }
+                    event.preventDefault();
+                }
+                break;
+            //enter
+            case 13:
+                if (this.overlayVisible && (!this.filter || (this.optionsToDisplay && this.optionsToDisplay.length > 0))) {
+                    this.hide();
+                }
+                else if (!this.overlayVisible) {
+                    this.show();
+                }
+                event.preventDefault();
+                break;
+            //escape and tab
+            case 27:
+            case 9:
+                this.hide();
+                break;
+            //search item based on keyboard input
+            default:
+                if (search && !event.metaKey) {
+                    this.search(event);
+                }
+                break;
+        }
+    }
+    search(event) {
+        if (this.searchTimeout) {
+            clearTimeout(this.searchTimeout);
+        }
+        const char = event.key;
+        this.previousSearchChar = this.currentSearchChar;
+        this.currentSearchChar = char;
+        if (this.previousSearchChar === this.currentSearchChar)
+            this.searchValue = this.currentSearchChar;
+        else
+            this.searchValue = this.searchValue ? this.searchValue + char : char;
+        let newOption;
+        if (this.group) {
+            let searchIndex = this.selectedOption ? this.findOptionGroupIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : { groupIndex: 0, itemIndex: 0 };
+            newOption = this.searchOptionWithinGroup(searchIndex);
+        }
+        else {
+            let searchIndex = this.selectedOption ? this.findOptionIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;
+            newOption = this.searchOption(++searchIndex);
+        }
+        if (newOption && !this.isOptionDisabled(newOption)) {
+            this.selectItem(event, newOption);
+            this.selectedOptionUpdated = true;
+        }
+        this.searchTimeout = setTimeout(() => {
+            this.searchValue = null;
+        }, 250);
+    }
+    searchOption(index) {
+        let option;
+        if (this.searchValue) {
+            option = this.searchOptionInRange(index, this.optionsToDisplay.length);
+            if (!option) {
+                option = this.searchOptionInRange(0, index);
+            }
+        }
+        return option;
+    }
+    searchOptionInRange(start, end) {
+        for (let i = start; i < end; i++) {
+            let opt = this.optionsToDisplay[i];
+            if (this.getOptionLabel(opt).toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale)) && !this.isOptionDisabled(opt)) {
+                return opt;
+            }
+        }
+        return null;
+    }
+    searchOptionWithinGroup(index) {
+        let option;
+        if (this.searchValue) {
+            for (let i = index.groupIndex; i < this.optionsToDisplay.length; i++) {
+                for (let j = (index.groupIndex === i) ? (index.itemIndex + 1) : 0; j < this.getOptionGroupChildren(this.optionsToDisplay[i]).length; j++) {
+                    let opt = this.getOptionGroupChildren(this.optionsToDisplay[i])[j];
+                    if (this.getOptionLabel(opt).toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale)) && !this.isOptionDisabled(opt)) {
+                        return opt;
+                    }
+                }
+            }
+            if (!option) {
+                for (let i = 0; i <= index.groupIndex; i++) {
+                    for (let j = 0; j < ((index.groupIndex === i) ? index.itemIndex : this.getOptionGroupChildren(this.optionsToDisplay[i]).length); j++) {
+                        let opt = this.getOptionGroupChildren(this.optionsToDisplay[i])[j];
+                        if (this.getOptionLabel(opt).toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale)) && !this.isOptionDisabled(opt)) {
+                            return opt;
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    }
+    findOptionIndex(val, opts) {
+        let index = -1;
+        if (opts) {
+            for (let i = 0; i < opts.length; i++) {
+                if ((val == null && this.getOptionValue(opts[i]) == null) || ObjectUtils.equals(val, this.getOptionValue(opts[i]), this.dataKey)) {
+                    index = i;
+                    break;
+                }
+            }
+        }
+        return index;
+    }
+    findOptionGroupIndex(val, opts) {
+        let groupIndex, itemIndex;
+        if (opts) {
+            for (let i = 0; i < opts.length; i++) {
+                groupIndex = i;
+                itemIndex = this.findOptionIndex(val, this.getOptionGroupChildren(opts[i]));
+                if (itemIndex !== -1) {
+                    break;
+                }
+            }
+        }
+        if (itemIndex !== -1) {
+            return { groupIndex: groupIndex, itemIndex: itemIndex };
+        }
+        else {
+            return -1;
+        }
+    }
+    findOption(val, opts, inGroup) {
+        if (this.group && !inGroup) {
+            let opt;
+            if (opts && opts.length) {
+                for (let optgroup of opts) {
+                    opt = this.findOption(val, this.getOptionGroupChildren(optgroup), true);
+                    if (opt) {
+                        break;
+                    }
+                }
+            }
+            return opt;
+        }
+        else {
+            let index = this.findOptionIndex(val, opts);
+            return (index != -1) ? opts[index] : null;
+        }
+    }
+    onFilterInputChange(event) {
+        let inputValue = event.target.value;
+        if (inputValue && inputValue.length) {
+            this._filterValue = inputValue;
+            this.activateFilter();
+        }
+        else {
+            this._filterValue = null;
+            this.optionsToDisplay = this.options;
+        }
+        this.optionsChanged = true;
+        this.onFilter.emit({ originalEvent: event, filter: this._filterValue });
+    }
+    activateFilter() {
+        let searchFields = (this.filterBy || this.optionLabel || 'label').split(',');
+        if (this.options && this.options.length) {
+            if (this.group) {
+                let filteredGroups = [];
+                for (let optgroup of this.options) {
+                    let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);
+                    if (filteredSubOptions && filteredSubOptions.length) {
+                        filteredGroups.push({ ...optgroup, ...{ [this.optionGroupChildren]: filteredSubOptions } });
+                    }
+                }
+                this.optionsToDisplay = filteredGroups;
+            }
+            else {
+                this.optionsToDisplay = this.filterService.filter(this.options, searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);
+            }
+            this.optionsChanged = true;
+        }
+    }
+    applyFocus() {
+        if (this.editable)
+            DomHandler.findSingle(this.el.nativeElement, '.p-dropdown-label.p-inputtext').focus();
+        else
+            DomHandler.findSingle(this.el.nativeElement, 'input[readonly]').focus();
+    }
+    focus() {
+        this.applyFocus();
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {
+                if (this.isOutsideClicked(event)) {
+                    this.hide();
+                    this.unbindDocumentClickListener();
+                }
+                this.cd.markForCheck();
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    onWindowResize() {
+        if (this.overlayVisible && !DomHandler.isTouchDevice()) {
+            this.hide();
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, (event) => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    clear(event) {
+        this.value = null;
+        this.onModelChange(this.value);
+        this.onChange.emit({
+            originalEvent: event,
+            value: this.value
+        });
+        this.updateSelectedOption(this.value);
+        this.updateEditableLabel();
+        this.onClear.emit(event);
+    }
+    onOverlayHide() {
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.overlay = null;
+        this.itemsWrapper = null;
+        this.onModelTouched();
+    }
+    ngOnDestroy() {
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        if (this.overlay) {
+            ZIndexUtils.clear(this.overlay);
+        }
+        this.restoreOverlayAppend();
+        this.onOverlayHide();
+    }
+}
+Dropdown.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Dropdown, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i3.FilterService }, { token: i3.PrimeNGConfig }, { token: i3.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Dropdown, selector: "p-dropdown", inputs: { scrollHeight: "scrollHeight", filter: "filter", name: "name", style: "style", panelStyle: "panelStyle", styleClass: "styleClass", panelStyleClass: "panelStyleClass", readonly: "readonly", required: "required", editable: "editable", appendTo: "appendTo", tabindex: "tabindex", placeholder: "placeholder", filterPlaceholder: "filterPlaceholder", filterLocale: "filterLocale", inputId: "inputId", selectId: "selectId", dataKey: "dataKey", filterBy: "filterBy", autofocus: "autofocus", resetFilterOnHide: "resetFilterOnHide", dropdownIcon: "dropdownIcon", optionLabel: "optionLabel", optionValue: "optionValue", optionDisabled: "optionDisabled", optionGroupLabel: "optionGroupLabel", optionGroupChildren: "optionGroupChildren", autoDisplayFirst: "autoDisplayFirst", group: "group", showClear: "showClear", emptyFilterMessage: "emptyFilterMessage", emptyMessage: "emptyMessage", virtualScroll: "virtualScroll", itemSize: "itemSize", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", ariaFilterLabel: "ariaFilterLabel", ariaLabelledBy: "ariaLabelledBy", filterMatchMode: "filterMatchMode", maxlength: "maxlength", tooltip: "tooltip", tooltipPosition: "tooltipPosition", tooltipPositionStyle: "tooltipPositionStyle", tooltipStyleClass: "tooltipStyleClass", autofocusFilter: "autofocusFilter", disabled: "disabled", options: "options", filterValue: "filterValue" }, outputs: { onChange: "onChange", onFilter: "onFilter", onFocus: "onFocus", onBlur: "onBlur", onClick: "onClick", onShow: "onShow", onHide: "onHide", onClear: "onClear" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "focused || overlayVisible" }, classAttribute: "p-element p-inputwrapper" }, providers: [DROPDOWN_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }, { propertyName: "accessibleViewChild", first: true, predicate: ["in"], descendants: true }, { propertyName: "viewPort", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "editableInputViewChild", first: true, predicate: ["editableInput"], descendants: true }], ngImport: i0, template: `
+         <div #container [ngClass]="{'p-dropdown p-component':true,
+            'p-disabled':disabled, 'p-dropdown-open':overlayVisible, 'p-focus':focused, 'p-dropdown-clearable': showClear && !disabled}"
+            (click)="onMouseclick($event)" [ngStyle]="style" [class]="styleClass">
+            <div class="p-hidden-accessible">
+                <input #in [attr.id]="inputId" type="text" readonly (focus)="onInputFocus($event)" aria-haspopup="listbox" [attr.placeholder]="placeholder"
+                    aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible" [attr.aria-labelledby]="ariaLabelledBy" (blur)="onInputBlur($event)" (keydown)="onKeydown($event, true)"
+                    [disabled]="disabled" [attr.tabindex]="tabindex" [attr.autofocus]="autofocus" [attr.aria-activedescendant]="overlayVisible ? 'p-highlighted-option' : labelId" role="listbox">
+            </div>
+            <span [attr.id]="labelId" [ngClass]="{'p-dropdown-label p-inputtext':true,'p-dropdown-label-empty':(label == null || label.length === 0)}" *ngIf="!editable && (label != null)" [pTooltip]="tooltip" [tooltipPosition]="tooltipPosition" [positionStyle]="tooltipPositionStyle" [tooltipStyleClass]="tooltipStyleClass">
+                <ng-container *ngIf="!selectedItemTemplate">{{label||'empty'}}</ng-container>
+                <ng-container *ngTemplateOutlet="selectedItemTemplate; context: {$implicit: selectedOption}"></ng-container>
+            </span>
+            <span [ngClass]="{'p-dropdown-label p-inputtext p-placeholder':true,'p-dropdown-label-empty': (placeholder == null || placeholder.length === 0)}" *ngIf="!editable && (label == null)">{{placeholder||'empty'}}</span>
+            <input #editableInput type="text" [attr.maxlength]="maxlength" class="p-dropdown-label p-inputtext" *ngIf="editable" [disabled]="disabled" [attr.placeholder]="placeholder"
+                aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible" (click)="onEditableInputClick()" (input)="onEditableInputChange($event)" (focus)="onEditableInputFocus($event)" (blur)="onInputBlur($event)">
+            <i class="p-dropdown-clear-icon pi pi-times" (click)="clear($event)" *ngIf="value != null && showClear && !disabled"></i>
+            <div class="p-dropdown-trigger" role="button" aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible">
+                <span class="p-dropdown-trigger-icon" [ngClass]="dropdownIcon"></span>
+            </div>
+            <div *ngIf="overlayVisible" [ngClass]="'p-dropdown-panel p-component'" (click)="onOverlayClick($event)" [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.start)="onOverlayAnimationEnd($event)"onOverlayAnimationEnd [ngStyle]="panelStyle" [class]="panelStyleClass">
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <div class="p-dropdown-header" *ngIf="filter" >
+                    <div class="p-dropdown-filter-container" (click)="$event.stopPropagation()">
+                        <input #filter type="text" autocomplete="off" [value]="filterValue||''" class="p-dropdown-filter p-inputtext p-component" [attr.placeholder]="filterPlaceholder"
+                        (keydown.enter)="$event.preventDefault()" (keydown)="onKeydown($event, false)" (input)="onFilterInputChange($event)" [attr.aria-label]="ariaFilterLabel" [attr.aria-activedescendant]="overlayVisible ? 'p-highlighted-option' : labelId">
+                        <span class="p-dropdown-filter-icon pi pi-search"></span>
+                    </div>
+                </div>
+                <div class="p-dropdown-items-wrapper" [style.max-height]="virtualScroll ? 'auto' : (scrollHeight||'auto')">
+                    <ul [attr.id]="listId" class="p-dropdown-items" [ngClass]="{'p-dropdown-virtualscroll': virtualScroll}" role="listbox">
+                        <ng-container *ngIf="group">
+                            <ng-template ngFor let-optgroup [ngForOf]="optionsToDisplay">
+                                <li class="p-dropdown-item-group">
+                                    <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
+                                    <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
+                                </li>
+                                <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup), selectedOption: selectedOption}"></ng-container>
+                            </ng-template>
+                        </ng-container>
+                        <ng-container *ngIf="!group">
+                            <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: optionsToDisplay, selectedOption: selectedOption}"></ng-container>
+                        </ng-container>
+                        <ng-template #itemslist let-options let-selectedOption="selectedOption">
+                            <ng-container *ngIf="!virtualScroll; else virtualScrollList">
+                                <ng-template ngFor let-option let-i="index" [ngForOf]="options">
+                                    <p-dropdownItem [option]="option" [selected]="selectedOption == option" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)"
+                                                    (onClick)="onItemClick($event)"
+                                                    [template]="itemTemplate"></p-dropdownItem>
+                                </ng-template>
+                            </ng-container>
+                            <ng-template #virtualScrollList>
+                                <cdk-virtual-scroll-viewport (scrolledIndexChange)="scrollToSelectedVirtualScrollElement()" #viewport [ngStyle]="{'height': scrollHeight}" [itemSize]="itemSize" *ngIf="virtualScroll && optionsToDisplay && optionsToDisplay.length">
+                                    <ng-container *cdkVirtualFor="let option of options; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd">
+                                        <p-dropdownItem [option]="option" [selected]="selectedOption == option" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)"
+                                                                   (onClick)="onItemClick($event)"
+                                                                   [template]="itemTemplate"></p-dropdownItem>
+                                    </ng-container>
+                                </cdk-virtual-scroll-viewport>
+                            </ng-template>
+                        </ng-template>
+                        <li *ngIf="filterValue && isEmpty()" class="p-dropdown-empty-message">
+                            <ng-container *ngIf="!emptyFilterTemplate && !emptyTemplate; else emptyFilter">
+                                {{emptyFilterMessageLabel}}
+                            </ng-container>
+                            <ng-container #emptyFilter *ngTemplateOutlet="emptyFilterTemplate || emptyTemplate"></ng-container>
+                        </li>
+                        <li *ngIf="!filterValue && isEmpty()" class="p-dropdown-empty-message">
+                            <ng-container *ngIf="!emptyTemplate; else empty">
+                                {{emptyMessageLabel}}
+                            </ng-container>
+                            <ng-container #empty *ngTemplateOutlet="emptyTemplate"></ng-container>
+                        </li>
+                    </ul>
+                </div>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.p-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.p-dropdown-label-empty{overflow:hidden;visibility:hidden}input.p-dropdown-label{cursor:default}.p-dropdown .p-dropdown-panel{min-width:100%}.p-dropdown-panel{position:absolute;top:0;left:0}.p-dropdown-items-wrapper{overflow:auto}.p-dropdown-item{cursor:pointer;font-weight:normal;white-space:nowrap;position:relative;overflow:hidden}.p-dropdown-items{margin:0;padding:0;list-style-type:none}.p-dropdown-filter{width:100%}.p-dropdown-filter-container{position:relative}.p-dropdown-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-fluid .p-dropdown{display:flex}.p-fluid .p-dropdown .p-dropdown-label{width:1%}\n"], components: [{ type: DropdownItem, selector: "p-dropdownItem", inputs: ["option", "selected", "label", "disabled", "visible", "itemSize", "template"], outputs: ["onClick"] }, { type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i4.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Dropdown, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-dropdown', template: `
+         <div #container [ngClass]="{'p-dropdown p-component':true,
+            'p-disabled':disabled, 'p-dropdown-open':overlayVisible, 'p-focus':focused, 'p-dropdown-clearable': showClear && !disabled}"
+            (click)="onMouseclick($event)" [ngStyle]="style" [class]="styleClass">
+            <div class="p-hidden-accessible">
+                <input #in [attr.id]="inputId" type="text" readonly (focus)="onInputFocus($event)" aria-haspopup="listbox" [attr.placeholder]="placeholder"
+                    aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible" [attr.aria-labelledby]="ariaLabelledBy" (blur)="onInputBlur($event)" (keydown)="onKeydown($event, true)"
+                    [disabled]="disabled" [attr.tabindex]="tabindex" [attr.autofocus]="autofocus" [attr.aria-activedescendant]="overlayVisible ? 'p-highlighted-option' : labelId" role="listbox">
+            </div>
+            <span [attr.id]="labelId" [ngClass]="{'p-dropdown-label p-inputtext':true,'p-dropdown-label-empty':(label == null || label.length === 0)}" *ngIf="!editable && (label != null)" [pTooltip]="tooltip" [tooltipPosition]="tooltipPosition" [positionStyle]="tooltipPositionStyle" [tooltipStyleClass]="tooltipStyleClass">
+                <ng-container *ngIf="!selectedItemTemplate">{{label||'empty'}}</ng-container>
+                <ng-container *ngTemplateOutlet="selectedItemTemplate; context: {$implicit: selectedOption}"></ng-container>
+            </span>
+            <span [ngClass]="{'p-dropdown-label p-inputtext p-placeholder':true,'p-dropdown-label-empty': (placeholder == null || placeholder.length === 0)}" *ngIf="!editable && (label == null)">{{placeholder||'empty'}}</span>
+            <input #editableInput type="text" [attr.maxlength]="maxlength" class="p-dropdown-label p-inputtext" *ngIf="editable" [disabled]="disabled" [attr.placeholder]="placeholder"
+                aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible" (click)="onEditableInputClick()" (input)="onEditableInputChange($event)" (focus)="onEditableInputFocus($event)" (blur)="onInputBlur($event)">
+            <i class="p-dropdown-clear-icon pi pi-times" (click)="clear($event)" *ngIf="value != null && showClear && !disabled"></i>
+            <div class="p-dropdown-trigger" role="button" aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible">
+                <span class="p-dropdown-trigger-icon" [ngClass]="dropdownIcon"></span>
+            </div>
+            <div *ngIf="overlayVisible" [ngClass]="'p-dropdown-panel p-component'" (click)="onOverlayClick($event)" [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.start)="onOverlayAnimationEnd($event)"onOverlayAnimationEnd [ngStyle]="panelStyle" [class]="panelStyleClass">
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <div class="p-dropdown-header" *ngIf="filter" >
+                    <div class="p-dropdown-filter-container" (click)="$event.stopPropagation()">
+                        <input #filter type="text" autocomplete="off" [value]="filterValue||''" class="p-dropdown-filter p-inputtext p-component" [attr.placeholder]="filterPlaceholder"
+                        (keydown.enter)="$event.preventDefault()" (keydown)="onKeydown($event, false)" (input)="onFilterInputChange($event)" [attr.aria-label]="ariaFilterLabel" [attr.aria-activedescendant]="overlayVisible ? 'p-highlighted-option' : labelId">
+                        <span class="p-dropdown-filter-icon pi pi-search"></span>
+                    </div>
+                </div>
+                <div class="p-dropdown-items-wrapper" [style.max-height]="virtualScroll ? 'auto' : (scrollHeight||'auto')">
+                    <ul [attr.id]="listId" class="p-dropdown-items" [ngClass]="{'p-dropdown-virtualscroll': virtualScroll}" role="listbox">
+                        <ng-container *ngIf="group">
+                            <ng-template ngFor let-optgroup [ngForOf]="optionsToDisplay">
+                                <li class="p-dropdown-item-group">
+                                    <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
+                                    <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
+                                </li>
+                                <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup), selectedOption: selectedOption}"></ng-container>
+                            </ng-template>
+                        </ng-container>
+                        <ng-container *ngIf="!group">
+                            <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: optionsToDisplay, selectedOption: selectedOption}"></ng-container>
+                        </ng-container>
+                        <ng-template #itemslist let-options let-selectedOption="selectedOption">
+                            <ng-container *ngIf="!virtualScroll; else virtualScrollList">
+                                <ng-template ngFor let-option let-i="index" [ngForOf]="options">
+                                    <p-dropdownItem [option]="option" [selected]="selectedOption == option" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)"
+                                                    (onClick)="onItemClick($event)"
+                                                    [template]="itemTemplate"></p-dropdownItem>
+                                </ng-template>
+                            </ng-container>
+                            <ng-template #virtualScrollList>
+                                <cdk-virtual-scroll-viewport (scrolledIndexChange)="scrollToSelectedVirtualScrollElement()" #viewport [ngStyle]="{'height': scrollHeight}" [itemSize]="itemSize" *ngIf="virtualScroll && optionsToDisplay && optionsToDisplay.length">
+                                    <ng-container *cdkVirtualFor="let option of options; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd">
+                                        <p-dropdownItem [option]="option" [selected]="selectedOption == option" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)"
+                                                                   (onClick)="onItemClick($event)"
+                                                                   [template]="itemTemplate"></p-dropdownItem>
+                                    </ng-container>
+                                </cdk-virtual-scroll-viewport>
+                            </ng-template>
+                        </ng-template>
+                        <li *ngIf="filterValue && isEmpty()" class="p-dropdown-empty-message">
+                            <ng-container *ngIf="!emptyFilterTemplate && !emptyTemplate; else emptyFilter">
+                                {{emptyFilterMessageLabel}}
+                            </ng-container>
+                            <ng-container #emptyFilter *ngTemplateOutlet="emptyFilterTemplate || emptyTemplate"></ng-container>
+                        </li>
+                        <li *ngIf="!filterValue && isEmpty()" class="p-dropdown-empty-message">
+                            <ng-container *ngIf="!emptyTemplate; else empty">
+                                {{emptyMessageLabel}}
+                            </ng-container>
+                            <ng-container #empty *ngTemplateOutlet="emptyTemplate"></ng-container>
+                        </li>
+                    </ul>
+                </div>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': 'filled',
+                        '[class.p-inputwrapper-focus]': 'focused || overlayVisible'
+                    }, providers: [DROPDOWN_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".p-dropdown{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-dropdown-clear-icon{position:absolute;top:50%;margin-top:-.5rem}.p-dropdown-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-dropdown-label{display:block;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:1%;text-overflow:ellipsis;cursor:pointer}.p-dropdown-label-empty{overflow:hidden;visibility:hidden}input.p-dropdown-label{cursor:default}.p-dropdown .p-dropdown-panel{min-width:100%}.p-dropdown-panel{position:absolute;top:0;left:0}.p-dropdown-items-wrapper{overflow:auto}.p-dropdown-item{cursor:pointer;font-weight:normal;white-space:nowrap;position:relative;overflow:hidden}.p-dropdown-items{margin:0;padding:0;list-style-type:none}.p-dropdown-filter{width:100%}.p-dropdown-filter-container{position:relative}.p-dropdown-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-fluid .p-dropdown{display:flex}.p-fluid .p-dropdown .p-dropdown-label{width:1%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i3.FilterService }, { type: i3.PrimeNGConfig }, { type: i3.OverlayService }]; }, propDecorators: { scrollHeight: [{
+                type: Input
+            }], filter: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], panelStyle: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], panelStyleClass: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], required: [{
+                type: Input
+            }], editable: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], filterPlaceholder: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], selectId: [{
+                type: Input
+            }], dataKey: [{
+                type: Input
+            }], filterBy: [{
+                type: Input
+            }], autofocus: [{
+                type: Input
+            }], resetFilterOnHide: [{
+                type: Input
+            }], dropdownIcon: [{
+                type: Input
+            }], optionLabel: [{
+                type: Input
+            }], optionValue: [{
+                type: Input
+            }], optionDisabled: [{
+                type: Input
+            }], optionGroupLabel: [{
+                type: Input
+            }], optionGroupChildren: [{
+                type: Input
+            }], autoDisplayFirst: [{
+                type: Input
+            }], group: [{
+                type: Input
+            }], showClear: [{
+                type: Input
+            }], emptyFilterMessage: [{
+                type: Input
+            }], emptyMessage: [{
+                type: Input
+            }], virtualScroll: [{
+                type: Input
+            }], itemSize: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], ariaFilterLabel: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], filterMatchMode: [{
+                type: Input
+            }], maxlength: [{
+                type: Input
+            }], tooltip: [{
+                type: Input
+            }], tooltipPosition: [{
+                type: Input
+            }], tooltipPositionStyle: [{
+                type: Input
+            }], tooltipStyleClass: [{
+                type: Input
+            }], autofocusFilter: [{
+                type: Input
+            }], onChange: [{
+                type: Output
+            }], onFilter: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], onClick: [{
+                type: Output
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], onClear: [{
+                type: Output
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], filterViewChild: [{
+                type: ViewChild,
+                args: ['filter']
+            }], accessibleViewChild: [{
+                type: ViewChild,
+                args: ['in']
+            }], viewPort: [{
+                type: ViewChild,
+                args: [CdkVirtualScrollViewport]
+            }], editableInputViewChild: [{
+                type: ViewChild,
+                args: ['editableInput']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], disabled: [{
+                type: Input
+            }], options: [{
+                type: Input
+            }], filterValue: [{
+                type: Input
+            }] } });
+class DropdownModule {
+}
+DropdownModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+DropdownModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DropdownModule, declarations: [Dropdown, DropdownItem], imports: [CommonModule, SharedModule, ScrollingModule, TooltipModule, RippleModule], exports: [Dropdown, SharedModule, ScrollingModule] });
+DropdownModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DropdownModule, imports: [[CommonModule, SharedModule, ScrollingModule, TooltipModule, RippleModule], SharedModule, ScrollingModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DropdownModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, ScrollingModule, TooltipModule, RippleModule],
+                    exports: [Dropdown, SharedModule, ScrollingModule],
+                    declarations: [Dropdown, DropdownItem]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { DROPDOWN_VALUE_ACCESSOR, Dropdown, DropdownItem, DropdownModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dropdown.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dropdown.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dropdown.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-dropdown.mjs","sources":["../../src/app/components/dropdown/dropdown.ts","../../src/app/components/dropdown/primeng-dropdown.ts"],"sourcesContent":["import {ScrollingModule, CdkVirtualScrollViewport} from '@angular/cdk/scrolling';\nimport {NgModule,Component,ElementRef,OnInit,AfterViewInit,AfterContentInit,AfterViewChecked,OnDestroy,Input,Output,Renderer2,EventEmitter,ContentChildren,\n        QueryList,ViewChild,TemplateRef,forwardRef,ChangeDetectorRef,NgZone,ViewRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {OverlayService, PrimeNGConfig, SelectItem, TranslationKeys} from 'primeng/api';\nimport {SharedModule,PrimeTemplate, FilterService} from 'primeng/api';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {ObjectUtils,UniqueComponentId,ZIndexUtils} from 'primeng/utils';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport {TooltipModule} from 'primeng/tooltip';\nimport {RippleModule} from 'primeng/ripple';\n\nexport const DROPDOWN_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => Dropdown),\n  multi: true\n};\n\n@Component({\n    selector: 'p-dropdownItem',\n    template: `\n        <li (click)=\"onOptionClick($event)\" role=\"option\" pRipple\n            [attr.aria-label]=\"label\" [attr.aria-selected]=\"selected\"\n            [ngStyle]=\"{'height': itemSize + 'px'}\" [id]=\"selected ? 'p-highlighted-option':''\"\n            [ngClass]=\"{'p-dropdown-item':true, 'p-highlight': selected, 'p-disabled': disabled}\">\n            <span *ngIf=\"!template\">{{label||'empty'}}</span>\n            <ng-container *ngTemplateOutlet=\"template; context: {$implicit: option}\"></ng-container>\n        </li>\n    `,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class DropdownItem {\n\n    @Input() option: SelectItem;\n\n    @Input() selected: boolean;\n\n    @Input() label: string;\n\n    @Input() disabled: boolean;\n\n    @Input() visible: boolean;\n\n    @Input() itemSize: number;\n\n    @Input() template: TemplateRef<any>;\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    onOptionClick(event: Event) {\n        this.onClick.emit({\n            originalEvent: event,\n            option: this.option\n        });\n    }\n}\n\n@Component({\n    selector: 'p-dropdown',\n    template: `\n         <div #container [ngClass]=\"{'p-dropdown p-component':true,\n            'p-disabled':disabled, 'p-dropdown-open':overlayVisible, 'p-focus':focused, 'p-dropdown-clearable': showClear && !disabled}\"\n            (click)=\"onMouseclick($event)\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-hidden-accessible\">\n                <input #in [attr.id]=\"inputId\" type=\"text\" readonly (focus)=\"onInputFocus($event)\" aria-haspopup=\"listbox\" [attr.placeholder]=\"placeholder\"\n                    aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible\" [attr.aria-labelledby]=\"ariaLabelledBy\" (blur)=\"onInputBlur($event)\" (keydown)=\"onKeydown($event, true)\"\n                    [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\" [attr.autofocus]=\"autofocus\" [attr.aria-activedescendant]=\"overlayVisible ? 'p-highlighted-option' : labelId\" role=\"listbox\">\n            </div>\n            <span [attr.id]=\"labelId\" [ngClass]=\"{'p-dropdown-label p-inputtext':true,'p-dropdown-label-empty':(label == null || label.length === 0)}\" *ngIf=\"!editable && (label != null)\" [pTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition\" [positionStyle]=\"tooltipPositionStyle\" [tooltipStyleClass]=\"tooltipStyleClass\">\n                <ng-container *ngIf=\"!selectedItemTemplate\">{{label||'empty'}}</ng-container>\n                <ng-container *ngTemplateOutlet=\"selectedItemTemplate; context: {$implicit: selectedOption}\"></ng-container>\n            </span>\n            <span [ngClass]=\"{'p-dropdown-label p-inputtext p-placeholder':true,'p-dropdown-label-empty': (placeholder == null || placeholder.length === 0)}\" *ngIf=\"!editable && (label == null)\">{{placeholder||'empty'}}</span>\n            <input #editableInput type=\"text\" [attr.maxlength]=\"maxlength\" class=\"p-dropdown-label p-inputtext\" *ngIf=\"editable\" [disabled]=\"disabled\" [attr.placeholder]=\"placeholder\"\n                aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible\" (click)=\"onEditableInputClick()\" (input)=\"onEditableInputChange($event)\" (focus)=\"onEditableInputFocus($event)\" (blur)=\"onInputBlur($event)\">\n            <i class=\"p-dropdown-clear-icon pi pi-times\" (click)=\"clear($event)\" *ngIf=\"value != null && showClear && !disabled\"></i>\n            <div class=\"p-dropdown-trigger\" role=\"button\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible\">\n                <span class=\"p-dropdown-trigger-icon\" [ngClass]=\"dropdownIcon\"></span>\n            </div>\n            <div *ngIf=\"overlayVisible\" [ngClass]=\"'p-dropdown-panel p-component'\" (click)=\"onOverlayClick($event)\" [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.start)=\"onOverlayAnimationEnd($event)\"onOverlayAnimationEnd [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\">\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                <div class=\"p-dropdown-header\" *ngIf=\"filter\" >\n                    <div class=\"p-dropdown-filter-container\" (click)=\"$event.stopPropagation()\">\n                        <input #filter type=\"text\" autocomplete=\"off\" [value]=\"filterValue||''\" class=\"p-dropdown-filter p-inputtext p-component\" [attr.placeholder]=\"filterPlaceholder\"\n                        (keydown.enter)=\"$event.preventDefault()\" (keydown)=\"onKeydown($event, false)\" (input)=\"onFilterInputChange($event)\" [attr.aria-label]=\"ariaFilterLabel\" [attr.aria-activedescendant]=\"overlayVisible ? 'p-highlighted-option' : labelId\">\n                        <span class=\"p-dropdown-filter-icon pi pi-search\"></span>\n                    </div>\n                </div>\n                <div class=\"p-dropdown-items-wrapper\" [style.max-height]=\"virtualScroll ? 'auto' : (scrollHeight||'auto')\">\n                    <ul [attr.id]=\"listId\" class=\"p-dropdown-items\" [ngClass]=\"{'p-dropdown-virtualscroll': virtualScroll}\" role=\"listbox\">\n                        <ng-container *ngIf=\"group\">\n                            <ng-template ngFor let-optgroup [ngForOf]=\"optionsToDisplay\">\n                                <li class=\"p-dropdown-item-group\">\n                                    <span *ngIf=\"!groupTemplate\">{{getOptionGroupLabel(optgroup)||'empty'}}</span>\n                                    <ng-container *ngTemplateOutlet=\"groupTemplate; context: {$implicit: optgroup}\"></ng-container>\n                                </li>\n                                <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: getOptionGroupChildren(optgroup), selectedOption: selectedOption}\"></ng-container>\n                            </ng-template>\n                        </ng-container>\n                        <ng-container *ngIf=\"!group\">\n                            <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: optionsToDisplay, selectedOption: selectedOption}\"></ng-container>\n                        </ng-container>\n                        <ng-template #itemslist let-options let-selectedOption=\"selectedOption\">\n                            <ng-container *ngIf=\"!virtualScroll; else virtualScrollList\">\n                                <ng-template ngFor let-option let-i=\"index\" [ngForOf]=\"options\">\n                                    <p-dropdownItem [option]=\"option\" [selected]=\"selectedOption == option\" [label]=\"getOptionLabel(option)\" [disabled]=\"isOptionDisabled(option)\"\n                                                    (onClick)=\"onItemClick($event)\"\n                                                    [template]=\"itemTemplate\"></p-dropdownItem>\n                                </ng-template>\n                            </ng-container>\n                            <ng-template #virtualScrollList>\n                                <cdk-virtual-scroll-viewport (scrolledIndexChange)=\"scrollToSelectedVirtualScrollElement()\" #viewport [ngStyle]=\"{'height': scrollHeight}\" [itemSize]=\"itemSize\" *ngIf=\"virtualScroll && optionsToDisplay && optionsToDisplay.length\">\n                                    <ng-container *cdkVirtualFor=\"let option of options; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd\">\n                                        <p-dropdownItem [option]=\"option\" [selected]=\"selectedOption == option\" [label]=\"getOptionLabel(option)\" [disabled]=\"isOptionDisabled(option)\"\n                                                                   (onClick)=\"onItemClick($event)\"\n                                                                   [template]=\"itemTemplate\"></p-dropdownItem>\n                                    </ng-container>\n                                </cdk-virtual-scroll-viewport>\n                            </ng-template>\n                        </ng-template>\n                        <li *ngIf=\"filterValue && isEmpty()\" class=\"p-dropdown-empty-message\">\n                            <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\">\n                                {{emptyFilterMessageLabel}}\n                            </ng-container>\n                            <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\n                        </li>\n                        <li *ngIf=\"!filterValue && isEmpty()\" class=\"p-dropdown-empty-message\">\n                            <ng-container *ngIf=\"!emptyTemplate; else empty\">\n                                {{emptyMessageLabel}}\n                            </ng-container>\n                            <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n                        </li>\n                    </ul>\n                </div>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n            ]),\n            transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n            ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focused || overlayVisible'\n    },\n    providers: [DROPDOWN_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./dropdown.css']\n})\nexport class Dropdown implements OnInit,AfterViewInit,AfterContentInit,AfterViewChecked,OnDestroy,ControlValueAccessor {\n\n    @Input() scrollHeight: string = '200px';\n\n    @Input() filter: boolean;\n\n    @Input() name: string;\n\n    @Input() style: any;\n\n    @Input() panelStyle: any;\n\n    @Input() styleClass: string;\n\n    @Input() panelStyleClass: string;\n\n    @Input() readonly: boolean;\n\n    @Input() required: boolean;\n\n    @Input() editable: boolean;\n\n    @Input() appendTo: any;\n\n    @Input() tabindex: number;\n\n    @Input() placeholder: string;\n\n    @Input() filterPlaceholder: string;\n\n    @Input() filterLocale: string;\n\n    @Input() inputId: string;\n\n    @Input() selectId: string;\n\n    @Input() dataKey: string;\n\n    @Input() filterBy: string;\n\n    @Input() autofocus: boolean;\n\n    @Input() resetFilterOnHide: boolean = false;\n\n    @Input() dropdownIcon: string = 'pi pi-chevron-down';\n\n    @Input() optionLabel: string;\n\n    @Input() optionValue: string;\n\n    @Input() optionDisabled: string;\n\n    @Input() optionGroupLabel: string;\n\n    @Input() optionGroupChildren: string = \"items\";\n\n    @Input() autoDisplayFirst: boolean = true;\n\n    @Input() group: boolean;\n\n    @Input() showClear: boolean;\n\n    @Input() emptyFilterMessage: string = '';\n\n    @Input() emptyMessage: string = '';\n\n    @Input() virtualScroll: boolean;\n\n    @Input() itemSize: number;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Input() ariaFilterLabel: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() filterMatchMode: string = \"contains\";\n\n    @Input() maxlength: number;\n\n    @Input() tooltip: string = '';\n\n    @Input() tooltipPosition: string = 'right';\n\n    @Input() tooltipPositionStyle: string = 'absolute';\n\n    @Input() tooltipStyleClass: string;\n\n    @Input() autofocusFilter: boolean = true;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClear: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @ViewChild('filter') filterViewChild: ElementRef;\n\n    @ViewChild('in') accessibleViewChild: ElementRef;\n\n    @ViewChild(CdkVirtualScrollViewport) viewPort: CdkVirtualScrollViewport;\n\n    @ViewChild('editableInput') editableInputViewChild: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    private _disabled: boolean;\n\n    @Input() get disabled(): boolean {\n        return this._disabled;\n    };\n\n    set disabled(_disabled: boolean) {\n        if (_disabled) {\n            this.focused = false;\n\n            if (this.overlayVisible)\n                this.hide();\n        }\n\n        this._disabled = _disabled;\n        if (!(this.cd as ViewRef).destroyed) {\n            this.cd.detectChanges();\n        }\n    }\n\n    overlay: HTMLDivElement;\n\n    itemsWrapper: HTMLDivElement;\n\n    itemTemplate: TemplateRef<any>;\n\n    groupTemplate: TemplateRef<any>;\n\n    selectedItemTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    emptyFilterTemplate: TemplateRef<any>;\n\n    emptyTemplate: TemplateRef<any>;\n\n    selectedOption: any;\n\n    _options: any[];\n\n    value: any;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    optionsToDisplay: any[];\n\n    hover: boolean;\n\n    focused: boolean;\n\n    overlayVisible: boolean;\n\n    documentClickListener: any;\n\n    scrollHandler: any;\n\n    optionsChanged: boolean;\n\n    panel: HTMLDivElement;\n\n    dimensionsUpdated: boolean;\n\n    hoveredItem: any;\n\n    selectedOptionUpdated: boolean;\n\n    _filterValue: string;\n\n    searchValue: string;\n\n    searchIndex: number;\n\n    searchTimeout: any;\n\n    previousSearchChar: string;\n\n    currentSearchChar: string;\n\n    documentResizeListener: any;\n\n    virtualAutoScrolled: boolean;\n\n    virtualScrollSelectedIndex: number;\n\n    viewPortOffsetTop: number = 0;\n\n    preventModelTouched: boolean;\n\n    id: string = UniqueComponentId();\n\n    labelId: string;\n\n    listId: string;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public zone: NgZone, public filterService: FilterService, public config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'selectedItem':\n                    this.selectedItemTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                case 'emptyfilter':\n                    this.emptyFilterTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyTemplate = item.template;\n                break;\n\n                case 'group':\n                    this.groupTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngOnInit() {\n        this.optionsToDisplay = this.options;\n        this.updateSelectedOption(null);\n        this.labelId = this.id + '_label';\n        this.listId = this.id + '_list';\n    }\n\n    @Input() get options(): any[] {\n        return this._options;\n    }\n\n    set options(val: any[]) {\n        this._options = val;\n        this.optionsToDisplay = this._options;\n        this.updateSelectedOption(this.value);\n        this.optionsChanged = true;\n\n        if (this._filterValue && this._filterValue.length) {\n            this.activateFilter();\n        }\n    }\n\n    @Input() get filterValue(): string {\n        return this._filterValue;\n    }\n\n    set filterValue(val: string) {\n        this._filterValue = val;\n        this.activateFilter();\n    }\n\n    ngAfterViewInit() {\n        if (this.editable) {\n            this.updateEditableLabel();\n        }\n    }\n\n    get label(): string {\n        return this.selectedOption ? this.getOptionLabel(this.selectedOption) : null;\n    }\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    get emptyFilterMessageLabel(): string {\n        return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);\n    }\n\n    get filled() {\n        return this.value || this.value != null || this.value != undefined;\n    }\n\n    updateEditableLabel(): void {\n        if (this.editableInputViewChild && this.editableInputViewChild.nativeElement) {\n            this.editableInputViewChild.nativeElement.value = (this.selectedOption ? this.getOptionLabel(this.selectedOption) : this.value||'');\n        }\n    }\n\n    getOptionLabel(option: any) {\n        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);\n    }\n\n    getOptionValue(option: any) {\n        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);\n    }\n\n    isOptionDisabled(option: any) {\n        return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);\n    }\n\n    getOptionGroupLabel(optionGroup: any) {\n        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);\n    }\n\n    getOptionGroupChildren(optionGroup: any) {\n        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;\n    }\n\n    onItemClick(event) {\n        const option = event.option;\n\n        if (!this.isOptionDisabled(option)) {\n            this.selectItem(event, option);\n            this.accessibleViewChild.nativeElement.focus();\n        }\n\n        setTimeout(() => {\n            this.hide();\n        }, 150);\n    }\n\n    selectItem(event, option) {\n        if (this.selectedOption != option) {\n            this.selectedOption = option;\n            this.value = this.getOptionValue(option);\n\n            this.onModelChange(this.value);\n            this.updateEditableLabel();\n            this.onChange.emit({\n                originalEvent: event.originalEvent,\n                value: this.value\n            });\n\n            if (this.virtualScroll) {\n                setTimeout(() => {\n                    this.viewPortOffsetTop = this.viewPort ? this.viewPort.measureScrollOffset() : 0;\n                }, 1);\n            }\n        }\n    }\n\n    ngAfterViewChecked() {\n        if (this.optionsChanged && this.overlayVisible) {\n            this.optionsChanged = false;\n\n            if (this.virtualScroll) {\n                this.updateVirtualScrollSelectedIndex(true);\n            }\n\n            this.zone.runOutsideAngular(() => {\n                setTimeout(() => {\n                    this.alignOverlay();\n                }, 1);\n            });\n        }\n\n        if (this.selectedOptionUpdated && this.itemsWrapper) {\n            if (this.virtualScroll && this.viewPort) {\n                let range = this.viewPort.getRenderedRange();\n                this.updateVirtualScrollSelectedIndex(false);\n\n                if (range.start > this.virtualScrollSelectedIndex || range.end < this.virtualScrollSelectedIndex) {\n                    this.viewPort.scrollToIndex(this.virtualScrollSelectedIndex);\n                }\n            }\n\n            let selectedItem = DomHandler.findSingle(this.overlay, 'li.p-highlight');\n            if (selectedItem) {\n                DomHandler.scrollInView(this.itemsWrapper, DomHandler.findSingle(this.overlay, 'li.p-highlight'));\n            }\n            this.selectedOptionUpdated = false;\n        }\n    }\n\n    writeValue(value: any): void {\n        if (this.filter) {\n            this.resetFilter();\n        }\n\n        this.value = value;\n        this.updateSelectedOption(value);\n        this.updateEditableLabel();\n        this.cd.markForCheck();\n    }\n\n    resetFilter(): void {\n        this._filterValue = null;\n\n        if (this.filterViewChild && this.filterViewChild.nativeElement) {\n            this.filterViewChild.nativeElement.value = '';\n        }\n\n        this.optionsToDisplay = this.options;\n    }\n\n    updateSelectedOption(val: any): void {\n        this.selectedOption = this.findOption(val, this.optionsToDisplay);\n\n        if (this.autoDisplayFirst && !this.placeholder && !this.selectedOption && this.optionsToDisplay && this.optionsToDisplay.length && !this.editable) {\n            this.selectedOption = this.optionsToDisplay[0];\n            this.value = this.getOptionValue(this.selectedOption);\n            this.onModelChange(this.value);\n        }\n\n        this.selectedOptionUpdated = true;\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    onMouseclick(event) {\n        if (this.disabled || this.readonly || this.isInputClick(event)) {\n            return;\n        }\n\n        this.onClick.emit(event);\n        this.accessibleViewChild.nativeElement.focus();\n\n        if (this.overlayVisible)\n            this.hide();\n        else\n            this.show();\n\n        this.cd.detectChanges();\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    isInputClick(event): boolean {\n        return DomHandler.hasClass(event.target, 'p-dropdown-clear-icon') ||\n            event.target.isSameNode(this.accessibleViewChild.nativeElement) ||\n            (this.editableInputViewChild && event.target.isSameNode(this.editableInputViewChild.nativeElement));\n    }\n\n    isOutsideClicked(event: Event): boolean {\n        return !(this.el.nativeElement.isSameNode(event.target) || this.el.nativeElement.contains(event.target) || (this.overlay && this.overlay.contains(<Node> event.target)));\n    }\n\n    isEmpty() {\n        return !this.optionsToDisplay || (this.optionsToDisplay && this.optionsToDisplay.length === 0);\n    }\n\n    onEditableInputClick() {\n        this.bindDocumentClickListener();\n    }\n\n    onEditableInputFocus(event) {\n        this.focused = true;\n        this.hide();\n        this.onFocus.emit(event);\n    }\n\n    onEditableInputChange(event) {\n        this.value = event.target.value;\n        this.updateSelectedOption(this.value);\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    }\n\n    show() {\n        this.overlayVisible = true;\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n                this.overlay = event.element;\n                let itemsWrapperSelector = this.virtualScroll ? '.cdk-virtual-scroll-viewport' : '.p-dropdown-items-wrapper';\n                this.itemsWrapper = DomHandler.findSingle(this.overlay, itemsWrapperSelector);\n                this.appendOverlay();\n                if (this.autoZIndex) {\n                    ZIndexUtils.set('overlay', this.overlay, this.baseZIndex + this.config.zIndex.overlay);\n                }\n                this.alignOverlay();\n                this.bindDocumentClickListener();\n                this.bindDocumentResizeListener();\n                this.bindScrollListener();\n\n                if (this.options && this.options.length) {\n                    if (!this.virtualScroll) {\n                        let selectedListItem = DomHandler.findSingle(this.itemsWrapper, '.p-dropdown-item.p-highlight');\n\n                        if (selectedListItem) {\n                            selectedListItem.scrollIntoView({ block: 'nearest', inline: 'start' });\n                        }\n                    }\n                }\n\n                if (this.filterViewChild && this.filterViewChild.nativeElement) {\n                    this.preventModelTouched = true;\n\n                    if (this.autofocusFilter) {\n                        this.filterViewChild.nativeElement.focus();\n                    }\n                }\n\n                this.onShow.emit(event);\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n                this.onHide.emit(event);\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'void':\n                ZIndexUtils.clear(event.element);\n            break;\n        }\n    }\n\n    scrollToSelectedVirtualScrollElement() {\n        if (!this.virtualAutoScrolled) {\n            if (this.viewPortOffsetTop) {\n                this.viewPort.scrollToOffset(this.viewPortOffsetTop);\n            }\n            else if (this.virtualScrollSelectedIndex > -1) {\n                this.viewPort.scrollToIndex(this.virtualScrollSelectedIndex);\n            }\n        }\n\n        this.virtualAutoScrolled = true;\n    }\n\n    updateVirtualScrollSelectedIndex(resetOffset) {\n        if (this.selectedOption && this.optionsToDisplay && this.optionsToDisplay.length) {\n            if (resetOffset) {\n                this.viewPortOffsetTop = 0;\n            }\n\n            this.virtualScrollSelectedIndex = this.findOptionIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay);\n        }\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                DomHandler.appendChild(this.overlay, this.appendTo);\n\n            if (!this.overlay.style.minWidth) {\n                this.overlay.style.minWidth = DomHandler.getWidth(this.containerViewChild.nativeElement) + 'px';\n            }\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.overlay && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlay);\n        }\n    }\n\n    hide() {\n        this.overlayVisible = false;\n\n        if (this.filter && this.resetFilterOnHide) {\n            this.resetFilter();\n        }\n\n        if (this.virtualScroll) {\n            this.virtualAutoScrolled = false;\n        }\n\n        this.cd.markForCheck();\n    }\n\n    alignOverlay() {\n        if (this.overlay) {\n            if (this.appendTo)\n                DomHandler.absolutePosition(this.overlay, this.containerViewChild.nativeElement);\n            else\n                DomHandler.relativePosition(this.overlay, this.containerViewChild.nativeElement);\n        }\n    }\n\n    onInputFocus(event) {\n        this.focused = true;\n        this.onFocus.emit(event);\n    }\n\n    onInputBlur(event) {\n        this.focused = false;\n        this.onBlur.emit(event);\n\n        if (!this.preventModelTouched) {\n            this.onModelTouched();\n        }\n        this.preventModelTouched = false;\n    }\n\n    findPrevEnabledOption(index) {\n        let prevEnabledOption;\n\n        if (this.optionsToDisplay && this.optionsToDisplay.length) {\n            for (let i = (index - 1); 0 <= i; i--) {\n                let option = this.optionsToDisplay[i];\n                if (option.disabled) {\n                    continue;\n                }\n                else {\n                    prevEnabledOption = option;\n                    break;\n                }\n            }\n\n            if (!prevEnabledOption) {\n                for (let i = this.optionsToDisplay.length - 1; i >= index ; i--) {\n                    let option = this.optionsToDisplay[i];\n                    if (this.isOptionDisabled(option)) {\n                        continue;\n                    }\n                    else {\n                        prevEnabledOption = option;\n                        break;\n                    }\n                }\n            }\n        }\n\n        return prevEnabledOption;\n    }\n\n    findNextEnabledOption(index) {\n        let nextEnabledOption;\n\n        if (this.optionsToDisplay && this.optionsToDisplay.length) {\n            for (let i = (index + 1); i < this.optionsToDisplay.length; i++) {\n                let option = this.optionsToDisplay[i];\n                if (this.isOptionDisabled(option)) {\n                    continue;\n                }\n                else {\n                    nextEnabledOption = option;\n                    break;\n                }\n            }\n\n            if (!nextEnabledOption) {\n                for (let i = 0; i < index; i++) {\n                    let option = this.optionsToDisplay[i];\n                    if (this.isOptionDisabled(option)) {\n                        continue;\n                    }\n                    else {\n                        nextEnabledOption = option;\n                        break;\n                    }\n                }\n            }\n        }\n\n        return nextEnabledOption;\n    }\n\n    onKeydown(event: KeyboardEvent, search: boolean) {\n        if (this.readonly || !this.optionsToDisplay || this.optionsToDisplay.length === null) {\n            return;\n        }\n\n        switch(event.which) {\n            //down\n            case 40:\n                if (!this.overlayVisible && event.altKey) {\n                    this.show();\n                }\n                else {\n                    if (this.group) {\n                        let selectedItemIndex = this.selectedOption ? this.findOptionGroupIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;\n\n                        if (selectedItemIndex !== -1) {\n                            let nextItemIndex = selectedItemIndex.itemIndex + 1;\n                            if (nextItemIndex < (this.getOptionGroupChildren(this.optionsToDisplay[selectedItemIndex.groupIndex]).length)) {\n                                this.selectItem(event, this.getOptionGroupChildren(this.optionsToDisplay[selectedItemIndex.groupIndex])[nextItemIndex]);\n                                this.selectedOptionUpdated = true;\n                            }\n                            else if (this.optionsToDisplay[selectedItemIndex.groupIndex + 1]) {\n                                this.selectItem(event, this.getOptionGroupChildren(this.optionsToDisplay[selectedItemIndex.groupIndex + 1])[0]);\n                                this.selectedOptionUpdated = true;\n                            }\n                        }\n                        else {\n                            if (this.optionsToDisplay && this.optionsToDisplay.length > 0) {\n                                this.selectItem(event, this.getOptionGroupChildren(this.optionsToDisplay[0])[0]);\n                            }\n                        }\n                    }\n                    else {\n                        let selectedItemIndex = this.selectedOption ? this.findOptionIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;\n                        let nextEnabledOption = this.findNextEnabledOption(selectedItemIndex);\n                        if (nextEnabledOption) {\n                            this.selectItem(event, nextEnabledOption);\n                            this.selectedOptionUpdated = true;\n                        }\n                    }\n                }\n\n                event.preventDefault();\n\n            break;\n\n            //up\n            case 38:\n                if (this.group) {\n                    let selectedItemIndex = this.selectedOption ? this.findOptionGroupIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;\n                    if (selectedItemIndex !== -1) {\n                        let prevItemIndex = selectedItemIndex.itemIndex - 1;\n                        if (prevItemIndex >= 0) {\n                            this.selectItem(event, this.getOptionGroupChildren(this.optionsToDisplay[selectedItemIndex.groupIndex])[prevItemIndex]);\n                            this.selectedOptionUpdated = true;\n                        }\n                        else if (prevItemIndex < 0) {\n                            let prevGroup = this.optionsToDisplay[selectedItemIndex.groupIndex - 1];\n                            if (prevGroup) {\n                                this.selectItem(event, this.getOptionGroupChildren(prevGroup)[this.getOptionGroupChildren(prevGroup).length - 1]);\n                                this.selectedOptionUpdated = true;\n                            }\n                        }\n                    }\n                }\n                else {\n                    let selectedItemIndex = this.selectedOption ? this.findOptionIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;\n                    let prevEnabledOption = this.findPrevEnabledOption(selectedItemIndex);\n                    if (prevEnabledOption) {\n                        this.selectItem(event, prevEnabledOption);\n                        this.selectedOptionUpdated = true;\n                    }\n                }\n\n                event.preventDefault();\n            break;\n\n            //space\n            case 32:\n                if (search) {\n                    if (!this.overlayVisible){\n                        this.show();\n                    }\n                    else {\n                        this.hide();\n                    }\n\n                    event.preventDefault();\n                }\n            break;\n\n            //enter\n            case 13:\n                if (this.overlayVisible && (!this.filter || (this.optionsToDisplay && this.optionsToDisplay.length > 0))) {\n                    this.hide();\n                }\n\n                else if (!this.overlayVisible) {\n                    this.show();\n                }\n\n                event.preventDefault();\n            break;\n\n            //escape and tab\n            case 27:\n            case 9:\n                this.hide();\n            break;\n\n            //search item based on keyboard input\n            default:\n                if (search && !event.metaKey) {\n                    this.search(event);\n                }\n            break;\n        }\n    }\n\n    search(event: KeyboardEvent) {\n        if (this.searchTimeout) {\n            clearTimeout(this.searchTimeout);\n        }\n\n        const char = event.key;\n        this.previousSearchChar = this.currentSearchChar;\n        this.currentSearchChar = char;\n\n        if (this.previousSearchChar === this.currentSearchChar)\n            this.searchValue = this.currentSearchChar;\n        else\n            this.searchValue = this.searchValue ? this.searchValue + char : char;\n\n        let newOption;\n        if (this.group) {\n            let searchIndex = this.selectedOption ? this.findOptionGroupIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : {groupIndex: 0, itemIndex: 0};\n            newOption = this.searchOptionWithinGroup(searchIndex);\n        }\n        else {\n            let searchIndex = this.selectedOption ? this.findOptionIndex(this.getOptionValue(this.selectedOption), this.optionsToDisplay) : -1;\n            newOption = this.searchOption(++searchIndex);\n        }\n\n        if (newOption && !this.isOptionDisabled(newOption)) {\n            this.selectItem(event, newOption);\n            this.selectedOptionUpdated = true;\n        }\n\n        this.searchTimeout = setTimeout(() => {\n            this.searchValue = null;\n        }, 250);\n    }\n\n    searchOption(index) {\n        let option;\n\n        if (this.searchValue) {\n            option = this.searchOptionInRange(index, this.optionsToDisplay.length);\n\n            if (!option) {\n                option = this.searchOptionInRange(0, index);\n            }\n        }\n\n        return option;\n    }\n\n    searchOptionInRange(start, end) {\n        for (let i = start; i < end; i++) {\n            let opt = this.optionsToDisplay[i];\n            if (this.getOptionLabel(opt).toLocaleLowerCase(this.filterLocale).startsWith((this.searchValue as any).toLocaleLowerCase(this.filterLocale)) && !this.isOptionDisabled(opt)) {\n                return opt;\n            }\n        }\n\n        return null;\n    }\n\n    searchOptionWithinGroup(index) {\n        let option;\n\n        if (this.searchValue) {\n            for (let i = index.groupIndex; i < this.optionsToDisplay.length; i++) {\n                for (let j = (index.groupIndex === i) ? (index.itemIndex + 1) : 0; j < this.getOptionGroupChildren(this.optionsToDisplay[i]).length; j++) {\n                    let opt = this.getOptionGroupChildren(this.optionsToDisplay[i])[j];\n                    if (this.getOptionLabel(opt).toLocaleLowerCase(this.filterLocale).startsWith((this.searchValue as any).toLocaleLowerCase(this.filterLocale)) && !this.isOptionDisabled(opt)) {\n                        return opt;\n                    }\n                }\n            }\n\n            if (!option) {\n                for (let i = 0; i <= index.groupIndex; i++) {\n                    for (let j = 0; j < ((index.groupIndex === i) ? index.itemIndex : this.getOptionGroupChildren(this.optionsToDisplay[i]).length); j++) {\n                        let opt = this.getOptionGroupChildren(this.optionsToDisplay[i])[j];\n                        if (this.getOptionLabel(opt).toLocaleLowerCase(this.filterLocale).startsWith((this.searchValue as any).toLocaleLowerCase(this.filterLocale)) && !this.isOptionDisabled(opt)) {\n                            return opt;\n                        }\n                    }\n                }\n            }\n        }\n\n        return null;\n    }\n\n    findOptionIndex(val: any, opts: any[]): number {\n        let index: number = -1;\n        if (opts) {\n            for (let i = 0; i < opts.length; i++) {\n                if ((val == null && this.getOptionValue(opts[i]) == null) || ObjectUtils.equals(val, this.getOptionValue(opts[i]), this.dataKey)) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n\n        return index;\n    }\n\n    findOptionGroupIndex(val: any, opts: any[]): any {\n        let groupIndex, itemIndex;\n\n        if (opts) {\n            for (let i = 0; i < opts.length; i++) {\n                groupIndex = i;\n                itemIndex = this.findOptionIndex(val, this.getOptionGroupChildren(opts[i]));\n\n                if (itemIndex !== -1) {\n                    break;\n                }\n            }\n        }\n\n        if (itemIndex !== -1) {\n            return {groupIndex: groupIndex, itemIndex: itemIndex};\n        }\n        else {\n            return -1;\n        }\n    }\n\n    findOption(val: any, opts: any[], inGroup?: boolean): SelectItem {\n        if (this.group && !inGroup) {\n            let opt: SelectItem;\n            if (opts && opts.length) {\n                for (let optgroup of opts) {\n                    opt = this.findOption(val, this.getOptionGroupChildren(optgroup), true);\n                    if (opt) {\n                        break;\n                    }\n                }\n            }\n            return opt;\n        }\n        else {\n            let index: number = this.findOptionIndex(val, opts);\n            return (index != -1) ? opts[index] : null;\n        }\n    }\n\n    onFilterInputChange(event): void {\n        let inputValue = event.target.value;\n        if (inputValue && inputValue.length) {\n            this._filterValue = inputValue;\n            this.activateFilter();\n        }\n        else {\n            this._filterValue = null;\n            this.optionsToDisplay = this.options;\n        }\n\n        this.optionsChanged = true;\n        this.onFilter.emit({originalEvent: event, filter: this._filterValue});\n    }\n\n    activateFilter() {\n        let searchFields: string[] = (this.filterBy || this.optionLabel || 'label').split(',');\n\n        if (this.options && this.options.length) {\n            if (this.group) {\n                let filteredGroups = [];\n                for (let optgroup of this.options) {\n                    let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);\n                    if (filteredSubOptions && filteredSubOptions.length) {\n                        filteredGroups.push({...optgroup, ...{[this.optionGroupChildren]: filteredSubOptions}});\n                    }\n                }\n\n                this.optionsToDisplay = filteredGroups;\n            }\n            else {\n                this.optionsToDisplay = this.filterService.filter(this.options, searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);\n            }\n\n            this.optionsChanged = true;\n        }\n    }\n\n    applyFocus(): void {\n        if (this.editable)\n            DomHandler.findSingle(this.el.nativeElement, '.p-dropdown-label.p-inputtext').focus();\n        else\n            DomHandler.findSingle(this.el.nativeElement, 'input[readonly]').focus();\n    }\n\n    focus(): void {\n        this.applyFocus();\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n                if (this.isOutsideClicked(event)) {\n                    this.hide();\n                    this.unbindDocumentClickListener();\n                }\n\n                this.cd.markForCheck();\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    onWindowResize() {\n        if (this.overlayVisible && !DomHandler.isTouchDevice()) {\n            this.hide();\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, (event: any) => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    clear(event: Event) {\n        this.value = null;\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n        this.updateSelectedOption(this.value);\n        this.updateEditableLabel();\n        this.onClear.emit(event);\n    }\n\n    onOverlayHide() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.overlay = null;\n        this.itemsWrapper = null;\n        this.onModelTouched();\n    }\n\n    ngOnDestroy() {\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.overlay) {\n            ZIndexUtils.clear(this.overlay);\n        }\n\n        this.restoreOverlayAppend();\n        this.onOverlayHide();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,SharedModule,ScrollingModule,TooltipModule,RippleModule],\n    exports: [Dropdown,SharedModule,ScrollingModule],\n    declarations: [Dropdown,DropdownItem]\n})\nexport class DropdownModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dynamicdialog.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dynamicdialog.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dynamicdialog.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,391 @@
+import * as i0 from '@angular/core';
+import { Directive, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, NgModule, Injectable } from '@angular/core';
+import { animation, style, animate, trigger, transition, useAnimation } from '@angular/animations';
+import * as i4 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import { ZIndexUtils } from 'primeng/utils';
+import { Subject } from 'rxjs';
+import * as i3 from 'primeng/api';
+
+class DynamicDialogContent {
+    constructor(viewContainerRef) {
+        this.viewContainerRef = viewContainerRef;
+    }
+}
+DynamicDialogContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DynamicDialogContent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
+DynamicDialogContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: DynamicDialogContent, selector: "[pDynamicDialogContent]", host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DynamicDialogContent, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pDynamicDialogContent]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });
+
+class DynamicDialogConfig {
+}
+
+class DynamicDialogRef {
+    constructor() {
+        this._onClose = new Subject();
+        this.onClose = this._onClose.asObservable();
+        this._onDestroy = new Subject();
+        this.onDestroy = this._onDestroy.asObservable();
+    }
+    close(result) {
+        this._onClose.next(result);
+    }
+    destroy() {
+        this._onDestroy.next(null);
+    }
+}
+
+const showAnimation = animation([
+    style({ transform: '{{transform}}', opacity: 0 }),
+    animate('{{transition}}', style({ transform: 'none', opacity: 1 }))
+]);
+const hideAnimation = animation([
+    animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))
+]);
+class DynamicDialogComponent {
+    constructor(componentFactoryResolver, cd, renderer, config, dialogRef, zone, primeNGConfig) {
+        this.componentFactoryResolver = componentFactoryResolver;
+        this.cd = cd;
+        this.renderer = renderer;
+        this.config = config;
+        this.dialogRef = dialogRef;
+        this.zone = zone;
+        this.primeNGConfig = primeNGConfig;
+        this.visible = true;
+        this.transformOptions = "scale(0.7)";
+    }
+    ngAfterViewInit() {
+        this.loadChildComponent(this.childComponentType);
+        this.cd.detectChanges();
+    }
+    loadChildComponent(componentType) {
+        let componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);
+        let viewContainerRef = this.insertionPoint.viewContainerRef;
+        viewContainerRef.clear();
+        this.componentRef = viewContainerRef.createComponent(componentFactory);
+    }
+    moveOnTop() {
+        if (this.config.autoZIndex !== false) {
+            ZIndexUtils.set('modal', this.container, (this.config.baseZIndex || 0) + this.primeNGConfig.zIndex.modal);
+            this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);
+        }
+    }
+    onAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.container = event.element;
+                this.wrapper = this.container.parentElement;
+                this.moveOnTop();
+                this.bindGlobalListeners();
+                if (this.config.modal !== false) {
+                    this.enableModality();
+                }
+                this.focus();
+                break;
+            case 'void':
+                if (this.config.modal !== false) {
+                    DomHandler.addClass(this.wrapper, 'p-component-overlay-leave');
+                }
+                break;
+        }
+    }
+    onAnimationEnd(event) {
+        if (event.toState === 'void') {
+            this.onContainerDestroy();
+            this.dialogRef.destroy();
+        }
+    }
+    onContainerDestroy() {
+        this.unbindGlobalListeners();
+        if (this.container && this.config.autoZIndex !== false) {
+            ZIndexUtils.clear(this.container);
+        }
+        if (this.config.modal !== false) {
+            this.disableModality();
+        }
+        this.container = null;
+    }
+    close() {
+        this.visible = false;
+        this.cd.markForCheck();
+    }
+    hide() {
+        if (this.dialogRef) {
+            this.dialogRef.close();
+        }
+    }
+    enableModality() {
+        if (this.config.closable !== false && this.config.dismissableMask) {
+            this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event) => {
+                if (this.wrapper && this.wrapper.isSameNode(event.target)) {
+                    this.hide();
+                }
+            });
+        }
+        if (this.config.modal !== false) {
+            DomHandler.addClass(document.body, 'p-overflow-hidden');
+        }
+    }
+    disableModality() {
+        if (this.wrapper) {
+            if (this.config.dismissableMask) {
+                this.unbindMaskClickListener();
+            }
+            if (this.config.modal !== false) {
+                DomHandler.removeClass(document.body, 'p-overflow-hidden');
+            }
+            if (!this.cd.destroyed) {
+                this.cd.detectChanges();
+            }
+        }
+    }
+    onKeydown(event) {
+        if (event.which === 9) {
+            event.preventDefault();
+            let focusableElements = DomHandler.getFocusableElements(this.container);
+            if (focusableElements && focusableElements.length > 0) {
+                if (!focusableElements[0].ownerDocument.activeElement) {
+                    focusableElements[0].focus();
+                }
+                else {
+                    let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);
+                    if (event.shiftKey) {
+                        if (focusedIndex == -1 || focusedIndex === 0)
+                            focusableElements[focusableElements.length - 1].focus();
+                        else
+                            focusableElements[focusedIndex - 1].focus();
+                    }
+                    else {
+                        if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))
+                            focusableElements[0].focus();
+                        else
+                            focusableElements[focusedIndex + 1].focus();
+                    }
+                }
+            }
+        }
+    }
+    focus() {
+        let focusable = DomHandler.findSingle(this.container, '[autofocus]');
+        if (focusable) {
+            this.zone.runOutsideAngular(() => {
+                setTimeout(() => focusable.focus(), 5);
+            });
+        }
+    }
+    bindGlobalListeners() {
+        this.bindDocumentKeydownListener();
+        if (this.config.closeOnEscape !== false && this.config.closable !== false) {
+            this.bindDocumentEscapeListener();
+        }
+    }
+    unbindGlobalListeners() {
+        this.unbindDocumentKeydownListener();
+        this.unbindDocumentEscapeListener();
+    }
+    bindDocumentKeydownListener() {
+        this.zone.runOutsideAngular(() => {
+            this.documentKeydownListener = this.onKeydown.bind(this);
+            window.document.addEventListener('keydown', this.documentKeydownListener);
+        });
+    }
+    unbindDocumentKeydownListener() {
+        if (this.documentKeydownListener) {
+            window.document.removeEventListener('keydown', this.documentKeydownListener);
+            this.documentKeydownListener = null;
+        }
+    }
+    bindDocumentEscapeListener() {
+        const documentTarget = this.maskViewChild ? this.maskViewChild.nativeElement.ownerDocument : 'document';
+        this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
+            if (event.which == 27) {
+                if (parseInt(this.container.style.zIndex) == ZIndexUtils.getCurrent()) {
+                    this.hide();
+                }
+            }
+        });
+    }
+    unbindDocumentEscapeListener() {
+        if (this.documentEscapeListener) {
+            this.documentEscapeListener();
+            this.documentEscapeListener = null;
+        }
+    }
+    unbindMaskClickListener() {
+        if (this.maskClickListener) {
+            this.maskClickListener();
+            this.maskClickListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.onContainerDestroy();
+        if (this.componentRef) {
+            this.componentRef.destroy();
+        }
+    }
+}
+DynamicDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DynamicDialogComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: DynamicDialogConfig }, { token: DynamicDialogRef }, { token: i0.NgZone }, { token: i3.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+DynamicDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: DynamicDialogComponent, selector: "p-dynamicDialog", host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "insertionPoint", first: true, predicate: DynamicDialogContent, descendants: true }, { propertyName: "maskViewChild", first: true, predicate: ["mask"], descendants: true }], ngImport: i0, template: `
+        <div #mask [ngClass]="{'p-dialog-mask':true, 'p-component-overlay-enter p-dialog-mask-scrollblocker': config.modal !== false}">
+            <div [ngClass]="{'p-dialog p-dynamic-dialog p-component':true, 'p-dialog-rtl': config.rtl}" [ngStyle]="config.style" [class]="config.styleClass"
+                [@animation]="{value: 'visible', params: {transform: transformOptions, transition: config.transitionOptions || '150ms cubic-bezier(0, 0, 0.2, 1)'}}"
+                (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)" role="dialog" *ngIf="visible"
+                [style.width]="config.width" [style.height]="config.height">
+                <div class="p-dialog-header" *ngIf="config.showHeader === false ? false: true">
+                    <span class="p-dialog-title">{{config.header}}</span>
+                    <div class="p-dialog-header-icons">
+                        <button [ngClass]="'p-dialog-header-icon p-dialog-header-maximize p-link'" type="button" (click)="hide()" (keydown.enter)="hide()" *ngIf="config.closable !== false">
+                            <span class="p-dialog-header-close-icon pi pi-times"></span>
+                        </button>
+                    </div>
+                </div>
+                <div class="p-dialog-content" [ngStyle]="config.contentStyle">
+                    <ng-template pDynamicDialogContent></ng-template>
+                </div>
+                <div class="p-dialog-footer" *ngIf="config.footer">
+                    {{config.footer}}
+                </div>
+            </div>
+        </div>
+	`, isInline: true, styles: [".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translate(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0px!important;left:0px!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"], directives: [{ type: i0.forwardRef(function () { return i4.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i4.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i0.forwardRef(function () { return DynamicDialogContent; }), selector: "[pDynamicDialogContent]" }], animations: [
+        trigger('animation', [
+            transition('void => visible', [
+                useAnimation(showAnimation)
+            ]),
+            transition('visible => void', [
+                useAnimation(hideAnimation)
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DynamicDialogComponent, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-dynamicDialog', template: `
+        <div #mask [ngClass]="{'p-dialog-mask':true, 'p-component-overlay-enter p-dialog-mask-scrollblocker': config.modal !== false}">
+            <div [ngClass]="{'p-dialog p-dynamic-dialog p-component':true, 'p-dialog-rtl': config.rtl}" [ngStyle]="config.style" [class]="config.styleClass"
+                [@animation]="{value: 'visible', params: {transform: transformOptions, transition: config.transitionOptions || '150ms cubic-bezier(0, 0, 0.2, 1)'}}"
+                (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)" role="dialog" *ngIf="visible"
+                [style.width]="config.width" [style.height]="config.height">
+                <div class="p-dialog-header" *ngIf="config.showHeader === false ? false: true">
+                    <span class="p-dialog-title">{{config.header}}</span>
+                    <div class="p-dialog-header-icons">
+                        <button [ngClass]="'p-dialog-header-icon p-dialog-header-maximize p-link'" type="button" (click)="hide()" (keydown.enter)="hide()" *ngIf="config.closable !== false">
+                            <span class="p-dialog-header-close-icon pi pi-times"></span>
+                        </button>
+                    </div>
+                </div>
+                <div class="p-dialog-content" [ngStyle]="config.contentStyle">
+                    <ng-template pDynamicDialogContent></ng-template>
+                </div>
+                <div class="p-dialog-footer" *ngIf="config.footer">
+                    {{config.footer}}
+                </div>
+            </div>
+        </div>
+	`, animations: [
+                        trigger('animation', [
+                            transition('void => visible', [
+                                useAnimation(showAnimation)
+                            ]),
+                            transition('visible => void', [
+                                useAnimation(hideAnimation)
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translate(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0px!important;left:0px!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: DynamicDialogConfig }, { type: DynamicDialogRef }, { type: i0.NgZone }, { type: i3.PrimeNGConfig }]; }, propDecorators: { insertionPoint: [{
+                type: ViewChild,
+                args: [DynamicDialogContent]
+            }], maskViewChild: [{
+                type: ViewChild,
+                args: ['mask']
+            }] } });
+class DynamicDialogModule {
+}
+DynamicDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DynamicDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+DynamicDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DynamicDialogModule, declarations: [DynamicDialogComponent, DynamicDialogContent], imports: [CommonModule] });
+DynamicDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DynamicDialogModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DynamicDialogModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    declarations: [DynamicDialogComponent, DynamicDialogContent],
+                    entryComponents: [DynamicDialogComponent]
+                }]
+        }] });
+
+class DynamicDialogInjector {
+    constructor(_parentInjector, _additionalTokens) {
+        this._parentInjector = _parentInjector;
+        this._additionalTokens = _additionalTokens;
+    }
+    get(token, notFoundValue, flags) {
+        const value = this._additionalTokens.get(token);
+        if (value)
+            return value;
+        return this._parentInjector.get(token, notFoundValue);
+    }
+}
+
+class DialogService {
+    constructor(componentFactoryResolver, appRef, injector) {
+        this.componentFactoryResolver = componentFactoryResolver;
+        this.appRef = appRef;
+        this.injector = injector;
+        this.dialogComponentRefMap = new Map();
+    }
+    open(componentType, config) {
+        const dialogRef = this.appendDialogComponentToBody(config);
+        this.dialogComponentRefMap.get(dialogRef).instance.childComponentType = componentType;
+        return dialogRef;
+    }
+    appendDialogComponentToBody(config) {
+        const map = new WeakMap();
+        map.set(DynamicDialogConfig, config);
+        const dialogRef = new DynamicDialogRef();
+        map.set(DynamicDialogRef, dialogRef);
+        const sub = dialogRef.onClose.subscribe(() => {
+            this.dialogComponentRefMap.get(dialogRef).instance.close();
+        });
+        const destroySub = dialogRef.onDestroy.subscribe(() => {
+            this.removeDialogComponentFromBody(dialogRef);
+            destroySub.unsubscribe();
+            sub.unsubscribe();
+        });
+        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(DynamicDialogComponent);
+        const componentRef = componentFactory.create(new DynamicDialogInjector(this.injector, map));
+        this.appRef.attachView(componentRef.hostView);
+        const domElem = componentRef.hostView.rootNodes[0];
+        document.body.appendChild(domElem);
+        this.dialogComponentRefMap.set(dialogRef, componentRef);
+        return dialogRef;
+    }
+    removeDialogComponentFromBody(dialogRef) {
+        if (!dialogRef || !this.dialogComponentRefMap.has(dialogRef)) {
+            return;
+        }
+        const dialogComponentRef = this.dialogComponentRefMap.get(dialogRef);
+        this.appRef.detachView(dialogComponentRef.hostView);
+        dialogComponentRef.destroy();
+        this.dialogComponentRefMap.delete(dialogRef);
+    }
+}
+DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DialogService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
+DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DialogService });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: DialogService, decorators: [{
+            type: Injectable
+        }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i0.Injector }]; } });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { DialogService, DynamicDialogComponent, DynamicDialogConfig, DynamicDialogInjector, DynamicDialogModule, DynamicDialogRef };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-dynamicdialog.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-dynamicdialog.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-dynamicdialog.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-dynamicdialog.mjs","sources":["../../src/app/components/dynamicdialog/dynamicdialogcontent.ts","../../src/app/components/dynamicdialog/dynamicdialog-config.ts","../../src/app/components/dynamicdialog/dynamicdialog-ref.ts","../../src/app/components/dynamicdialog/dynamicdialog.ts","../../src/app/components/dynamicdialog/dynamicdialog-injector.ts","../../src/app/components/dynamicdialog/dialogservice.ts","../../src/app/components/dynamicdialog/primeng-dynamicdialog.ts"],"sourcesContent":["import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  selector: '[pDynamicDialogContent]',\n  host: {\n    'class': 'p-element'\n  }\n})\nexport class DynamicDialogContent {\n\n\tconstructor(public viewContainerRef: ViewContainerRef) {}\n\n}\n","export class DynamicDialogConfig {\r\n\tdata?: any;\r\n\theader?: string;\r\n\tfooter?: string;\r\n\twidth?: string;\r\n\theight?: string;\r\n\tcloseOnEscape?: boolean;\r\n\tbaseZIndex?: number;\r\n\tautoZIndex?: boolean;\r\n\tdismissableMask?: boolean;\r\n\trtl?: boolean;\r\n\tstyle?: any;\r\n\tcontentStyle?: any;\r\n\tstyleClass?: string;\r\n\ttransitionOptions?: string;\r\n\tclosable?: boolean;\r\n\tshowHeader?: boolean;\r\n\tmodal?: boolean;\r\n}\r\n","import { Observable, Subject } from 'rxjs';\r\n\r\nexport class DynamicDialogRef {\r\n\tconstructor() { }\r\n\r\n\tclose(result?: any) {\r\n\t\tthis._onClose.next(result);\r\n    }\r\n\r\n    destroy() {\r\n\t\tthis._onDestroy.next(null);\r\n\t}\r\n\r\n\tprivate readonly _onClose = new Subject<any>();\r\n    onClose: Observable<any> = this._onClose.asObservable();\r\n\r\n    private readonly _onDestroy = new Subject<any>();\r\n\tonDestroy: Observable<any> = this._onDestroy.asObservable();\r\n}\r\n","import { Component, NgModule, Type, ComponentFactoryResolver, ViewChild, OnDestroy, ComponentRef, AfterViewInit, ChangeDetectorRef, Renderer2, NgZone, ElementRef, ChangeDetectionStrategy, ViewRef, ViewEncapsulation } from '@angular/core';\nimport { trigger,style,transition,animate,AnimationEvent, animation, useAnimation } from '@angular/animations';\nimport { DynamicDialogContent } from './dynamicdialogcontent';\nimport { DynamicDialogConfig } from './dynamicdialog-config';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler } from 'primeng/dom';\nimport { DynamicDialogRef } from './dynamicdialog-ref';\nimport { ZIndexUtils } from 'primeng/utils';\nimport { PrimeNGConfig } from 'primeng/api';\n\nconst showAnimation = animation([\n    style({ transform: '{{transform}}', opacity: 0 }),\n    animate('{{transition}}', style({ transform: 'none', opacity: 1 }))\n]);\n\nconst hideAnimation = animation([\n    animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))\n]);\n\n@Component({\n\tselector: 'p-dynamicDialog',\n\ttemplate: `\n        <div #mask [ngClass]=\"{'p-dialog-mask':true, 'p-component-overlay-enter p-dialog-mask-scrollblocker': config.modal !== false}\">\n            <div [ngClass]=\"{'p-dialog p-dynamic-dialog p-component':true, 'p-dialog-rtl': config.rtl}\" [ngStyle]=\"config.style\" [class]=\"config.styleClass\"\n                [@animation]=\"{value: 'visible', params: {transform: transformOptions, transition: config.transitionOptions || '150ms cubic-bezier(0, 0, 0.2, 1)'}}\"\n                (@animation.start)=\"onAnimationStart($event)\" (@animation.done)=\"onAnimationEnd($event)\" role=\"dialog\" *ngIf=\"visible\"\n                [style.width]=\"config.width\" [style.height]=\"config.height\">\n                <div class=\"p-dialog-header\" *ngIf=\"config.showHeader === false ? false: true\">\n                    <span class=\"p-dialog-title\">{{config.header}}</span>\n                    <div class=\"p-dialog-header-icons\">\n                        <button [ngClass]=\"'p-dialog-header-icon p-dialog-header-maximize p-link'\" type=\"button\" (click)=\"hide()\" (keydown.enter)=\"hide()\" *ngIf=\"config.closable !== false\">\n                            <span class=\"p-dialog-header-close-icon pi pi-times\"></span>\n                        </button>\n                    </div>\n                </div>\n                <div class=\"p-dialog-content\" [ngStyle]=\"config.contentStyle\">\n                    <ng-template pDynamicDialogContent></ng-template>\n                </div>\n                <div class=\"p-dialog-footer\" *ngIf=\"config.footer\">\n                    {{config.footer}}\n                </div>\n            </div>\n        </div>\n\t`,\n\tanimations: [\n        trigger('animation', [\n            transition('void => visible', [\n                useAnimation(showAnimation)\n            ]),\n            transition('visible => void', [\n                useAnimation(hideAnimation)\n            ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.Default,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['../dialog/dialog.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class DynamicDialogComponent implements AfterViewInit, OnDestroy {\n\n\tvisible: boolean = true;\n\n\tcomponentRef: ComponentRef<any>;\n\n\tmask: HTMLDivElement;\n\n\t@ViewChild(DynamicDialogContent) insertionPoint: DynamicDialogContent;\n\n\t@ViewChild('mask') maskViewChild: ElementRef;\n\n\tchildComponentType: Type<any>;\n\n    container: HTMLDivElement;\n\n    wrapper: HTMLElement;\n\n    documentKeydownListener: any;\n\n    documentEscapeListener: Function;\n\n    maskClickListener: Function;\n\n    transformOptions: string = \"scale(0.7)\";\n\n\tconstructor(private componentFactoryResolver: ComponentFactoryResolver, private cd: ChangeDetectorRef, public renderer: Renderer2,\n\t\t\tpublic config: DynamicDialogConfig, private dialogRef: DynamicDialogRef, public zone: NgZone, public primeNGConfig: PrimeNGConfig) { }\n\n\tngAfterViewInit() {\n\t\tthis.loadChildComponent(this.childComponentType);\n\t\tthis.cd.detectChanges();\n\t}\n\n\tloadChildComponent(componentType: Type<any>) {\n\t\tlet componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);\n\n\t\tlet viewContainerRef = this.insertionPoint.viewContainerRef;\n\t\tviewContainerRef.clear();\n\n\t\tthis.componentRef = viewContainerRef.createComponent(componentFactory);\n\t}\n\n\tmoveOnTop() {\n        if (this.config.autoZIndex !== false) {\n            ZIndexUtils.set('modal', this.container, (this.config.baseZIndex||0) + this.primeNGConfig.zIndex.modal);\n            this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);\n\t\t}\n    }\n\n\tonAnimationStart(event: AnimationEvent) {\n\t\tswitch(event.toState) {\n\t\t\tcase 'visible':\n                this.container = event.element;\n                this.wrapper = this.container.parentElement;\n\t\t\t\tthis.moveOnTop();\n                this.bindGlobalListeners();\n\n                if (this.config.modal !== false) {\n                    this.enableModality();\n                }\n                this.focus();\n\t\t\tbreak;\n\n\t\t\tcase 'void':\n                if (this.config.modal !== false) {\n                    DomHandler.addClass(this.wrapper, 'p-component-overlay-leave');\n                }\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tonAnimationEnd(event: AnimationEvent) {\n\t\tif (event.toState === 'void') {\n            this.onContainerDestroy();\n\t\t\tthis.dialogRef.destroy();\n\t\t}\n\t}\n\n\tonContainerDestroy() {\n\t\tthis.unbindGlobalListeners();\n\n        if (this.container && this.config.autoZIndex !== false) {\n            ZIndexUtils.clear(this.container);\n        }\n\n        if (this.config.modal !== false) {\n            this.disableModality();\n        }\n        this.container = null;\n\t}\n\n\tclose() {\n        this.visible = false;\n        this.cd.markForCheck();\n\t}\n\n    hide() {\n        if (this.dialogRef) {\n            this.dialogRef.close();\n        }\n    }\n\n    enableModality() {\n        if (this.config.closable !== false && this.config.dismissableMask) {\n            this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event: any) => {\n                if (this.wrapper && this.wrapper.isSameNode(event.target)) {\n                    this.hide();\n                }\n            });\n        }\n\n        if (this.config.modal !== false) {\n            DomHandler.addClass(document.body, 'p-overflow-hidden');\n        }\n    }\n\n    disableModality() {\n        if (this.wrapper) {\n            if (this.config.dismissableMask) {\n                this.unbindMaskClickListener();\n            }\n\n            if (this.config.modal !== false) {\n                DomHandler.removeClass(document.body, 'p-overflow-hidden');\n            }\n\n            if (!(this.cd as ViewRef).destroyed) {\n                this.cd.detectChanges();\n            }\n        }\n    }\n\n    onKeydown(event: KeyboardEvent) {\n        if (event.which === 9) {\n            event.preventDefault();\n\n            let focusableElements = DomHandler.getFocusableElements(this.container);\n\n            if (focusableElements && focusableElements.length > 0) {\n                if (!focusableElements[0].ownerDocument.activeElement) {\n                    focusableElements[0].focus();\n                }\n                else {\n                    let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n                    if (event.shiftKey) {\n                        if (focusedIndex == -1 || focusedIndex === 0)\n                            focusableElements[focusableElements.length - 1].focus();\n                        else\n                            focusableElements[focusedIndex - 1].focus();\n                    }\n                    else {\n                        if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))\n                            focusableElements[0].focus();\n                        else\n                            focusableElements[focusedIndex + 1].focus();\n                    }\n                }\n            }\n        }\n    }\n\n    focus() {\n        let focusable = DomHandler.findSingle(this.container, '[autofocus]');\n        if (focusable) {\n            this.zone.runOutsideAngular(() => {\n                setTimeout(() => focusable.focus(), 5);\n            });\n        }\n    }\n\n\tbindGlobalListeners() {\n        this.bindDocumentKeydownListener();\n\n        if (this.config.closeOnEscape !== false && this.config.closable !== false) {\n            this.bindDocumentEscapeListener();\n        }\n    }\n\n    unbindGlobalListeners() {\n        this.unbindDocumentKeydownListener();\n        this.unbindDocumentEscapeListener();\n    }\n\n    bindDocumentKeydownListener() {\n        this.zone.runOutsideAngular(() => {\n            this.documentKeydownListener = this.onKeydown.bind(this);\n            window.document.addEventListener('keydown', this.documentKeydownListener);\n        });\n    }\n\n    unbindDocumentKeydownListener() {\n        if (this.documentKeydownListener) {\n            window.document.removeEventListener('keydown', this.documentKeydownListener);\n            this.documentKeydownListener = null;\n        }\n    }\n\n\tbindDocumentEscapeListener() {\n        const documentTarget: any = this.maskViewChild ? this.maskViewChild.nativeElement.ownerDocument : 'document';\n\n        this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {\n            if (event.which == 27) {\n                if (parseInt(this.container.style.zIndex) == ZIndexUtils.getCurrent()) {\n\t\t\t\t\tthis.hide();\n\t\t\t\t}\n            }\n        });\n    }\n\n    unbindDocumentEscapeListener() {\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n    }\n\n    unbindMaskClickListener() {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n        }\n    }\n\n\tngOnDestroy() {\n\t\tthis.onContainerDestroy();\n\n\t\tif (this.componentRef) {\n\t\t\tthis.componentRef.destroy();\n\t\t}\n\t}\n}\n\n@NgModule({\n\timports: [CommonModule],\n\tdeclarations: [DynamicDialogComponent, DynamicDialogContent],\n\tentryComponents: [DynamicDialogComponent]\n})\nexport class DynamicDialogModule { }\n","import { Injector, Type, InjectionToken, InjectFlags } from '@angular/core';\r\n\r\nexport class DynamicDialogInjector implements Injector {\r\n\t\r\n\tconstructor(private _parentInjector: Injector, private _additionalTokens: WeakMap<any, any>) { }\r\n\r\n\tget<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): T;\r\n\tget(token: any, notFoundValue?: any);\r\n\tget(token: any, notFoundValue?: any, flags?: any) {\r\n\t\tconst value = this._additionalTokens.get(token);\r\n\r\n\t\tif (value) return value;\r\n\r\n\t\treturn this._parentInjector.get<any>(token, notFoundValue);\r\n\t}\r\n}\r\n","import { Injectable, ComponentFactoryResolver, ApplicationRef, Injector, Type, EmbeddedViewRef, ComponentRef } from '@angular/core';\nimport { DynamicDialogComponent } from './dynamicdialog';\nimport { DynamicDialogInjector } from './dynamicdialog-injector';\nimport { DynamicDialogConfig } from './dynamicdialog-config';\nimport { DynamicDialogRef } from './dynamicdialog-ref';\n\n@Injectable()\nexport class DialogService {\n\n    dialogComponentRefMap: Map<DynamicDialogRef, ComponentRef<DynamicDialogComponent>> = new Map();\n\n    constructor(private componentFactoryResolver: ComponentFactoryResolver, private appRef: ApplicationRef, private injector: Injector) {\n    }\n\n    public open(componentType: Type<any>, config: DynamicDialogConfig) {\n        const dialogRef = this.appendDialogComponentToBody(config);\n\n        this.dialogComponentRefMap.get(dialogRef).instance.childComponentType = componentType;\n\n        return dialogRef;\n    }\n\n    private appendDialogComponentToBody(config: DynamicDialogConfig) {\n        const map = new WeakMap();\n        map.set(DynamicDialogConfig, config);\n\n        const dialogRef = new DynamicDialogRef();\n        map.set(DynamicDialogRef, dialogRef);\n\n        const sub = dialogRef.onClose.subscribe(() => {\n            this.dialogComponentRefMap.get(dialogRef).instance.close();\n        });\n\n        const destroySub = dialogRef.onDestroy.subscribe(() => {\n            this.removeDialogComponentFromBody(dialogRef);\n            destroySub.unsubscribe();\n            sub.unsubscribe();\n        });\n\n        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(DynamicDialogComponent);\n        const componentRef = componentFactory.create(new DynamicDialogInjector(this.injector, map));\n\n        this.appRef.attachView(componentRef.hostView);\n\n        const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n        document.body.appendChild(domElem);\n\n        this.dialogComponentRefMap.set(dialogRef, componentRef);\n\n        return dialogRef;\n    }\n\n    private removeDialogComponentFromBody(dialogRef: DynamicDialogRef) {\n        if (!dialogRef || !this.dialogComponentRefMap.has(dialogRef)) {\n            return;\n        }\n\n        const dialogComponentRef = this.dialogComponentRefMap.get(dialogRef);\n        this.appRef.detachView(dialogComponentRef.hostView);\n        dialogComponentRef.destroy();\n        this.dialogComponentRefMap.delete(dialogRef);\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-editor.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-editor.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-editor.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,264 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Output, ContentChild, Input, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { Header, PrimeTemplate, SharedModule } from 'primeng/api';
+import { DomHandler } from 'primeng/dom';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import * as Quill from 'quill';
+
+const EDITOR_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Editor),
+    multi: true
+};
+class Editor {
+    constructor(el) {
+        this.el = el;
+        this.onTextChange = new EventEmitter();
+        this.onSelectionChange = new EventEmitter();
+        this.onInit = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    ngAfterViewInit() {
+        let editorElement = DomHandler.findSingle(this.el.nativeElement, 'div.p-editor-content');
+        let toolbarElement = DomHandler.findSingle(this.el.nativeElement, 'div.p-editor-toolbar');
+        let defaultModule = { toolbar: toolbarElement };
+        let modules = this.modules ? { ...defaultModule, ...this.modules } : defaultModule;
+        this.quill = new Quill(editorElement, {
+            modules: modules,
+            placeholder: this.placeholder,
+            readOnly: this.readonly,
+            theme: 'snow',
+            formats: this.formats,
+            bounds: this.bounds,
+            debug: this.debug,
+            scrollingContainer: this.scrollingContainer
+        });
+        if (this.value) {
+            this.quill.setContents(this.quill.clipboard.convert(this.value));
+        }
+        this.quill.on('text-change', (delta, oldContents, source) => {
+            if (source === 'user') {
+                let html = DomHandler.findSingle(editorElement, '.ql-editor').innerHTML;
+                let text = this.quill.getText().trim();
+                if (html === '<p><br></p>') {
+                    html = null;
+                }
+                this.onTextChange.emit({
+                    htmlValue: html,
+                    textValue: text,
+                    delta: delta,
+                    source: source
+                });
+                this.onModelChange(html);
+                this.onModelTouched();
+            }
+        });
+        this.quill.on('selection-change', (range, oldRange, source) => {
+            this.onSelectionChange.emit({
+                range: range,
+                oldRange: oldRange,
+                source: source
+            });
+        });
+        this.onInit.emit({
+            editor: this.quill
+        });
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    writeValue(value) {
+        this.value = value;
+        if (this.quill) {
+            if (value)
+                this.quill.setContents(this.quill.clipboard.convert(value));
+            else
+                this.quill.setText('');
+        }
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    getQuill() {
+        return this.quill;
+    }
+    get readonly() {
+        return this._readonly;
+    }
+    set readonly(val) {
+        this._readonly = val;
+        if (this.quill) {
+            if (this._readonly)
+                this.quill.disable();
+            else
+                this.quill.enable();
+        }
+    }
+}
+Editor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Editor, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+Editor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Editor, selector: "p-editor", inputs: { style: "style", styleClass: "styleClass", placeholder: "placeholder", formats: "formats", modules: "modules", bounds: "bounds", scrollingContainer: "scrollingContainer", debug: "debug", readonly: "readonly" }, outputs: { onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", onInit: "onInit" }, host: { classAttribute: "p-element" }, providers: [EDITOR_VALUE_ACCESSOR], queries: [{ propertyName: "toolbar", first: true, predicate: Header, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [ngClass]="'p-editor-container'" [class]="styleClass">
+            <div class="p-editor-toolbar" *ngIf="toolbar || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            </div>
+            <div class="p-editor-toolbar" *ngIf="!toolbar && !headerTemplate">
+                <span class="ql-formats">
+                    <select class="ql-header">
+                      <option value="1">Heading</option>
+                      <option value="2">Subheading</option>
+                      <option selected>Normal</option>
+                    </select>
+                    <select class="ql-font">
+                      <option selected>Sans Serif</option>
+                      <option value="serif">Serif</option>
+                      <option value="monospace">Monospace</option>
+                    </select>
+                </span>
+                <span class="ql-formats">
+                    <button class="ql-bold" aria-label="Bold" type="button"></button>
+                    <button class="ql-italic" aria-label="Italic" type="button"></button>
+                    <button class="ql-underline" aria-label="Underline" type="button"></button>
+                </span>
+                <span class="ql-formats">
+                    <select class="ql-color"></select>
+                    <select class="ql-background"></select>
+                </span>
+                <span class="ql-formats">
+                    <button class="ql-list" value="ordered" aria-label="Ordered List" type="button"></button>
+                    <button class="ql-list" value="bullet" aria-label="Unordered List" type="button"></button>
+                    <select class="ql-align">
+                        <option selected></option>
+                        <option value="center">center</option>
+                        <option value="right">right</option>
+                        <option value="justify">justify</option>
+                    </select>
+                </span>
+                <span class="ql-formats">
+                    <button class="ql-link" aria-label="Insert Link" type="button"></button>
+                    <button class="ql-image" aria-label="Insert Image" type="button"></button>
+                    <button class="ql-code-block" aria-label="Insert Code Block" type="button"></button>
+                </span>
+                <span class="ql-formats">
+                    <button class="ql-clean" aria-label="Remove Styles" type="button"></button>
+                </span>
+            </div>
+            <div class="p-editor-content" [ngStyle]="style"></div>
+        </div>
+    `, isInline: true, styles: [".p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item{width:auto;height:auto}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Editor, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-editor', template: `
+        <div [ngClass]="'p-editor-container'" [class]="styleClass">
+            <div class="p-editor-toolbar" *ngIf="toolbar || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            </div>
+            <div class="p-editor-toolbar" *ngIf="!toolbar && !headerTemplate">
+                <span class="ql-formats">
+                    <select class="ql-header">
+                      <option value="1">Heading</option>
+                      <option value="2">Subheading</option>
+                      <option selected>Normal</option>
+                    </select>
+                    <select class="ql-font">
+                      <option selected>Sans Serif</option>
+                      <option value="serif">Serif</option>
+                      <option value="monospace">Monospace</option>
+                    </select>
+                </span>
+                <span class="ql-formats">
+                    <button class="ql-bold" aria-label="Bold" type="button"></button>
+                    <button class="ql-italic" aria-label="Italic" type="button"></button>
+                    <button class="ql-underline" aria-label="Underline" type="button"></button>
+                </span>
+                <span class="ql-formats">
+                    <select class="ql-color"></select>
+                    <select class="ql-background"></select>
+                </span>
+                <span class="ql-formats">
+                    <button class="ql-list" value="ordered" aria-label="Ordered List" type="button"></button>
+                    <button class="ql-list" value="bullet" aria-label="Unordered List" type="button"></button>
+                    <select class="ql-align">
+                        <option selected></option>
+                        <option value="center">center</option>
+                        <option value="right">right</option>
+                        <option value="justify">justify</option>
+                    </select>
+                </span>
+                <span class="ql-formats">
+                    <button class="ql-link" aria-label="Insert Link" type="button"></button>
+                    <button class="ql-image" aria-label="Insert Image" type="button"></button>
+                    <button class="ql-code-block" aria-label="Insert Code Block" type="button"></button>
+                </span>
+                <span class="ql-formats">
+                    <button class="ql-clean" aria-label="Remove Styles" type="button"></button>
+                </span>
+            </div>
+            <div class="p-editor-content" [ngStyle]="style"></div>
+        </div>
+    `, providers: [EDITOR_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item{width:auto;height:auto}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { onTextChange: [{
+                type: Output
+            }], onSelectionChange: [{
+                type: Output
+            }], toolbar: [{
+                type: ContentChild,
+                args: [Header]
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], formats: [{
+                type: Input
+            }], modules: [{
+                type: Input
+            }], bounds: [{
+                type: Input
+            }], scrollingContainer: [{
+                type: Input
+            }], debug: [{
+                type: Input
+            }], onInit: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], readonly: [{
+                type: Input
+            }] } });
+class EditorModule {
+}
+EditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: EditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+EditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: EditorModule, declarations: [Editor], imports: [CommonModule], exports: [Editor, SharedModule] });
+EditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: EditorModule, imports: [[CommonModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: EditorModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Editor, SharedModule],
+                    declarations: [Editor]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { EDITOR_VALUE_ACCESSOR, Editor, EditorModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-editor.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-editor.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-editor.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-editor.mjs","sources":["../../src/app/components/editor/editor.ts","../../src/app/components/editor/primeng-editor.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,AfterViewInit,Input,Output,EventEmitter,ContentChild,forwardRef,ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, QueryList, AfterContentInit, TemplateRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SharedModule,Header, PrimeTemplate} from 'primeng/api'\nimport {DomHandler} from 'primeng/dom';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport * as Quill from \"quill\";\n\nexport const EDITOR_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => Editor),\n  multi: true\n};\n\n@Component({\n    selector: 'p-editor',\n    template: `\n        <div [ngClass]=\"'p-editor-container'\" [class]=\"styleClass\">\n            <div class=\"p-editor-toolbar\" *ngIf=\"toolbar || headerTemplate\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n            </div>\n            <div class=\"p-editor-toolbar\" *ngIf=\"!toolbar && !headerTemplate\">\n                <span class=\"ql-formats\">\n                    <select class=\"ql-header\">\n                      <option value=\"1\">Heading</option>\n                      <option value=\"2\">Subheading</option>\n                      <option selected>Normal</option>\n                    </select>\n                    <select class=\"ql-font\">\n                      <option selected>Sans Serif</option>\n                      <option value=\"serif\">Serif</option>\n                      <option value=\"monospace\">Monospace</option>\n                    </select>\n                </span>\n                <span class=\"ql-formats\">\n                    <button class=\"ql-bold\" aria-label=\"Bold\" type=\"button\"></button>\n                    <button class=\"ql-italic\" aria-label=\"Italic\" type=\"button\"></button>\n                    <button class=\"ql-underline\" aria-label=\"Underline\" type=\"button\"></button>\n                </span>\n                <span class=\"ql-formats\">\n                    <select class=\"ql-color\"></select>\n                    <select class=\"ql-background\"></select>\n                </span>\n                <span class=\"ql-formats\">\n                    <button class=\"ql-list\" value=\"ordered\" aria-label=\"Ordered List\" type=\"button\"></button>\n                    <button class=\"ql-list\" value=\"bullet\" aria-label=\"Unordered List\" type=\"button\"></button>\n                    <select class=\"ql-align\">\n                        <option selected></option>\n                        <option value=\"center\">center</option>\n                        <option value=\"right\">right</option>\n                        <option value=\"justify\">justify</option>\n                    </select>\n                </span>\n                <span class=\"ql-formats\">\n                    <button class=\"ql-link\" aria-label=\"Insert Link\" type=\"button\"></button>\n                    <button class=\"ql-image\" aria-label=\"Insert Image\" type=\"button\"></button>\n                    <button class=\"ql-code-block\" aria-label=\"Insert Code Block\" type=\"button\"></button>\n                </span>\n                <span class=\"ql-formats\">\n                    <button class=\"ql-clean\" aria-label=\"Remove Styles\" type=\"button\"></button>\n                </span>\n            </div>\n            <div class=\"p-editor-content\" [ngStyle]=\"style\"></div>\n        </div>\n    `,\n    providers: [EDITOR_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styleUrls: ['./editor.css'],\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Editor implements AfterViewInit,AfterContentInit,ControlValueAccessor {\n\n    @Output() onTextChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSelectionChange: EventEmitter<any> = new EventEmitter();\n\n    @ContentChild(Header) toolbar;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() placeholder: string;\n\n    @Input() formats: string[];\n\n    @Input() modules: any;\n\n    @Input() bounds: any;\n\n    @Input() scrollingContainer: any;\n\n    @Input() debug: string;\n\n    @Output() onInit: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    value: string;\n\n    _readonly: boolean;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    quill: any;\n\n    headerTemplate: TemplateRef<any>;\n\n    constructor(public el: ElementRef) {}\n\n    ngAfterViewInit() {\n        let editorElement = DomHandler.findSingle(this.el.nativeElement ,'div.p-editor-content');\n        let toolbarElement = DomHandler.findSingle(this.el.nativeElement ,'div.p-editor-toolbar');\n        let defaultModule  = {toolbar: toolbarElement};\n        let modules = this.modules ? {...defaultModule, ...this.modules} : defaultModule;\n\n        this.quill = new Quill(editorElement, {\n            modules: modules,\n            placeholder: this.placeholder,\n            readOnly: this.readonly,\n            theme: 'snow',\n            formats: this.formats,\n            bounds: this.bounds,\n            debug: this.debug,\n            scrollingContainer: this.scrollingContainer\n        });\n\n        if (this.value) {\n            this.quill.setContents(this.quill.clipboard.convert(this.value));\n        }\n\n        this.quill.on('text-change', (delta, oldContents, source) => {\n            if (source === 'user') {\n                let html = DomHandler.findSingle(editorElement, '.ql-editor').innerHTML;\n                let text = this.quill.getText().trim();\n                if (html === '<p><br></p>') {\n                    html = null;\n                }\n\n                this.onTextChange.emit({\n                    htmlValue: html,\n                    textValue: text,\n                    delta: delta,\n                    source: source\n                });\n\n                this.onModelChange(html);\n                this.onModelTouched();\n            }\n        });\n\n        this.quill.on('selection-change', (range, oldRange, source) => {\n            this.onSelectionChange.emit({\n                range: range,\n                oldRange: oldRange,\n                source: source\n            });\n        });\n\n        this.onInit.emit({\n            editor: this.quill\n        });\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n\n        if (this.quill) {\n            if (value)\n                this.quill.setContents(this.quill.clipboard.convert(value));\n            else\n                this.quill.setText('');\n        }\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    getQuill() {\n        return this.quill;\n    }\n\n    @Input() get readonly(): boolean {\n        return this._readonly;\n    }\n\n    set readonly(val:boolean) {\n        this._readonly = val;\n\n        if (this.quill) {\n            if (this._readonly)\n                this.quill.disable();\n            else\n                this.quill.enable();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Editor,SharedModule],\n    declarations: [Editor]\n})\nexport class EditorModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-fieldset.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-fieldset.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-fieldset.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,180 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ContentChildren, NgModule } from '@angular/core';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+
+let idx = 0;
+class Fieldset {
+    constructor(el) {
+        this.el = el;
+        this.collapsed = false;
+        this.collapsedChange = new EventEmitter();
+        this.onBeforeToggle = new EventEmitter();
+        this.onAfterToggle = new EventEmitter();
+        this.transitionOptions = '400ms cubic-bezier(0.86, 0, 0.07, 1)';
+        this.id = `p-fieldset-${idx++}`;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    toggle(event) {
+        if (this.animating) {
+            return false;
+        }
+        this.animating = true;
+        this.onBeforeToggle.emit({ originalEvent: event, collapsed: this.collapsed });
+        if (this.collapsed)
+            this.expand(event);
+        else
+            this.collapse(event);
+        this.onAfterToggle.emit({ originalEvent: event, collapsed: this.collapsed });
+        event.preventDefault();
+    }
+    expand(event) {
+        this.collapsed = false;
+        this.collapsedChange.emit(this.collapsed);
+    }
+    collapse(event) {
+        this.collapsed = true;
+        this.collapsedChange.emit(this.collapsed);
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    onToggleDone(event) {
+        this.animating = false;
+    }
+}
+Fieldset.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Fieldset, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+Fieldset.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Fieldset, selector: "p-fieldset", inputs: { legend: "legend", toggleable: "toggleable", collapsed: "collapsed", style: "style", styleClass: "styleClass", transitionOptions: "transitionOptions" }, outputs: { collapsedChange: "collapsedChange", onBeforeToggle: "onBeforeToggle", onAfterToggle: "onAfterToggle" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <fieldset [attr.id]="id" [ngClass]="{'p-fieldset p-component': true, 'p-fieldset-toggleable': toggleable}" [ngStyle]="style" [class]="styleClass">
+            <legend class="p-fieldset-legend">
+                <ng-container *ngIf="toggleable; else legendContent">
+                    <a tabindex="0" (click)="toggle($event)" (keydown.enter)="toggle($event)" [attr.aria-controls]="id + '-content'" [attr.aria-expanded]="!collapsed" pRipple>
+                        <span class="p-fieldset-toggler pi" *ngIf="toggleable" [ngClass]="{'pi-minus': !collapsed,'pi-plus':collapsed}"></span>
+                        <ng-container *ngTemplateOutlet="legendContent"></ng-container>
+                    </a>
+                </ng-container>
+                <ng-template #legendContent>
+                    <span class="p-fieldset-legend-text">{{legend}}</span>
+                    <ng-content select="p-header"></ng-content>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                </ng-template>
+            </legend>
+            <div [attr.id]="id + '-content'" class="p-toggleable-content" [@fieldsetContent]="collapsed ? {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}} : {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*'}}"
+                        [attr.aria-labelledby]="id" [attr.aria-hidden]="collapsed"
+                         (@fieldsetContent.done)="onToggleDone($event)" role="region">
+                <div class="p-fieldset-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+            </div>
+        </fieldset>
+    `, isInline: true, styles: [".p-fieldset-legend>a,.p-fieldset-legend>span{display:flex;align-items:center;justify-content:center}.p-fieldset-toggleable .p-fieldset-legend a{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;position:relative}.p-fieldset-legend-text{line-height:1}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.Ripple, selector: "[pRipple]" }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
+        trigger('fieldsetContent', [
+            state('hidden', style({
+                height: '0',
+                overflow: 'hidden'
+            })),
+            state('visible', style({
+                height: '*'
+            })),
+            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+            transition('void => *', animate(0))
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Fieldset, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-fieldset', template: `
+        <fieldset [attr.id]="id" [ngClass]="{'p-fieldset p-component': true, 'p-fieldset-toggleable': toggleable}" [ngStyle]="style" [class]="styleClass">
+            <legend class="p-fieldset-legend">
+                <ng-container *ngIf="toggleable; else legendContent">
+                    <a tabindex="0" (click)="toggle($event)" (keydown.enter)="toggle($event)" [attr.aria-controls]="id + '-content'" [attr.aria-expanded]="!collapsed" pRipple>
+                        <span class="p-fieldset-toggler pi" *ngIf="toggleable" [ngClass]="{'pi-minus': !collapsed,'pi-plus':collapsed}"></span>
+                        <ng-container *ngTemplateOutlet="legendContent"></ng-container>
+                    </a>
+                </ng-container>
+                <ng-template #legendContent>
+                    <span class="p-fieldset-legend-text">{{legend}}</span>
+                    <ng-content select="p-header"></ng-content>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                </ng-template>
+            </legend>
+            <div [attr.id]="id + '-content'" class="p-toggleable-content" [@fieldsetContent]="collapsed ? {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}} : {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*'}}"
+                        [attr.aria-labelledby]="id" [attr.aria-hidden]="collapsed"
+                         (@fieldsetContent.done)="onToggleDone($event)" role="region">
+                <div class="p-fieldset-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+            </div>
+        </fieldset>
+    `, animations: [
+                        trigger('fieldsetContent', [
+                            state('hidden', style({
+                                height: '0',
+                                overflow: 'hidden'
+                            })),
+                            state('visible', style({
+                                height: '*'
+                            })),
+                            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+                            transition('void => *', animate(0))
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-fieldset-legend>a,.p-fieldset-legend>span{display:flex;align-items:center;justify-content:center}.p-fieldset-toggleable .p-fieldset-legend a{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;position:relative}.p-fieldset-legend-text{line-height:1}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { legend: [{
+                type: Input
+            }], toggleable: [{
+                type: Input
+            }], collapsed: [{
+                type: Input
+            }], collapsedChange: [{
+                type: Output
+            }], onBeforeToggle: [{
+                type: Output
+            }], onAfterToggle: [{
+                type: Output
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], transitionOptions: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class FieldsetModule {
+}
+FieldsetModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FieldsetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+FieldsetModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FieldsetModule, declarations: [Fieldset], imports: [CommonModule, RippleModule], exports: [Fieldset, SharedModule] });
+FieldsetModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FieldsetModule, imports: [[CommonModule, RippleModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FieldsetModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule],
+                    exports: [Fieldset, SharedModule],
+                    declarations: [Fieldset]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Fieldset, FieldsetModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-fieldset.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-fieldset.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-fieldset.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-fieldset.mjs","sources":["../../src/app/components/fieldset/fieldset.ts","../../src/app/components/fieldset/primeng-fieldset.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,EventEmitter,ElementRef,ChangeDetectionStrategy, ViewEncapsulation, AfterContentInit, QueryList, ContentChildren, TemplateRef} from '@angular/core';\nimport {trigger,state,style,transition,animate} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {SharedModule, PrimeTemplate} from 'primeng/api';\nimport {BlockableUI} from 'primeng/api';\nimport {RippleModule} from 'primeng/ripple';\n\nlet idx: number = 0;\n\n@Component({\n    selector: 'p-fieldset',\n    template: `\n        <fieldset [attr.id]=\"id\" [ngClass]=\"{'p-fieldset p-component': true, 'p-fieldset-toggleable': toggleable}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <legend class=\"p-fieldset-legend\">\n                <ng-container *ngIf=\"toggleable; else legendContent\">\n                    <a tabindex=\"0\" (click)=\"toggle($event)\" (keydown.enter)=\"toggle($event)\" [attr.aria-controls]=\"id + '-content'\" [attr.aria-expanded]=\"!collapsed\" pRipple>\n                        <span class=\"p-fieldset-toggler pi\" *ngIf=\"toggleable\" [ngClass]=\"{'pi-minus': !collapsed,'pi-plus':collapsed}\"></span>\n                        <ng-container *ngTemplateOutlet=\"legendContent\"></ng-container>\n                    </a>\n                </ng-container>\n                <ng-template #legendContent>\n                    <span class=\"p-fieldset-legend-text\">{{legend}}</span>\n                    <ng-content select=\"p-header\"></ng-content>\n                    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                </ng-template>\n            </legend>\n            <div [attr.id]=\"id + '-content'\" class=\"p-toggleable-content\" [@fieldsetContent]=\"collapsed ? {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}} : {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*'}}\"\n                        [attr.aria-labelledby]=\"id\" [attr.aria-hidden]=\"collapsed\"\n                         (@fieldsetContent.done)=\"onToggleDone($event)\" role=\"region\">\n                <div class=\"p-fieldset-content\">\n                    <ng-content></ng-content>\n                    <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                </div>\n            </div>\n        </fieldset>\n    `,\n    animations: [\n        trigger('fieldsetContent', [\n            state('hidden', style({\n                height: '0',\n                overflow: 'hidden'\n            })),\n            state('visible', style({\n                height: '*'\n            })),\n            transition('visible <=> hidden', [style({overflow: 'hidden'}), animate('{{transitionParams}}')]),\n            transition('void => *', animate(0))\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./fieldset.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Fieldset implements AfterContentInit,BlockableUI {\n\n    @Input() legend: string;\n\n    @Input() toggleable: boolean;\n\n    @Input() collapsed: boolean = false;\n\n    @Output() collapsedChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBeforeToggle: EventEmitter<any> = new EventEmitter();\n\n    @Output() onAfterToggle: EventEmitter<any> = new EventEmitter();\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() transitionOptions: string = '400ms cubic-bezier(0.86, 0, 0.07, 1)';\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    public animating: boolean;\n\n    headerTemplate: TemplateRef<any>;\n\n    contentTemplate: TemplateRef<any>;\n\n    constructor(private el: ElementRef) {}\n\n    id: string = `p-fieldset-${idx++}`;\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    toggle(event) {\n        if (this.animating) {\n            return false;\n        }\n\n        this.animating = true;\n        this.onBeforeToggle.emit({originalEvent: event, collapsed: this.collapsed});\n\n        if (this.collapsed)\n            this.expand(event);\n        else\n            this.collapse(event);\n\n        this.onAfterToggle.emit({originalEvent: event, collapsed: this.collapsed});\n        event.preventDefault();\n    }\n\n    expand(event) {\n        this.collapsed = false;\n        this.collapsedChange.emit(this.collapsed);\n    }\n\n    collapse(event) {\n        this.collapsed = true;\n        this.collapsedChange.emit(this.collapsed);\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    onToggleDone(event: Event) {\n        this.animating = false;\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,RippleModule],\n    exports: [Fieldset,SharedModule],\n    declarations: [Fieldset]\n})\nexport class FieldsetModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-fileupload.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-fileupload.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-fileupload.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,585 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';
+import * as i7 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i4 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import * as i6 from 'primeng/messages';
+import { MessagesModule } from 'primeng/messages';
+import * as i5 from 'primeng/progressbar';
+import { ProgressBarModule } from 'primeng/progressbar';
+import { DomHandler } from 'primeng/dom';
+import * as i3 from 'primeng/api';
+import { TranslationKeys, PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i8 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i2 from '@angular/common/http';
+import { HttpEventType } from '@angular/common/http';
+import * as i1 from '@angular/platform-browser';
+
+class FileUpload {
+    constructor(el, sanitizer, zone, http, cd, config) {
+        this.el = el;
+        this.sanitizer = sanitizer;
+        this.zone = zone;
+        this.http = http;
+        this.cd = cd;
+        this.config = config;
+        this.method = 'post';
+        this.invalidFileSizeMessageSummary = '{0}: Invalid file size, ';
+        this.invalidFileSizeMessageDetail = 'maximum upload size is {0}.';
+        this.invalidFileTypeMessageSummary = '{0}: Invalid file type, ';
+        this.invalidFileTypeMessageDetail = 'allowed file types: {0}.';
+        this.invalidFileLimitMessageDetail = 'limit is {0} at most.';
+        this.invalidFileLimitMessageSummary = 'Maximum number of files exceeded, ';
+        this.previewWidth = 50;
+        this.chooseIcon = 'pi pi-plus';
+        this.uploadIcon = 'pi pi-upload';
+        this.cancelIcon = 'pi pi-times';
+        this.showUploadButton = true;
+        this.showCancelButton = true;
+        this.mode = 'advanced';
+        this.onBeforeUpload = new EventEmitter();
+        this.onSend = new EventEmitter();
+        this.onUpload = new EventEmitter();
+        this.onError = new EventEmitter();
+        this.onClear = new EventEmitter();
+        this.onRemove = new EventEmitter();
+        this.onSelect = new EventEmitter();
+        this.onProgress = new EventEmitter();
+        this.uploadHandler = new EventEmitter();
+        this._files = [];
+        this.progress = 0;
+        this.uploadedFileCount = 0;
+    }
+    set files(files) {
+        this._files = [];
+        for (let i = 0; i < files.length; i++) {
+            let file = files[i];
+            if (this.validate(file)) {
+                if (this.isImage(file)) {
+                    file.objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));
+                }
+                this._files.push(files[i]);
+            }
+        }
+    }
+    get files() {
+        return this._files;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'file':
+                    this.fileTemplate = item.template;
+                    break;
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                case 'toolbar':
+                    this.toolbarTemplate = item.template;
+                    break;
+                default:
+                    this.fileTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngOnInit() {
+        this.translationSubscription = this.config.translationObserver.subscribe(() => {
+            this.cd.markForCheck();
+        });
+    }
+    ngAfterViewInit() {
+        if (this.mode === 'advanced') {
+            this.zone.runOutsideAngular(() => {
+                if (this.content)
+                    this.content.nativeElement.addEventListener('dragover', this.onDragOver.bind(this));
+            });
+        }
+    }
+    choose() {
+        this.advancedFileInput.nativeElement.click();
+    }
+    onFileSelect(event) {
+        if (event.type !== 'drop' && this.isIE11() && this.duplicateIEEvent) {
+            this.duplicateIEEvent = false;
+            return;
+        }
+        this.msgs = [];
+        if (!this.multiple) {
+            this.files = [];
+        }
+        let files = event.dataTransfer ? event.dataTransfer.files : event.target.files;
+        for (let i = 0; i < files.length; i++) {
+            let file = files[i];
+            if (!this.isFileSelected(file)) {
+                if (this.validate(file)) {
+                    if (this.isImage(file)) {
+                        file.objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));
+                    }
+                    this.files.push(files[i]);
+                }
+            }
+        }
+        this.onSelect.emit({ originalEvent: event, files: files, currentFiles: this.files });
+        if (this.fileLimit && this.mode == "advanced") {
+            this.checkFileLimit();
+        }
+        if (this.hasFiles() && this.auto && (!(this.mode === "advanced") || !this.isFileLimitExceeded())) {
+            this.upload();
+        }
+        if (event.type !== 'drop' && this.isIE11()) {
+            this.clearIEInput();
+        }
+        else {
+            this.clearInputElement();
+        }
+    }
+    isFileSelected(file) {
+        for (let sFile of this.files) {
+            if ((sFile.name + sFile.type + sFile.size) === (file.name + file.type + file.size)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    isIE11() {
+        return !!window['MSInputMethodContext'] && !!document['documentMode'];
+    }
+    validate(file) {
+        if (this.accept && !this.isFileTypeValid(file)) {
+            this.msgs.push({
+                severity: 'error',
+                summary: this.invalidFileTypeMessageSummary.replace('{0}', file.name),
+                detail: this.invalidFileTypeMessageDetail.replace('{0}', this.accept)
+            });
+            return false;
+        }
+        if (this.maxFileSize && file.size > this.maxFileSize) {
+            this.msgs.push({
+                severity: 'error',
+                summary: this.invalidFileSizeMessageSummary.replace('{0}', file.name),
+                detail: this.invalidFileSizeMessageDetail.replace('{0}', this.formatSize(this.maxFileSize))
+            });
+            return false;
+        }
+        return true;
+    }
+    isFileTypeValid(file) {
+        let acceptableTypes = this.accept.split(',').map(type => type.trim());
+        for (let type of acceptableTypes) {
+            let acceptable = this.isWildcard(type) ? this.getTypeClass(file.type) === this.getTypeClass(type)
+                : file.type == type || this.getFileExtension(file).toLowerCase() === type.toLowerCase();
+            if (acceptable) {
+                return true;
+            }
+        }
+        return false;
+    }
+    getTypeClass(fileType) {
+        return fileType.substring(0, fileType.indexOf('/'));
+    }
+    isWildcard(fileType) {
+        return fileType.indexOf('*') !== -1;
+    }
+    getFileExtension(file) {
+        return '.' + file.name.split('.').pop();
+    }
+    isImage(file) {
+        return /^image\//.test(file.type);
+    }
+    onImageLoad(img) {
+        window.URL.revokeObjectURL(img.src);
+    }
+    upload() {
+        if (this.customUpload) {
+            if (this.fileLimit) {
+                this.uploadedFileCount += this.files.length;
+            }
+            this.uploadHandler.emit({
+                files: this.files
+            });
+            this.cd.markForCheck();
+        }
+        else {
+            this.uploading = true;
+            this.msgs = [];
+            let formData = new FormData();
+            this.onBeforeUpload.emit({
+                'formData': formData
+            });
+            for (let i = 0; i < this.files.length; i++) {
+                formData.append(this.name, this.files[i], this.files[i].name);
+            }
+            this.http[this.method](this.url, formData, {
+                headers: this.headers, reportProgress: true, observe: 'events', withCredentials: this.withCredentials
+            }).subscribe((event) => {
+                switch (event.type) {
+                    case HttpEventType.Sent:
+                        this.onSend.emit({
+                            originalEvent: event,
+                            'formData': formData
+                        });
+                        break;
+                    case HttpEventType.Response:
+                        this.uploading = false;
+                        this.progress = 0;
+                        if (event['status'] >= 200 && event['status'] < 300) {
+                            if (this.fileLimit) {
+                                this.uploadedFileCount += this.files.length;
+                            }
+                            this.onUpload.emit({ originalEvent: event, files: this.files });
+                        }
+                        else {
+                            this.onError.emit({ files: this.files });
+                        }
+                        this.clear();
+                        break;
+                    case HttpEventType.UploadProgress: {
+                        if (event['loaded']) {
+                            this.progress = Math.round((event['loaded'] * 100) / event['total']);
+                        }
+                        this.onProgress.emit({ originalEvent: event, progress: this.progress });
+                        break;
+                    }
+                }
+                this.cd.markForCheck();
+            }, error => {
+                this.uploading = false;
+                this.onError.emit({ files: this.files, error: error });
+            });
+        }
+    }
+    clear() {
+        this.files = [];
+        this.onClear.emit();
+        this.clearInputElement();
+        this.cd.markForCheck();
+    }
+    remove(event, index) {
+        this.clearInputElement();
+        this.onRemove.emit({ originalEvent: event, file: this.files[index] });
+        this.files.splice(index, 1);
+    }
+    isFileLimitExceeded() {
+        if (this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount && this.focus) {
+            this.focus = false;
+        }
+        return this.fileLimit && this.fileLimit < this.files.length + this.uploadedFileCount;
+    }
+    isChooseDisabled() {
+        return this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount;
+    }
+    checkFileLimit() {
+        if (this.isFileLimitExceeded()) {
+            this.msgs.push({
+                severity: 'error',
+                summary: this.invalidFileLimitMessageSummary.replace('{0}', this.fileLimit.toString()),
+                detail: this.invalidFileLimitMessageDetail.replace('{0}', this.fileLimit.toString())
+            });
+        }
+    }
+    clearInputElement() {
+        if (this.advancedFileInput && this.advancedFileInput.nativeElement) {
+            this.advancedFileInput.nativeElement.value = '';
+        }
+        if (this.basicFileInput && this.basicFileInput.nativeElement) {
+            this.basicFileInput.nativeElement.value = '';
+        }
+    }
+    clearIEInput() {
+        if (this.advancedFileInput && this.advancedFileInput.nativeElement) {
+            this.duplicateIEEvent = true; //IE11 fix to prevent onFileChange trigger again
+            this.advancedFileInput.nativeElement.value = '';
+        }
+    }
+    hasFiles() {
+        return this.files && this.files.length > 0;
+    }
+    onDragEnter(e) {
+        if (!this.disabled) {
+            e.stopPropagation();
+            e.preventDefault();
+        }
+    }
+    onDragOver(e) {
+        if (!this.disabled) {
+            DomHandler.addClass(this.content.nativeElement, 'p-fileupload-highlight');
+            this.dragHighlight = true;
+            e.stopPropagation();
+            e.preventDefault();
+        }
+    }
+    onDragLeave(event) {
+        if (!this.disabled) {
+            DomHandler.removeClass(this.content.nativeElement, 'p-fileupload-highlight');
+        }
+    }
+    onDrop(event) {
+        if (!this.disabled) {
+            DomHandler.removeClass(this.content.nativeElement, 'p-fileupload-highlight');
+            event.stopPropagation();
+            event.preventDefault();
+            let files = event.dataTransfer ? event.dataTransfer.files : event.target.files;
+            let allowDrop = this.multiple || (files && files.length === 1);
+            if (allowDrop) {
+                this.onFileSelect(event);
+            }
+        }
+    }
+    onFocus() {
+        this.focus = true;
+    }
+    onBlur() {
+        this.focus = false;
+    }
+    formatSize(bytes) {
+        if (bytes == 0) {
+            return '0 B';
+        }
+        let k = 1000, dm = 3, sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], i = Math.floor(Math.log(bytes) / Math.log(k));
+        return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
+    }
+    onBasicUploaderClick() {
+        if (this.hasFiles())
+            this.upload();
+        else
+            this.basicFileInput.nativeElement.click();
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    get chooseButtonLabel() {
+        return this.chooseLabel || this.config.getTranslation(TranslationKeys.CHOOSE);
+    }
+    get uploadButtonLabel() {
+        return this.uploadLabel || this.config.getTranslation(TranslationKeys.UPLOAD);
+    }
+    get cancelButtonLabel() {
+        return this.cancelLabel || this.config.getTranslation(TranslationKeys.CANCEL);
+    }
+    ngOnDestroy() {
+        if (this.content && this.content.nativeElement) {
+            this.content.nativeElement.removeEventListener('dragover', this.onDragOver);
+        }
+        if (this.translationSubscription) {
+            this.translationSubscription.unsubscribe();
+        }
+    }
+}
+FileUpload.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FileUpload, deps: [{ token: i0.ElementRef }, { token: i1.DomSanitizer }, { token: i0.NgZone }, { token: i2.HttpClient }, { token: i0.ChangeDetectorRef }, { token: i3.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+FileUpload.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: FileUpload, selector: "p-fileUpload", inputs: { name: "name", url: "url", method: "method", multiple: "multiple", accept: "accept", disabled: "disabled", auto: "auto", withCredentials: "withCredentials", maxFileSize: "maxFileSize", invalidFileSizeMessageSummary: "invalidFileSizeMessageSummary", invalidFileSizeMessageDetail: "invalidFileSizeMessageDetail", invalidFileTypeMessageSummary: "invalidFileTypeMessageSummary", invalidFileTypeMessageDetail: "invalidFileTypeMessageDetail", invalidFileLimitMessageDetail: "invalidFileLimitMessageDetail", invalidFileLimitMessageSummary: "invalidFileLimitMessageSummary", style: "style", styleClass: "styleClass", previewWidth: "previewWidth", chooseLabel: "chooseLabel", uploadLabel: "uploadLabel", cancelLabel: "cancelLabel", chooseIcon: "chooseIcon", uploadIcon: "uploadIcon", cancelIcon: "cancelIcon", showUploadButton: "showUploadButton", showCancelButton: "showCancelButton", mode: "mode", headers: "headers", customUpload: "customUpload", fileLimit: "fileLimit", files: "files" }, outputs: { onBeforeUpload: "onBeforeUpload", onSend: "onSend", onUpload: "onUpload", onError: "onError", onClear: "onClear", onRemove: "onRemove", onSelect: "onSelect", onProgress: "onProgress", uploadHandler: "uploadHandler" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "advancedFileInput", first: true, predicate: ["advancedfileinput"], descendants: true }, { propertyName: "basicFileInput", first: true, predicate: ["basicfileinput"], descendants: true }, { propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="'p-fileupload p-fileupload-advanced p-component'" [ngStyle]="style" [class]="styleClass" *ngIf="mode === 'advanced'">
+            <div class="p-fileupload-buttonbar">
+                <span class="p-button p-component p-fileupload-choose" [ngClass]="{'p-focus': focus, 'p-disabled':disabled || isChooseDisabled()}" (focus)="onFocus()" (blur)="onBlur()" pRipple
+                    (click)="choose()" (keydown.enter)="choose()" tabindex="0">
+                    <input #advancedfileinput type="file" (change)="onFileSelect($event)" [multiple]="multiple" [accept]="accept" [disabled]="disabled || isChooseDisabled()" [attr.title]="''">
+                    <span [ngClass]="'p-button-icon p-button-icon-left'" [class]="chooseIcon"></span>
+                    <span class="p-button-label">{{chooseButtonLabel}}</span>
+                </span>
+
+                <p-button *ngIf="!auto&&showUploadButton" type="button" [label]="uploadButtonLabel" [icon]="uploadIcon" (onClick)="upload()" [disabled]="!hasFiles() || isFileLimitExceeded()"></p-button>
+                <p-button *ngIf="!auto&&showCancelButton" type="button" [label]="cancelButtonLabel" [icon]="cancelIcon" (onClick)="clear()" [disabled]="!hasFiles() || uploading"></p-button>
+
+                <ng-container *ngTemplateOutlet="toolbarTemplate"></ng-container>
+            </div>
+            <div #content class="p-fileupload-content" (dragenter)="onDragEnter($event)" (dragleave)="onDragLeave($event)" (drop)="onDrop($event)">
+                <p-progressBar [value]="progress" [showValue]="false" *ngIf="hasFiles()"></p-progressBar>
+
+                <p-messages [value]="msgs" [enableService]="false"></p-messages>
+
+                <div class="p-fileupload-files" *ngIf="hasFiles()">
+                    <div *ngIf="!fileTemplate">
+                        <div class="p-fileupload-row" *ngFor="let file of files; let i = index;">
+                            <div><img [src]="file.objectURL" *ngIf="isImage(file)" [width]="previewWidth" /></div>
+                            <div class="p-fileupload-filename">{{file.name}}</div>
+                            <div>{{formatSize(file.size)}}</div>
+                            <div>
+                                <button type="button" icon="pi pi-times" pButton (click)="remove($event,i)" [disabled]="uploading"></button>
+                            </div>
+                        </div>
+                    </div>
+                    <div *ngIf="fileTemplate">
+                        <ng-template ngFor [ngForOf]="files" [ngForTemplate]="fileTemplate"></ng-template>
+                    </div>
+                </div>
+                <ng-container *ngTemplateOutlet="contentTemplate; context: {$implicit: files}"></ng-container>
+            </div>
+        </div>
+        <div class="p-fileupload p-fileupload-basic p-component" *ngIf="mode === 'basic'">
+            <p-messages [value]="msgs" [enableService]="false"></p-messages>
+            <span [ngClass]="{'p-button p-component p-fileupload-choose': true, 'p-button-icon-only': !chooseLabel, 'p-fileupload-choose-selected': hasFiles(),'p-focus': focus, 'p-disabled':disabled}"
+                [ngStyle]="style" [class]="styleClass" (mouseup)="onBasicUploaderClick()" (keydown)="onBasicUploaderClick()" tabindex="0" pRipple>
+                <span class="p-button-icon p-button-icon-left pi" [ngClass]="hasFiles()&&!auto ? uploadIcon : chooseIcon"></span>
+                <span class="p-button-label">{{auto ? chooseLabel : hasFiles() ? files[0].name : chooseLabel}}</span>
+                <input #basicfileinput type="file" [accept]="accept" [multiple]="multiple" [disabled]="disabled"
+                    (change)="onFileSelect($event)" *ngIf="!hasFiles()" (focus)="onFocus()" (blur)="onBlur()">
+            </span>
+        </div>
+    `, isInline: true, styles: [".p-fileupload-content{position:relative}.p-fileupload-row{display:flex;align-items:center}.p-fileupload-row>div{flex:1 1 auto;width:25%}.p-fileupload-row>div:last-child{text-align:right}.p-fileupload-content .p-progressbar{width:100%;position:absolute;top:0;left:0}.p-button.p-fileupload-choose{position:relative;overflow:hidden}.p-button.p-fileupload-choose input[type=file],.p-fileupload-choose.p-fileupload-choose-selected input[type=file]{display:none}.p-fluid .p-fileupload .p-button{width:auto}.p-fileupload-filename{word-break:break-all}\n"], components: [{ type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i5.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "style", "styleClass", "unit", "mode"] }, { type: i6.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.Ripple, selector: "[pRipple]" }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FileUpload, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-fileUpload', template: `
+        <div [ngClass]="'p-fileupload p-fileupload-advanced p-component'" [ngStyle]="style" [class]="styleClass" *ngIf="mode === 'advanced'">
+            <div class="p-fileupload-buttonbar">
+                <span class="p-button p-component p-fileupload-choose" [ngClass]="{'p-focus': focus, 'p-disabled':disabled || isChooseDisabled()}" (focus)="onFocus()" (blur)="onBlur()" pRipple
+                    (click)="choose()" (keydown.enter)="choose()" tabindex="0">
+                    <input #advancedfileinput type="file" (change)="onFileSelect($event)" [multiple]="multiple" [accept]="accept" [disabled]="disabled || isChooseDisabled()" [attr.title]="''">
+                    <span [ngClass]="'p-button-icon p-button-icon-left'" [class]="chooseIcon"></span>
+                    <span class="p-button-label">{{chooseButtonLabel}}</span>
+                </span>
+
+                <p-button *ngIf="!auto&&showUploadButton" type="button" [label]="uploadButtonLabel" [icon]="uploadIcon" (onClick)="upload()" [disabled]="!hasFiles() || isFileLimitExceeded()"></p-button>
+                <p-button *ngIf="!auto&&showCancelButton" type="button" [label]="cancelButtonLabel" [icon]="cancelIcon" (onClick)="clear()" [disabled]="!hasFiles() || uploading"></p-button>
+
+                <ng-container *ngTemplateOutlet="toolbarTemplate"></ng-container>
+            </div>
+            <div #content class="p-fileupload-content" (dragenter)="onDragEnter($event)" (dragleave)="onDragLeave($event)" (drop)="onDrop($event)">
+                <p-progressBar [value]="progress" [showValue]="false" *ngIf="hasFiles()"></p-progressBar>
+
+                <p-messages [value]="msgs" [enableService]="false"></p-messages>
+
+                <div class="p-fileupload-files" *ngIf="hasFiles()">
+                    <div *ngIf="!fileTemplate">
+                        <div class="p-fileupload-row" *ngFor="let file of files; let i = index;">
+                            <div><img [src]="file.objectURL" *ngIf="isImage(file)" [width]="previewWidth" /></div>
+                            <div class="p-fileupload-filename">{{file.name}}</div>
+                            <div>{{formatSize(file.size)}}</div>
+                            <div>
+                                <button type="button" icon="pi pi-times" pButton (click)="remove($event,i)" [disabled]="uploading"></button>
+                            </div>
+                        </div>
+                    </div>
+                    <div *ngIf="fileTemplate">
+                        <ng-template ngFor [ngForOf]="files" [ngForTemplate]="fileTemplate"></ng-template>
+                    </div>
+                </div>
+                <ng-container *ngTemplateOutlet="contentTemplate; context: {$implicit: files}"></ng-container>
+            </div>
+        </div>
+        <div class="p-fileupload p-fileupload-basic p-component" *ngIf="mode === 'basic'">
+            <p-messages [value]="msgs" [enableService]="false"></p-messages>
+            <span [ngClass]="{'p-button p-component p-fileupload-choose': true, 'p-button-icon-only': !chooseLabel, 'p-fileupload-choose-selected': hasFiles(),'p-focus': focus, 'p-disabled':disabled}"
+                [ngStyle]="style" [class]="styleClass" (mouseup)="onBasicUploaderClick()" (keydown)="onBasicUploaderClick()" tabindex="0" pRipple>
+                <span class="p-button-icon p-button-icon-left pi" [ngClass]="hasFiles()&&!auto ? uploadIcon : chooseIcon"></span>
+                <span class="p-button-label">{{auto ? chooseLabel : hasFiles() ? files[0].name : chooseLabel}}</span>
+                <input #basicfileinput type="file" [accept]="accept" [multiple]="multiple" [disabled]="disabled"
+                    (change)="onFileSelect($event)" *ngIf="!hasFiles()" (focus)="onFocus()" (blur)="onBlur()">
+            </span>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-fileupload-content{position:relative}.p-fileupload-row{display:flex;align-items:center}.p-fileupload-row>div{flex:1 1 auto;width:25%}.p-fileupload-row>div:last-child{text-align:right}.p-fileupload-content .p-progressbar{width:100%;position:absolute;top:0;left:0}.p-button.p-fileupload-choose{position:relative;overflow:hidden}.p-button.p-fileupload-choose input[type=file],.p-fileupload-choose.p-fileupload-choose-selected input[type=file]{display:none}.p-fluid .p-fileupload .p-button{width:auto}.p-fileupload-filename{word-break:break-all}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DomSanitizer }, { type: i0.NgZone }, { type: i2.HttpClient }, { type: i0.ChangeDetectorRef }, { type: i3.PrimeNGConfig }]; }, propDecorators: { name: [{
+                type: Input
+            }], url: [{
+                type: Input
+            }], method: [{
+                type: Input
+            }], multiple: [{
+                type: Input
+            }], accept: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], auto: [{
+                type: Input
+            }], withCredentials: [{
+                type: Input
+            }], maxFileSize: [{
+                type: Input
+            }], invalidFileSizeMessageSummary: [{
+                type: Input
+            }], invalidFileSizeMessageDetail: [{
+                type: Input
+            }], invalidFileTypeMessageSummary: [{
+                type: Input
+            }], invalidFileTypeMessageDetail: [{
+                type: Input
+            }], invalidFileLimitMessageDetail: [{
+                type: Input
+            }], invalidFileLimitMessageSummary: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], previewWidth: [{
+                type: Input
+            }], chooseLabel: [{
+                type: Input
+            }], uploadLabel: [{
+                type: Input
+            }], cancelLabel: [{
+                type: Input
+            }], chooseIcon: [{
+                type: Input
+            }], uploadIcon: [{
+                type: Input
+            }], cancelIcon: [{
+                type: Input
+            }], showUploadButton: [{
+                type: Input
+            }], showCancelButton: [{
+                type: Input
+            }], mode: [{
+                type: Input
+            }], headers: [{
+                type: Input
+            }], customUpload: [{
+                type: Input
+            }], fileLimit: [{
+                type: Input
+            }], onBeforeUpload: [{
+                type: Output
+            }], onSend: [{
+                type: Output
+            }], onUpload: [{
+                type: Output
+            }], onError: [{
+                type: Output
+            }], onClear: [{
+                type: Output
+            }], onRemove: [{
+                type: Output
+            }], onSelect: [{
+                type: Output
+            }], onProgress: [{
+                type: Output
+            }], uploadHandler: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], advancedFileInput: [{
+                type: ViewChild,
+                args: ['advancedfileinput']
+            }], basicFileInput: [{
+                type: ViewChild,
+                args: ['basicfileinput']
+            }], content: [{
+                type: ViewChild,
+                args: ['content']
+            }], files: [{
+                type: Input
+            }] } });
+class FileUploadModule {
+}
+FileUploadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FileUploadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+FileUploadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FileUploadModule, declarations: [FileUpload], imports: [CommonModule, SharedModule, ButtonModule, ProgressBarModule, MessagesModule, RippleModule], exports: [FileUpload, SharedModule, ButtonModule, ProgressBarModule, MessagesModule] });
+FileUploadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FileUploadModule, imports: [[CommonModule, SharedModule, ButtonModule, ProgressBarModule, MessagesModule, RippleModule], SharedModule, ButtonModule, ProgressBarModule, MessagesModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FileUploadModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, ButtonModule, ProgressBarModule, MessagesModule, RippleModule],
+                    exports: [FileUpload, SharedModule, ButtonModule, ProgressBarModule, MessagesModule],
+                    declarations: [FileUpload]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { FileUpload, FileUploadModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-fileupload.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-fileupload.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-fileupload.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-fileupload.mjs","sources":["../../src/app/components/fileupload/fileupload.ts","../../src/app/components/fileupload/primeng-fileupload.ts"],"sourcesContent":["import {NgModule,Component,OnDestroy,Input,Output,EventEmitter,TemplateRef,AfterViewInit,AfterContentInit,\n            ContentChildren,QueryList,ViewChild,ElementRef,NgZone,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, OnInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {ButtonModule} from 'primeng/button';\nimport {MessagesModule} from 'primeng/messages';\nimport {ProgressBarModule} from 'primeng/progressbar';\nimport {DomHandler} from 'primeng/dom';\nimport {Message, TranslationKeys} from 'primeng/api';\nimport {PrimeTemplate,SharedModule,PrimeNGConfig} from 'primeng/api';\nimport {BlockableUI} from 'primeng/api';\nimport {RippleModule} from 'primeng/ripple';\nimport {HttpClient, HttpEvent, HttpEventType, HttpHeaders} from \"@angular/common/http\";\nimport {Subscription} from 'rxjs';\n\n@Component({\n    selector: 'p-fileUpload',\n    template: `\n        <div [ngClass]=\"'p-fileupload p-fileupload-advanced p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"mode === 'advanced'\">\n            <div class=\"p-fileupload-buttonbar\">\n                <span class=\"p-button p-component p-fileupload-choose\" [ngClass]=\"{'p-focus': focus, 'p-disabled':disabled || isChooseDisabled()}\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" pRipple\n                    (click)=\"choose()\" (keydown.enter)=\"choose()\" tabindex=\"0\">\n                    <input #advancedfileinput type=\"file\" (change)=\"onFileSelect($event)\" [multiple]=\"multiple\" [accept]=\"accept\" [disabled]=\"disabled || isChooseDisabled()\" [attr.title]=\"''\">\n                    <span [ngClass]=\"'p-button-icon p-button-icon-left'\" [class]=\"chooseIcon\"></span>\n                    <span class=\"p-button-label\">{{chooseButtonLabel}}</span>\n                </span>\n\n                <p-button *ngIf=\"!auto&&showUploadButton\" type=\"button\" [label]=\"uploadButtonLabel\" [icon]=\"uploadIcon\" (onClick)=\"upload()\" [disabled]=\"!hasFiles() || isFileLimitExceeded()\"></p-button>\n                <p-button *ngIf=\"!auto&&showCancelButton\" type=\"button\" [label]=\"cancelButtonLabel\" [icon]=\"cancelIcon\" (onClick)=\"clear()\" [disabled]=\"!hasFiles() || uploading\"></p-button>\n\n                <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n            </div>\n            <div #content class=\"p-fileupload-content\" (dragenter)=\"onDragEnter($event)\" (dragleave)=\"onDragLeave($event)\" (drop)=\"onDrop($event)\">\n                <p-progressBar [value]=\"progress\" [showValue]=\"false\" *ngIf=\"hasFiles()\"></p-progressBar>\n\n                <p-messages [value]=\"msgs\" [enableService]=\"false\"></p-messages>\n\n                <div class=\"p-fileupload-files\" *ngIf=\"hasFiles()\">\n                    <div *ngIf=\"!fileTemplate\">\n                        <div class=\"p-fileupload-row\" *ngFor=\"let file of files; let i = index;\">\n                            <div><img [src]=\"file.objectURL\" *ngIf=\"isImage(file)\" [width]=\"previewWidth\" /></div>\n                            <div class=\"p-fileupload-filename\">{{file.name}}</div>\n                            <div>{{formatSize(file.size)}}</div>\n                            <div>\n                                <button type=\"button\" icon=\"pi pi-times\" pButton (click)=\"remove($event,i)\" [disabled]=\"uploading\"></button>\n                            </div>\n                        </div>\n                    </div>\n                    <div *ngIf=\"fileTemplate\">\n                        <ng-template ngFor [ngForOf]=\"files\" [ngForTemplate]=\"fileTemplate\"></ng-template>\n                    </div>\n                </div>\n                <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: files}\"></ng-container>\n            </div>\n        </div>\n        <div class=\"p-fileupload p-fileupload-basic p-component\" *ngIf=\"mode === 'basic'\">\n            <p-messages [value]=\"msgs\" [enableService]=\"false\"></p-messages>\n            <span [ngClass]=\"{'p-button p-component p-fileupload-choose': true, 'p-button-icon-only': !chooseLabel, 'p-fileupload-choose-selected': hasFiles(),'p-focus': focus, 'p-disabled':disabled}\"\n                [ngStyle]=\"style\" [class]=\"styleClass\" (mouseup)=\"onBasicUploaderClick()\" (keydown)=\"onBasicUploaderClick()\" tabindex=\"0\" pRipple>\n                <span class=\"p-button-icon p-button-icon-left pi\" [ngClass]=\"hasFiles()&&!auto ? uploadIcon : chooseIcon\"></span>\n                <span class=\"p-button-label\">{{auto ? chooseLabel : hasFiles() ? files[0].name : chooseLabel}}</span>\n                <input #basicfileinput type=\"file\" [accept]=\"accept\" [multiple]=\"multiple\" [disabled]=\"disabled\"\n                    (change)=\"onFileSelect($event)\" *ngIf=\"!hasFiles()\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\n            </span>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./fileupload.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class FileUpload implements AfterViewInit,AfterContentInit,OnInit,OnDestroy,BlockableUI {\n\n    @Input() name: string;\n\n    @Input() url: string;\n\n    @Input() method: string = 'post';\n\n    @Input() multiple: boolean;\n\n    @Input() accept: string;\n\n    @Input() disabled: boolean;\n\n    @Input() auto: boolean;\n\n    @Input() withCredentials: boolean;\n\n    @Input() maxFileSize: number;\n\n    @Input() invalidFileSizeMessageSummary: string = '{0}: Invalid file size, ';\n\n    @Input() invalidFileSizeMessageDetail: string = 'maximum upload size is {0}.';\n\n    @Input() invalidFileTypeMessageSummary: string = '{0}: Invalid file type, ';\n\n    @Input() invalidFileTypeMessageDetail: string = 'allowed file types: {0}.';\n\n    @Input() invalidFileLimitMessageDetail: string = 'limit is {0} at most.';\n\n    @Input() invalidFileLimitMessageSummary: string = 'Maximum number of files exceeded, ';\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() previewWidth: number = 50;\n\n    @Input() chooseLabel: string;\n\n    @Input() uploadLabel: string;\n\n    @Input() cancelLabel: string;\n\n    @Input() chooseIcon: string = 'pi pi-plus';\n\n    @Input() uploadIcon: string = 'pi pi-upload';\n\n    @Input() cancelIcon: string = 'pi pi-times';\n\n    @Input() showUploadButton: boolean = true;\n\n    @Input() showCancelButton: boolean = true;\n\n    @Input() mode: string = 'advanced';\n\n    @Input() headers: HttpHeaders;\n\n    @Input() customUpload: boolean;\n\n    @Input() fileLimit: number;\n\n    @Output() onBeforeUpload: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSend: EventEmitter<any> = new EventEmitter();\n\n    @Output() onUpload: EventEmitter<any> = new EventEmitter();\n\n    @Output() onError: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClear: EventEmitter<any> = new EventEmitter();\n\n    @Output() onRemove: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onProgress: EventEmitter<any> = new EventEmitter();\n\n    @Output() uploadHandler: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @ViewChild('advancedfileinput') advancedFileInput: ElementRef;\n\n    @ViewChild('basicfileinput') basicFileInput: ElementRef;\n\n    @ViewChild('content') content: ElementRef;\n\n    @Input() set files(files) {\n        this._files = [];\n\n        for(let i = 0; i < files.length; i++) {\n            let file = files[i];\n\n            if (this.validate(file)) {\n                if (this.isImage(file)) {\n                    (<any>file).objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));\n                }\n\n                this._files.push(files[i]);\n            }\n        }\n    }\n\n    get files(): File[] {\n        return this._files;\n    }\n\n    public _files: File[] = [];\n\n    public progress: number = 0;\n\n    public dragHighlight: boolean;\n\n    public msgs: Message[];\n\n    public fileTemplate: TemplateRef<any>;\n\n    public contentTemplate: TemplateRef<any>;\n\n    public toolbarTemplate: TemplateRef<any>;\n\n    public uploadedFileCount: number = 0;\n\n    focus: boolean;\n\n    uploading: boolean;\n\n    duplicateIEEvent: boolean;  // flag to recognize duplicate onchange event for file input\n\n    translationSubscription: Subscription;\n\n    constructor(private el: ElementRef, public sanitizer: DomSanitizer, public zone: NgZone, private http: HttpClient, public cd: ChangeDetectorRef, public config: PrimeNGConfig){}\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'file':\n                    this.fileTemplate = item.template;\n                break;\n\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                case 'toolbar':\n                    this.toolbarTemplate = item.template;\n                break;\n\n                default:\n                    this.fileTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n\n    ngOnInit() {\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.cd.markForCheck();\n        });\n    }\n\n    ngAfterViewInit() {\n        if (this.mode === 'advanced') {\n            this.zone.runOutsideAngular(() => {\n                if (this.content)\n                    this.content.nativeElement.addEventListener('dragover', this.onDragOver.bind(this));\n            });\n        }\n    }\n\n    choose() {\n        this.advancedFileInput.nativeElement.click();\n    }\n\n    onFileSelect(event) {\n        if (event.type !== 'drop' && this.isIE11() && this.duplicateIEEvent) {\n            this.duplicateIEEvent = false;\n            return;\n        }\n\n        this.msgs = [];\n        if (!this.multiple) {\n            this.files = [];\n        }\n\n        let files = event.dataTransfer ? event.dataTransfer.files : event.target.files;\n        for(let i = 0; i < files.length; i++) {\n            let file = files[i];\n\n            if (!this.isFileSelected(file)){\n              if (this.validate(file)) {\n                  if (this.isImage(file)) {\n                      file.objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));\n                  }\n\n                  this.files.push(files[i]);\n              }\n            }\n        }\n\n        this.onSelect.emit({originalEvent: event, files: files, currentFiles: this.files});\n\n        if (this.fileLimit && this.mode == \"advanced\") {\n            this.checkFileLimit();\n        }\n\n        if (this.hasFiles() && this.auto && (!(this.mode === \"advanced\") || !this.isFileLimitExceeded())) {\n            this.upload();\n        }\n\n        if (event.type !== 'drop' && this.isIE11()) {\n          this.clearIEInput();\n        } else {\n          this.clearInputElement();\n        }\n    }\n\n    isFileSelected(file: File): boolean{\n        for(let sFile of this.files){\n            if ((sFile.name + sFile.type + sFile.size) === (file.name + file.type+file.size)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    isIE11() {\n        return !!window['MSInputMethodContext'] && !!document['documentMode'];\n    }\n\n    validate(file: File): boolean {\n        if (this.accept && !this.isFileTypeValid(file)) {\n            this.msgs.push({\n                severity: 'error',\n                summary: this.invalidFileTypeMessageSummary.replace('{0}', file.name),\n                detail: this.invalidFileTypeMessageDetail.replace('{0}', this.accept)\n            });\n            return false;\n        }\n\n        if (this.maxFileSize  && file.size > this.maxFileSize) {\n            this.msgs.push({\n                severity: 'error',\n                summary: this.invalidFileSizeMessageSummary.replace('{0}', file.name),\n                detail: this.invalidFileSizeMessageDetail.replace('{0}', this.formatSize(this.maxFileSize))\n            });\n            return false;\n        }\n\n        return true;\n    }\n\n    private isFileTypeValid(file: File): boolean {\n        let acceptableTypes = this.accept.split(',').map(type => type.trim());\n        for(let type of acceptableTypes) {\n            let acceptable = this.isWildcard(type) ? this.getTypeClass(file.type) === this.getTypeClass(type)\n                                                    : file.type == type || this.getFileExtension(file).toLowerCase() === type.toLowerCase();\n\n            if (acceptable) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    getTypeClass(fileType: string): string {\n        return fileType.substring(0, fileType.indexOf('/'));\n    }\n\n    isWildcard(fileType: string): boolean {\n        return fileType.indexOf('*') !== -1;\n    }\n\n    getFileExtension(file: File): string {\n        return '.' + file.name.split('.').pop();\n    }\n\n    isImage(file: File): boolean {\n        return /^image\\//.test(file.type);\n    }\n\n    onImageLoad(img: any) {\n        window.URL.revokeObjectURL(img.src);\n    }\n\n    upload() {\n        if (this.customUpload) {\n            if (this.fileLimit) {\n                this.uploadedFileCount += this.files.length;\n            }\n\n            this.uploadHandler.emit({\n                files: this.files\n            });\n\n            this.cd.markForCheck();\n        }\n        else {\n            this.uploading = true;\n            this.msgs = [];\n            let formData = new FormData();\n\n            this.onBeforeUpload.emit({\n                'formData': formData\n            });\n\n            for (let i = 0; i < this.files.length; i++) {\n                formData.append(this.name, this.files[i], this.files[i].name);\n            }\n\n            this.http[this.method](this.url, formData, {\n                headers: this.headers, reportProgress: true, observe: 'events', withCredentials: this.withCredentials\n            }).subscribe( (event: HttpEvent<any>) => {\n                    switch (event.type) {\n                        case HttpEventType.Sent:\n                            this.onSend.emit({\n                                originalEvent: event,\n                                'formData': formData\n                            });\n                            break;\n                        case HttpEventType.Response:\n                            this.uploading = false;\n                            this.progress = 0;\n\n                            if (event['status'] >= 200 && event['status'] < 300) {\n                                if (this.fileLimit) {\n                                    this.uploadedFileCount += this.files.length;\n                                }\n\n                                this.onUpload.emit({originalEvent: event, files: this.files});\n                            } else {\n                                this.onError.emit({files: this.files});\n                            }\n\n                            this.clear();\n                            break;\n                        case HttpEventType.UploadProgress: {\n                            if (event['loaded']) {\n                                this.progress = Math.round((event['loaded'] * 100) / event['total']);\n                            }\n\n                            this.onProgress.emit({originalEvent: event, progress: this.progress});\n                            break;\n                        }\n                    }\n\n                    this.cd.markForCheck();\n                },\n                error => {\n                    this.uploading = false;\n                    this.onError.emit({files: this.files, error: error});\n                });\n        }\n    }\n\n    clear() {\n        this.files = [];\n        this.onClear.emit();\n        this.clearInputElement();\n        this.cd.markForCheck();\n    }\n\n    remove(event: Event, index: number) {\n        this.clearInputElement();\n        this.onRemove.emit({originalEvent: event, file: this.files[index]});\n        this.files.splice(index, 1);\n    }\n\n    isFileLimitExceeded() {\n        if (this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount && this.focus) {\n            this.focus = false;\n        }\n\n        return this.fileLimit && this.fileLimit < this.files.length + this.uploadedFileCount;\n    }\n\n    isChooseDisabled() {\n        return this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount;\n    }\n\n    checkFileLimit() {\n        if (this.isFileLimitExceeded()) {\n            this.msgs.push({\n                severity: 'error',\n                summary: this.invalidFileLimitMessageSummary.replace('{0}', this.fileLimit.toString()),\n                detail: this.invalidFileLimitMessageDetail.replace('{0}', this.fileLimit.toString())\n            });\n        }\n    }\n\n    clearInputElement() {\n        if (this.advancedFileInput && this.advancedFileInput.nativeElement) {\n            this.advancedFileInput.nativeElement.value = '';\n        }\n\n        if (this.basicFileInput && this.basicFileInput.nativeElement) {\n            this.basicFileInput.nativeElement.value = '';\n        }\n    }\n\n    clearIEInput() {\n        if (this.advancedFileInput && this.advancedFileInput.nativeElement) {\n            this.duplicateIEEvent = true; //IE11 fix to prevent onFileChange trigger again\n            this.advancedFileInput.nativeElement.value = '';\n        }\n    }\n\n    hasFiles(): boolean {\n        return this.files && this.files.length > 0;\n    }\n\n    onDragEnter(e) {\n        if (!this.disabled) {\n            e.stopPropagation();\n            e.preventDefault();\n        }\n    }\n\n    onDragOver(e) {\n        if (!this.disabled) {\n            DomHandler.addClass(this.content.nativeElement, 'p-fileupload-highlight');\n            this.dragHighlight = true;\n            e.stopPropagation();\n            e.preventDefault();\n        }\n    }\n\n    onDragLeave(event) {\n        if (!this.disabled) {\n            DomHandler.removeClass(this.content.nativeElement, 'p-fileupload-highlight');\n        }\n    }\n\n    onDrop(event) {\n        if (!this.disabled) {\n            DomHandler.removeClass(this.content.nativeElement, 'p-fileupload-highlight');\n            event.stopPropagation();\n            event.preventDefault();\n\n            let files = event.dataTransfer ? event.dataTransfer.files : event.target.files;\n            let allowDrop = this.multiple||(files && files.length === 1);\n\n            if (allowDrop) {\n                this.onFileSelect(event);\n            }\n        }\n    }\n\n    onFocus() {\n        this.focus = true;\n    }\n\n    onBlur() {\n        this.focus = false;\n    }\n\n    formatSize(bytes) {\n        if (bytes == 0) {\n            return '0 B';\n        }\n        let k = 1000,\n        dm = 3,\n        sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n        i = Math.floor(Math.log(bytes) / Math.log(k));\n\n        return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n    }\n\n    onBasicUploaderClick() {\n        if (this.hasFiles())\n            this.upload();\n        else\n            this.basicFileInput.nativeElement.click();\n    }\n\n    getBlockableElement(): HTMLElement {\n      return this.el.nativeElement.children[0];\n    }\n\n    get chooseButtonLabel(): string {\n        return this.chooseLabel || this.config.getTranslation(TranslationKeys.CHOOSE);\n    }\n\n    get uploadButtonLabel(): string {\n        return this.uploadLabel || this.config.getTranslation(TranslationKeys.UPLOAD);\n    }\n\n    get cancelButtonLabel(): string {\n        return this.cancelLabel || this.config.getTranslation(TranslationKeys.CANCEL);\n    }\n\n    ngOnDestroy() {\n        if (this.content && this.content.nativeElement) {\n            this.content.nativeElement.removeEventListener('dragover', this.onDragOver);\n        }\n\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,SharedModule,ButtonModule,ProgressBarModule,MessagesModule,RippleModule],\n    exports: [FileUpload,SharedModule,ButtonModule,ProgressBarModule,MessagesModule],\n    declarations: [FileUpload]\n})\nexport class FileUploadModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-focustrap.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-focustrap.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-focustrap.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,74 @@
+import * as i0 from '@angular/core';
+import { Directive, Input, HostListener, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+
+class FocusTrap {
+    constructor(el) {
+        this.el = el;
+    }
+    onkeydown(e) {
+        if (this.pFocusTrapDisabled !== true) {
+            e.preventDefault();
+            let focusableElements = DomHandler.getFocusableElements(this.el.nativeElement);
+            if (focusableElements && focusableElements.length > 0) {
+                if (!focusableElements[0].ownerDocument.activeElement) {
+                    focusableElements[0].focus();
+                }
+                else {
+                    let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);
+                    if (e.shiftKey) {
+                        if (focusedIndex == -1 || focusedIndex === 0)
+                            focusableElements[focusableElements.length - 1].focus();
+                        else
+                            focusableElements[focusedIndex - 1].focus();
+                    }
+                    else {
+                        if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))
+                            focusableElements[0].focus();
+                        else
+                            focusableElements[focusedIndex + 1].focus();
+                    }
+                }
+            }
+        }
+    }
+}
+FocusTrap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FocusTrap, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+FocusTrap.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: FocusTrap, selector: "[pFocusTrap]", inputs: { pFocusTrapDisabled: "pFocusTrapDisabled" }, host: { listeners: { "keydown.tab": "onkeydown($event)", "keydown.shift.tab": "onkeydown($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FocusTrap, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pFocusTrap]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { pFocusTrapDisabled: [{
+                type: Input
+            }], onkeydown: [{
+                type: HostListener,
+                args: ['keydown.tab', ['$event']]
+            }, {
+                type: HostListener,
+                args: ['keydown.shift.tab', ['$event']]
+            }] } });
+class FocusTrapModule {
+}
+FocusTrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+FocusTrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FocusTrapModule, declarations: [FocusTrap], imports: [CommonModule], exports: [FocusTrap] });
+FocusTrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FocusTrapModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FocusTrapModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [FocusTrap],
+                    declarations: [FocusTrap]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { FocusTrap, FocusTrapModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-focustrap.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-focustrap.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-focustrap.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-focustrap.mjs","sources":["../../src/app/components/focustrap/focustrap.ts","../../src/app/components/focustrap/primeng-focustrap.ts"],"sourcesContent":["import {NgModule,Directive,ElementRef,HostListener, Input} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\n\n@Directive({\n    selector: '[pFocusTrap]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class FocusTrap {\n\n    @Input() pFocusTrapDisabled: boolean;\n\n    constructor(public el: ElementRef) {}\n\n    @HostListener('keydown.tab', ['$event'])\n    @HostListener('keydown.shift.tab', ['$event'])\n    onkeydown(e) {\n        if (this.pFocusTrapDisabled !== true) {\n            e.preventDefault();\n            let focusableElements = DomHandler.getFocusableElements(this.el.nativeElement);\n            if (focusableElements && focusableElements.length > 0) {\n                if (!focusableElements[0].ownerDocument.activeElement) {\n                    focusableElements[0].focus();\n                }\n                else {\n                    let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n                    if (e.shiftKey) {\n                        if (focusedIndex == -1 || focusedIndex === 0)\n                            focusableElements[focusableElements.length - 1].focus();\n                        else\n                            focusableElements[focusedIndex - 1].focus();\n                    }\n                    else {\n                        if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))\n                            focusableElements[0].focus();\n                        else\n                            focusableElements[focusedIndex + 1].focus();\n                    }\n                }\n            }\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [FocusTrap],\n    declarations: [FocusTrap]\n})\nexport class FocusTrapModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAUa,SAAS;IAIlB,YAAmB,EAAc;QAAd,OAAE,GAAF,EAAE,CAAY;KAAI;IAIrC,SAAS,CAAC,CAAC;QACP,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;YAClC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;YAC/E,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,EAAE;oBACnD,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;iBAChC;qBACI;oBACD,IAAI,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;oBAE/F,IAAI,CAAC,CAAC,QAAQ,EAAE;wBACZ,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC;4BACxC,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;;4BAExD,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBACnD;yBACI;wBACD,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,YAAY,MAAM,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;4BACrE,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;;4BAE7B,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBACnD;iBACJ;aACJ;SACJ;KACJ;;sGAlCQ,SAAS;0FAAT,SAAS;2FAAT,SAAS;kBANrB,SAAS;mBAAC;oBACP,QAAQ,EAAE,cAAc;oBACxB,IAAI,EAAE;wBACF,OAAO,EAAE,WAAW;qBACvB;iBACJ;iGAGY,kBAAkB;sBAA1B,KAAK;gBAMN,SAAS;sBAFR,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;sBACtC,YAAY;uBAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC;;MAmCpC,eAAe;;4GAAf,eAAe;6GAAf,eAAe,iBA1Cf,SAAS,aAsCR,YAAY,aAtCb,SAAS;6GA0CT,eAAe,YAJf,CAAC,YAAY,CAAC;2FAId,eAAe;kBAL3B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,YAAY,EAAE,CAAC,SAAS,CAAC;iBAC5B;;;ACnDD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-fullcalendar.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-fullcalendar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-fullcalendar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,109 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { Calendar } from '@fullcalendar/core';
+
+class FullCalendar {
+    constructor(el) {
+        this.el = el;
+    }
+    ngOnInit() {
+        this.config = {
+            theme: true
+        };
+        if (this.options) {
+            for (let prop in this.options) {
+                this.config[prop] = this.options[prop];
+            }
+        }
+    }
+    ngAfterViewChecked() {
+        if (!this.initialized && this.el.nativeElement.offsetParent) {
+            this.initialize();
+        }
+    }
+    get events() {
+        return this._events;
+    }
+    set events(value) {
+        this._events = value;
+        if (this._events && this.calendar) {
+            this.calendar.removeAllEventSources();
+            this.calendar.addEventSource(this._events);
+        }
+    }
+    get options() {
+        return this._options;
+    }
+    set options(value) {
+        this._options = value;
+        if (this._options && this.calendar) {
+            for (let prop in this._options) {
+                let optionValue = this._options[prop];
+                this.config[prop] = optionValue;
+                this.calendar.setOption(prop, optionValue);
+            }
+        }
+    }
+    initialize() {
+        this.calendar = new Calendar(this.el.nativeElement.children[0], this.config);
+        this.calendar.render();
+        this.initialized = true;
+        if (this.events) {
+            this.calendar.removeAllEventSources();
+            this.calendar.addEventSource(this.events);
+        }
+    }
+    getCalendar() {
+        return this.calendar;
+    }
+    ngOnDestroy() {
+        if (this.calendar) {
+            this.calendar.destroy();
+            this.initialized = false;
+            this.calendar = null;
+        }
+    }
+}
+FullCalendar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FullCalendar, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+FullCalendar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: FullCalendar, selector: "p-fullCalendar", inputs: { style: "style", styleClass: "styleClass", events: "events", options: "options" }, host: { classAttribute: "p-element" }, ngImport: i0, template: '<div [ngStyle]="style" [class]="styleClass"></div>', isInline: true, directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FullCalendar, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-fullCalendar',
+                    template: '<div [ngStyle]="style" [class]="styleClass"></div>',
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], events: [{
+                type: Input
+            }], options: [{
+                type: Input
+            }] } });
+class FullCalendarModule {
+}
+FullCalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FullCalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+FullCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FullCalendarModule, declarations: [FullCalendar], imports: [CommonModule], exports: [FullCalendar] });
+FullCalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FullCalendarModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FullCalendarModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [FullCalendar],
+                    declarations: [FullCalendar]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { FullCalendar, FullCalendarModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-fullcalendar.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-fullcalendar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-fullcalendar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-fullcalendar.mjs","sources":["../../src/app/components/fullcalendar/fullcalendar.ts","../../src/app/components/fullcalendar/primeng-fullcalendar.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,Input,OnInit,AfterViewChecked,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {Calendar} from '@fullcalendar/core';\n\n@Component({\n    selector: 'p-fullCalendar',\n    template: '<div [ngStyle]=\"style\" [class]=\"styleClass\"></div>',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class FullCalendar implements OnDestroy,OnInit,AfterViewChecked {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    initialized: boolean;\n\n    calendar: any;\n\n    config: any;\n\n    _options: any;\n\n    _events: any[];\n\n    constructor(public el: ElementRef) {}\n\n    ngOnInit() {\n        this.config = {\n            theme: true\n        };\n\n        if (this.options) {\n            for (let prop in this.options) {\n                this.config[prop] = this.options[prop];\n            }\n        }\n    }\n\n    ngAfterViewChecked() {\n        if (!this.initialized && this.el.nativeElement.offsetParent) {\n            this.initialize();\n        }\n    }\n\n    @Input() get events(): any {\n        return this._events;\n    }\n\n    set events(value: any) {\n        this._events = value;\n\n        if (this._events && this.calendar) {\n            this.calendar.removeAllEventSources();\n            this.calendar.addEventSource(this._events);\n        }\n    }\n\n    @Input() get options(): any {\n        return this._options;\n    }\n\n    set options(value: any) {\n        this._options = value;\n\n        if (this._options && this.calendar) {\n            for (let prop in this._options) {\n                let optionValue = this._options[prop];\n                this.config[prop] = optionValue;\n                this.calendar.setOption(prop, optionValue);\n            }\n        }\n    }\n\n    initialize() {\n        this.calendar = new Calendar(this.el.nativeElement.children[0], this.config);\n        this.calendar.render();\n        this.initialized = true;\n\n        if (this.events) {\n            this.calendar.removeAllEventSources();\n            this.calendar.addEventSource(this.events);\n        }\n    }\n\n    getCalendar() {\n        return this.calendar;\n    }\n\n    ngOnDestroy() {\n        if (this.calendar) {\n            this.calendar.destroy();\n            this.initialized = false;\n            this.calendar = null;\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [FullCalendar],\n    declarations: [FullCalendar]\n})\nexport class FullCalendarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-galleria.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-galleria.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-galleria.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1003 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, Output, ContentChildren, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { ZIndexUtils, UniqueComponentId } from 'primeng/utils';
+import { DomHandler } from 'primeng/dom';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { trigger, transition, style, animate } from '@angular/animations';
+
+class Galleria {
+    constructor(element, cd, config) {
+        this.element = element;
+        this.cd = cd;
+        this.config = config;
+        this.fullScreen = false;
+        this.numVisible = 3;
+        this.showItemNavigators = false;
+        this.showThumbnailNavigators = true;
+        this.showItemNavigatorsOnHover = false;
+        this.changeItemOnIndicatorHover = false;
+        this.circular = false;
+        this.autoPlay = false;
+        this.transitionInterval = 4000;
+        this.showThumbnails = true;
+        this.thumbnailsPosition = "bottom";
+        this.verticalThumbnailViewPortHeight = "300px";
+        this.showIndicators = false;
+        this.showIndicatorsOnItem = false;
+        this.indicatorsPosition = "bottom";
+        this.baseZIndex = 0;
+        this.showTransitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';
+        this.activeIndexChange = new EventEmitter();
+        this.visibleChange = new EventEmitter();
+        this._visible = false;
+        this._activeIndex = 0;
+        this.maskVisible = false;
+    }
+    get activeIndex() {
+        return this._activeIndex;
+    }
+    ;
+    set activeIndex(activeIndex) {
+        this._activeIndex = activeIndex;
+    }
+    get visible() {
+        return this._visible;
+    }
+    ;
+    set visible(visible) {
+        this._visible = visible;
+        if (this._visible && !this.maskVisible) {
+            this.maskVisible = true;
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerFacet = item.template;
+                    break;
+                case 'footer':
+                    this.footerFacet = item.template;
+                    break;
+                case 'indicator':
+                    this.indicatorFacet = item.template;
+                    break;
+                case 'caption':
+                    this.captionFacet = item.template;
+                    break;
+            }
+        });
+    }
+    ngOnChanges(simpleChanges) {
+        if (simpleChanges.value && simpleChanges.value.currentValue?.length < this.numVisible) {
+            this.numVisible = simpleChanges.value.currentValue.length;
+        }
+    }
+    onMaskHide() {
+        this.visible = false;
+        this.visibleChange.emit(false);
+    }
+    onActiveItemChange(index) {
+        if (this.activeIndex !== index) {
+            this.activeIndex = index;
+            this.activeIndexChange.emit(index);
+        }
+    }
+    onAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.enableModality();
+                break;
+            case 'void':
+                DomHandler.addClass(this.mask.nativeElement, 'p-component-overlay-leave');
+                break;
+        }
+    }
+    onAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                this.disableModality();
+                break;
+        }
+    }
+    enableModality() {
+        DomHandler.addClass(document.body, 'p-overflow-hidden');
+        this.cd.markForCheck();
+        if (this.mask) {
+            ZIndexUtils.set('modal', this.mask.nativeElement, this.baseZIndex || this.config.zIndex.modal);
+        }
+    }
+    disableModality() {
+        DomHandler.removeClass(document.body, 'p-overflow-hidden');
+        this.maskVisible = false;
+        this.cd.markForCheck();
+        if (this.mask) {
+            ZIndexUtils.clear(this.mask.nativeElement);
+        }
+    }
+    ngOnDestroy() {
+        if (this.fullScreen) {
+            DomHandler.removeClass(document.body, 'p-overflow-hidden');
+        }
+        if (this.mask) {
+            this.disableModality();
+        }
+    }
+}
+Galleria.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Galleria, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+Galleria.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Galleria, selector: "p-galleria", inputs: { activeIndex: "activeIndex", fullScreen: "fullScreen", id: "id", value: "value", numVisible: "numVisible", responsiveOptions: "responsiveOptions", showItemNavigators: "showItemNavigators", showThumbnailNavigators: "showThumbnailNavigators", showItemNavigatorsOnHover: "showItemNavigatorsOnHover", changeItemOnIndicatorHover: "changeItemOnIndicatorHover", circular: "circular", autoPlay: "autoPlay", transitionInterval: "transitionInterval", showThumbnails: "showThumbnails", thumbnailsPosition: "thumbnailsPosition", verticalThumbnailViewPortHeight: "verticalThumbnailViewPortHeight", showIndicators: "showIndicators", showIndicatorsOnItem: "showIndicatorsOnItem", indicatorsPosition: "indicatorsPosition", baseZIndex: "baseZIndex", maskClass: "maskClass", containerClass: "containerClass", containerStyle: "containerStyle", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", visible: "visible" }, outputs: { activeIndexChange: "activeIndexChange", visibleChange: "visibleChange" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "mask", first: true, predicate: ["mask"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
+        <div *ngIf="fullScreen;else windowed">
+            <div *ngIf="maskVisible" #mask [ngClass]="{'p-galleria-mask p-component-overlay p-component-overlay-enter':true, 'p-galleria-visible': this.visible}" [class]="maskClass">
+                <p-galleriaContent *ngIf="visible" [@animation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)"
+                    [value]="value" [activeIndex]="activeIndex" [numVisible]="numVisible" (maskHide)="onMaskHide()" (activeItemChange)="onActiveItemChange($event)" [ngStyle]="containerStyle"></p-galleriaContent>
+            </div>
+        </div>
+
+        <ng-template #windowed>
+            <p-galleriaContent [value]="value" [activeIndex]="activeIndex" [numVisible]="numVisible" (activeItemChange)="onActiveItemChange($event)"></p-galleriaContent>
+        </ng-template>
+    `, isInline: true, styles: [".p-galleria-content{display:flex;flex-direction:column}.p-galleria-item-wrapper{display:flex;flex-direction:column;position:relative}.p-galleria-item-container{position:relative;display:flex;height:100%}.p-galleria-item-nav{position:absolute;top:50%;margin-top:-.5rem;display:inline-flex;justify-content:center;align-items:center;overflow:hidden}.p-galleria-item-prev{left:0;border-top-left-radius:0;border-bottom-left-radius:0}.p-galleria-item-next{right:0;border-top-right-radius:0;border-bottom-right-radius:0}.p-galleria-item{display:flex;justify-content:center;align-items:center;height:100%;width:100%}.p-galleria-item-nav-onhover .p-galleria-item-nav{pointer-events:none;opacity:0;transition:opacity .2s ease-in-out}.p-galleria-item-nav-onhover .p-galleria-item-wrapper:hover .p-galleria-item-nav{pointer-events:all;opacity:1}.p-galleria-item-nav-onhover .p-galleria-item-wrapper:hover .p-galleria-item-nav.p-disabled{pointer-events:none}.p-galleria-caption{position:absolute;bottom:0;left:0;width:100%}.p-galleria-thumbnail-wrapper{display:flex;flex-direction:column;overflow:auto;flex-shrink:0}.p-galleria-thumbnail-prev,.p-galleria-thumbnail-next{align-self:center;flex:0 0 auto;display:flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-galleria-thumbnail-prev span,.p-galleria-thumbnail-next span{display:flex;justify-content:center;align-items:center}.p-galleria-thumbnail-container{display:flex;flex-direction:row}.p-galleria-thumbnail-items-container{overflow:hidden;width:100%}.p-galleria-thumbnail-items{display:flex}.p-galleria-thumbnail-item{overflow:auto;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:.5}.p-galleria-thumbnail-item:hover{opacity:1;transition:opacity .3s}.p-galleria-thumbnail-item-current{opacity:1}.p-galleria-thumbnails-left .p-galleria-content,.p-galleria-thumbnails-right .p-galleria-content,.p-galleria-thumbnails-left .p-galleria-item-wrapper,.p-galleria-thumbnails-right .p-galleria-item-wrapper{flex-direction:row}.p-galleria-thumbnails-left p-galleriaitem,.p-galleria-thumbnails-top p-galleriaitem{order:2}.p-galleria-thumbnails-left p-galleriathumbnails,.p-galleria-thumbnails-top p-galleriathumbnails{order:1}.p-galleria-thumbnails-left .p-galleria-thumbnail-container,.p-galleria-thumbnails-right .p-galleria-thumbnail-container{flex-direction:column;flex-grow:1}.p-galleria-thumbnails-left .p-galleria-thumbnail-items,.p-galleria-thumbnails-right .p-galleria-thumbnail-items{flex-direction:column;height:100%}.p-galleria-thumbnails-left .p-galleria-thumbnail-wrapper,.p-galleria-thumbnails-right .p-galleria-thumbnail-wrapper{height:100%}.p-galleria-indicators{display:flex;align-items:center;justify-content:center}.p-galleria-indicator>button{display:inline-flex;align-items:center}.p-galleria-indicators-left .p-galleria-item-wrapper,.p-galleria-indicators-right .p-galleria-item-wrapper{flex-direction:row;align-items:center}.p-galleria-indicators-left .p-galleria-item-container,.p-galleria-indicators-top .p-galleria-item-container{order:2}.p-galleria-indicators-left .p-galleria-indicators,.p-galleria-indicators-top .p-galleria-indicators{order:1}.p-galleria-indicators-left .p-galleria-indicators,.p-galleria-indicators-right .p-galleria-indicators{flex-direction:column}.p-galleria-indicator-onitem .p-galleria-indicators{position:absolute;display:flex;z-index:1}.p-galleria-indicator-onitem.p-galleria-indicators-top .p-galleria-indicators{top:0;left:0;width:100%;align-items:flex-start}.p-galleria-indicator-onitem.p-galleria-indicators-right .p-galleria-indicators{right:0;top:0;height:100%;align-items:flex-end}.p-galleria-indicator-onitem.p-galleria-indicators-bottom .p-galleria-indicators{bottom:0;left:0;width:100%;align-items:flex-end}.p-galleria-indicator-onitem.p-galleria-indicators-left .p-galleria-indicators{left:0;top:0;height:100%;align-items:flex-start}.p-galleria-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:transparent;transition-property:background-color}.p-galleria-close{position:absolute;top:0;right:0;display:flex;justify-content:center;align-items:center;overflow:hidden}.p-galleria-mask .p-galleria-item-nav{position:fixed;top:50%;margin-top:-.5rem}.p-galleria-mask.p-galleria-mask-leave{background-color:transparent}.p-items-hidden .p-galleria-thumbnail-item{visibility:hidden}.p-items-hidden .p-galleria-thumbnail-item.p-galleria-thumbnail-item-active{visibility:visible}\n"], components: [{ type: i0.forwardRef(function () { return GalleriaContent; }), selector: "p-galleriaContent", inputs: ["activeIndex", "value", "numVisible"], outputs: ["maskHide", "activeItemChange"] }], directives: [{ type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }], animations: [
+        trigger('animation', [
+            transition('void => visible', [
+                style({ transform: 'scale(0.7)', opacity: 0 }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition('visible => void', [
+                animate('{{hideTransitionParams}}', style({ transform: 'scale(0.7)', opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Galleria, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-galleria', template: `
+        <div *ngIf="fullScreen;else windowed">
+            <div *ngIf="maskVisible" #mask [ngClass]="{'p-galleria-mask p-component-overlay p-component-overlay-enter':true, 'p-galleria-visible': this.visible}" [class]="maskClass">
+                <p-galleriaContent *ngIf="visible" [@animation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)"
+                    [value]="value" [activeIndex]="activeIndex" [numVisible]="numVisible" (maskHide)="onMaskHide()" (activeItemChange)="onActiveItemChange($event)" [ngStyle]="containerStyle"></p-galleriaContent>
+            </div>
+        </div>
+
+        <ng-template #windowed>
+            <p-galleriaContent [value]="value" [activeIndex]="activeIndex" [numVisible]="numVisible" (activeItemChange)="onActiveItemChange($event)"></p-galleriaContent>
+        </ng-template>
+    `, animations: [
+                        trigger('animation', [
+                            transition('void => visible', [
+                                style({ transform: 'scale(0.7)', opacity: 0 }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition('visible => void', [
+                                animate('{{hideTransitionParams}}', style({ transform: 'scale(0.7)', opacity: 0 }))
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-galleria-content{display:flex;flex-direction:column}.p-galleria-item-wrapper{display:flex;flex-direction:column;position:relative}.p-galleria-item-container{position:relative;display:flex;height:100%}.p-galleria-item-nav{position:absolute;top:50%;margin-top:-.5rem;display:inline-flex;justify-content:center;align-items:center;overflow:hidden}.p-galleria-item-prev{left:0;border-top-left-radius:0;border-bottom-left-radius:0}.p-galleria-item-next{right:0;border-top-right-radius:0;border-bottom-right-radius:0}.p-galleria-item{display:flex;justify-content:center;align-items:center;height:100%;width:100%}.p-galleria-item-nav-onhover .p-galleria-item-nav{pointer-events:none;opacity:0;transition:opacity .2s ease-in-out}.p-galleria-item-nav-onhover .p-galleria-item-wrapper:hover .p-galleria-item-nav{pointer-events:all;opacity:1}.p-galleria-item-nav-onhover .p-galleria-item-wrapper:hover .p-galleria-item-nav.p-disabled{pointer-events:none}.p-galleria-caption{position:absolute;bottom:0;left:0;width:100%}.p-galleria-thumbnail-wrapper{display:flex;flex-direction:column;overflow:auto;flex-shrink:0}.p-galleria-thumbnail-prev,.p-galleria-thumbnail-next{align-self:center;flex:0 0 auto;display:flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-galleria-thumbnail-prev span,.p-galleria-thumbnail-next span{display:flex;justify-content:center;align-items:center}.p-galleria-thumbnail-container{display:flex;flex-direction:row}.p-galleria-thumbnail-items-container{overflow:hidden;width:100%}.p-galleria-thumbnail-items{display:flex}.p-galleria-thumbnail-item{overflow:auto;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:.5}.p-galleria-thumbnail-item:hover{opacity:1;transition:opacity .3s}.p-galleria-thumbnail-item-current{opacity:1}.p-galleria-thumbnails-left .p-galleria-content,.p-galleria-thumbnails-right .p-galleria-content,.p-galleria-thumbnails-left .p-galleria-item-wrapper,.p-galleria-thumbnails-right .p-galleria-item-wrapper{flex-direction:row}.p-galleria-thumbnails-left p-galleriaitem,.p-galleria-thumbnails-top p-galleriaitem{order:2}.p-galleria-thumbnails-left p-galleriathumbnails,.p-galleria-thumbnails-top p-galleriathumbnails{order:1}.p-galleria-thumbnails-left .p-galleria-thumbnail-container,.p-galleria-thumbnails-right .p-galleria-thumbnail-container{flex-direction:column;flex-grow:1}.p-galleria-thumbnails-left .p-galleria-thumbnail-items,.p-galleria-thumbnails-right .p-galleria-thumbnail-items{flex-direction:column;height:100%}.p-galleria-thumbnails-left .p-galleria-thumbnail-wrapper,.p-galleria-thumbnails-right .p-galleria-thumbnail-wrapper{height:100%}.p-galleria-indicators{display:flex;align-items:center;justify-content:center}.p-galleria-indicator>button{display:inline-flex;align-items:center}.p-galleria-indicators-left .p-galleria-item-wrapper,.p-galleria-indicators-right .p-galleria-item-wrapper{flex-direction:row;align-items:center}.p-galleria-indicators-left .p-galleria-item-container,.p-galleria-indicators-top .p-galleria-item-container{order:2}.p-galleria-indicators-left .p-galleria-indicators,.p-galleria-indicators-top .p-galleria-indicators{order:1}.p-galleria-indicators-left .p-galleria-indicators,.p-galleria-indicators-right .p-galleria-indicators{flex-direction:column}.p-galleria-indicator-onitem .p-galleria-indicators{position:absolute;display:flex;z-index:1}.p-galleria-indicator-onitem.p-galleria-indicators-top .p-galleria-indicators{top:0;left:0;width:100%;align-items:flex-start}.p-galleria-indicator-onitem.p-galleria-indicators-right .p-galleria-indicators{right:0;top:0;height:100%;align-items:flex-end}.p-galleria-indicator-onitem.p-galleria-indicators-bottom .p-galleria-indicators{bottom:0;left:0;width:100%;align-items:flex-end}.p-galleria-indicator-onitem.p-galleria-indicators-left .p-galleria-indicators{left:0;top:0;height:100%;align-items:flex-start}.p-galleria-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:transparent;transition-property:background-color}.p-galleria-close{position:absolute;top:0;right:0;display:flex;justify-content:center;align-items:center;overflow:hidden}.p-galleria-mask .p-galleria-item-nav{position:fixed;top:50%;margin-top:-.5rem}.p-galleria-mask.p-galleria-mask-leave{background-color:transparent}.p-items-hidden .p-galleria-thumbnail-item{visibility:hidden}.p-items-hidden .p-galleria-thumbnail-item.p-galleria-thumbnail-item-active{visibility:visible}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }]; }, propDecorators: { activeIndex: [{
+                type: Input
+            }], fullScreen: [{
+                type: Input
+            }], id: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], numVisible: [{
+                type: Input
+            }], responsiveOptions: [{
+                type: Input
+            }], showItemNavigators: [{
+                type: Input
+            }], showThumbnailNavigators: [{
+                type: Input
+            }], showItemNavigatorsOnHover: [{
+                type: Input
+            }], changeItemOnIndicatorHover: [{
+                type: Input
+            }], circular: [{
+                type: Input
+            }], autoPlay: [{
+                type: Input
+            }], transitionInterval: [{
+                type: Input
+            }], showThumbnails: [{
+                type: Input
+            }], thumbnailsPosition: [{
+                type: Input
+            }], verticalThumbnailViewPortHeight: [{
+                type: Input
+            }], showIndicators: [{
+                type: Input
+            }], showIndicatorsOnItem: [{
+                type: Input
+            }], indicatorsPosition: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], maskClass: [{
+                type: Input
+            }], containerClass: [{
+                type: Input
+            }], containerStyle: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], mask: [{
+                type: ViewChild,
+                args: ['mask']
+            }], visible: [{
+                type: Input
+            }], activeIndexChange: [{
+                type: Output
+            }], visibleChange: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class GalleriaContent {
+    constructor(galleria, cd) {
+        this.galleria = galleria;
+        this.cd = cd;
+        this.value = [];
+        this.maskHide = new EventEmitter();
+        this.activeItemChange = new EventEmitter();
+        this.id = this.galleria.id || UniqueComponentId();
+        this.slideShowActicve = false;
+        this._activeIndex = 0;
+        this.slideShowActive = true;
+    }
+    get activeIndex() {
+        return this._activeIndex;
+    }
+    ;
+    set activeIndex(activeIndex) {
+        this._activeIndex = activeIndex;
+    }
+    galleriaClass() {
+        const thumbnailsPosClass = this.galleria.showThumbnails && this.getPositionClass('p-galleria-thumbnails', this.galleria.thumbnailsPosition);
+        const indicatorPosClass = this.galleria.showIndicators && this.getPositionClass('p-galleria-indicators', this.galleria.indicatorsPosition);
+        return (this.galleria.containerClass ? this.galleria.containerClass + " " : '') + (thumbnailsPosClass ? thumbnailsPosClass + " " : '') + (indicatorPosClass ? indicatorPosClass + " " : '');
+    }
+    startSlideShow() {
+        this.interval = setInterval(() => {
+            let activeIndex = (this.galleria.circular && (this.value.length - 1) === this.activeIndex) ? 0 : (this.activeIndex + 1);
+            this.onActiveIndexChange(activeIndex);
+            this.activeIndex = activeIndex;
+        }, this.galleria.transitionInterval);
+        this.slideShowActive = true;
+    }
+    stopSlideShow() {
+        if (this.interval) {
+            clearInterval(this.interval);
+        }
+        this.slideShowActive = false;
+    }
+    getPositionClass(preClassName, position) {
+        const positions = ['top', 'left', 'bottom', 'right'];
+        const pos = positions.find(item => item === position);
+        return pos ? `${preClassName}-${pos}` : '';
+    }
+    isVertical() {
+        return this.galleria.thumbnailsPosition === 'left' || this.galleria.thumbnailsPosition === 'right';
+    }
+    onActiveIndexChange(index) {
+        if (this.activeIndex !== index) {
+            this.activeIndex = index;
+            this.activeItemChange.emit(this.activeIndex);
+        }
+    }
+}
+GalleriaContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaContent, deps: [{ token: Galleria }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+GalleriaContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: GalleriaContent, selector: "p-galleriaContent", inputs: { activeIndex: "activeIndex", value: "value", numVisible: "numVisible" }, outputs: { maskHide: "maskHide", activeItemChange: "activeItemChange" }, ngImport: i0, template: `
+        <div [attr.id]="id" *ngIf="value && value.length > 0" [ngClass]="{'p-galleria p-component': true, 'p-galleria-fullscreen': this.galleria.fullScreen,
+            'p-galleria-indicator-onitem': this.galleria.showIndicatorsOnItem, 'p-galleria-item-nav-onhover': this.galleria.showItemNavigatorsOnHover && !this.galleria.fullScreen}"
+            [ngStyle]="!galleria.fullScreen ? galleria.containerStyle : {}" [class]="galleriaClass()">
+            <button *ngIf="galleria.fullScreen" type="button" class="p-galleria-close p-link" (click)="maskHide.emit()" pRipple>
+                <span class="p-galleria-close-icon pi pi-times"></span>
+            </button>
+            <div *ngIf="galleria.templates && galleria.headerFacet" class="p-galleria-header">
+                <p-galleriaItemSlot type="header" [templates]="galleria.templates"></p-galleriaItemSlot>
+            </div>
+            <div class="p-galleria-content">
+                <p-galleriaItem [value]="value" [activeIndex]="activeIndex" [circular]="galleria.circular" [templates]="galleria.templates" (onActiveIndexChange)="onActiveIndexChange($event)"
+                    [showIndicators]="galleria.showIndicators" [changeItemOnIndicatorHover]="galleria.changeItemOnIndicatorHover" [indicatorFacet]="galleria.indicatorFacet"
+                    [captionFacet]="galleria.captionFacet" [showItemNavigators]="galleria.showItemNavigators" [autoPlay]="galleria.autoPlay" [slideShowActive]="slideShowActive"
+                    (startSlideShow)="startSlideShow()" (stopSlideShow)="stopSlideShow()"></p-galleriaItem>
+
+                <p-galleriaThumbnails *ngIf="galleria.showThumbnails" [containerId]="id" [value]="value" (onActiveIndexChange)="onActiveIndexChange($event)" [activeIndex]="activeIndex" [templates]="galleria.templates"
+                    [numVisible]="numVisible" [responsiveOptions]="galleria.responsiveOptions" [circular]="galleria.circular"
+                    [isVertical]="isVertical()" [contentHeight]="galleria.verticalThumbnailViewPortHeight" [showThumbnailNavigators]="galleria.showThumbnailNavigators"
+                    [slideShowActive]="slideShowActive" (stopSlideShow)="stopSlideShow()"></p-galleriaThumbnails>
+            </div>
+            <div *ngIf="galleria.templates && galleria.footerFacet" class="p-galleria-footer">
+                <p-galleriaItemSlot type="footer" [templates]="galleria.templates"></p-galleriaItemSlot>
+            </div>
+        </div>
+    `, isInline: true, components: [{ type: i0.forwardRef(function () { return GalleriaItemSlot; }), selector: "p-galleriaItemSlot", inputs: ["templates", "index", "item", "type"] }, { type: i0.forwardRef(function () { return GalleriaItem; }), selector: "p-galleriaItem", inputs: ["circular", "value", "showItemNavigators", "showIndicators", "slideShowActive", "changeItemOnIndicatorHover", "autoPlay", "templates", "indicatorFacet", "captionFacet", "activeIndex"], outputs: ["startSlideShow", "stopSlideShow", "onActiveIndexChange"] }, { type: i0.forwardRef(function () { return GalleriaThumbnails; }), selector: "p-galleriaThumbnails", inputs: ["containerId", "value", "isVertical", "slideShowActive", "circular", "responsiveOptions", "contentHeight", "showThumbnailNavigators", "templates", "numVisible", "activeIndex"], outputs: ["onActiveIndexChange", "stopSlideShow"] }], directives: [{ type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i0.forwardRef(function () { return i3.Ripple; }), selector: "[pRipple]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaContent, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-galleriaContent',
+                    template: `
+        <div [attr.id]="id" *ngIf="value && value.length > 0" [ngClass]="{'p-galleria p-component': true, 'p-galleria-fullscreen': this.galleria.fullScreen,
+            'p-galleria-indicator-onitem': this.galleria.showIndicatorsOnItem, 'p-galleria-item-nav-onhover': this.galleria.showItemNavigatorsOnHover && !this.galleria.fullScreen}"
+            [ngStyle]="!galleria.fullScreen ? galleria.containerStyle : {}" [class]="galleriaClass()">
+            <button *ngIf="galleria.fullScreen" type="button" class="p-galleria-close p-link" (click)="maskHide.emit()" pRipple>
+                <span class="p-galleria-close-icon pi pi-times"></span>
+            </button>
+            <div *ngIf="galleria.templates && galleria.headerFacet" class="p-galleria-header">
+                <p-galleriaItemSlot type="header" [templates]="galleria.templates"></p-galleriaItemSlot>
+            </div>
+            <div class="p-galleria-content">
+                <p-galleriaItem [value]="value" [activeIndex]="activeIndex" [circular]="galleria.circular" [templates]="galleria.templates" (onActiveIndexChange)="onActiveIndexChange($event)"
+                    [showIndicators]="galleria.showIndicators" [changeItemOnIndicatorHover]="galleria.changeItemOnIndicatorHover" [indicatorFacet]="galleria.indicatorFacet"
+                    [captionFacet]="galleria.captionFacet" [showItemNavigators]="galleria.showItemNavigators" [autoPlay]="galleria.autoPlay" [slideShowActive]="slideShowActive"
+                    (startSlideShow)="startSlideShow()" (stopSlideShow)="stopSlideShow()"></p-galleriaItem>
+
+                <p-galleriaThumbnails *ngIf="galleria.showThumbnails" [containerId]="id" [value]="value" (onActiveIndexChange)="onActiveIndexChange($event)" [activeIndex]="activeIndex" [templates]="galleria.templates"
+                    [numVisible]="numVisible" [responsiveOptions]="galleria.responsiveOptions" [circular]="galleria.circular"
+                    [isVertical]="isVertical()" [contentHeight]="galleria.verticalThumbnailViewPortHeight" [showThumbnailNavigators]="galleria.showThumbnailNavigators"
+                    [slideShowActive]="slideShowActive" (stopSlideShow)="stopSlideShow()"></p-galleriaThumbnails>
+            </div>
+            <div *ngIf="galleria.templates && galleria.footerFacet" class="p-galleria-footer">
+                <p-galleriaItemSlot type="footer" [templates]="galleria.templates"></p-galleriaItemSlot>
+            </div>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush
+                }]
+        }], ctorParameters: function () { return [{ type: Galleria }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { activeIndex: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], numVisible: [{
+                type: Input
+            }], maskHide: [{
+                type: Output
+            }], activeItemChange: [{
+                type: Output
+            }] } });
+class GalleriaItemSlot {
+    get item() {
+        return this._item;
+    }
+    ;
+    set item(item) {
+        this._item = item;
+        if (this.templates) {
+            this.templates.forEach((item) => {
+                if (item.getType() === this.type) {
+                    switch (this.type) {
+                        case 'item':
+                        case 'caption':
+                        case 'thumbnail':
+                            this.context = { $implicit: this.item };
+                            this.contentTemplate = item.template;
+                            break;
+                    }
+                }
+            });
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            if (item.getType() === this.type) {
+                switch (this.type) {
+                    case 'item':
+                    case 'caption':
+                    case 'thumbnail':
+                        this.context = { $implicit: this.item };
+                        this.contentTemplate = item.template;
+                        break;
+                    case 'indicator':
+                        this.context = { $implicit: this.index };
+                        this.contentTemplate = item.template;
+                        break;
+                    default:
+                        this.context = {};
+                        this.contentTemplate = item.template;
+                        break;
+                }
+            }
+        });
+    }
+}
+GalleriaItemSlot.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaItemSlot, deps: [], target: i0.ɵɵFactoryTarget.Component });
+GalleriaItemSlot.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: GalleriaItemSlot, selector: "p-galleriaItemSlot", inputs: { templates: "templates", index: "index", item: "item", type: "type" }, ngImport: i0, template: `
+        <ng-container *ngIf="contentTemplate">
+            <ng-container *ngTemplateOutlet="contentTemplate; context: context"></ng-container>
+        </ng-container>
+    `, isInline: true, directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaItemSlot, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-galleriaItemSlot',
+                    template: `
+        <ng-container *ngIf="contentTemplate">
+            <ng-container *ngTemplateOutlet="contentTemplate; context: context"></ng-container>
+        </ng-container>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush
+                }]
+        }], propDecorators: { templates: [{
+                type: Input
+            }], index: [{
+                type: Input
+            }], item: [{
+                type: Input
+            }], type: [{
+                type: Input
+            }] } });
+class GalleriaItem {
+    constructor() {
+        this.circular = false;
+        this.showItemNavigators = false;
+        this.showIndicators = true;
+        this.slideShowActive = true;
+        this.changeItemOnIndicatorHover = true;
+        this.autoPlay = false;
+        this.startSlideShow = new EventEmitter();
+        this.stopSlideShow = new EventEmitter();
+        this.onActiveIndexChange = new EventEmitter();
+        this._activeIndex = 0;
+    }
+    get activeIndex() {
+        return this._activeIndex;
+    }
+    ;
+    set activeIndex(activeIndex) {
+        this._activeIndex = activeIndex;
+        this.activeItem = this.value[this._activeIndex];
+    }
+    ngOnInit() {
+        if (this.autoPlay) {
+            this.startSlideShow.emit();
+        }
+    }
+    next() {
+        let nextItemIndex = this.activeIndex + 1;
+        let activeIndex = this.circular && this.value.length - 1 === this.activeIndex
+            ? 0
+            : nextItemIndex;
+        this.onActiveIndexChange.emit(activeIndex);
+    }
+    prev() {
+        let prevItemIndex = this.activeIndex !== 0 ? this.activeIndex - 1 : 0;
+        let activeIndex = this.circular && this.activeIndex === 0
+            ? this.value.length - 1
+            : prevItemIndex;
+        this.onActiveIndexChange.emit(activeIndex);
+    }
+    stopTheSlideShow() {
+        if (this.slideShowActive && this.stopSlideShow) {
+            this.stopSlideShow.emit();
+        }
+    }
+    navForward(e) {
+        this.stopTheSlideShow();
+        this.next();
+        if (e && e.cancelable) {
+            e.preventDefault();
+        }
+    }
+    navBackward(e) {
+        this.stopTheSlideShow();
+        this.prev();
+        if (e && e.cancelable) {
+            e.preventDefault();
+        }
+    }
+    onIndicatorClick(index) {
+        this.stopTheSlideShow();
+        this.onActiveIndexChange.emit(index);
+    }
+    onIndicatorMouseEnter(index) {
+        if (this.changeItemOnIndicatorHover) {
+            this.stopTheSlideShow();
+            this.onActiveIndexChange.emit(index);
+        }
+    }
+    onIndicatorKeyDown(index) {
+        this.stopTheSlideShow();
+        this.onActiveIndexChange.emit(index);
+    }
+    isNavForwardDisabled() {
+        return !this.circular && this.activeIndex === (this.value.length - 1);
+    }
+    isNavBackwardDisabled() {
+        return !this.circular && this.activeIndex === 0;
+    }
+    isIndicatorItemActive(index) {
+        return this.activeIndex === index;
+    }
+}
+GalleriaItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
+GalleriaItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: GalleriaItem, selector: "p-galleriaItem", inputs: { circular: "circular", value: "value", showItemNavigators: "showItemNavigators", showIndicators: "showIndicators", slideShowActive: "slideShowActive", changeItemOnIndicatorHover: "changeItemOnIndicatorHover", autoPlay: "autoPlay", templates: "templates", indicatorFacet: "indicatorFacet", captionFacet: "captionFacet", activeIndex: "activeIndex" }, outputs: { startSlideShow: "startSlideShow", stopSlideShow: "stopSlideShow", onActiveIndexChange: "onActiveIndexChange" }, ngImport: i0, template: `
+        <div class="p-galleria-item-wrapper">
+            <div class="p-galleria-item-container">
+                <button *ngIf="showItemNavigators" type="button" [ngClass]="{'p-galleria-item-prev p-galleria-item-nav p-link': true, 'p-disabled': this.isNavBackwardDisabled()}" (click)="navBackward($event)" [disabled]="isNavBackwardDisabled()" pRipple>
+                    <span class="p-galleria-item-prev-icon pi pi-chevron-left"></span>
+                </button>
+                <p-galleriaItemSlot type="item" [item]="activeItem" [templates]="templates" class="p-galleria-item"></p-galleriaItemSlot>
+                <button *ngIf="showItemNavigators" type="button" [ngClass]="{'p-galleria-item-next p-galleria-item-nav p-link': true,'p-disabled': this.isNavForwardDisabled()}" (click)="navForward($event)"  [disabled]="isNavForwardDisabled()" pRipple>
+                    <span class="p-galleria-item-next-icon pi pi-chevron-right"></span>
+                </button>
+                <div class="p-galleria-caption" *ngIf="captionFacet">
+                    <p-galleriaItemSlot type="caption" [item]="activeItem" [templates]="templates"></p-galleriaItemSlot>
+                </div>
+            </div>
+            <ul *ngIf="showIndicators" class="p-galleria-indicators p-reset">
+                <li *ngFor="let item of value; let index = index;" tabindex="0"
+                    (click)="onIndicatorClick(index)" (mouseenter)="onIndicatorMouseEnter(index)" (keydown.enter)="onIndicatorKeyDown(index)"
+                    [ngClass]="{'p-galleria-indicator': true,'p-highlight': isIndicatorItemActive(index)}">
+                    <button type="button" tabIndex="-1" class="p-link" *ngIf="!indicatorFacet">
+                    </button>
+                    <p-galleriaItemSlot type="indicator" [index]="index" [templates]="templates"></p-galleriaItemSlot>
+                </li>
+            </ul>
+        </div>
+    `, isInline: true, components: [{ type: GalleriaItemSlot, selector: "p-galleriaItemSlot", inputs: ["templates", "index", "item", "type"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaItem, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-galleriaItem',
+                    template: `
+        <div class="p-galleria-item-wrapper">
+            <div class="p-galleria-item-container">
+                <button *ngIf="showItemNavigators" type="button" [ngClass]="{'p-galleria-item-prev p-galleria-item-nav p-link': true, 'p-disabled': this.isNavBackwardDisabled()}" (click)="navBackward($event)" [disabled]="isNavBackwardDisabled()" pRipple>
+                    <span class="p-galleria-item-prev-icon pi pi-chevron-left"></span>
+                </button>
+                <p-galleriaItemSlot type="item" [item]="activeItem" [templates]="templates" class="p-galleria-item"></p-galleriaItemSlot>
+                <button *ngIf="showItemNavigators" type="button" [ngClass]="{'p-galleria-item-next p-galleria-item-nav p-link': true,'p-disabled': this.isNavForwardDisabled()}" (click)="navForward($event)"  [disabled]="isNavForwardDisabled()" pRipple>
+                    <span class="p-galleria-item-next-icon pi pi-chevron-right"></span>
+                </button>
+                <div class="p-galleria-caption" *ngIf="captionFacet">
+                    <p-galleriaItemSlot type="caption" [item]="activeItem" [templates]="templates"></p-galleriaItemSlot>
+                </div>
+            </div>
+            <ul *ngIf="showIndicators" class="p-galleria-indicators p-reset">
+                <li *ngFor="let item of value; let index = index;" tabindex="0"
+                    (click)="onIndicatorClick(index)" (mouseenter)="onIndicatorMouseEnter(index)" (keydown.enter)="onIndicatorKeyDown(index)"
+                    [ngClass]="{'p-galleria-indicator': true,'p-highlight': isIndicatorItemActive(index)}">
+                    <button type="button" tabIndex="-1" class="p-link" *ngIf="!indicatorFacet">
+                    </button>
+                    <p-galleriaItemSlot type="indicator" [index]="index" [templates]="templates"></p-galleriaItemSlot>
+                </li>
+            </ul>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush
+                }]
+        }], propDecorators: { circular: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], showItemNavigators: [{
+                type: Input
+            }], showIndicators: [{
+                type: Input
+            }], slideShowActive: [{
+                type: Input
+            }], changeItemOnIndicatorHover: [{
+                type: Input
+            }], autoPlay: [{
+                type: Input
+            }], templates: [{
+                type: Input
+            }], indicatorFacet: [{
+                type: Input
+            }], captionFacet: [{
+                type: Input
+            }], startSlideShow: [{
+                type: Output
+            }], stopSlideShow: [{
+                type: Output
+            }], onActiveIndexChange: [{
+                type: Output
+            }], activeIndex: [{
+                type: Input
+            }] } });
+class GalleriaThumbnails {
+    constructor(cd) {
+        this.cd = cd;
+        this.isVertical = false;
+        this.slideShowActive = false;
+        this.circular = false;
+        this.contentHeight = "300px";
+        this.showThumbnailNavigators = true;
+        this.onActiveIndexChange = new EventEmitter();
+        this.stopSlideShow = new EventEmitter();
+        this.startPos = null;
+        this.thumbnailsStyle = null;
+        this.sortedResponsiveOptions = null;
+        this.totalShiftedItems = 0;
+        this.page = 0;
+        this._numVisible = 0;
+        this.d_numVisible = 0;
+        this._oldNumVisible = 0;
+        this._activeIndex = 0;
+        this._oldactiveIndex = 0;
+    }
+    get numVisible() {
+        return this._numVisible;
+    }
+    ;
+    set numVisible(numVisible) {
+        this._numVisible = numVisible;
+        this._oldNumVisible = this.d_numVisible;
+        this.d_numVisible = numVisible;
+    }
+    get activeIndex() {
+        return this._activeIndex;
+    }
+    ;
+    set activeIndex(activeIndex) {
+        this._oldactiveIndex = this._activeIndex;
+        this._activeIndex = activeIndex;
+    }
+    ngOnInit() {
+        this.createStyle();
+        if (this.responsiveOptions) {
+            this.bindDocumentListeners();
+        }
+    }
+    ngAfterContentChecked() {
+        let totalShiftedItems = this.totalShiftedItems;
+        if ((this._oldNumVisible !== this.d_numVisible || this._oldactiveIndex !== this._activeIndex) && this.itemsContainer) {
+            if (this._activeIndex <= this.getMedianItemIndex()) {
+                totalShiftedItems = 0;
+            }
+            else if (this.value.length - this.d_numVisible + this.getMedianItemIndex() < this._activeIndex) {
+                totalShiftedItems = this.d_numVisible - this.value.length;
+            }
+            else if (this.value.length - this.d_numVisible < this._activeIndex && this.d_numVisible % 2 === 0) {
+                totalShiftedItems = (this._activeIndex * -1) + this.getMedianItemIndex() + 1;
+            }
+            else {
+                totalShiftedItems = (this._activeIndex * -1) + this.getMedianItemIndex();
+            }
+            if (totalShiftedItems !== this.totalShiftedItems) {
+                this.totalShiftedItems = totalShiftedItems;
+            }
+            if (this.itemsContainer && this.itemsContainer.nativeElement) {
+                this.itemsContainer.nativeElement.style.transform = this.isVertical ? `translate3d(0, ${totalShiftedItems * (100 / this.d_numVisible)}%, 0)` : `translate3d(${totalShiftedItems * (100 / this.d_numVisible)}%, 0, 0)`;
+            }
+            if (this._oldactiveIndex !== this._activeIndex) {
+                DomHandler.removeClass(this.itemsContainer.nativeElement, 'p-items-hidden');
+                this.itemsContainer.nativeElement.style.transition = 'transform 500ms ease 0s';
+            }
+            this._oldactiveIndex = this._activeIndex;
+            this._oldNumVisible = this.d_numVisible;
+        }
+    }
+    ngAfterViewInit() {
+        this.calculatePosition();
+    }
+    createStyle() {
+        if (!this.thumbnailsStyle) {
+            this.thumbnailsStyle = document.createElement('style');
+            this.thumbnailsStyle.type = 'text/css';
+            document.body.appendChild(this.thumbnailsStyle);
+        }
+        let innerHTML = `
+            #${this.containerId} .p-galleria-thumbnail-item {
+                flex: 1 0 ${(100 / this.d_numVisible)}%
+            }
+        `;
+        if (this.responsiveOptions) {
+            this.sortedResponsiveOptions = [...this.responsiveOptions];
+            this.sortedResponsiveOptions.sort((data1, data2) => {
+                const value1 = data1.breakpoint;
+                const value2 = data2.breakpoint;
+                let result = null;
+                if (value1 == null && value2 != null)
+                    result = -1;
+                else if (value1 != null && value2 == null)
+                    result = 1;
+                else if (value1 == null && value2 == null)
+                    result = 0;
+                else if (typeof value1 === 'string' && typeof value2 === 'string')
+                    result = value1.localeCompare(value2, undefined, { numeric: true });
+                else
+                    result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
+                return -1 * result;
+            });
+            for (let i = 0; i < this.sortedResponsiveOptions.length; i++) {
+                let res = this.sortedResponsiveOptions[i];
+                innerHTML += `
+                    @media screen and (max-width: ${res.breakpoint}) {
+                        #${this.containerId} .p-galleria-thumbnail-item {
+                            flex: 1 0 ${(100 / res.numVisible)}%
+                        }
+                    }
+                `;
+            }
+        }
+        this.thumbnailsStyle.innerHTML = innerHTML;
+    }
+    calculatePosition() {
+        if (this.itemsContainer && this.sortedResponsiveOptions) {
+            let windowWidth = window.innerWidth;
+            let matchedResponsiveData = {
+                numVisible: this._numVisible
+            };
+            for (let i = 0; i < this.sortedResponsiveOptions.length; i++) {
+                let res = this.sortedResponsiveOptions[i];
+                if (parseInt(res.breakpoint, 10) >= windowWidth) {
+                    matchedResponsiveData = res;
+                }
+            }
+            if (this.d_numVisible !== matchedResponsiveData.numVisible) {
+                this.d_numVisible = matchedResponsiveData.numVisible;
+                this.cd.markForCheck();
+            }
+        }
+    }
+    getTabIndex(index) {
+        return this.isItemActive(index) ? 0 : null;
+    }
+    navForward(e) {
+        this.stopTheSlideShow();
+        let nextItemIndex = this._activeIndex + 1;
+        if (nextItemIndex + this.totalShiftedItems > this.getMedianItemIndex() && ((-1 * this.totalShiftedItems) < this.getTotalPageNumber() - 1 || this.circular)) {
+            this.step(-1);
+        }
+        let activeIndex = this.circular && (this.value.length - 1) === this._activeIndex ? 0 : nextItemIndex;
+        this.onActiveIndexChange.emit(activeIndex);
+        if (e.cancelable) {
+            e.preventDefault();
+        }
+    }
+    navBackward(e) {
+        this.stopTheSlideShow();
+        let prevItemIndex = this._activeIndex !== 0 ? this._activeIndex - 1 : 0;
+        let diff = prevItemIndex + this.totalShiftedItems;
+        if ((this.d_numVisible - diff - 1) > this.getMedianItemIndex() && ((-1 * this.totalShiftedItems) !== 0 || this.circular)) {
+            this.step(1);
+        }
+        let activeIndex = this.circular && this._activeIndex === 0 ? this.value.length - 1 : prevItemIndex;
+        this.onActiveIndexChange.emit(activeIndex);
+        if (e.cancelable) {
+            e.preventDefault();
+        }
+    }
+    onItemClick(index) {
+        this.stopTheSlideShow();
+        let selectedItemIndex = index;
+        if (selectedItemIndex !== this._activeIndex) {
+            const diff = selectedItemIndex + this.totalShiftedItems;
+            let dir = 0;
+            if (selectedItemIndex < this._activeIndex) {
+                dir = (this.d_numVisible - diff - 1) - this.getMedianItemIndex();
+                if (dir > 0 && (-1 * this.totalShiftedItems) !== 0) {
+                    this.step(dir);
+                }
+            }
+            else {
+                dir = this.getMedianItemIndex() - diff;
+                if (dir < 0 && (-1 * this.totalShiftedItems) < this.getTotalPageNumber() - 1) {
+                    this.step(dir);
+                }
+            }
+            this.activeIndex = selectedItemIndex;
+            this.onActiveIndexChange.emit(this.activeIndex);
+        }
+    }
+    step(dir) {
+        let totalShiftedItems = this.totalShiftedItems + dir;
+        if (dir < 0 && (-1 * totalShiftedItems) + this.d_numVisible > (this.value.length - 1)) {
+            totalShiftedItems = this.d_numVisible - this.value.length;
+        }
+        else if (dir > 0 && totalShiftedItems > 0) {
+            totalShiftedItems = 0;
+        }
+        if (this.circular) {
+            if (dir < 0 && this.value.length - 1 === this._activeIndex) {
+                totalShiftedItems = 0;
+            }
+            else if (dir > 0 && this._activeIndex === 0) {
+                totalShiftedItems = this.d_numVisible - this.value.length;
+            }
+        }
+        if (this.itemsContainer) {
+            DomHandler.removeClass(this.itemsContainer.nativeElement, 'p-items-hidden');
+            this.itemsContainer.nativeElement.style.transform = this.isVertical ? `translate3d(0, ${totalShiftedItems * (100 / this.d_numVisible)}%, 0)` : `translate3d(${totalShiftedItems * (100 / this.d_numVisible)}%, 0, 0)`;
+            this.itemsContainer.nativeElement.style.transition = 'transform 500ms ease 0s';
+        }
+        this.totalShiftedItems = totalShiftedItems;
+    }
+    stopTheSlideShow() {
+        if (this.slideShowActive && this.stopSlideShow) {
+            this.stopSlideShow.emit();
+        }
+    }
+    changePageOnTouch(e, diff) {
+        if (diff < 0) { // left
+            this.navForward(e);
+        }
+        else { // right
+            this.navBackward(e);
+        }
+    }
+    getTotalPageNumber() {
+        return this.value.length > this.d_numVisible ? (this.value.length - this.d_numVisible) + 1 : 0;
+    }
+    getMedianItemIndex() {
+        let index = Math.floor(this.d_numVisible / 2);
+        return (this.d_numVisible % 2) ? index : index - 1;
+    }
+    onTransitionEnd() {
+        if (this.itemsContainer && this.itemsContainer.nativeElement) {
+            DomHandler.addClass(this.itemsContainer.nativeElement, 'p-items-hidden');
+            this.itemsContainer.nativeElement.style.transition = '';
+        }
+    }
+    onTouchEnd(e) {
+        let touchobj = e.changedTouches[0];
+        if (this.isVertical) {
+            this.changePageOnTouch(e, (touchobj.pageY - this.startPos.y));
+        }
+        else {
+            this.changePageOnTouch(e, (touchobj.pageX - this.startPos.x));
+        }
+    }
+    onTouchMove(e) {
+        if (e.cancelable) {
+            e.preventDefault();
+        }
+    }
+    onTouchStart(e) {
+        let touchobj = e.changedTouches[0];
+        this.startPos = {
+            x: touchobj.pageX,
+            y: touchobj.pageY
+        };
+    }
+    isNavBackwardDisabled() {
+        return (!this.circular && this._activeIndex === 0) || (this.value.length <= this.d_numVisible);
+    }
+    isNavForwardDisabled() {
+        return (!this.circular && this._activeIndex === (this.value.length - 1)) || (this.value.length <= this.d_numVisible);
+    }
+    firstItemAciveIndex() {
+        return this.totalShiftedItems * -1;
+    }
+    lastItemActiveIndex() {
+        return this.firstItemAciveIndex() + this.d_numVisible - 1;
+    }
+    isItemActive(index) {
+        return this.firstItemAciveIndex() <= index && this.lastItemActiveIndex() >= index;
+    }
+    bindDocumentListeners() {
+        if (!this.documentResizeListener) {
+            this.documentResizeListener = () => {
+                this.calculatePosition();
+            };
+            window.addEventListener('resize', this.documentResizeListener);
+        }
+    }
+    unbindDocumentListeners() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    ngOnDestroy() {
+        if (this.responsiveOptions) {
+            this.unbindDocumentListeners();
+        }
+        if (this.thumbnailsStyle) {
+            this.thumbnailsStyle.parentNode.removeChild(this.thumbnailsStyle);
+        }
+    }
+}
+GalleriaThumbnails.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaThumbnails, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+GalleriaThumbnails.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: GalleriaThumbnails, selector: "p-galleriaThumbnails", inputs: { containerId: "containerId", value: "value", isVertical: "isVertical", slideShowActive: "slideShowActive", circular: "circular", responsiveOptions: "responsiveOptions", contentHeight: "contentHeight", showThumbnailNavigators: "showThumbnailNavigators", templates: "templates", numVisible: "numVisible", activeIndex: "activeIndex" }, outputs: { onActiveIndexChange: "onActiveIndexChange", stopSlideShow: "stopSlideShow" }, viewQueries: [{ propertyName: "itemsContainer", first: true, predicate: ["itemsContainer"], descendants: true }], ngImport: i0, template: `
+        <div class="p-galleria-thumbnail-wrapper">
+            <div class="p-galleria-thumbnail-container">
+                <button *ngIf="showThumbnailNavigators" type="button" [ngClass]="{'p-galleria-thumbnail-prev p-link': true, 'p-disabled': this.isNavBackwardDisabled()}" (click)="navBackward($event)" [disabled]="isNavBackwardDisabled()" pRipple>
+                    <span [ngClass]="{'p-galleria-thumbnail-prev-icon pi': true, 'pi-chevron-left': !this.isVertical, 'pi-chevron-up': this.isVertical}"></span>
+                </button>
+                <div class="p-galleria-thumbnail-items-container" [ngStyle]="{'height': isVertical ? contentHeight : ''}">
+                    <div #itemsContainer class="p-galleria-thumbnail-items" (transitionend)="onTransitionEnd()"
+                        (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)" (touchend)="onTouchEnd($event)">
+                        <div *ngFor="let item of value; let index = index;" [ngClass]="{'p-galleria-thumbnail-item': true, 'p-galleria-thumbnail-item-current': activeIndex === index, 'p-galleria-thumbnail-item-active': isItemActive(index),
+                            'p-galleria-thumbnail-item-start': firstItemAciveIndex() === index, 'p-galleria-thumbnail-item-end': lastItemActiveIndex() === index }">
+                            <div class="p-galleria-thumbnail-item-content" [attr.tabindex]="getTabIndex(index)" (click)="onItemClick(index)" (keydown.enter)="onItemClick(index)">
+                                <p-galleriaItemSlot type="thumbnail" [item]="item" [templates]="templates"></p-galleriaItemSlot>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <button *ngIf="showThumbnailNavigators" type="button" [ngClass]="{'p-galleria-thumbnail-next p-link': true, 'p-disabled': this.isNavForwardDisabled()}" (click)="navForward($event)" [disabled]="isNavForwardDisabled()" pRipple>
+                    <span [ngClass]="{'p-galleria-thumbnail-next-icon pi': true, 'pi-chevron-right': !this.isVertical, 'pi-chevron-down': this.isVertical}"></span>
+                </button>
+            </div>
+        </div>
+    `, isInline: true, components: [{ type: GalleriaItemSlot, selector: "p-galleriaItemSlot", inputs: ["templates", "index", "item", "type"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaThumbnails, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-galleriaThumbnails',
+                    template: `
+        <div class="p-galleria-thumbnail-wrapper">
+            <div class="p-galleria-thumbnail-container">
+                <button *ngIf="showThumbnailNavigators" type="button" [ngClass]="{'p-galleria-thumbnail-prev p-link': true, 'p-disabled': this.isNavBackwardDisabled()}" (click)="navBackward($event)" [disabled]="isNavBackwardDisabled()" pRipple>
+                    <span [ngClass]="{'p-galleria-thumbnail-prev-icon pi': true, 'pi-chevron-left': !this.isVertical, 'pi-chevron-up': this.isVertical}"></span>
+                </button>
+                <div class="p-galleria-thumbnail-items-container" [ngStyle]="{'height': isVertical ? contentHeight : ''}">
+                    <div #itemsContainer class="p-galleria-thumbnail-items" (transitionend)="onTransitionEnd()"
+                        (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)" (touchend)="onTouchEnd($event)">
+                        <div *ngFor="let item of value; let index = index;" [ngClass]="{'p-galleria-thumbnail-item': true, 'p-galleria-thumbnail-item-current': activeIndex === index, 'p-galleria-thumbnail-item-active': isItemActive(index),
+                            'p-galleria-thumbnail-item-start': firstItemAciveIndex() === index, 'p-galleria-thumbnail-item-end': lastItemActiveIndex() === index }">
+                            <div class="p-galleria-thumbnail-item-content" [attr.tabindex]="getTabIndex(index)" (click)="onItemClick(index)" (keydown.enter)="onItemClick(index)">
+                                <p-galleriaItemSlot type="thumbnail" [item]="item" [templates]="templates"></p-galleriaItemSlot>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <button *ngIf="showThumbnailNavigators" type="button" [ngClass]="{'p-galleria-thumbnail-next p-link': true, 'p-disabled': this.isNavForwardDisabled()}" (click)="navForward($event)" [disabled]="isNavForwardDisabled()" pRipple>
+                    <span [ngClass]="{'p-galleria-thumbnail-next-icon pi': true, 'pi-chevron-right': !this.isVertical, 'pi-chevron-down': this.isVertical}"></span>
+                </button>
+            </div>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerId: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], isVertical: [{
+                type: Input
+            }], slideShowActive: [{
+                type: Input
+            }], circular: [{
+                type: Input
+            }], responsiveOptions: [{
+                type: Input
+            }], contentHeight: [{
+                type: Input
+            }], showThumbnailNavigators: [{
+                type: Input
+            }], templates: [{
+                type: Input
+            }], onActiveIndexChange: [{
+                type: Output
+            }], stopSlideShow: [{
+                type: Output
+            }], itemsContainer: [{
+                type: ViewChild,
+                args: ['itemsContainer']
+            }], numVisible: [{
+                type: Input
+            }], activeIndex: [{
+                type: Input
+            }] } });
+class GalleriaModule {
+}
+GalleriaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+GalleriaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaModule, declarations: [Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails], imports: [CommonModule, SharedModule, RippleModule], exports: [CommonModule, Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails, SharedModule] });
+GalleriaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaModule, imports: [[CommonModule, SharedModule, RippleModule], CommonModule, SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GalleriaModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, RippleModule],
+                    exports: [CommonModule, Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails, SharedModule],
+                    declarations: [Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Galleria, GalleriaContent, GalleriaItem, GalleriaItemSlot, GalleriaModule, GalleriaThumbnails };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-galleria.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-galleria.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-galleria.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-galleria.mjs","sources":["../../src/app/components/galleria/galleria.ts","../../src/app/components/galleria/primeng-galleria.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,Input,Output,EventEmitter,ChangeDetectionStrategy, ViewChild, ContentChildren, QueryList, TemplateRef, OnInit, OnChanges, AfterContentChecked, SimpleChanges, ViewEncapsulation, ChangeDetectorRef, AfterViewInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport { SharedModule, PrimeTemplate, PrimeNGConfig } from 'primeng/api';\nimport { UniqueComponentId, ZIndexUtils } from 'primeng/utils';\nimport { DomHandler } from 'primeng/dom';\nimport { RippleModule } from 'primeng/ripple';\nimport { animate, style, transition, trigger, AnimationEvent } from '@angular/animations';\n\n@Component({\n    selector: 'p-galleria',\n    template: `\n        <div *ngIf=\"fullScreen;else windowed\">\n            <div *ngIf=\"maskVisible\" #mask [ngClass]=\"{'p-galleria-mask p-component-overlay p-component-overlay-enter':true, 'p-galleria-visible': this.visible}\" [class]=\"maskClass\">\n                <p-galleriaContent *ngIf=\"visible\" [@animation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@animation.start)=\"onAnimationStart($event)\" (@animation.done)=\"onAnimationEnd($event)\"\n                    [value]=\"value\" [activeIndex]=\"activeIndex\" [numVisible]=\"numVisible\" (maskHide)=\"onMaskHide()\" (activeItemChange)=\"onActiveItemChange($event)\" [ngStyle]=\"containerStyle\"></p-galleriaContent>\n            </div>\n        </div>\n\n        <ng-template #windowed>\n            <p-galleriaContent [value]=\"value\" [activeIndex]=\"activeIndex\" [numVisible]=\"numVisible\" (activeItemChange)=\"onActiveItemChange($event)\"></p-galleriaContent>\n        </ng-template>\n    `,\n    animations: [\n        trigger('animation', [\n            transition('void => visible', [\n                style({ transform: 'scale(0.7)', opacity: 0 }),\n                animate('{{showTransitionParams}}')\n            ]),\n            transition('visible => void', [\n                animate('{{hideTransitionParams}}', style({ transform: 'scale(0.7)', opacity: 0 }))\n            ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./galleria.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Galleria implements OnChanges, OnDestroy {\n\n    @Input() get activeIndex(): number {\n        return this._activeIndex;\n    };\n\n    set activeIndex(activeIndex) {\n        this._activeIndex = activeIndex;\n    }\n\n    @Input() fullScreen: boolean = false;\n\n    @Input() id: string;\n\n    @Input() value: any[];\n\n    @Input() numVisible: number = 3;\n\n    @Input() responsiveOptions: any[];\n\n    @Input() showItemNavigators: boolean = false;\n\n    @Input() showThumbnailNavigators: boolean = true;\n\n    @Input() showItemNavigatorsOnHover: boolean = false;\n\n    @Input() changeItemOnIndicatorHover: boolean = false;\n\n    @Input() circular: boolean = false;\n\n    @Input() autoPlay: boolean = false;\n\n    @Input() transitionInterval: number = 4000;\n\n    @Input() showThumbnails: boolean = true;\n\n    @Input() thumbnailsPosition: string = \"bottom\";\n\n    @Input() verticalThumbnailViewPortHeight: string = \"300px\";\n\n    @Input() showIndicators: boolean = false;\n\n    @Input() showIndicatorsOnItem: boolean = false;\n\n    @Input() indicatorsPosition: string = \"bottom\";\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() maskClass: string;\n\n    @Input() containerClass: string;\n\n    @Input() containerStyle: any;\n\n    @Input() showTransitionOptions: string = '150ms cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '150ms cubic-bezier(0, 0, 0.2, 1)';\n\n    @ViewChild('mask') mask: ElementRef;\n\n    @Input() get visible(): boolean {\n        return this._visible;\n    };\n\n    set visible(visible: boolean) {\n        this._visible = visible;\n\n        if (this._visible && !this.maskVisible) {\n            this.maskVisible = true;\n        }\n    }\n\n    @Output() activeIndexChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() visibleChange: EventEmitter<any> = new EventEmitter();\n\n\t@ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    _visible: boolean = false;\n\n    _activeIndex: number = 0;\n\n    headerFacet: any;\n\n    footerFacet: any;\n\n    indicatorFacet: any;\n\n    captionFacet: any;\n\n    maskVisible: boolean = false;\n\n    constructor(public element: ElementRef, public cd: ChangeDetectorRef, public config: PrimeNGConfig) { }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerFacet = item.template;\n                break;\n                case 'footer':\n                    this.footerFacet = item.template;\n                break;\n                case 'indicator':\n                    this.indicatorFacet = item.template;\n                break;\n                case 'caption':\n                    this.captionFacet = item.template;\n                break;\n            }\n        });\n    }\n\n    ngOnChanges(simpleChanges: SimpleChanges) {\n        if (simpleChanges.value && simpleChanges.value.currentValue?.length < this.numVisible) {\n            this.numVisible = simpleChanges.value.currentValue.length;\n        }\n    }\n\n    onMaskHide() {\n        this.visible = false;\n        this.visibleChange.emit(false);\n    }\n\n    onActiveItemChange(index) {\n        if (this.activeIndex !== index) {\n            this.activeIndex = index;\n            this.activeIndexChange.emit(index);\n        }\n    }\n\n    onAnimationStart(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                this.enableModality();\n            break;\n\n            case 'void':\n                DomHandler.addClass(this.mask.nativeElement, 'p-component-overlay-leave');\n            break;\n        }\n    }\n\n    onAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n               this.disableModality();\n            break;\n        }\n    }\n\n    enableModality() {\n        DomHandler.addClass(document.body, 'p-overflow-hidden');\n        this.cd.markForCheck();\n\n        if (this.mask) {\n            ZIndexUtils.set('modal', this.mask.nativeElement, this.baseZIndex || this.config.zIndex.modal);\n        }\n    }\n\n    disableModality() {\n        DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        this.maskVisible = false;\n        this.cd.markForCheck();\n\n        if (this.mask) {\n            ZIndexUtils.clear(this.mask.nativeElement);\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.fullScreen) {\n            DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        }\n\n        if (this.mask) {\n            this.disableModality()\n        }\n    }\n}\n\n@Component({\n    selector: 'p-galleriaContent',\n    template: `\n        <div [attr.id]=\"id\" *ngIf=\"value && value.length > 0\" [ngClass]=\"{'p-galleria p-component': true, 'p-galleria-fullscreen': this.galleria.fullScreen,\n            'p-galleria-indicator-onitem': this.galleria.showIndicatorsOnItem, 'p-galleria-item-nav-onhover': this.galleria.showItemNavigatorsOnHover && !this.galleria.fullScreen}\"\n            [ngStyle]=\"!galleria.fullScreen ? galleria.containerStyle : {}\" [class]=\"galleriaClass()\">\n            <button *ngIf=\"galleria.fullScreen\" type=\"button\" class=\"p-galleria-close p-link\" (click)=\"maskHide.emit()\" pRipple>\n                <span class=\"p-galleria-close-icon pi pi-times\"></span>\n            </button>\n            <div *ngIf=\"galleria.templates && galleria.headerFacet\" class=\"p-galleria-header\">\n                <p-galleriaItemSlot type=\"header\" [templates]=\"galleria.templates\"></p-galleriaItemSlot>\n            </div>\n            <div class=\"p-galleria-content\">\n                <p-galleriaItem [value]=\"value\" [activeIndex]=\"activeIndex\" [circular]=\"galleria.circular\" [templates]=\"galleria.templates\" (onActiveIndexChange)=\"onActiveIndexChange($event)\"\n                    [showIndicators]=\"galleria.showIndicators\" [changeItemOnIndicatorHover]=\"galleria.changeItemOnIndicatorHover\" [indicatorFacet]=\"galleria.indicatorFacet\"\n                    [captionFacet]=\"galleria.captionFacet\" [showItemNavigators]=\"galleria.showItemNavigators\" [autoPlay]=\"galleria.autoPlay\" [slideShowActive]=\"slideShowActive\"\n                    (startSlideShow)=\"startSlideShow()\" (stopSlideShow)=\"stopSlideShow()\"></p-galleriaItem>\n\n                <p-galleriaThumbnails *ngIf=\"galleria.showThumbnails\" [containerId]=\"id\" [value]=\"value\" (onActiveIndexChange)=\"onActiveIndexChange($event)\" [activeIndex]=\"activeIndex\" [templates]=\"galleria.templates\"\n                    [numVisible]=\"numVisible\" [responsiveOptions]=\"galleria.responsiveOptions\" [circular]=\"galleria.circular\"\n                    [isVertical]=\"isVertical()\" [contentHeight]=\"galleria.verticalThumbnailViewPortHeight\" [showThumbnailNavigators]=\"galleria.showThumbnailNavigators\"\n                    [slideShowActive]=\"slideShowActive\" (stopSlideShow)=\"stopSlideShow()\"></p-galleriaThumbnails>\n            </div>\n            <div *ngIf=\"galleria.templates && galleria.footerFacet\" class=\"p-galleria-footer\">\n                <p-galleriaItemSlot type=\"footer\" [templates]=\"galleria.templates\"></p-galleriaItemSlot>\n            </div>\n        </div>\n    `,\n   changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GalleriaContent {\n\n    @Input() get activeIndex(): number {\n        return this._activeIndex;\n    };\n\n    set activeIndex(activeIndex: number) {\n        this._activeIndex = activeIndex;\n    }\n\n    @Input() value: any[] = [];\n\n    @Input() numVisible: number;\n\n    @Output() maskHide: EventEmitter<any> = new EventEmitter();\n\n    @Output() activeItemChange: EventEmitter<any> = new EventEmitter();\n\n    id: string = this.galleria.id || UniqueComponentId();\n\n    slideShowActicve: boolean = false;\n\n    _activeIndex: number = 0;\n\n    slideShowActive: boolean = true;\n\n    interval: any;\n\n    styleClass: string;\n\n    constructor(public galleria: Galleria, public cd: ChangeDetectorRef) { }\n\n    galleriaClass() {\n        const thumbnailsPosClass = this.galleria.showThumbnails && this.getPositionClass('p-galleria-thumbnails', this.galleria.thumbnailsPosition);\n        const indicatorPosClass = this.galleria.showIndicators && this.getPositionClass('p-galleria-indicators', this.galleria.indicatorsPosition);\n\n        return (this.galleria.containerClass ? this.galleria.containerClass + \" \" : '') + (thumbnailsPosClass ? thumbnailsPosClass + \" \" : '') + (indicatorPosClass ? indicatorPosClass + \" \" : '');\n    }\n\n    startSlideShow() {\n        this.interval = setInterval(() => {\n            let activeIndex = (this.galleria.circular && (this.value.length - 1) === this.activeIndex) ? 0 : (this.activeIndex + 1);\n            this.onActiveIndexChange(activeIndex);\n            this.activeIndex = activeIndex;\n        }, this.galleria.transitionInterval);\n\n        this.slideShowActive = true;\n    }\n\n    stopSlideShow() {\n        if (this.interval) {\n            clearInterval(this.interval);\n        }\n\n        this.slideShowActive = false;\n    }\n\n    getPositionClass(preClassName, position) {\n        const positions = ['top', 'left', 'bottom', 'right'];\n        const pos = positions.find(item => item === position);\n\n        return pos ? `${preClassName}-${pos}` : '';\n    }\n\n    isVertical() {\n        return this.galleria.thumbnailsPosition === 'left' || this.galleria.thumbnailsPosition === 'right';\n    }\n\n    onActiveIndexChange(index) {\n        if (this.activeIndex !== index) {\n            this.activeIndex = index;\n            this.activeItemChange.emit(this.activeIndex);\n        }\n    }\n}\n\n@Component({\n    selector: 'p-galleriaItemSlot',\n    template: `\n        <ng-container *ngIf=\"contentTemplate\">\n            <ng-container *ngTemplateOutlet=\"contentTemplate; context: context\"></ng-container>\n        </ng-container>\n    `,\n   changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GalleriaItemSlot {\n    @Input() templates: QueryList<any>;\n\n    @Input() index: number;\n\n    @Input() get item(): any {\n        return this._item;\n    };\n\n    set item(item:any) {\n        this._item = item;\n        if (this.templates) {\n            this.templates.forEach((item) => {\n                if (item.getType() === this.type) {\n                    switch(this.type) {\n                        case 'item':\n                        case 'caption':\n                        case 'thumbnail':\n                            this.context = {$implicit: this.item};\n                            this.contentTemplate = item.template;\n                        break;\n                    }\n                }\n            });\n        }\n    }\n\n    @Input() type: string;\n\n    contentTemplate: TemplateRef<any>;\n\n    context:any;\n\n    _item:any;\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            if (item.getType() === this.type) {\n                switch(this.type) {\n                    case 'item':\n                    case 'caption':\n                    case 'thumbnail':\n                        this.context = {$implicit: this.item};\n                        this.contentTemplate = item.template;\n                    break;\n                    case 'indicator':\n                        this.context = {$implicit: this.index};\n                        this.contentTemplate = item.template;\n                    break;\n                    default:\n                        this.context = {};\n                        this.contentTemplate = item.template;\n                    break;\n                }\n            }\n        });\n    }\n}\n\n@Component({\n    selector: 'p-galleriaItem',\n    template: `\n        <div class=\"p-galleria-item-wrapper\">\n            <div class=\"p-galleria-item-container\">\n                <button *ngIf=\"showItemNavigators\" type=\"button\" [ngClass]=\"{'p-galleria-item-prev p-galleria-item-nav p-link': true, 'p-disabled': this.isNavBackwardDisabled()}\" (click)=\"navBackward($event)\" [disabled]=\"isNavBackwardDisabled()\" pRipple>\n                    <span class=\"p-galleria-item-prev-icon pi pi-chevron-left\"></span>\n                </button>\n                <p-galleriaItemSlot type=\"item\" [item]=\"activeItem\" [templates]=\"templates\" class=\"p-galleria-item\"></p-galleriaItemSlot>\n                <button *ngIf=\"showItemNavigators\" type=\"button\" [ngClass]=\"{'p-galleria-item-next p-galleria-item-nav p-link': true,'p-disabled': this.isNavForwardDisabled()}\" (click)=\"navForward($event)\"  [disabled]=\"isNavForwardDisabled()\" pRipple>\n                    <span class=\"p-galleria-item-next-icon pi pi-chevron-right\"></span>\n                </button>\n                <div class=\"p-galleria-caption\" *ngIf=\"captionFacet\">\n                    <p-galleriaItemSlot type=\"caption\" [item]=\"activeItem\" [templates]=\"templates\"></p-galleriaItemSlot>\n                </div>\n            </div>\n            <ul *ngIf=\"showIndicators\" class=\"p-galleria-indicators p-reset\">\n                <li *ngFor=\"let item of value; let index = index;\" tabindex=\"0\"\n                    (click)=\"onIndicatorClick(index)\" (mouseenter)=\"onIndicatorMouseEnter(index)\" (keydown.enter)=\"onIndicatorKeyDown(index)\"\n                    [ngClass]=\"{'p-galleria-indicator': true,'p-highlight': isIndicatorItemActive(index)}\">\n                    <button type=\"button\" tabIndex=\"-1\" class=\"p-link\" *ngIf=\"!indicatorFacet\">\n                    </button>\n                    <p-galleriaItemSlot type=\"indicator\" [index]=\"index\" [templates]=\"templates\"></p-galleriaItemSlot>\n                </li>\n            </ul>\n        </div>\n    `,\n   changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GalleriaItem implements OnInit {\n\n    @Input() circular: boolean = false;\n\n    @Input() value: any[];\n\n    @Input() showItemNavigators: boolean = false;\n\n    @Input() showIndicators: boolean = true;\n\n    @Input() slideShowActive: boolean = true;\n\n    @Input() changeItemOnIndicatorHover: boolean = true;\n\n    @Input() autoPlay: boolean = false;\n\n    @Input() templates: QueryList<any>;\n\n    @Input() indicatorFacet: any;\n\n    @Input() captionFacet: any;\n\n    @Output() startSlideShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() stopSlideShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onActiveIndexChange: EventEmitter<any> = new EventEmitter();\n\n    @Input() get activeIndex(): number {\n        return this._activeIndex;\n    };\n\n    set activeIndex(activeIndex) {\n        this._activeIndex = activeIndex;\n        this.activeItem = this.value[this._activeIndex];\n    }\n\n    _activeIndex: number = 0;\n\n    activeItem: any;\n\n    ngOnInit() {\n        if (this.autoPlay) {\n            this.startSlideShow.emit();\n        }\n    }\n\n    next() {\n        let nextItemIndex = this.activeIndex + 1;\n        let activeIndex = this.circular && this.value.length - 1 === this.activeIndex\n                    ? 0\n                    : nextItemIndex;\n        this.onActiveIndexChange.emit(activeIndex);\n    }\n\n    prev() {\n        let prevItemIndex = this.activeIndex !== 0 ? this.activeIndex - 1 : 0;\n        let activeIndex = this.circular && this.activeIndex === 0\n                ? this.value.length - 1\n                : prevItemIndex\n        this.onActiveIndexChange.emit(activeIndex);\n    }\n\n    stopTheSlideShow() {\n        if (this.slideShowActive && this.stopSlideShow) {\n            this.stopSlideShow.emit();\n        }\n    }\n\n    navForward(e) {\n        this.stopTheSlideShow();\n        this.next();\n\n        if (e && e.cancelable) {\n            e.preventDefault();\n        }\n    }\n\n    navBackward(e) {\n        this.stopTheSlideShow();\n        this.prev();\n\n        if (e && e.cancelable) {\n            e.preventDefault();\n        }\n    }\n\n    onIndicatorClick(index) {\n        this.stopTheSlideShow();\n        this.onActiveIndexChange.emit(index);\n    }\n\n    onIndicatorMouseEnter(index) {\n        if (this.changeItemOnIndicatorHover) {\n            this.stopTheSlideShow();\n            this.onActiveIndexChange.emit(index);\n        }\n    }\n\n    onIndicatorKeyDown(index) {\n        this.stopTheSlideShow();\n        this.onActiveIndexChange.emit(index);\n    }\n\n    isNavForwardDisabled() {\n        return !this.circular && this.activeIndex === (this.value.length - 1);\n    }\n\n    isNavBackwardDisabled() {\n        return !this.circular && this.activeIndex === 0;\n    }\n\n    isIndicatorItemActive(index) {\n        return this.activeIndex === index;\n    }\n}\n\n@Component({\n    selector: 'p-galleriaThumbnails',\n    template: `\n        <div class=\"p-galleria-thumbnail-wrapper\">\n            <div class=\"p-galleria-thumbnail-container\">\n                <button *ngIf=\"showThumbnailNavigators\" type=\"button\" [ngClass]=\"{'p-galleria-thumbnail-prev p-link': true, 'p-disabled': this.isNavBackwardDisabled()}\" (click)=\"navBackward($event)\" [disabled]=\"isNavBackwardDisabled()\" pRipple>\n                    <span [ngClass]=\"{'p-galleria-thumbnail-prev-icon pi': true, 'pi-chevron-left': !this.isVertical, 'pi-chevron-up': this.isVertical}\"></span>\n                </button>\n                <div class=\"p-galleria-thumbnail-items-container\" [ngStyle]=\"{'height': isVertical ? contentHeight : ''}\">\n                    <div #itemsContainer class=\"p-galleria-thumbnail-items\" (transitionend)=\"onTransitionEnd()\"\n                        (touchstart)=\"onTouchStart($event)\" (touchmove)=\"onTouchMove($event)\" (touchend)=\"onTouchEnd($event)\">\n                        <div *ngFor=\"let item of value; let index = index;\" [ngClass]=\"{'p-galleria-thumbnail-item': true, 'p-galleria-thumbnail-item-current': activeIndex === index, 'p-galleria-thumbnail-item-active': isItemActive(index),\n                            'p-galleria-thumbnail-item-start': firstItemAciveIndex() === index, 'p-galleria-thumbnail-item-end': lastItemActiveIndex() === index }\">\n                            <div class=\"p-galleria-thumbnail-item-content\" [attr.tabindex]=\"getTabIndex(index)\" (click)=\"onItemClick(index)\" (keydown.enter)=\"onItemClick(index)\">\n                                <p-galleriaItemSlot type=\"thumbnail\" [item]=\"item\" [templates]=\"templates\"></p-galleriaItemSlot>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <button *ngIf=\"showThumbnailNavigators\" type=\"button\" [ngClass]=\"{'p-galleria-thumbnail-next p-link': true, 'p-disabled': this.isNavForwardDisabled()}\" (click)=\"navForward($event)\" [disabled]=\"isNavForwardDisabled()\" pRipple>\n                    <span [ngClass]=\"{'p-galleria-thumbnail-next-icon pi': true, 'pi-chevron-right': !this.isVertical, 'pi-chevron-down': this.isVertical}\"></span>\n                </button>\n            </div>\n        </div>\n    `,\n   changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GalleriaThumbnails implements OnInit, AfterContentChecked, AfterViewInit, OnDestroy {\n\n    @Input() containerId: string;\n\n    @Input() value: any[];\n\n    @Input() isVertical: boolean = false;\n\n    @Input() slideShowActive: boolean = false;\n\n    @Input() circular: boolean = false;\n\n    @Input() responsiveOptions: any[];\n\n    @Input() contentHeight: string = \"300px\";\n\n    @Input() showThumbnailNavigators = true;\n\n    @Input() templates: QueryList<any>;\n\n    @Output() onActiveIndexChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() stopSlideShow: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('itemsContainer') itemsContainer: ElementRef;\n\n    @Input() get numVisible(): number {\n        return this._numVisible;\n    };\n\n    set numVisible(numVisible) {\n        this._numVisible = numVisible;\n        this._oldNumVisible = this.d_numVisible;\n        this.d_numVisible = numVisible;\n    }\n\n    @Input() get activeIndex(): number {\n        return this._activeIndex;\n    };\n\n    set activeIndex(activeIndex) {\n        this._oldactiveIndex = this._activeIndex;\n        this._activeIndex = activeIndex;\n    }\n\n    index: number;\n\n    startPos = null;\n\n    thumbnailsStyle = null;\n\n    sortedResponsiveOptions = null;\n\n    totalShiftedItems: number = 0;\n\n    page: number = 0;\n\n    documentResizeListener: any;\n\n    _numVisible:number = 0;\n\n    d_numVisible: number = 0;\n\n    _oldNumVisible: number = 0;\n\n    _activeIndex: number = 0;\n\n    _oldactiveIndex: number = 0;\n\n    constructor(private cd: ChangeDetectorRef) { }\n\n    ngOnInit() {\n        this.createStyle();\n\n\t\tif (this.responsiveOptions) {\n\t\t\tthis.bindDocumentListeners();\n\t\t}\n    }\n\n    ngAfterContentChecked() {\n        let totalShiftedItems = this.totalShiftedItems;\n\n        if ((this._oldNumVisible !== this.d_numVisible || this._oldactiveIndex !== this._activeIndex) && this.itemsContainer) {\n            if (this._activeIndex <= this.getMedianItemIndex()) {\n                totalShiftedItems = 0;\n            }\n            else if (this.value.length - this.d_numVisible + this.getMedianItemIndex() < this._activeIndex) {\n                totalShiftedItems = this.d_numVisible - this.value.length;\n            }\n            else if (this.value.length - this.d_numVisible < this._activeIndex && this.d_numVisible % 2 === 0) {\n                totalShiftedItems = (this._activeIndex * -1) + this.getMedianItemIndex() + 1;\n            }\n            else {\n                totalShiftedItems = (this._activeIndex * -1) + this.getMedianItemIndex();\n            }\n\n            if (totalShiftedItems !== this.totalShiftedItems) {\n                this.totalShiftedItems = totalShiftedItems;\n            }\n\n            if (this.itemsContainer && this.itemsContainer.nativeElement) {\n                this.itemsContainer.nativeElement.style.transform = this.isVertical ? `translate3d(0, ${totalShiftedItems * (100/ this.d_numVisible)}%, 0)` : `translate3d(${totalShiftedItems * (100/ this.d_numVisible)}%, 0, 0)`;\n            }\n\n            if (this._oldactiveIndex !== this._activeIndex) {\n                DomHandler.removeClass(this.itemsContainer.nativeElement, 'p-items-hidden');\n                this.itemsContainer.nativeElement.style.transition = 'transform 500ms ease 0s';\n            }\n\n            this._oldactiveIndex = this._activeIndex;\n            this._oldNumVisible = this.d_numVisible;\n        }\n    }\n\n    ngAfterViewInit() {\n\t\tthis.calculatePosition();\n    }\n\n    createStyle() {\n        if (!this.thumbnailsStyle) {\n            this.thumbnailsStyle = document.createElement('style');\n            this.thumbnailsStyle.type = 'text/css';\n            document.body.appendChild(this.thumbnailsStyle);\n        }\n\n        let innerHTML = `\n            #${this.containerId} .p-galleria-thumbnail-item {\n                flex: 1 0 ${ (100/ this.d_numVisible) }%\n            }\n        `;\n\n        if (this.responsiveOptions) {\n            this.sortedResponsiveOptions = [...this.responsiveOptions];\n            this.sortedResponsiveOptions.sort((data1, data2) => {\n                const value1 = data1.breakpoint;\n                const value2 = data2.breakpoint;\n                let result = null;\n\n                if (value1 == null && value2 != null)\n                    result = -1;\n                else if (value1 != null && value2 == null)\n                    result = 1;\n                else if (value1 == null && value2 == null)\n                    result = 0;\n                else if (typeof value1 === 'string' && typeof value2 === 'string')\n                    result = value1.localeCompare(value2, undefined, { numeric: true });\n                else\n                    result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n                return -1 * result;\n            });\n\n            for (let i = 0; i < this.sortedResponsiveOptions.length; i++) {\n                let res = this.sortedResponsiveOptions[i];\n\n                innerHTML += `\n                    @media screen and (max-width: ${res.breakpoint}) {\n                        #${this.containerId} .p-galleria-thumbnail-item {\n                            flex: 1 0 ${ (100/ res.numVisible) }%\n                        }\n                    }\n                `\n            }\n        }\n\n        this.thumbnailsStyle.innerHTML = innerHTML;\n    }\n\n    calculatePosition() {\n        if (this.itemsContainer && this.sortedResponsiveOptions) {\n            let windowWidth = window.innerWidth;\n            let matchedResponsiveData = {\n                numVisible: this._numVisible\n            };\n\n            for (let i = 0; i < this.sortedResponsiveOptions.length; i++) {\n                let res = this.sortedResponsiveOptions[i];\n\n                if (parseInt(res.breakpoint, 10) >= windowWidth) {\n                    matchedResponsiveData = res;\n                }\n            }\n\n            if (this.d_numVisible !== matchedResponsiveData.numVisible) {\n                this.d_numVisible = matchedResponsiveData.numVisible;\n                this.cd.markForCheck();\n            }\n        }\n    }\n\n    getTabIndex(index) {\n        return this.isItemActive(index) ? 0 : null;\n    }\n\n    navForward(e) {\n        this.stopTheSlideShow();\n\n        let nextItemIndex = this._activeIndex + 1;\n        if (nextItemIndex + this.totalShiftedItems > this.getMedianItemIndex() && ((-1 * this.totalShiftedItems) < this.getTotalPageNumber() - 1 || this.circular)) {\n            this.step(-1);\n        }\n\n        let activeIndex = this.circular && (this.value.length - 1) === this._activeIndex ? 0 : nextItemIndex;\n        this.onActiveIndexChange.emit(activeIndex);\n\n        if (e.cancelable) {\n            e.preventDefault();\n        }\n    }\n\n    navBackward(e) {\n        this.stopTheSlideShow();\n\n        let prevItemIndex = this._activeIndex !== 0 ? this._activeIndex - 1 : 0;\n        let diff = prevItemIndex + this.totalShiftedItems;\n        if ((this.d_numVisible - diff - 1) > this.getMedianItemIndex() && ((-1 * this.totalShiftedItems) !== 0 || this.circular)) {\n            this.step(1);\n        }\n\n        let activeIndex = this.circular && this._activeIndex === 0 ? this.value.length - 1 : prevItemIndex;\n        this.onActiveIndexChange.emit(activeIndex);\n\n        if (e.cancelable) {\n            e.preventDefault();\n        }\n    }\n\n    onItemClick(index) {\n        this.stopTheSlideShow();\n\n        let selectedItemIndex = index;\n        if (selectedItemIndex !== this._activeIndex) {\n            const diff = selectedItemIndex + this.totalShiftedItems;\n            let dir = 0;\n            if (selectedItemIndex < this._activeIndex) {\n                dir = (this.d_numVisible - diff - 1) - this.getMedianItemIndex();\n                if (dir > 0 && (-1 * this.totalShiftedItems) !== 0) {\n                    this.step(dir);\n                }\n            }\n            else {\n                dir = this.getMedianItemIndex() - diff;\n                if (dir < 0 && (-1 * this.totalShiftedItems) < this.getTotalPageNumber() - 1) {\n                    this.step(dir);\n                }\n            }\n\n            this.activeIndex = selectedItemIndex;\n            this.onActiveIndexChange.emit(this.activeIndex);\n        }\n    }\n\n    step(dir) {\n        let totalShiftedItems = this.totalShiftedItems + dir;\n\n        if (dir < 0 && (-1 * totalShiftedItems) + this.d_numVisible > (this.value.length - 1)) {\n            totalShiftedItems = this.d_numVisible - this.value.length;\n        }\n        else if (dir > 0 && totalShiftedItems > 0) {\n            totalShiftedItems = 0;\n        }\n\n        if (this.circular) {\n            if (dir < 0 && this.value.length - 1 === this._activeIndex) {\n                totalShiftedItems = 0;\n            }\n            else if (dir > 0 && this._activeIndex === 0) {\n                totalShiftedItems = this.d_numVisible - this.value.length;\n            }\n        }\n\n        if (this.itemsContainer) {\n            DomHandler.removeClass(this.itemsContainer.nativeElement, 'p-items-hidden');\n            this.itemsContainer.nativeElement.style.transform = this.isVertical ? `translate3d(0, ${totalShiftedItems * (100/ this.d_numVisible)}%, 0)` : `translate3d(${totalShiftedItems * (100/ this.d_numVisible)}%, 0, 0)`;\n            this.itemsContainer.nativeElement.style.transition = 'transform 500ms ease 0s';\n        }\n\n        this.totalShiftedItems = totalShiftedItems;\n    }\n\n    stopTheSlideShow() {\n        if (this.slideShowActive && this.stopSlideShow) {\n            this.stopSlideShow.emit();\n        }\n    }\n\n    changePageOnTouch(e, diff) {\n        if (diff < 0) {           // left\n            this.navForward(e);\n        }\n        else {                    // right\n            this.navBackward(e);\n        }\n    }\n\n    getTotalPageNumber() {\n        return this.value.length > this.d_numVisible ? (this.value.length - this.d_numVisible) + 1 : 0;\n    }\n\n    getMedianItemIndex() {\n        let index = Math.floor(this.d_numVisible / 2);\n\n        return (this.d_numVisible % 2) ? index : index - 1;\n    }\n\n    onTransitionEnd() {\n        if (this.itemsContainer && this.itemsContainer.nativeElement) {\n            DomHandler.addClass(this.itemsContainer.nativeElement, 'p-items-hidden');\n            this.itemsContainer.nativeElement.style.transition = '';\n        }\n    }\n\n    onTouchEnd(e) {\n        let touchobj = e.changedTouches[0];\n\n        if (this.isVertical) {\n            this.changePageOnTouch(e, (touchobj.pageY - this.startPos.y));\n        }\n        else {\n            this.changePageOnTouch(e, (touchobj.pageX - this.startPos.x));\n        }\n    }\n\n    onTouchMove(e) {\n        if (e.cancelable) {\n            e.preventDefault();\n        }\n    }\n\n    onTouchStart(e) {\n        let touchobj = e.changedTouches[0];\n\n        this.startPos = {\n            x: touchobj.pageX,\n            y: touchobj.pageY\n        };\n    }\n\n    isNavBackwardDisabled() {\n        return (!this.circular && this._activeIndex === 0) || (this.value.length <= this.d_numVisible);\n    }\n\n    isNavForwardDisabled() {\n        return (!this.circular && this._activeIndex === (this.value.length - 1)) || (this.value.length <= this.d_numVisible);\n    }\n\n    firstItemAciveIndex() {\n        return this.totalShiftedItems * -1;\n    }\n\n    lastItemActiveIndex() {\n        return this.firstItemAciveIndex() + this.d_numVisible - 1;\n    }\n\n    isItemActive(index) {\n        return this.firstItemAciveIndex() <= index && this.lastItemActiveIndex() >= index;\n    }\n\n    bindDocumentListeners() {\n        if (!this.documentResizeListener) {\n            this.documentResizeListener = () => {\n                this.calculatePosition();\n            };\n\n            window.addEventListener('resize', this.documentResizeListener);\n        }\n    }\n\n    unbindDocumentListeners() {\n        if(this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.responsiveOptions) {\n\t\t\tthis.unbindDocumentListeners();\n        }\n\n        if (this.thumbnailsStyle) {\n            this.thumbnailsStyle.parentNode.removeChild(this.thumbnailsStyle);\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule, SharedModule, RippleModule],\n    exports: [CommonModule, Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails, SharedModule],\n    declarations: [Galleria, GalleriaContent, GalleriaItemSlot, GalleriaItem, GalleriaThumbnails]\n})\nexport class GalleriaModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-gmap.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-gmap.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-gmap.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,192 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class GMap {
+    constructor(el, differs, cd, zone) {
+        this.el = el;
+        this.cd = cd;
+        this.zone = zone;
+        this.onMapClick = new EventEmitter();
+        this.onOverlayClick = new EventEmitter();
+        this.onOverlayDblClick = new EventEmitter();
+        this.onOverlayDragStart = new EventEmitter();
+        this.onOverlayDrag = new EventEmitter();
+        this.onOverlayDragEnd = new EventEmitter();
+        this.onMapReady = new EventEmitter();
+        this.onMapDragEnd = new EventEmitter();
+        this.onZoomChanged = new EventEmitter();
+        this.differ = differs.find([]).create(null);
+    }
+    ngAfterViewChecked() {
+        if (!this.map && this.el.nativeElement.offsetParent) {
+            this.initialize();
+        }
+    }
+    initialize() {
+        this.map = new google.maps.Map(this.el.nativeElement.children[0], this.options);
+        this.onMapReady.emit({
+            map: this.map
+        });
+        if (this.overlays) {
+            for (let overlay of this.overlays) {
+                overlay.setMap(this.map);
+                this.bindOverlayEvents(overlay);
+            }
+        }
+        this.map.addListener('click', (event) => {
+            this.zone.run(() => {
+                this.onMapClick.emit(event);
+            });
+        });
+        this.map.addListener('dragend', (event) => {
+            this.zone.run(() => {
+                this.onMapDragEnd.emit(event);
+            });
+        });
+        this.map.addListener('zoom_changed', (event) => {
+            this.zone.run(() => {
+                this.onZoomChanged.emit(event);
+            });
+        });
+    }
+    bindOverlayEvents(overlay) {
+        overlay.addListener('click', (event) => {
+            this.zone.run(() => {
+                this.onOverlayClick.emit({
+                    originalEvent: event,
+                    'overlay': overlay,
+                    map: this.map
+                });
+            });
+        });
+        overlay.addListener('dblclick', (event) => {
+            this.zone.run(() => {
+                this.onOverlayDblClick.emit({
+                    originalEvent: event,
+                    'overlay': overlay,
+                    map: this.map
+                });
+            });
+        });
+        if (overlay.getDraggable()) {
+            this.bindDragEvents(overlay);
+        }
+    }
+    ngDoCheck() {
+        let changes = this.differ.diff(this.overlays);
+        if (changes && this.map) {
+            changes.forEachRemovedItem((record) => {
+                google.maps.event.clearInstanceListeners(record.item);
+                record.item.setMap(null);
+            });
+            changes.forEachAddedItem((record) => {
+                record.item.setMap(this.map);
+                record.item.addListener('click', (event) => {
+                    this.zone.run(() => {
+                        this.onOverlayClick.emit({
+                            originalEvent: event,
+                            overlay: record.item,
+                            map: this.map
+                        });
+                    });
+                });
+                if (record.item.getDraggable()) {
+                    this.bindDragEvents(record.item);
+                }
+            });
+        }
+    }
+    bindDragEvents(overlay) {
+        overlay.addListener('dragstart', (event) => {
+            this.zone.run(() => {
+                this.onOverlayDragStart.emit({
+                    originalEvent: event,
+                    overlay: overlay,
+                    map: this.map
+                });
+            });
+        });
+        overlay.addListener('drag', (event) => {
+            this.zone.run(() => {
+                this.onOverlayDrag.emit({
+                    originalEvent: event,
+                    overlay: overlay,
+                    map: this.map
+                });
+            });
+        });
+        overlay.addListener('dragend', (event) => {
+            this.zone.run(() => {
+                this.onOverlayDragEnd.emit({
+                    originalEvent: event,
+                    overlay: overlay,
+                    map: this.map
+                });
+            });
+        });
+    }
+    getMap() {
+        return this.map;
+    }
+}
+GMap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GMap, deps: [{ token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
+GMap.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: GMap, selector: "p-gmap", inputs: { style: "style", styleClass: "styleClass", options: "options", overlays: "overlays" }, outputs: { onMapClick: "onMapClick", onOverlayClick: "onOverlayClick", onOverlayDblClick: "onOverlayDblClick", onOverlayDragStart: "onOverlayDragStart", onOverlayDrag: "onOverlayDrag", onOverlayDragEnd: "onOverlayDragEnd", onMapReady: "onMapReady", onMapDragEnd: "onMapDragEnd", onZoomChanged: "onZoomChanged" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `<div [ngStyle]="style" [class]="styleClass"></div>`, isInline: true, directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GMap, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-gmap',
+                    template: `<div [ngStyle]="style" [class]="styleClass"></div>`,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.IterableDiffers }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], options: [{
+                type: Input
+            }], overlays: [{
+                type: Input
+            }], onMapClick: [{
+                type: Output
+            }], onOverlayClick: [{
+                type: Output
+            }], onOverlayDblClick: [{
+                type: Output
+            }], onOverlayDragStart: [{
+                type: Output
+            }], onOverlayDrag: [{
+                type: Output
+            }], onOverlayDragEnd: [{
+                type: Output
+            }], onMapReady: [{
+                type: Output
+            }], onMapDragEnd: [{
+                type: Output
+            }], onZoomChanged: [{
+                type: Output
+            }] } });
+class GMapModule {
+}
+GMapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+GMapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GMapModule, declarations: [GMap], imports: [CommonModule], exports: [GMap] });
+GMapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GMapModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: GMapModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [GMap],
+                    declarations: [GMap]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { GMap, GMapModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-gmap.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-gmap.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-gmap.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-gmap.mjs","sources":["../../src/app/components/gmap/gmap.ts","../../src/app/components/gmap/primeng-gmap.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,AfterViewChecked,DoCheck,Input,Output,EventEmitter,IterableDiffers,ChangeDetectorRef,NgZone,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\ndeclare var google: any;\n\n@Component({\n    selector: 'p-gmap',\n    template: `<div [ngStyle]=\"style\" [class]=\"styleClass\"></div>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class GMap implements AfterViewChecked,DoCheck {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() options: any;\n\n    @Input() overlays: any[];\n\n    @Output() onMapClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onOverlayClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onOverlayDblClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onOverlayDragStart: EventEmitter<any> = new EventEmitter();\n\n    @Output() onOverlayDrag: EventEmitter<any> = new EventEmitter();\n\n    @Output() onOverlayDragEnd: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMapReady: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMapDragEnd: EventEmitter<any> = new EventEmitter();\n\n    @Output() onZoomChanged: EventEmitter<any> = new EventEmitter();\n\n    differ: any;\n\n    map: any;\n\n    constructor(public el: ElementRef,differs: IterableDiffers, public cd: ChangeDetectorRef, public zone:NgZone) {\n        this.differ = differs.find([]).create(null);\n    }\n\n    ngAfterViewChecked() {\n        if (!this.map && this.el.nativeElement.offsetParent) {\n            this.initialize();\n        }\n    }\n\n    initialize() {\n        this.map = new google.maps.Map(this.el.nativeElement.children[0], this.options);\n        this.onMapReady.emit({\n            map: this.map\n        });\n\n        if (this.overlays) {\n            for(let overlay of this.overlays) {\n                overlay.setMap(this.map);\n                this.bindOverlayEvents(overlay);\n            }\n        }\n\n        this.map.addListener('click', (event) => {\n            this.zone.run(() => {\n                this.onMapClick.emit(event);\n            });\n        });\n\n        this.map.addListener('dragend', (event) => {\n            this.zone.run(() => {\n                this.onMapDragEnd.emit(event);\n            });\n        });\n\n        this.map.addListener('zoom_changed', (event) => {\n            this.zone.run(() => {\n                this.onZoomChanged.emit(event);\n            });\n        });\n    }\n\n    bindOverlayEvents(overlay: any) {\n        overlay.addListener('click', (event) => {\n            this.zone.run(() => {\n                this.onOverlayClick.emit({\n                    originalEvent: event,\n                    'overlay': overlay,\n                    map: this.map\n                });\n            });\n        });\n\n        overlay.addListener('dblclick', (event) => {\n            this.zone.run(() => {\n                this.onOverlayDblClick.emit({\n                    originalEvent: event,\n                    'overlay': overlay,\n                    map: this.map\n                });\n            });\n        });\n\n        if (overlay.getDraggable()) {\n            this.bindDragEvents(overlay);\n        }\n    }\n\n    ngDoCheck() {\n        let changes = this.differ.diff(this.overlays);\n\n        if (changes && this.map) {\n            changes.forEachRemovedItem((record) => {\n                google.maps.event.clearInstanceListeners(record.item);\n                record.item.setMap(null);\n            });\n\n            changes.forEachAddedItem((record) => {\n                record.item.setMap(this.map);\n                record.item.addListener('click', (event) => {\n                    this.zone.run(() => {\n                        this.onOverlayClick.emit({\n                            originalEvent: event,\n                            overlay: record.item,\n                            map: this.map\n                        });\n                    });\n                });\n\n                if (record.item.getDraggable()) {\n                    this.bindDragEvents(record.item);\n                }\n            });\n        }\n    }\n\n    bindDragEvents(overlay) {\n        overlay.addListener('dragstart', (event) => {\n            this.zone.run(() => {\n                this.onOverlayDragStart.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: this.map\n                });\n            });\n        });\n\n        overlay.addListener('drag', (event) => {\n            this.zone.run(() => {\n                this.onOverlayDrag.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: this.map\n                });\n            });\n        });\n\n        overlay.addListener('dragend', (event) => {\n            this.zone.run(() => {\n                this.onOverlayDragEnd.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: this.map\n                });\n            });\n        });\n    }\n\n    getMap() {\n        return this.map;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [GMap],\n    declarations: [GMap]\n})\nexport class GMapModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-image.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-image.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-image.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,274 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { trigger, transition, style, animate } from '@angular/animations';
+import { DomHandler } from 'primeng/dom';
+import { ZIndexUtils } from 'primeng/utils';
+
+class Image {
+    constructor(config, cd) {
+        this.config = config;
+        this.cd = cd;
+        this.preview = false;
+        this.showTransitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.maskVisible = false;
+        this.previewVisible = false;
+        this.rotate = 0;
+        this.scale = 1;
+        this.previewClick = false;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'indicator':
+                    this.indicatorTemplate = item.template;
+                    break;
+                default:
+                    this.indicatorTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    onImageClick() {
+        if (this.preview) {
+            this.maskVisible = true;
+            this.previewVisible = true;
+        }
+    }
+    onMaskClick() {
+        if (!this.previewClick) {
+            this.previewVisible = false;
+            this.rotate = 0;
+            this.scale = 1;
+        }
+        this.previewClick = false;
+    }
+    onPreviewImageClick() {
+        this.previewClick = true;
+    }
+    rotateRight() {
+        this.rotate += 90;
+        this.previewClick = true;
+    }
+    rotateLeft() {
+        this.rotate -= 90;
+        this.previewClick = true;
+    }
+    zoomIn() {
+        this.scale = this.scale + 0.1;
+        this.previewClick = true;
+    }
+    zoomOut() {
+        this.scale = this.scale - 0.1;
+        this.previewClick = true;
+    }
+    zoomDisabled() {
+        return this.scale <= 0.5 || this.scale >= 1.5;
+    }
+    onAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.container = event.element;
+                this.wrapper = this.container.parentElement;
+                this.appendContainer();
+                this.moveOnTop();
+                break;
+            case 'void':
+                DomHandler.addClass(this.wrapper, 'p-component-overlay-leave');
+                break;
+        }
+    }
+    onAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                ZIndexUtils.clear(this.container);
+                this.maskVisible = false;
+                this.container = null;
+                this.wrapper = null;
+                this.cd.markForCheck();
+                this.onHide.emit({});
+                break;
+            case 'visible':
+                this.onShow.emit({});
+                break;
+        }
+    }
+    moveOnTop() {
+        ZIndexUtils.set('modal', this.container, this.config.zIndex.modal);
+        this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);
+    }
+    appendContainer() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.wrapper);
+            else
+                DomHandler.appendChild(this.wrapper, this.appendTo);
+        }
+    }
+    imagePreviewStyle() {
+        return { transform: 'rotate(' + this.rotate + 'deg) scale(' + this.scale + ')' };
+    }
+    containerClass() {
+        return {
+            'p-image p-component': true,
+            'p-image-preview-container': this.preview
+        };
+    }
+}
+Image.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Image, deps: [{ token: i1.PrimeNGConfig }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Image.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Image, selector: "p-image", inputs: { imageClass: "imageClass", imageStyle: "imageStyle", styleClass: "styleClass", style: "style", src: "src", alt: "alt", width: "width", height: "height", appendTo: "appendTo", preview: "preview", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "mask", first: true, predicate: ["mask"], descendants: true }], ngImport: i0, template: `
+        <span [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+            <img [attr.src]="src" [attr.alt]="alt" [attr.width]="width" [attr.height]="height" [ngStyle]="imageStyle" [class]="imageClass" />
+            <div class="p-image-preview-indicator" *ngIf="preview" (click)="onImageClick()">
+                <ng-container *ngIf="indicatorTemplate;else defaultTemplate">
+                    <ng-container *ngTemplateOutlet="indicatorTemplate"></ng-container>
+                </ng-container>
+                <ng-template #defaultTemplate>
+                    <i class="p-image-preview-icon pi pi-eye"></i>
+                </ng-template>
+            </div>
+            <div #mask class="p-image-mask p-component-overlay p-component-overlay-enter" *ngIf="maskVisible" (click)="onMaskClick()">
+                <div class="p-image-toolbar">
+                    <button class="p-image-action p-link" (click)="rotateRight()" type="button">
+                        <i class="pi pi-refresh"></i>
+                    </button>
+                    <button class="p-image-action p-link" (click)="rotateLeft()" type="button">
+                        <i class="pi pi-undo"></i>
+                    </button>
+                    <button class="p-image-action p-link" (click)="zoomOut()" type="button" [disabled]="zoomDisabled()">
+                        <i class="pi pi-search-minus"></i>
+                    </button>
+                    <button class="p-image-action p-link" (click)="zoomIn()" type="button" [disabled]="zoomDisabled()">
+                        <i class="pi pi-search-plus"></i>
+                    </button>
+                    <button class="p-image-action p-link" type="button">
+                        <i class="pi pi-times"></i>
+                    </button>
+                </div>
+                <div *ngIf="previewVisible" [@animation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+                    (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)">
+                    <img [attr.src]="src" class="p-image-preview" [ngStyle]="imagePreviewStyle()" (click)="onPreviewImageClick()"/>
+                </div>
+            </div>
+        </span>
+    `, isInline: true, styles: [".p-image-mask{display:flex;align-items:center;justify-content:center}.p-image-preview-container{position:relative;display:inline-block}.p-image-preview-indicator{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s}.p-image-preview-icon{font-size:1.5rem}.p-image-preview-container:hover>.p-image-preview-indicator{opacity:1;cursor:pointer}.p-image-preview-container>img{cursor:pointer}.p-image-toolbar{position:absolute;top:0;right:0;display:flex}.p-image-action.p-link{display:flex;justify-content:center;align-items:center}.p-image-preview{transition:transform .15s;max-width:100vw;max-height:100vh}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
+        trigger('animation', [
+            transition('void => visible', [
+                style({ transform: 'scale(0.7)', opacity: 0 }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition('visible => void', [
+                animate('{{hideTransitionParams}}', style({ transform: 'scale(0.7)', opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Image, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-image', template: `
+        <span [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+            <img [attr.src]="src" [attr.alt]="alt" [attr.width]="width" [attr.height]="height" [ngStyle]="imageStyle" [class]="imageClass" />
+            <div class="p-image-preview-indicator" *ngIf="preview" (click)="onImageClick()">
+                <ng-container *ngIf="indicatorTemplate;else defaultTemplate">
+                    <ng-container *ngTemplateOutlet="indicatorTemplate"></ng-container>
+                </ng-container>
+                <ng-template #defaultTemplate>
+                    <i class="p-image-preview-icon pi pi-eye"></i>
+                </ng-template>
+            </div>
+            <div #mask class="p-image-mask p-component-overlay p-component-overlay-enter" *ngIf="maskVisible" (click)="onMaskClick()">
+                <div class="p-image-toolbar">
+                    <button class="p-image-action p-link" (click)="rotateRight()" type="button">
+                        <i class="pi pi-refresh"></i>
+                    </button>
+                    <button class="p-image-action p-link" (click)="rotateLeft()" type="button">
+                        <i class="pi pi-undo"></i>
+                    </button>
+                    <button class="p-image-action p-link" (click)="zoomOut()" type="button" [disabled]="zoomDisabled()">
+                        <i class="pi pi-search-minus"></i>
+                    </button>
+                    <button class="p-image-action p-link" (click)="zoomIn()" type="button" [disabled]="zoomDisabled()">
+                        <i class="pi pi-search-plus"></i>
+                    </button>
+                    <button class="p-image-action p-link" type="button">
+                        <i class="pi pi-times"></i>
+                    </button>
+                </div>
+                <div *ngIf="previewVisible" [@animation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+                    (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)">
+                    <img [attr.src]="src" class="p-image-preview" [ngStyle]="imagePreviewStyle()" (click)="onPreviewImageClick()"/>
+                </div>
+            </div>
+        </span>
+    `, animations: [
+                        trigger('animation', [
+                            transition('void => visible', [
+                                style({ transform: 'scale(0.7)', opacity: 0 }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition('visible => void', [
+                                animate('{{hideTransitionParams}}', style({ transform: 'scale(0.7)', opacity: 0 }))
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-image-mask{display:flex;align-items:center;justify-content:center}.p-image-preview-container{position:relative;display:inline-block}.p-image-preview-indicator{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s}.p-image-preview-icon{font-size:1.5rem}.p-image-preview-container:hover>.p-image-preview-indicator{opacity:1;cursor:pointer}.p-image-preview-container>img{cursor:pointer}.p-image-toolbar{position:absolute;top:0;right:0;display:flex}.p-image-action.p-link{display:flex;justify-content:center;align-items:center}.p-image-preview{transition:transform .15s;max-width:100vw;max-height:100vh}\n"] }]
+        }], ctorParameters: function () { return [{ type: i1.PrimeNGConfig }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { imageClass: [{
+                type: Input
+            }], imageStyle: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], src: [{
+                type: Input
+            }], alt: [{
+                type: Input
+            }], width: [{
+                type: Input
+            }], height: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], preview: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], mask: [{
+                type: ViewChild,
+                args: ['mask']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class ImageModule {
+}
+ImageModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ImageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ImageModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ImageModule, declarations: [Image], imports: [CommonModule], exports: [Image, SharedModule] });
+ImageModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ImageModule, imports: [[CommonModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ImageModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Image, SharedModule],
+                    declarations: [Image]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Image, ImageModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-image.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-image.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-image.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-image.mjs","sources":["../../src/app/components/image/image.ts","../../src/app/components/image/primeng-image.ts"],"sourcesContent":["import { NgModule, Component, Input, ElementRef, ContentChild, ChangeDetectionStrategy, ViewEncapsulation, TemplateRef, AfterContentInit, ContentChildren, QueryList, Output, EventEmitter, ChangeDetectorRef, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule, PrimeTemplate, PrimeNGConfig } from 'primeng/api';\nimport {trigger,style,transition,animate, AnimationEvent,} from '@angular/animations';\nimport { DomHandler } from 'primeng/dom';\nimport { ZIndexUtils } from 'primeng/utils';\n\n@Component({\n    selector: 'p-image',\n    template: `\n        <span [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\">\n            <img [attr.src]=\"src\" [attr.alt]=\"alt\" [attr.width]=\"width\" [attr.height]=\"height\" [ngStyle]=\"imageStyle\" [class]=\"imageClass\" />\n            <div class=\"p-image-preview-indicator\" *ngIf=\"preview\" (click)=\"onImageClick()\">\n                <ng-container *ngIf=\"indicatorTemplate;else defaultTemplate\">\n                    <ng-container *ngTemplateOutlet=\"indicatorTemplate\"></ng-container>\n                </ng-container>\n                <ng-template #defaultTemplate>\n                    <i class=\"p-image-preview-icon pi pi-eye\"></i>\n                </ng-template>\n            </div>\n            <div #mask class=\"p-image-mask p-component-overlay p-component-overlay-enter\" *ngIf=\"maskVisible\" (click)=\"onMaskClick()\">\n                <div class=\"p-image-toolbar\">\n                    <button class=\"p-image-action p-link\" (click)=\"rotateRight()\" type=\"button\">\n                        <i class=\"pi pi-refresh\"></i>\n                    </button>\n                    <button class=\"p-image-action p-link\" (click)=\"rotateLeft()\" type=\"button\">\n                        <i class=\"pi pi-undo\"></i>\n                    </button>\n                    <button class=\"p-image-action p-link\" (click)=\"zoomOut()\" type=\"button\" [disabled]=\"zoomDisabled()\">\n                        <i class=\"pi pi-search-minus\"></i>\n                    </button>\n                    <button class=\"p-image-action p-link\" (click)=\"zoomIn()\" type=\"button\" [disabled]=\"zoomDisabled()\">\n                        <i class=\"pi pi-search-plus\"></i>\n                    </button>\n                    <button class=\"p-image-action p-link\" type=\"button\">\n                        <i class=\"pi pi-times\"></i>\n                    </button>\n                </div>\n                <div *ngIf=\"previewVisible\" [@animation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\"\n                    (@animation.start)=\"onAnimationStart($event)\" (@animation.done)=\"onAnimationEnd($event)\">\n                    <img [attr.src]=\"src\" class=\"p-image-preview\" [ngStyle]=\"imagePreviewStyle()\" (click)=\"onPreviewImageClick()\"/>\n                </div>\n            </div>\n        </span>\n    `,\n    animations: [\n        trigger('animation', [\n            transition('void => visible', [\n                style({ transform: 'scale(0.7)', opacity: 0 }),\n                animate('{{showTransitionParams}}')\n            ]),\n            transition('visible => void', [\n                animate('{{hideTransitionParams}}', style({ transform: 'scale(0.7)', opacity: 0 }))\n            ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./image.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Image implements AfterContentInit {\n\n    @Input() imageClass: string;\n\n    @Input() imageStyle: any;\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() src: string;\n\n    @Input() alt: string;\n\n    @Input() width: string;\n\n    @Input() height: string;\n\n    @Input() appendTo: any;\n\n    @Input() preview: boolean = false;\n\n    @Input() showTransitionOptions: string = '150ms cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '150ms cubic-bezier(0, 0, 0.2, 1)';\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('mask') mask: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    indicatorTemplate: TemplateRef<any>;\n\n    maskVisible: boolean = false;\n\n    previewVisible: boolean =  false;\n\n    rotate: number = 0;\n\n    scale: number = 1;\n\n    previewClick: boolean = false;\n\n    container: HTMLElement;\n\n    wrapper: HTMLElement;\n\n    constructor(private config: PrimeNGConfig, private cd: ChangeDetectorRef) { }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'indicator':\n                    this.indicatorTemplate = item.template;\n                break;\n\n                default:\n                    this.indicatorTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    onImageClick() {\n        if (this.preview) {\n            this.maskVisible = true;\n            this.previewVisible = true;\n        }\n    }\n\n    onMaskClick() {\n        if (!this.previewClick) {\n            this.previewVisible = false;\n            this.rotate = 0;\n            this.scale = 1;\n        }\n\n        this.previewClick = false;\n    }\n\n    onPreviewImageClick() {\n        this.previewClick = true;\n    }\n\n    rotateRight() {\n        this.rotate += 90;\n        this.previewClick = true;\n    }\n\n    rotateLeft() {\n        this.rotate -= 90;\n        this.previewClick = true;\n    }\n\n    zoomIn() {\n        this.scale = this.scale + 0.1;\n        this.previewClick = true;\n    }\n\n    zoomOut() {\n        this.scale = this.scale - 0.1;\n        this.previewClick = true;\n    }\n\n    zoomDisabled() {\n        return this.scale <= 0.5 || this.scale >= 1.5;\n    }\n\n    onAnimationStart(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                this.container = event.element;\n                this.wrapper = this.container.parentElement;\n                this.appendContainer();\n                this.moveOnTop();\n            break;\n\n            case 'void':\n                DomHandler.addClass(this.wrapper, 'p-component-overlay-leave');\n            break;\n        }\n    }\n\n    onAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                ZIndexUtils.clear(this.container);\n                this.maskVisible = false;\n                this.container = null;\n                this.wrapper = null;\n                this.cd.markForCheck();\n                this.onHide.emit({});\n            break;\n            case 'visible':\n                this.onShow.emit({});\n            break;\n        }\n    }\n\n    moveOnTop() {\n        ZIndexUtils.set('modal', this.container, this.config.zIndex.modal);\n        this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);\n    }\n\n    appendContainer() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.wrapper);\n            else\n                DomHandler.appendChild(this.wrapper, this.appendTo);\n        }\n    }\n\n    imagePreviewStyle() {\n        return {transform: 'rotate(' + this.rotate + 'deg) scale(' + this.scale + ')'};\n    }\n\n    containerClass() {\n        return {\n            'p-image p-component': true,\n            'p-image-preview-container': this.preview\n        };\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Image, SharedModule],\n    declarations: [Image]\n})\nexport class ImageModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inplace.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inplace.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inplace.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,159 @@
+import * as i0 from '@angular/core';
+import { Component, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i2 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import { PrimeTemplate } from 'primeng/api';
+
+class InplaceDisplay {
+}
+InplaceDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InplaceDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
+InplaceDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: InplaceDisplay, selector: "p-inplaceDisplay", host: { classAttribute: "p-element" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InplaceDisplay, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-inplaceDisplay',
+                    template: '<ng-content></ng-content>',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }] });
+class InplaceContent {
+}
+InplaceContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InplaceContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
+InplaceContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: InplaceContent, selector: "p-inplaceContent", host: { classAttribute: "p-element" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InplaceContent, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-inplaceContent',
+                    template: '<ng-content></ng-content>',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }] });
+class Inplace {
+    constructor(cd) {
+        this.cd = cd;
+        this.closeIcon = 'pi pi-times';
+        this.onActivate = new EventEmitter();
+        this.onDeactivate = new EventEmitter();
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'display':
+                    this.displayTemplate = item.template;
+                    break;
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    onActivateClick(event) {
+        if (!this.preventClick)
+            this.activate(event);
+    }
+    onDeactivateClick(event) {
+        if (!this.preventClick)
+            this.deactivate(event);
+    }
+    activate(event) {
+        if (!this.disabled) {
+            this.active = true;
+            this.onActivate.emit(event);
+            this.cd.markForCheck();
+        }
+    }
+    deactivate(event) {
+        if (!this.disabled) {
+            this.active = false;
+            this.hover = false;
+            this.onDeactivate.emit(event);
+            this.cd.markForCheck();
+        }
+    }
+    onKeydown(event) {
+        if (event.which === 13) {
+            this.activate(event);
+            event.preventDefault();
+        }
+    }
+}
+Inplace.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Inplace, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Inplace.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Inplace, selector: "p-inplace", inputs: { active: "active", closable: "closable", disabled: "disabled", preventClick: "preventClick", style: "style", styleClass: "styleClass", closeIcon: "closeIcon" }, outputs: { onActivate: "onActivate", onDeactivate: "onDeactivate" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [ngClass]="{'p-inplace p-component': true, 'p-inplace-closable': closable}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-inplace-display" (click)="onActivateClick($event)" tabindex="0" (keydown)="onKeydown($event)"
+                [ngClass]="{'p-disabled':disabled}" *ngIf="!active">
+                <ng-content select="[pInplaceDisplay]"></ng-content>
+                <ng-container *ngTemplateOutlet="displayTemplate"></ng-container>
+            </div>
+            <div class="p-inplace-content" *ngIf="active">
+                <ng-content select="[pInplaceContent]"></ng-content>
+                <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                <button type="button" [icon]="closeIcon" pButton (click)="onDeactivateClick($event)" *ngIf="closable"></button>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-inplace .p-inplace-display{display:inline;cursor:pointer}.p-inplace .p-inplace-content{display:inline}.p-fluid .p-inplace.p-inplace-closable .p-inplace-content{display:flex}.p-fluid .p-inplace.p-inplace-closable .p-inplace-content>.p-inputtext{flex:1 1 auto;width:1%}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Inplace, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-inplace', template: `
+        <div [ngClass]="{'p-inplace p-component': true, 'p-inplace-closable': closable}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-inplace-display" (click)="onActivateClick($event)" tabindex="0" (keydown)="onKeydown($event)"
+                [ngClass]="{'p-disabled':disabled}" *ngIf="!active">
+                <ng-content select="[pInplaceDisplay]"></ng-content>
+                <ng-container *ngTemplateOutlet="displayTemplate"></ng-container>
+            </div>
+            <div class="p-inplace-content" *ngIf="active">
+                <ng-content select="[pInplaceContent]"></ng-content>
+                <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                <button type="button" [icon]="closeIcon" pButton (click)="onDeactivateClick($event)" *ngIf="closable"></button>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-inplace .p-inplace-display{display:inline;cursor:pointer}.p-inplace .p-inplace-content{display:inline}.p-fluid .p-inplace.p-inplace-closable .p-inplace-content{display:flex}.p-fluid .p-inplace.p-inplace-closable .p-inplace-content>.p-inputtext{flex:1 1 auto;width:1%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { active: [{
+                type: Input
+            }], closable: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], preventClick: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], closeIcon: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], onActivate: [{
+                type: Output
+            }], onDeactivate: [{
+                type: Output
+            }] } });
+class InplaceModule {
+}
+InplaceModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InplaceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+InplaceModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InplaceModule, declarations: [Inplace, InplaceDisplay, InplaceContent], imports: [CommonModule, ButtonModule], exports: [Inplace, InplaceDisplay, InplaceContent, ButtonModule] });
+InplaceModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InplaceModule, imports: [[CommonModule, ButtonModule], ButtonModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InplaceModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ButtonModule],
+                    exports: [Inplace, InplaceDisplay, InplaceContent, ButtonModule],
+                    declarations: [Inplace, InplaceDisplay, InplaceContent]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Inplace, InplaceContent, InplaceDisplay, InplaceModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inplace.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inplace.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inplace.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-inplace.mjs","sources":["../../src/app/components/inplace/inplace.ts","../../src/app/components/inplace/primeng-inplace.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,EventEmitter,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, AfterContentInit, TemplateRef, QueryList, ContentChildren} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ButtonModule} from 'primeng/button';\nimport {PrimeTemplate} from 'primeng/api';\n\n@Component({\n    selector: 'p-inplaceDisplay',\n    template: '<ng-content></ng-content>',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class InplaceDisplay {}\n\n@Component({\n    selector: 'p-inplaceContent',\n    template: '<ng-content></ng-content>',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class InplaceContent {}\n\n@Component({\n    selector: 'p-inplace',\n    template: `\n        <div [ngClass]=\"{'p-inplace p-component': true, 'p-inplace-closable': closable}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-inplace-display\" (click)=\"onActivateClick($event)\" tabindex=\"0\" (keydown)=\"onKeydown($event)\"\n                [ngClass]=\"{'p-disabled':disabled}\" *ngIf=\"!active\">\n                <ng-content select=\"[pInplaceDisplay]\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"displayTemplate\"></ng-container>\n            </div>\n            <div class=\"p-inplace-content\" *ngIf=\"active\">\n                <ng-content select=\"[pInplaceContent]\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                <button type=\"button\" [icon]=\"closeIcon\" pButton (click)=\"onDeactivateClick($event)\" *ngIf=\"closable\"></button>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./inplace.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Inplace implements AfterContentInit {\n\n    @Input() active: boolean;\n\n    @Input() closable: boolean;\n\n    @Input() disabled: boolean;\n\n    @Input() preventClick: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() closeIcon: string = 'pi pi-times';\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Output() onActivate: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDeactivate: EventEmitter<any> = new EventEmitter();\n\n    hover: boolean;\n\n    displayTemplate: TemplateRef<any>;\n\n    contentTemplate: TemplateRef<any>;\n\n    constructor(public cd: ChangeDetectorRef) {}\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'display':\n                    this.displayTemplate = item.template;\n                break;\n\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    onActivateClick(event) {\n        if (!this.preventClick)\n            this.activate(event);\n    }\n\n    onDeactivateClick(event) {\n        if (!this.preventClick)\n            this.deactivate(event);\n    }\n\n    activate(event?: Event) {\n        if (!this.disabled) {\n            this.active = true;\n            this.onActivate.emit(event);\n            this.cd.markForCheck();\n        }\n    }\n\n    deactivate(event?: Event) {\n        if (!this.disabled) {\n            this.active = false;\n            this.hover = false;\n            this.onDeactivate.emit(event);\n            this.cd.markForCheck();\n        }\n    }\n\n    onKeydown(event: KeyboardEvent) {\n        if (event.which === 13) {\n            this.activate(event);\n            event.preventDefault();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule],\n    exports: [Inplace,InplaceDisplay,InplaceContent,ButtonModule],\n    declarations: [Inplace,InplaceDisplay,InplaceContent]\n})\nexport class InplaceModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputmask.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputmask.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputmask.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,583 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, Output, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import * as i1 from 'primeng/inputtext';
+import { InputTextModule } from 'primeng/inputtext';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+/*
+    Port of jQuery MaskedInput by DigitalBush as a Native Angular2 Component in Typescript without jQuery
+    https://github.com/digitalBush/jquery.maskedinput/
+
+    Copyright (c) 2007-2014 Josh Bush (digitalbush.com)
+
+    Permission is hereby granted, free of charge, to any person
+    obtaining a copy of this software and associated documentation
+    files (the "Software"), to deal in the Software without
+    restriction, including without limitation the rights to use,
+    copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following
+    conditions:
+
+    The above copyright notice and this permission notice shall be
+    included in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+*/
+const INPUTMASK_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => InputMask),
+    multi: true
+};
+class InputMask {
+    constructor(el, cd) {
+        this.el = el;
+        this.cd = cd;
+        this.type = 'text';
+        this.slotChar = '_';
+        this.autoClear = true;
+        this.characterPattern = '[A-Za-z]';
+        this.onComplete = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.onInput = new EventEmitter();
+        this.onKeydown = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    ngOnInit() {
+        let ua = DomHandler.getUserAgent();
+        this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua);
+        this.initMask();
+    }
+    get mask() {
+        return this._mask;
+    }
+    set mask(val) {
+        this._mask = val;
+        this.initMask();
+        this.writeValue('');
+        this.onModelChange(this.value);
+    }
+    initMask() {
+        this.tests = [];
+        this.partialPosition = this.mask.length;
+        this.len = this.mask.length;
+        this.firstNonMaskPos = null;
+        this.defs = {
+            '9': '[0-9]',
+            'a': this.characterPattern,
+            '*': `${this.characterPattern}|[0-9]`
+        };
+        let maskTokens = this.mask.split('');
+        for (let i = 0; i < maskTokens.length; i++) {
+            let c = maskTokens[i];
+            if (c == '?') {
+                this.len--;
+                this.partialPosition = i;
+            }
+            else if (this.defs[c]) {
+                this.tests.push(new RegExp(this.defs[c]));
+                if (this.firstNonMaskPos === null) {
+                    this.firstNonMaskPos = this.tests.length - 1;
+                }
+                if (i < this.partialPosition) {
+                    this.lastRequiredNonMaskPos = this.tests.length - 1;
+                }
+            }
+            else {
+                this.tests.push(null);
+            }
+        }
+        this.buffer = [];
+        for (let i = 0; i < maskTokens.length; i++) {
+            let c = maskTokens[i];
+            if (c != '?') {
+                if (this.defs[c])
+                    this.buffer.push(this.getPlaceholder(i));
+                else
+                    this.buffer.push(c);
+            }
+        }
+        this.defaultBuffer = this.buffer.join('');
+    }
+    writeValue(value) {
+        this.value = value;
+        if (this.inputViewChild && this.inputViewChild.nativeElement) {
+            if (this.value == undefined || this.value == null)
+                this.inputViewChild.nativeElement.value = '';
+            else
+                this.inputViewChild.nativeElement.value = this.value;
+            this.checkVal();
+            this.focusText = this.inputViewChild.nativeElement.value;
+            this.updateFilledState();
+        }
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    caret(first, last) {
+        let range, begin, end;
+        if (!this.inputViewChild.nativeElement.offsetParent || this.inputViewChild.nativeElement !== this.inputViewChild.nativeElement.ownerDocument.activeElement) {
+            return;
+        }
+        if (typeof first == 'number') {
+            begin = first;
+            end = (typeof last === 'number') ? last : begin;
+            if (this.inputViewChild.nativeElement.setSelectionRange) {
+                this.inputViewChild.nativeElement.setSelectionRange(begin, end);
+            }
+            else if (this.inputViewChild.nativeElement['createTextRange']) {
+                range = this.inputViewChild.nativeElement['createTextRange']();
+                range.collapse(true);
+                range.moveEnd('character', end);
+                range.moveStart('character', begin);
+                range.select();
+            }
+        }
+        else {
+            if (this.inputViewChild.nativeElement.setSelectionRange) {
+                begin = this.inputViewChild.nativeElement.selectionStart;
+                end = this.inputViewChild.nativeElement.selectionEnd;
+            }
+            else if (document['selection'] && document['selection'].createRange) {
+                range = document['selection'].createRange();
+                begin = 0 - range.duplicate().moveStart('character', -100000);
+                end = begin + range.text.length;
+            }
+            return { begin: begin, end: end };
+        }
+    }
+    isCompleted() {
+        let completed;
+        for (let i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) {
+            if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+    getPlaceholder(i) {
+        if (i < this.slotChar.length) {
+            return this.slotChar.charAt(i);
+        }
+        return this.slotChar.charAt(0);
+    }
+    seekNext(pos) {
+        while (++pos < this.len && !this.tests[pos])
+            ;
+        return pos;
+    }
+    seekPrev(pos) {
+        while (--pos >= 0 && !this.tests[pos])
+            ;
+        return pos;
+    }
+    shiftL(begin, end) {
+        let i, j;
+        if (begin < 0) {
+            return;
+        }
+        for (i = begin, j = this.seekNext(end); i < this.len; i++) {
+            if (this.tests[i]) {
+                if (j < this.len && this.tests[i].test(this.buffer[j])) {
+                    this.buffer[i] = this.buffer[j];
+                    this.buffer[j] = this.getPlaceholder(j);
+                }
+                else {
+                    break;
+                }
+                j = this.seekNext(j);
+            }
+        }
+        this.writeBuffer();
+        this.caret(Math.max(this.firstNonMaskPos, begin));
+    }
+    shiftR(pos) {
+        let i, c, j, t;
+        for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) {
+            if (this.tests[i]) {
+                j = this.seekNext(i);
+                t = this.buffer[i];
+                this.buffer[i] = c;
+                if (j < this.len && this.tests[j].test(t)) {
+                    c = t;
+                }
+                else {
+                    break;
+                }
+            }
+        }
+    }
+    handleAndroidInput(e) {
+        var curVal = this.inputViewChild.nativeElement.value;
+        var pos = this.caret();
+        if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length) {
+            // a deletion or backspace happened
+            this.checkVal(true);
+            while (pos.begin > 0 && !this.tests[pos.begin - 1])
+                pos.begin--;
+            if (pos.begin === 0) {
+                while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin])
+                    pos.begin++;
+            }
+            setTimeout(() => {
+                this.caret(pos.begin, pos.begin);
+                this.updateModel(e);
+                if (this.isCompleted()) {
+                    this.onComplete.emit();
+                }
+            }, 0);
+        }
+        else {
+            this.checkVal(true);
+            while (pos.begin < this.len && !this.tests[pos.begin])
+                pos.begin++;
+            setTimeout(() => {
+                this.caret(pos.begin, pos.begin);
+                this.updateModel(e);
+                if (this.isCompleted()) {
+                    this.onComplete.emit();
+                }
+            }, 0);
+        }
+    }
+    onInputBlur(e) {
+        this.focused = false;
+        this.onModelTouched();
+        this.checkVal();
+        this.updateFilledState();
+        this.onBlur.emit(e);
+        if (this.inputViewChild.nativeElement.value != this.focusText || this.inputViewChild.nativeElement.value != this.value) {
+            this.updateModel(e);
+            let event = document.createEvent('HTMLEvents');
+            event.initEvent('change', true, false);
+            this.inputViewChild.nativeElement.dispatchEvent(event);
+        }
+    }
+    onInputKeydown(e) {
+        if (this.readonly) {
+            return;
+        }
+        let k = e.which || e.keyCode, pos, begin, end;
+        let iPhone = /iphone/i.test(DomHandler.getUserAgent());
+        this.oldVal = this.inputViewChild.nativeElement.value;
+        this.onKeydown.emit(e);
+        //backspace, delete, and escape get special treatment
+        if (k === 8 || k === 46 || (iPhone && k === 127)) {
+            pos = this.caret();
+            begin = pos.begin;
+            end = pos.end;
+            if (end - begin === 0) {
+                begin = k !== 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1));
+                end = k === 46 ? this.seekNext(end) : end;
+            }
+            this.clearBuffer(begin, end);
+            this.shiftL(begin, end - 1);
+            this.updateModel(e);
+            this.onInput.emit(e);
+            e.preventDefault();
+        }
+        else if (k === 13) { // enter
+            this.onInputBlur(e);
+            this.updateModel(e);
+        }
+        else if (k === 27) { // escape
+            this.inputViewChild.nativeElement.value = this.focusText;
+            this.caret(0, this.checkVal());
+            this.updateModel(e);
+            e.preventDefault();
+        }
+    }
+    onKeyPress(e) {
+        if (this.readonly) {
+            return;
+        }
+        var k = e.which || e.keyCode, pos = this.caret(), p, c, next, completed;
+        if (e.ctrlKey || e.altKey || e.metaKey || k < 32 || (k > 34 && k < 41)) { //Ignore
+            return;
+        }
+        else if (k && k !== 13) {
+            if (pos.end - pos.begin !== 0) {
+                this.clearBuffer(pos.begin, pos.end);
+                this.shiftL(pos.begin, pos.end - 1);
+            }
+            p = this.seekNext(pos.begin - 1);
+            if (p < this.len) {
+                c = String.fromCharCode(k);
+                if (this.tests[p].test(c)) {
+                    this.shiftR(p);
+                    this.buffer[p] = c;
+                    this.writeBuffer();
+                    next = this.seekNext(p);
+                    if (/android/i.test(DomHandler.getUserAgent())) {
+                        //Path for CSP Violation on FireFox OS 1.1
+                        let proxy = () => {
+                            this.caret(next);
+                        };
+                        setTimeout(proxy, 0);
+                    }
+                    else {
+                        this.caret(next);
+                    }
+                    if (pos.begin <= this.lastRequiredNonMaskPos) {
+                        completed = this.isCompleted();
+                    }
+                    this.onInput.emit(e);
+                }
+            }
+            e.preventDefault();
+        }
+        this.updateModel(e);
+        this.updateFilledState();
+        if (completed) {
+            this.onComplete.emit();
+        }
+    }
+    clearBuffer(start, end) {
+        let i;
+        for (i = start; i < end && i < this.len; i++) {
+            if (this.tests[i]) {
+                this.buffer[i] = this.getPlaceholder(i);
+            }
+        }
+    }
+    writeBuffer() {
+        this.inputViewChild.nativeElement.value = this.buffer.join('');
+    }
+    checkVal(allow) {
+        //try to place characters where they belong
+        let test = this.inputViewChild.nativeElement.value, lastMatch = -1, i, c, pos;
+        for (i = 0, pos = 0; i < this.len; i++) {
+            if (this.tests[i]) {
+                this.buffer[i] = this.getPlaceholder(i);
+                while (pos++ < test.length) {
+                    c = test.charAt(pos - 1);
+                    if (this.tests[i].test(c)) {
+                        this.buffer[i] = c;
+                        lastMatch = i;
+                        break;
+                    }
+                }
+                if (pos > test.length) {
+                    this.clearBuffer(i + 1, this.len);
+                    break;
+                }
+            }
+            else {
+                if (this.buffer[i] === test.charAt(pos)) {
+                    pos++;
+                }
+                if (i < this.partialPosition) {
+                    lastMatch = i;
+                }
+            }
+        }
+        if (allow) {
+            this.writeBuffer();
+        }
+        else if (lastMatch + 1 < this.partialPosition) {
+            if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {
+                // Invalid value. Remove it and replace it with the
+                // mask, which is the default behavior.
+                if (this.inputViewChild.nativeElement.value)
+                    this.inputViewChild.nativeElement.value = '';
+                this.clearBuffer(0, this.len);
+            }
+            else {
+                // Invalid value, but we opt to show the value to the
+                // user and allow them to correct their mistake.
+                this.writeBuffer();
+            }
+        }
+        else {
+            this.writeBuffer();
+            this.inputViewChild.nativeElement.value = this.inputViewChild.nativeElement.value.substring(0, lastMatch + 1);
+        }
+        return (this.partialPosition ? i : this.firstNonMaskPos);
+    }
+    onInputFocus(event) {
+        if (this.readonly) {
+            return;
+        }
+        this.focused = true;
+        clearTimeout(this.caretTimeoutId);
+        let pos;
+        this.focusText = this.inputViewChild.nativeElement.value;
+        pos = this.checkVal();
+        this.caretTimeoutId = setTimeout(() => {
+            if (this.inputViewChild.nativeElement !== this.inputViewChild.nativeElement.ownerDocument.activeElement) {
+                return;
+            }
+            this.writeBuffer();
+            if (pos == this.mask.replace("?", "").length) {
+                this.caret(0, pos);
+            }
+            else {
+                this.caret(pos);
+            }
+        }, 10);
+        this.onFocus.emit(event);
+    }
+    onInputChange(event) {
+        if (this.androidChrome)
+            this.handleAndroidInput(event);
+        else
+            this.handleInputChange(event);
+        this.onInput.emit(event);
+    }
+    handleInputChange(event) {
+        if (this.readonly) {
+            return;
+        }
+        setTimeout(() => {
+            var pos = this.checkVal(true);
+            this.caret(pos);
+            this.updateModel(event);
+            if (this.isCompleted()) {
+                this.onComplete.emit();
+            }
+        }, 0);
+    }
+    getUnmaskedValue() {
+        let unmaskedBuffer = [];
+        for (let i = 0; i < this.buffer.length; i++) {
+            let c = this.buffer[i];
+            if (this.tests[i] && c != this.getPlaceholder(i)) {
+                unmaskedBuffer.push(c);
+            }
+        }
+        return unmaskedBuffer.join('');
+    }
+    updateModel(e) {
+        const updatedValue = this.unmask ? this.getUnmaskedValue() : e.target.value;
+        if (updatedValue !== null || updatedValue !== undefined) {
+            this.value = updatedValue;
+            this.onModelChange(this.value);
+        }
+    }
+    updateFilledState() {
+        this.filled = this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value != '';
+    }
+    focus() {
+        this.inputViewChild.nativeElement.focus();
+    }
+    ngOnDestroy() {
+    }
+}
+InputMask.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputMask, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+InputMask.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: InputMask, selector: "p-inputMask", inputs: { type: "type", slotChar: "slotChar", autoClear: "autoClear", style: "style", inputId: "inputId", styleClass: "styleClass", placeholder: "placeholder", size: "size", maxlength: "maxlength", tabindex: "tabindex", title: "title", ariaLabel: "ariaLabel", ariaRequired: "ariaRequired", disabled: "disabled", readonly: "readonly", unmask: "unmask", name: "name", required: "required", characterPattern: "characterPattern", autoFocus: "autoFocus", autocomplete: "autocomplete", mask: "mask" }, outputs: { onComplete: "onComplete", onFocus: "onFocus", onBlur: "onBlur", onInput: "onInput", onKeydown: "onKeydown" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "focused" }, classAttribute: "p-element" }, providers: [INPUTMASK_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputViewChild", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: `<input #input pInputText class="p-inputmask" [attr.id]="inputId" [attr.type]="type" [attr.name]="name" [ngStyle]="style" [ngClass]="styleClass" [attr.placeholder]="placeholder" [attr.title]="title"
+        [attr.size]="size" [attr.autocomplete]="autocomplete" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [attr.aria-label]="ariaLabel" [attr.aria-required]="ariaRequired" [disabled]="disabled" [readonly]="readonly" [attr.required]="required"
+        (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" (keydown)="onInputKeydown($event)" (keypress)="onKeyPress($event)" [attr.autofocus]="autoFocus"
+        (input)="onInputChange($event)" (paste)="handleInputChange($event)">`, isInline: true, directives: [{ type: i1.InputText, selector: "[pInputText]" }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputMask, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-inputMask',
+                    template: `<input #input pInputText class="p-inputmask" [attr.id]="inputId" [attr.type]="type" [attr.name]="name" [ngStyle]="style" [ngClass]="styleClass" [attr.placeholder]="placeholder" [attr.title]="title"
+        [attr.size]="size" [attr.autocomplete]="autocomplete" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [attr.aria-label]="ariaLabel" [attr.aria-required]="ariaRequired" [disabled]="disabled" [readonly]="readonly" [attr.required]="required"
+        (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" (keydown)="onInputKeydown($event)" (keypress)="onKeyPress($event)" [attr.autofocus]="autoFocus"
+        (input)="onInputChange($event)" (paste)="handleInputChange($event)">`,
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-inputwrapper-filled]': 'filled',
+                        '[class.p-inputwrapper-focus]': 'focused'
+                    },
+                    providers: [INPUTMASK_VALUE_ACCESSOR],
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { type: [{
+                type: Input
+            }], slotChar: [{
+                type: Input
+            }], autoClear: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], maxlength: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], title: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }], ariaRequired: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], unmask: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], required: [{
+                type: Input
+            }], characterPattern: [{
+                type: Input
+            }], autoFocus: [{
+                type: Input
+            }], autocomplete: [{
+                type: Input
+            }], inputViewChild: [{
+                type: ViewChild,
+                args: ['input', { static: true }]
+            }], onComplete: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], onInput: [{
+                type: Output
+            }], onKeydown: [{
+                type: Output
+            }], mask: [{
+                type: Input
+            }] } });
+class InputMaskModule {
+}
+InputMaskModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputMaskModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+InputMaskModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputMaskModule, declarations: [InputMask], imports: [CommonModule, InputTextModule], exports: [InputMask] });
+InputMaskModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputMaskModule, imports: [[CommonModule, InputTextModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputMaskModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, InputTextModule],
+                    exports: [InputMask],
+                    declarations: [InputMask]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { INPUTMASK_VALUE_ACCESSOR, InputMask, InputMaskModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputmask.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputmask.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputmask.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-inputmask.mjs","sources":["../../src/app/components/inputmask/inputmask.ts","../../src/app/components/inputmask/primeng-inputmask.ts"],"sourcesContent":["/*\n    Port of jQuery MaskedInput by DigitalBush as a Native Angular2 Component in Typescript without jQuery\n    https://github.com/digitalBush/jquery.maskedinput/\n\n    Copyright (c) 2007-2014 Josh Bush (digitalbush.com)\n\n    Permission is hereby granted, free of charge, to any person\n    obtaining a copy of this software and associated documentation\n    files (the \"Software\"), to deal in the Software without\n    restriction, including without limitation the rights to use,\n    copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the\n    Software is furnished to do so, subject to the following\n    conditions:\n\n    The above copyright notice and this permission notice shall be\n    included in all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS IN THE SOFTWARE.\n*/\nimport {NgModule,Component,ElementRef,OnInit,OnDestroy,Input,forwardRef,Output,EventEmitter,ViewChild,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const INPUTMASK_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => InputMask),\n  multi: true\n};\n\n@Component({\n    selector: 'p-inputMask',\n    template: `<input #input pInputText class=\"p-inputmask\" [attr.id]=\"inputId\" [attr.type]=\"type\" [attr.name]=\"name\" [ngStyle]=\"style\" [ngClass]=\"styleClass\" [attr.placeholder]=\"placeholder\" [attr.title]=\"title\"\n        [attr.size]=\"size\" [attr.autocomplete]=\"autocomplete\" [attr.maxlength]=\"maxlength\" [attr.tabindex]=\"tabindex\" [attr.aria-label]=\"ariaLabel\" [attr.aria-required]=\"ariaRequired\" [disabled]=\"disabled\" [readonly]=\"readonly\" [attr.required]=\"required\"\n        (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\" (keydown)=\"onInputKeydown($event)\" (keypress)=\"onKeyPress($event)\" [attr.autofocus]=\"autoFocus\"\n        (input)=\"onInputChange($event)\" (paste)=\"handleInputChange($event)\">`,\n    host: {\n        'class': 'p-element',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focused'\n    },\n    providers: [INPUTMASK_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None\n})\nexport class InputMask implements OnInit,OnDestroy,ControlValueAccessor {\n\n    @Input() type: string = 'text';\n\n    @Input() slotChar: string = '_';\n\n    @Input() autoClear: boolean = true;\n\n    @Input() style: any;\n\n    @Input() inputId: string;\n\n    @Input() styleClass: string;\n\n    @Input() placeholder: string;\n\n    @Input() size: number;\n\n    @Input() maxlength: number;\n\n    @Input() tabindex: string;\n\n    @Input() title: string;\n\n    @Input() ariaLabel: string;\n\n    @Input() ariaRequired: boolean;\n\n    @Input() disabled: boolean;\n\n    @Input() readonly: boolean;\n\n    @Input() unmask: boolean;\n\n    @Input() name: string;\n\n    @Input() required: boolean;\n\n    @Input() characterPattern: string = '[A-Za-z]';\n\n    @Input() autoFocus: boolean;\n\n    @Input() autocomplete: string;\n\n    @ViewChild('input', { static: true }) inputViewChild: ElementRef;\n\n    @Output() onComplete: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onInput: EventEmitter<any> = new EventEmitter();\n\n    @Output() onKeydown: EventEmitter<any> = new EventEmitter();\n\n    value: any;\n\n    _mask: string;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    input: HTMLInputElement;\n\n    filled: boolean;\n\n    defs: any;\n\n    tests: any[];\n\n    partialPosition: any;\n\n    firstNonMaskPos: number;\n\n    lastRequiredNonMaskPos: any;\n\n    len: number;\n\n    oldVal: string;\n\n    buffer: any;\n\n    defaultBuffer: string;\n\n    focusText: string;\n\n    caretTimeoutId: any;\n\n    androidChrome: boolean;\n\n    focused: boolean;\n\n    constructor(public el: ElementRef, private cd: ChangeDetectorRef) {}\n\n    ngOnInit() {\n        let ua = DomHandler.getUserAgent();\n        this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua);\n\n        this.initMask();\n    }\n\n    @Input() get mask(): string {\n        return this._mask;\n    }\n\n    set mask(val:string) {\n        this._mask = val;\n\n        this.initMask();\n        this.writeValue('');\n        this.onModelChange(this.value);\n    }\n\n    initMask() {\n        this.tests = [];\n        this.partialPosition = this.mask.length;\n        this.len = this.mask.length;\n        this.firstNonMaskPos = null;\n        this.defs = {\n            '9': '[0-9]',\n            'a': this.characterPattern,\n            '*': `${this.characterPattern}|[0-9]`\n        };\n\n        let maskTokens = this.mask.split('');\n        for(let i = 0; i < maskTokens.length; i++) {\n            let c = maskTokens[i];\n            if (c == '?') {\n\t\t\t\tthis.len--;\n\t\t\t\tthis.partialPosition = i;\n\t\t\t}\n            else if (this.defs[c]) {\n\t\t\t\tthis.tests.push(new RegExp(this.defs[c]));\n\t\t\t\tif (this.firstNonMaskPos === null) {\n\t                this.firstNonMaskPos = this.tests.length - 1;\n\t\t\t\t}\n                if (i < this.partialPosition){\n                    this.lastRequiredNonMaskPos = this.tests.length - 1;\n                }\n\t\t\t}\n            else {\n\t\t\t\tthis.tests.push(null);\n\t\t\t}\n        }\n\n        this.buffer = [];\n        for(let i = 0; i < maskTokens.length; i++) {\n            let c = maskTokens[i];\n            if (c != '?') {\n                if (this.defs[c])\n                    this.buffer.push(this.getPlaceholder(i));\n                else\n                    this.buffer.push(c);\n            }\n        }\n        this.defaultBuffer = this.buffer.join('');\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n\n        if (this.inputViewChild && this.inputViewChild.nativeElement) {\n            if (this.value == undefined || this.value == null)\n                this.inputViewChild.nativeElement.value = '';\n            else\n                this.inputViewChild.nativeElement.value = this.value;\n\n            this.checkVal();\n            this.focusText = this.inputViewChild.nativeElement.value;\n            this.updateFilledState();\n        }\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    caret(first?: number, last?: number) {\n        let range, begin, end;\n\n        if (!this.inputViewChild.nativeElement.offsetParent||this.inputViewChild.nativeElement !== this.inputViewChild.nativeElement.ownerDocument.activeElement) {\n            return;\n        }\n\n        if (typeof first == 'number') {\n            begin = first;\n            end = (typeof last === 'number') ? last : begin;\n            if (this.inputViewChild.nativeElement.setSelectionRange) {\n                this.inputViewChild.nativeElement.setSelectionRange(begin, end);\n            }\n            else if (this.inputViewChild.nativeElement['createTextRange']) {\n                range = this.inputViewChild.nativeElement['createTextRange']();\n                range.collapse(true);\n                range.moveEnd('character', end);\n                range.moveStart('character', begin);\n                range.select();\n            }\n        }\n        else {\n            if (this.inputViewChild.nativeElement.setSelectionRange) {\n    \t\t\tbegin = this.inputViewChild.nativeElement.selectionStart;\n    \t\t\tend = this.inputViewChild.nativeElement.selectionEnd;\n    \t\t}\n            else if (document['selection'] && document['selection'].createRange) {\n    \t\t\trange = document['selection'].createRange();\n    \t\t\tbegin = 0 - range.duplicate().moveStart('character', -100000);\n    \t\t\tend = begin + range.text.length;\n    \t\t}\n\n    \t\treturn {begin: begin, end: end};\n        }\n    }\n\n    isCompleted(): boolean {\n        let completed: boolean;\n        for (let i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) {\n            if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    getPlaceholder(i: number) {\n        if (i < this.slotChar.length) {\n            return this.slotChar.charAt(i);\n        }\n        return this.slotChar.charAt(0);\n    }\n\n    seekNext(pos) {\n        while (++pos < this.len && !this.tests[pos]);\n        return pos;\n    }\n\n    seekPrev(pos) {\n        while (--pos >= 0 && !this.tests[pos]);\n        return pos;\n    }\n\n    shiftL(begin:number,end:number) {\n        let i, j;\n\n        if (begin<0) {\n            return;\n        }\n\n        for (i = begin, j = this.seekNext(end); i < this.len; i++) {\n            if (this.tests[i]) {\n                if (j < this.len && this.tests[i].test(this.buffer[j])) {\n                    this.buffer[i] = this.buffer[j];\n                    this.buffer[j] = this.getPlaceholder(j);\n                } else {\n                    break;\n                }\n\n                j = this.seekNext(j);\n            }\n        }\n        this.writeBuffer();\n        this.caret(Math.max(this.firstNonMaskPos, begin));\n    }\n\n    shiftR(pos) {\n        let i, c, j, t;\n\n        for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) {\n            if (this.tests[i]) {\n                j = this.seekNext(i);\n                t = this.buffer[i];\n                this.buffer[i] = c;\n                if (j < this.len && this.tests[j].test(t)) {\n                    c = t;\n                } else {\n                    break;\n                }\n            }\n        }\n    }\n\n    handleAndroidInput(e) {\n        var curVal = this.inputViewChild.nativeElement.value;\n        var pos = this.caret();\n        if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length ) {\n            // a deletion or backspace happened\n            this.checkVal(true);\n            while (pos.begin > 0 && !this.tests[pos.begin-1])\n                  pos.begin--;\n            if (pos.begin === 0)\n            {\n               while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin])\n                  pos.begin++;\n            }\n\n            setTimeout(() => {\n                this.caret(pos.begin, pos.begin);\n                this.updateModel(e);\n                if (this.isCompleted()) {\n                    this.onComplete.emit();\n                }\n            }, 0);\n        }\n        else {\n            this.checkVal(true);\n            while (pos.begin < this.len && !this.tests[pos.begin])\n                pos.begin++;\n\n            setTimeout(() => {\n                this.caret(pos.begin, pos.begin);\n                this.updateModel(e);\n                if (this.isCompleted()) {\n                    this.onComplete.emit();\n                }\n            }, 0);\n        }\n    }\n\n    onInputBlur(e) {\n        this.focused = false;\n        this.onModelTouched();\n        this.checkVal();\n        this.updateFilledState();\n        this.onBlur.emit(e);\n\n        if (this.inputViewChild.nativeElement.value != this.focusText || this.inputViewChild.nativeElement.value != this.value) {\n            this.updateModel(e);\n            let event = document.createEvent('HTMLEvents');\n            event.initEvent('change', true, false);\n            this.inputViewChild.nativeElement.dispatchEvent(event);\n        }\n    }\n\n    onInputKeydown(e) {\n        if (this.readonly) {\n            return;\n        }\n\n        let k = e.which||e.keyCode,\n            pos,\n            begin,\n            end;\n        let iPhone = /iphone/i.test(DomHandler.getUserAgent());\n        this.oldVal = this.inputViewChild.nativeElement.value;\n\n        this.onKeydown.emit(e);\n\n        //backspace, delete, and escape get special treatment\n        if (k === 8 || k === 46 || (iPhone && k === 127)) {\n            pos = this.caret();\n            begin = pos.begin;\n            end = pos.end;\n\n            if (end - begin === 0) {\n                begin=k!==46?this.seekPrev(begin):(end=this.seekNext(begin-1));\n                end=k===46?this.seekNext(end):end;\n            }\n\n            this.clearBuffer(begin, end);\n\t\t\tthis.shiftL(begin, end - 1);\n            this.updateModel(e);\n            this.onInput.emit(e);\n\n            e.preventDefault();\n        }\n        else if ( k === 13 ) { // enter\n            this.onInputBlur(e);\n            this.updateModel(e);\n        }\n        else if (k === 27) { // escape\n            this.inputViewChild.nativeElement.value = this.focusText;\n            this.caret(0, this.checkVal());\n            this.updateModel(e);\n\n            e.preventDefault();\n        }\n    }\n\n    onKeyPress(e) {\n        if (this.readonly){\n            return;\n        }\n\n        var k = e.which || e.keyCode,\n            pos = this.caret(),\n            p,\n            c,\n            next,\n            completed;\n\n        if (e.ctrlKey || e.altKey || e.metaKey || k < 32  || (k > 34 && k < 41)) {//Ignore\n            return;\n        } else if ( k && k !== 13 ) {\n            if (pos.end - pos.begin !== 0){\n                this.clearBuffer(pos.begin, pos.end);\n                this.shiftL(pos.begin, pos.end-1);\n            }\n\n            p = this.seekNext(pos.begin - 1);\n            if (p < this.len) {\n                c = String.fromCharCode(k);\n                if (this.tests[p].test(c)) {\n                    this.shiftR(p);\n\n                    this.buffer[p] = c;\n                    this.writeBuffer();\n                    next = this.seekNext(p);\n\n                    if (/android/i.test(DomHandler.getUserAgent())) {\n                        //Path for CSP Violation on FireFox OS 1.1\n                        let proxy = () => {\n                            this.caret(next);\n                        };\n\n                        setTimeout(proxy,0);\n                    }\n                    else {\n                        this.caret(next);\n                    }\n\n                    if (pos.begin <= this.lastRequiredNonMaskPos) {\n                        completed = this.isCompleted();\n                    }\n\n                    this.onInput.emit(e);\n                }\n            }\n            e.preventDefault();\n        }\n\n        this.updateModel(e);\n\n        this.updateFilledState();\n\n        if (completed) {\n            this.onComplete.emit();\n        }\n    }\n\n    clearBuffer(start, end) {\n        let i;\n        for (i = start; i < end && i < this.len; i++) {\n            if (this.tests[i]) {\n                this.buffer[i] = this.getPlaceholder(i);\n            }\n        }\n    }\n\n    writeBuffer() {\n        this.inputViewChild.nativeElement.value = this.buffer.join('');\n    }\n\n    checkVal(allow?: boolean) {\n        //try to place characters where they belong\n        let test = this.inputViewChild.nativeElement.value,\n            lastMatch = -1,\n            i,\n            c,\n            pos;\n\n        for (i = 0, pos = 0; i < this.len; i++) {\n            if (this.tests[i]) {\n                this.buffer[i] = this.getPlaceholder(i);\n                while (pos++ < test.length) {\n                    c = test.charAt(pos - 1);\n                    if (this.tests[i].test(c)) {\n                        this.buffer[i] = c;\n                        lastMatch = i;\n                        break;\n                    }\n                }\n                if (pos > test.length) {\n                    this.clearBuffer(i + 1, this.len);\n                    break;\n                }\n            } else {\n                if (this.buffer[i] === test.charAt(pos)) {\n                    pos++;\n                }\n                if ( i < this.partialPosition){\n                    lastMatch = i;\n                }\n            }\n        }\n        if (allow) {\n            this.writeBuffer();\n        } else if (lastMatch + 1 < this.partialPosition) {\n            if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {\n                // Invalid value. Remove it and replace it with the\n                // mask, which is the default behavior.\n                if (this.inputViewChild.nativeElement.value) this.inputViewChild.nativeElement.value = '';\n                this.clearBuffer(0, this.len);\n            } else {\n                // Invalid value, but we opt to show the value to the\n                // user and allow them to correct their mistake.\n                this.writeBuffer();\n            }\n        } else {\n            this.writeBuffer();\n            this.inputViewChild.nativeElement.value = this.inputViewChild.nativeElement.value.substring(0, lastMatch + 1);\n        }\n        return (this.partialPosition ? i : this.firstNonMaskPos);\n    }\n\n    onInputFocus(event) {\n        if (this.readonly){\n            return;\n        }\n\n        this.focused = true;\n\n        clearTimeout(this.caretTimeoutId);\n        let pos;\n\n        this.focusText = this.inputViewChild.nativeElement.value;\n\n        pos = this.checkVal();\n\n        this.caretTimeoutId = setTimeout(() => {\n            if (this.inputViewChild.nativeElement !== this.inputViewChild.nativeElement.ownerDocument.activeElement){\n                return;\n            }\n            this.writeBuffer();\n            if (pos == this.mask.replace(\"?\",\"\").length) {\n                this.caret(0, pos);\n            } else {\n                this.caret(pos);\n            }\n        }, 10);\n\n        this.onFocus.emit(event);\n    }\n\n    onInputChange(event) {\n        if (this.androidChrome)\n            this.handleAndroidInput(event);\n        else\n            this.handleInputChange(event);\n\n        this.onInput.emit(event);\n    }\n\n    handleInputChange(event) {\n        if (this.readonly){\n            return;\n        }\n\n        setTimeout(() => {\n            var pos = this.checkVal(true);\n            this.caret(pos);\n            this.updateModel(event);\n            if (this.isCompleted()) {\n                this.onComplete.emit();\n            }\n        }, 0);\n    }\n\n    getUnmaskedValue() {\n        let unmaskedBuffer = [];\n        for(let i = 0; i < this.buffer.length; i++) {\n            let c = this.buffer[i];\n            if (this.tests[i] && c != this.getPlaceholder(i)) {\n                unmaskedBuffer.push(c);\n            }\n        }\n\n        return unmaskedBuffer.join('');\n    }\n\n    updateModel(e) {\n        const updatedValue = this.unmask ? this.getUnmaskedValue() : e.target.value;\n        if (updatedValue !== null || updatedValue !== undefined) {\n            this.value = updatedValue;\n            this.onModelChange(this.value);\n        }\n    }\n\n    updateFilledState() {\n        this.filled = this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value != '';\n    }\n\n    focus() {\n        this.inputViewChild.nativeElement.focus();\n    }\n\n    ngOnDestroy() {\n\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,InputTextModule],\n    exports: [InputMask],\n    declarations: [InputMask]\n})\nexport class InputMaskModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputnumber.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputnumber.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputnumber.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,903 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i2 from 'primeng/inputtext';
+import { InputTextModule } from 'primeng/inputtext';
+import * as i3 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const INPUTNUMBER_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => InputNumber),
+    multi: true
+};
+class InputNumber {
+    constructor(el, cd) {
+        this.el = el;
+        this.cd = cd;
+        this.showButtons = false;
+        this.format = true;
+        this.buttonLayout = "stacked";
+        this.incrementButtonIcon = 'pi pi-angle-up';
+        this.decrementButtonIcon = 'pi pi-angle-down';
+        this.readonly = false;
+        this.step = 1;
+        this.allowEmpty = true;
+        this.mode = "decimal";
+        this.useGrouping = true;
+        this.onInput = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.onKeyDown = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+        this.groupChar = '';
+        this.prefixChar = '';
+        this.suffixChar = '';
+    }
+    get disabled() {
+        return this._disabled;
+    }
+    set disabled(disabled) {
+        if (disabled)
+            this.focused = false;
+        this._disabled = disabled;
+        if (this.timer)
+            this.clearTimer();
+    }
+    ngOnChanges(simpleChange) {
+        const props = ['locale', 'localeMatcher', 'mode', 'currency', 'currencyDisplay', 'useGrouping', 'minFractionDigits', 'maxFractionDigits', 'prefix', 'suffix'];
+        if (props.some(p => !!simpleChange[p])) {
+            this.updateConstructParser();
+        }
+    }
+    ngOnInit() {
+        this.constructParser();
+        this.initialized = true;
+    }
+    getOptions() {
+        return {
+            localeMatcher: this.localeMatcher,
+            style: this.mode,
+            currency: this.currency,
+            currencyDisplay: this.currencyDisplay,
+            useGrouping: this.useGrouping,
+            minimumFractionDigits: this.minFractionDigits,
+            maximumFractionDigits: this.maxFractionDigits
+        };
+    }
+    constructParser() {
+        this.numberFormat = new Intl.NumberFormat(this.locale, this.getOptions());
+        const numerals = [...new Intl.NumberFormat(this.locale, { useGrouping: false }).format(9876543210)].reverse();
+        const index = new Map(numerals.map((d, i) => [d, i]));
+        this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');
+        this._group = this.getGroupingExpression();
+        this._minusSign = this.getMinusSignExpression();
+        this._currency = this.getCurrencyExpression();
+        this._decimal = this.getDecimalExpression();
+        this._suffix = this.getSuffixExpression();
+        this._prefix = this.getPrefixExpression();
+        this._index = d => index.get(d);
+    }
+    updateConstructParser() {
+        if (this.initialized) {
+            this.constructParser();
+        }
+    }
+    escapeRegExp(text) {
+        return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
+    }
+    getDecimalExpression() {
+        const formatter = new Intl.NumberFormat(this.locale, { ...this.getOptions(), useGrouping: false });
+        return new RegExp(`[${formatter.format(1.1).replace(this._currency, '').trim().replace(this._numeral, '')}]`, 'g');
+    }
+    getGroupingExpression() {
+        const formatter = new Intl.NumberFormat(this.locale, { useGrouping: true });
+        this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);
+        return new RegExp(`[${this.groupChar}]`, 'g');
+    }
+    getMinusSignExpression() {
+        const formatter = new Intl.NumberFormat(this.locale, { useGrouping: false });
+        return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');
+    }
+    getCurrencyExpression() {
+        if (this.currency) {
+            const formatter = new Intl.NumberFormat(this.locale, { style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay,
+                minimumFractionDigits: 0, maximumFractionDigits: 0 });
+            return new RegExp(`[${formatter.format(1).replace(/\s/g, '').replace(this._numeral, '').replace(this._group, '')}]`, 'g');
+        }
+        return new RegExp(`[]`, 'g');
+    }
+    getPrefixExpression() {
+        if (this.prefix) {
+            this.prefixChar = this.prefix;
+        }
+        else {
+            const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay });
+            this.prefixChar = formatter.format(1).split('1')[0];
+        }
+        return new RegExp(`${this.escapeRegExp(this.prefixChar || '')}`, 'g');
+    }
+    getSuffixExpression() {
+        if (this.suffix) {
+            this.suffixChar = this.suffix;
+        }
+        else {
+            const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay,
+                minimumFractionDigits: 0, maximumFractionDigits: 0 });
+            this.suffixChar = formatter.format(1).split('1')[1];
+        }
+        return new RegExp(`${this.escapeRegExp(this.suffixChar || '')}`, 'g');
+    }
+    formatValue(value) {
+        if (value != null) {
+            if (value === '-') { // Minus sign
+                return value;
+            }
+            if (this.format) {
+                let formatter = new Intl.NumberFormat(this.locale, this.getOptions());
+                let formattedValue = formatter.format(value);
+                if (this.prefix) {
+                    formattedValue = this.prefix + formattedValue;
+                }
+                if (this.suffix) {
+                    formattedValue = formattedValue + this.suffix;
+                }
+                return formattedValue;
+            }
+            return value.toString();
+        }
+        return '';
+    }
+    parseValue(text) {
+        let filteredText = text
+            .replace(this._suffix, '')
+            .replace(this._prefix, '')
+            .trim()
+            .replace(/\s/g, '')
+            .replace(this._currency, '')
+            .replace(this._group, '')
+            .replace(this._minusSign, '-')
+            .replace(this._decimal, '.')
+            .replace(this._numeral, this._index);
+        if (filteredText) {
+            if (filteredText === '-') // Minus sign
+                return filteredText;
+            let parsedValue = +filteredText;
+            return isNaN(parsedValue) ? null : parsedValue;
+        }
+        return null;
+    }
+    repeat(event, interval, dir) {
+        if (this.readonly) {
+            return;
+        }
+        let i = interval || 500;
+        this.clearTimer();
+        this.timer = setTimeout(() => {
+            this.repeat(event, 40, dir);
+        }, i);
+        this.spin(event, dir);
+    }
+    spin(event, dir) {
+        let step = this.step * dir;
+        let currentValue = this.parseValue(this.input.nativeElement.value) || 0;
+        let newValue = this.validateValue(currentValue + step);
+        if (this.maxlength && this.maxlength < this.formatValue(newValue).length) {
+            return;
+        }
+        this.updateInput(newValue, null, 'spin', null);
+        this.updateModel(event, newValue);
+        this.handleOnInput(event, currentValue, newValue);
+    }
+    onUpButtonMouseDown(event) {
+        this.input.nativeElement.focus();
+        this.repeat(event, null, 1);
+        event.preventDefault();
+    }
+    onUpButtonMouseUp() {
+        this.clearTimer();
+    }
+    onUpButtonMouseLeave() {
+        this.clearTimer();
+    }
+    onUpButtonKeyDown(event) {
+        if (event.keyCode === 32 || event.keyCode === 13) {
+            this.repeat(event, null, 1);
+        }
+    }
+    onUpButtonKeyUp() {
+        this.clearTimer();
+    }
+    onDownButtonMouseDown(event) {
+        this.input.nativeElement.focus();
+        this.repeat(event, null, -1);
+        event.preventDefault();
+    }
+    onDownButtonMouseUp() {
+        this.clearTimer();
+    }
+    onDownButtonMouseLeave() {
+        this.clearTimer();
+    }
+    onDownButtonKeyUp() {
+        this.clearTimer();
+    }
+    onDownButtonKeyDown(event) {
+        if (event.keyCode === 32 || event.keyCode === 13) {
+            this.repeat(event, null, -1);
+        }
+    }
+    onUserInput(event) {
+        if (this.isSpecialChar) {
+            event.target.value = this.lastValue;
+        }
+        this.isSpecialChar = false;
+    }
+    onInputKeyDown(event) {
+        this.lastValue = event.target.value;
+        if (event.shiftKey || event.altKey) {
+            this.isSpecialChar = true;
+            return;
+        }
+        let selectionStart = event.target.selectionStart;
+        let selectionEnd = event.target.selectionEnd;
+        let inputValue = event.target.value;
+        let newValueStr = null;
+        if (event.altKey) {
+            event.preventDefault();
+        }
+        switch (event.which) {
+            //up
+            case 38:
+                this.spin(event, 1);
+                event.preventDefault();
+                break;
+            //down
+            case 40:
+                this.spin(event, -1);
+                event.preventDefault();
+                break;
+            //left
+            case 37:
+                if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {
+                    event.preventDefault();
+                }
+                break;
+            //right
+            case 39:
+                if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {
+                    event.preventDefault();
+                }
+                break;
+            //enter
+            case 13:
+                newValueStr = this.validateValue(this.parseValue(this.input.nativeElement.value));
+                this.input.nativeElement.value = this.formatValue(newValueStr);
+                this.input.nativeElement.setAttribute('aria-valuenow', newValueStr);
+                this.updateModel(event, newValueStr);
+                break;
+            //backspace
+            case 8: {
+                event.preventDefault();
+                if (selectionStart === selectionEnd) {
+                    const deleteChar = inputValue.charAt(selectionStart - 1);
+                    const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);
+                    if (this.isNumeralChar(deleteChar)) {
+                        const decimalLength = this.getDecimalLength(inputValue);
+                        if (this._group.test(deleteChar)) {
+                            this._group.lastIndex = 0;
+                            newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);
+                        }
+                        else if (this._decimal.test(deleteChar)) {
+                            this._decimal.lastIndex = 0;
+                            if (decimalLength) {
+                                this.input.nativeElement.setSelectionRange(selectionStart - 1, selectionStart - 1);
+                            }
+                            else {
+                                newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);
+                            }
+                        }
+                        else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {
+                            const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';
+                            newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);
+                        }
+                        else if (decimalCharIndexWithoutPrefix === 1) {
+                            newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);
+                            newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';
+                        }
+                        else {
+                            newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);
+                        }
+                    }
+                    this.updateValue(event, newValueStr, null, 'delete-single');
+                }
+                else {
+                    newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);
+                    this.updateValue(event, newValueStr, null, 'delete-range');
+                }
+                break;
+            }
+            // del
+            case 46:
+                event.preventDefault();
+                if (selectionStart === selectionEnd) {
+                    const deleteChar = inputValue.charAt(selectionStart);
+                    const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);
+                    if (this.isNumeralChar(deleteChar)) {
+                        const decimalLength = this.getDecimalLength(inputValue);
+                        if (this._group.test(deleteChar)) {
+                            this._group.lastIndex = 0;
+                            newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);
+                        }
+                        else if (this._decimal.test(deleteChar)) {
+                            this._decimal.lastIndex = 0;
+                            if (decimalLength) {
+                                this.input.nativeElement.setSelectionRange(selectionStart + 1, selectionStart + 1);
+                            }
+                            else {
+                                newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);
+                            }
+                        }
+                        else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {
+                            const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';
+                            newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1);
+                        }
+                        else if (decimalCharIndexWithoutPrefix === 1) {
+                            newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);
+                            newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';
+                        }
+                        else {
+                            newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);
+                        }
+                    }
+                    this.updateValue(event, newValueStr, null, 'delete-back-single');
+                }
+                else {
+                    newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);
+                    this.updateValue(event, newValueStr, null, 'delete-range');
+                }
+                break;
+            default:
+                break;
+        }
+        this.onKeyDown.emit(event);
+    }
+    onInputKeyPress(event) {
+        event.preventDefault();
+        let code = event.which || event.keyCode;
+        let char = String.fromCharCode(code);
+        const isDecimalSign = this.isDecimalSign(char);
+        const isMinusSign = this.isMinusSign(char);
+        if ((48 <= code && code <= 57) || isMinusSign || isDecimalSign) {
+            this.insert(event, char, { isDecimalSign, isMinusSign });
+        }
+    }
+    onPaste(event) {
+        if (!this.disabled) {
+            event.preventDefault();
+            let data = (event.clipboardData || window['clipboardData']).getData('Text');
+            if (data) {
+                let filteredData = this.parseValue(data);
+                if (filteredData != null) {
+                    this.insert(event, filteredData.toString());
+                }
+            }
+        }
+    }
+    allowMinusSign() {
+        return this.min == null || this.min < 0;
+    }
+    isMinusSign(char) {
+        if (this._minusSign.test(char) || char === '-') {
+            this._minusSign.lastIndex = 0;
+            return true;
+        }
+        return false;
+    }
+    isDecimalSign(char) {
+        if (this._decimal.test(char)) {
+            this._decimal.lastIndex = 0;
+            return true;
+        }
+        return false;
+    }
+    isDecimalMode() {
+        return this.mode === 'decimal';
+    }
+    getDecimalCharIndexes(val) {
+        let decimalCharIndex = val.search(this._decimal);
+        this._decimal.lastIndex = 0;
+        const filteredVal = val.replace(this._prefix, '').trim().replace(/\s/g, '').replace(this._currency, '');
+        const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);
+        this._decimal.lastIndex = 0;
+        return { decimalCharIndex, decimalCharIndexWithoutPrefix };
+    }
+    getCharIndexes(val) {
+        const decimalCharIndex = val.search(this._decimal);
+        this._decimal.lastIndex = 0;
+        const minusCharIndex = val.search(this._minusSign);
+        this._minusSign.lastIndex = 0;
+        const suffixCharIndex = val.search(this._suffix);
+        this._suffix.lastIndex = 0;
+        const currencyCharIndex = val.search(this._currency);
+        this._currency.lastIndex = 0;
+        return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };
+    }
+    insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {
+        const minusCharIndexOnText = text.search(this._minusSign);
+        this._minusSign.lastIndex = 0;
+        if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {
+            return;
+        }
+        let selectionStart = this.input.nativeElement.selectionStart;
+        let selectionEnd = this.input.nativeElement.selectionEnd;
+        let inputValue = this.input.nativeElement.value.trim();
+        const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);
+        let newValueStr;
+        if (sign.isMinusSign) {
+            if (selectionStart === 0) {
+                newValueStr = inputValue;
+                if (minusCharIndex === -1 || selectionEnd !== 0) {
+                    newValueStr = this.insertText(inputValue, text, 0, selectionEnd);
+                }
+                this.updateValue(event, newValueStr, text, 'insert');
+            }
+        }
+        else if (sign.isDecimalSign) {
+            if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {
+                this.updateValue(event, inputValue, text, 'insert');
+            }
+            else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {
+                newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);
+                this.updateValue(event, newValueStr, text, 'insert');
+            }
+            else if (decimalCharIndex === -1 && this.maxFractionDigits) {
+                newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);
+                this.updateValue(event, newValueStr, text, 'insert');
+            }
+        }
+        else {
+            const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;
+            const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';
+            if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {
+                if ((selectionStart + text.length - (decimalCharIndex + 1)) <= maxFractionDigits) {
+                    const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : (suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length);
+                    newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);
+                    this.updateValue(event, newValueStr, text, operation);
+                }
+            }
+            else {
+                newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);
+                this.updateValue(event, newValueStr, text, operation);
+            }
+        }
+    }
+    insertText(value, text, start, end) {
+        let textSplit = text === '.' ? text : text.split('.');
+        if (textSplit.length === 2) {
+            const decimalCharIndex = value.slice(start, end).search(this._decimal);
+            this._decimal.lastIndex = 0;
+            return (decimalCharIndex > 0) ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : (value || this.formatValue(text));
+        }
+        else if ((end - start) === value.length) {
+            return this.formatValue(text);
+        }
+        else if (start === 0) {
+            return text + value.slice(end);
+        }
+        else if (end === value.length) {
+            return value.slice(0, start) + text;
+        }
+        else {
+            return value.slice(0, start) + text + value.slice(end);
+        }
+    }
+    deleteRange(value, start, end) {
+        let newValueStr;
+        if ((end - start) === value.length)
+            newValueStr = '';
+        else if (start === 0)
+            newValueStr = value.slice(end);
+        else if (end === value.length)
+            newValueStr = value.slice(0, start);
+        else
+            newValueStr = value.slice(0, start) + value.slice(end);
+        return newValueStr;
+    }
+    initCursor() {
+        let selectionStart = this.input.nativeElement.selectionStart;
+        let inputValue = this.input.nativeElement.value;
+        let valueLength = inputValue.length;
+        let index = null;
+        // remove prefix
+        let prefixLength = (this.prefixChar || '').length;
+        inputValue = inputValue.replace(this._prefix, '');
+        selectionStart = selectionStart - prefixLength;
+        let char = inputValue.charAt(selectionStart);
+        if (this.isNumeralChar(char)) {
+            return selectionStart + prefixLength;
+        }
+        //left
+        let i = selectionStart - 1;
+        while (i >= 0) {
+            char = inputValue.charAt(i);
+            if (this.isNumeralChar(char)) {
+                index = i + prefixLength;
+                break;
+            }
+            else {
+                i--;
+            }
+        }
+        if (index !== null) {
+            this.input.nativeElement.setSelectionRange(index + 1, index + 1);
+        }
+        else {
+            i = selectionStart;
+            while (i < valueLength) {
+                char = inputValue.charAt(i);
+                if (this.isNumeralChar(char)) {
+                    index = i + prefixLength;
+                    break;
+                }
+                else {
+                    i++;
+                }
+            }
+            if (index !== null) {
+                this.input.nativeElement.setSelectionRange(index, index);
+            }
+        }
+        return index || 0;
+    }
+    onInputClick() {
+        this.initCursor();
+    }
+    isNumeralChar(char) {
+        if (char.length === 1 && (this._numeral.test(char) || this._decimal.test(char) || this._group.test(char) || this._minusSign.test(char))) {
+            this.resetRegex();
+            return true;
+        }
+        return false;
+    }
+    resetRegex() {
+        this._numeral.lastIndex = 0;
+        this._decimal.lastIndex = 0;
+        this._group.lastIndex = 0;
+        this._minusSign.lastIndex = 0;
+    }
+    updateValue(event, valueStr, insertedValueStr, operation) {
+        let currentValue = this.input.nativeElement.value;
+        let newValue = null;
+        if (valueStr != null) {
+            newValue = this.parseValue(valueStr);
+            newValue = !newValue && !this.allowEmpty ? 0 : newValue;
+            this.updateInput(newValue, insertedValueStr, operation, valueStr);
+            this.handleOnInput(event, currentValue, newValue);
+        }
+    }
+    handleOnInput(event, currentValue, newValue) {
+        if (this.isValueChanged(currentValue, newValue)) {
+            this.onInput.emit({ originalEvent: event, value: newValue });
+        }
+    }
+    isValueChanged(currentValue, newValue) {
+        if (newValue === null && currentValue !== null) {
+            return true;
+        }
+        if (newValue != null) {
+            let parsedCurrentValue = (typeof currentValue === 'string') ? this.parseValue(currentValue) : currentValue;
+            return newValue !== parsedCurrentValue;
+        }
+        return false;
+    }
+    validateValue(value) {
+        if (value === '-' || value == null) {
+            return null;
+        }
+        if (this.min != null && value < this.min) {
+            return this.min;
+        }
+        if (this.max != null && value > this.max) {
+            return this.max;
+        }
+        return value;
+    }
+    updateInput(value, insertedValueStr, operation, valueStr) {
+        insertedValueStr = insertedValueStr || '';
+        let inputValue = this.input.nativeElement.value;
+        let newValue = this.formatValue(value);
+        let currentLength = inputValue.length;
+        if (newValue !== valueStr) {
+            newValue = this.concatValues(newValue, valueStr);
+        }
+        if (currentLength === 0) {
+            this.input.nativeElement.value = newValue;
+            this.input.nativeElement.setSelectionRange(0, 0);
+            const index = this.initCursor();
+            const selectionEnd = index + insertedValueStr.length;
+            this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);
+        }
+        else {
+            let selectionStart = this.input.nativeElement.selectionStart;
+            let selectionEnd = this.input.nativeElement.selectionEnd;
+            if (this.maxlength && this.maxlength < newValue.length) {
+                return;
+            }
+            this.input.nativeElement.value = newValue;
+            let newLength = newValue.length;
+            if (operation === 'range-insert') {
+                const startValue = this.parseValue((inputValue || '').slice(0, selectionStart));
+                const startValueStr = startValue !== null ? startValue.toString() : '';
+                const startExpr = startValueStr.split('').join(`(${this.groupChar})?`);
+                const sRegex = new RegExp(startExpr, 'g');
+                sRegex.test(newValue);
+                const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);
+                const tRegex = new RegExp(tExpr, 'g');
+                tRegex.test(newValue.slice(sRegex.lastIndex));
+                selectionEnd = sRegex.lastIndex + tRegex.lastIndex;
+                this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);
+            }
+            else if (newLength === currentLength) {
+                if (operation === 'insert' || operation === 'delete-back-single')
+                    this.input.nativeElement.setSelectionRange(selectionEnd + 1, selectionEnd + 1);
+                else if (operation === 'delete-single')
+                    this.input.nativeElement.setSelectionRange(selectionEnd - 1, selectionEnd - 1);
+                else if (operation === 'delete-range' || operation === 'spin')
+                    this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);
+            }
+            else if (operation === 'delete-back-single') {
+                let prevChar = inputValue.charAt(selectionEnd - 1);
+                let nextChar = inputValue.charAt(selectionEnd);
+                let diff = currentLength - newLength;
+                let isGroupChar = this._group.test(nextChar);
+                if (isGroupChar && diff === 1) {
+                    selectionEnd += 1;
+                }
+                else if (!isGroupChar && this.isNumeralChar(prevChar)) {
+                    selectionEnd += (-1 * diff) + 1;
+                }
+                this._group.lastIndex = 0;
+                this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);
+            }
+            else if (inputValue === '-' && operation === 'insert') {
+                this.input.nativeElement.setSelectionRange(0, 0);
+                const index = this.initCursor();
+                const selectionEnd = index + insertedValueStr.length + 1;
+                this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);
+            }
+            else {
+                selectionEnd = selectionEnd + (newLength - currentLength);
+                this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);
+            }
+        }
+        this.input.nativeElement.setAttribute('aria-valuenow', value);
+    }
+    concatValues(val1, val2) {
+        if (val1 && val2) {
+            let decimalCharIndex = val2.search(this._decimal);
+            this._decimal.lastIndex = 0;
+            return decimalCharIndex !== -1 ? (val1.split(this._decimal)[0] + val2.slice(decimalCharIndex)) : val1;
+        }
+        return val1;
+    }
+    getDecimalLength(value) {
+        if (value) {
+            const valueSplit = value.split(this._decimal);
+            if (valueSplit.length === 2) {
+                return valueSplit[1].replace(this._suffix, '')
+                    .trim()
+                    .replace(/\s/g, '')
+                    .replace(this._currency, '').length;
+            }
+        }
+        return 0;
+    }
+    onInputFocus(event) {
+        this.focused = true;
+        this.onFocus.emit(event);
+    }
+    onInputBlur(event) {
+        this.focused = false;
+        let newValue = this.validateValue(this.parseValue(this.input.nativeElement.value));
+        this.input.nativeElement.value = this.formatValue(newValue);
+        this.input.nativeElement.setAttribute('aria-valuenow', newValue);
+        this.updateModel(event, newValue);
+        this.onBlur.emit(event);
+    }
+    formattedValue() {
+        const val = !this.value && !this.allowEmpty ? 0 : this.value;
+        return this.formatValue(val);
+    }
+    updateModel(event, value) {
+        if (this.value !== value) {
+            this.value = value;
+            this.onModelChange(value);
+        }
+        this.onModelTouched();
+    }
+    writeValue(value) {
+        this.value = value;
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    get filled() {
+        return (this.value != null && this.value.toString().length > 0);
+    }
+    clearTimer() {
+        if (this.timer) {
+            clearInterval(this.timer);
+        }
+    }
+    getFormatter() {
+        return this.numberFormat;
+    }
+}
+InputNumber.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputNumber, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+InputNumber.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: InputNumber, selector: "p-inputNumber", inputs: { showButtons: "showButtons", format: "format", buttonLayout: "buttonLayout", inputId: "inputId", styleClass: "styleClass", style: "style", placeholder: "placeholder", size: "size", maxlength: "maxlength", tabindex: "tabindex", title: "title", ariaLabel: "ariaLabel", ariaRequired: "ariaRequired", name: "name", required: "required", autocomplete: "autocomplete", min: "min", max: "max", incrementButtonClass: "incrementButtonClass", decrementButtonClass: "decrementButtonClass", incrementButtonIcon: "incrementButtonIcon", decrementButtonIcon: "decrementButtonIcon", readonly: "readonly", step: "step", allowEmpty: "allowEmpty", locale: "locale", localeMatcher: "localeMatcher", mode: "mode", currency: "currency", currencyDisplay: "currencyDisplay", useGrouping: "useGrouping", minFractionDigits: "minFractionDigits", maxFractionDigits: "maxFractionDigits", prefix: "prefix", suffix: "suffix", inputStyle: "inputStyle", inputStyleClass: "inputStyleClass", disabled: "disabled" }, outputs: { onInput: "onInput", onFocus: "onFocus", onBlur: "onBlur", onKeyDown: "onKeyDown" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "focused" }, classAttribute: "p-element p-inputwrapper" }, providers: [INPUTNUMBER_VALUE_ACCESSOR], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
+        <span [ngClass]="{'p-inputnumber p-component': true,'p-inputnumber-buttons-stacked': this.showButtons && this.buttonLayout === 'stacked',
+                'p-inputnumber-buttons-horizontal': this.showButtons && this.buttonLayout === 'horizontal', 'p-inputnumber-buttons-vertical': this.showButtons && this.buttonLayout === 'vertical'}"
+                [ngStyle]="style" [class]="styleClass">
+            <input #input [ngClass]="'p-inputnumber-input'" [ngStyle]="inputStyle" [class]="inputStyleClass" pInputText [value]="formattedValue()" [attr.placeholder]="placeholder" [attr.title]="title" [attr.id]="inputId"
+                [attr.size]="size" [attr.name]="name" [attr.autocomplete]="autocomplete" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [attr.aria-label]="ariaLabel"
+                [attr.aria-required]="ariaRequired" [disabled]="disabled" [attr.required]="required" [attr.aria-valuemin]="min" [attr.aria-valuemax]="max" [readonly]="readonly" inputmode="decimal"
+                (input)="onUserInput($event)" (keydown)="onInputKeyDown($event)" (keypress)="onInputKeyPress($event)" (paste)="onPaste($event)" (click)="onInputClick()"
+                (focus)="onInputFocus($event)" (blur)="onInputBlur($event)">
+            <span class="p-inputnumber-button-group" *ngIf="showButtons && buttonLayout === 'stacked'">
+                <button type="button" pButton [ngClass]="{'p-inputnumber-button p-inputnumber-button-up': true}" [class]="incrementButtonClass" [icon]="incrementButtonIcon" [disabled]="disabled"
+                    (mousedown)="this.onUpButtonMouseDown($event)" (mouseup)="onUpButtonMouseUp()" (mouseleave)="onUpButtonMouseLeave()" (keydown)="onUpButtonKeyDown($event)" (keyup)="onUpButtonKeyUp()"></button>
+                <button type="button" pButton [ngClass]="{'p-inputnumber-button p-inputnumber-button-down': true}" [class]="decrementButtonClass" [icon]="decrementButtonIcon" [disabled]="disabled"
+                    (mousedown)="this.onDownButtonMouseDown($event)" (mouseup)="onDownButtonMouseUp()" (mouseleave)="onDownButtonMouseLeave()" (keydown)="onDownButtonKeyDown($event)" (keyup)="onDownButtonKeyUp()"></button>
+            </span>
+            <button type="button" pButton [ngClass]="{'p-inputnumber-button p-inputnumber-button-up': true}" [class]="incrementButtonClass" [icon]="incrementButtonIcon" *ngIf="showButtons && buttonLayout !== 'stacked'" [disabled]="disabled"
+                (mousedown)="this.onUpButtonMouseDown($event)" (mouseup)="onUpButtonMouseUp()" (mouseleave)="onUpButtonMouseLeave()" (keydown)="onUpButtonKeyDown($event)" (keyup)="onUpButtonKeyUp()"></button>
+            <button type="button" pButton [ngClass]="{'p-inputnumber-button p-inputnumber-button-down': true}" [class]="decrementButtonClass" [icon]="decrementButtonIcon" *ngIf="showButtons && buttonLayout !== 'stacked'" [disabled]="disabled"
+                (mousedown)="this.onDownButtonMouseDown($event)" (mouseup)="onDownButtonMouseUp()" (mouseleave)="onDownButtonMouseLeave()" (keydown)="onDownButtonKeyDown($event)" (keyup)="onDownButtonKeyUp()"></button>
+        </span>
+    `, isInline: true, styles: ["p-inputnumber,.p-inputnumber{display:inline-flex}.p-inputnumber-button{display:flex;align-items:center;justify-content:center;flex:0 0 auto}.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button .p-button-label,.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button .p-button-label{display:none}.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-up{border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0;padding:0}.p-inputnumber-buttons-stacked .p-inputnumber-input{border-top-right-radius:0;border-bottom-right-radius:0}.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-down{border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:0;padding:0}.p-inputnumber-buttons-stacked .p-inputnumber-button-group{display:flex;flex-direction:column}.p-inputnumber-buttons-stacked .p-inputnumber-button-group .p-button.p-inputnumber-button{flex:1 1 auto}.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{order:3;border-top-left-radius:0;border-bottom-left-radius:0}.p-inputnumber-buttons-horizontal .p-inputnumber-input{order:2;border-radius:0}.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{order:1;border-top-right-radius:0;border-bottom-right-radius:0}.p-inputnumber-buttons-vertical{flex-direction:column}.p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-up{order:1;border-bottom-left-radius:0;border-bottom-right-radius:0;width:100%}.p-inputnumber-buttons-vertical .p-inputnumber-input{order:2;border-radius:0;text-align:center}.p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-down{order:3;border-top-left-radius:0;border-top-right-radius:0;width:100%}.p-inputnumber-input{flex:1 1 auto}.p-fluid p-inputnumber,.p-fluid .p-inputnumber{width:100%}.p-fluid .p-inputnumber .p-inputnumber-input{width:1%}.p-fluid .p-inputnumber-buttons-vertical .p-inputnumber-input{width:100%}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.InputText, selector: "[pInputText]" }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputNumber, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-inputNumber', template: `
+        <span [ngClass]="{'p-inputnumber p-component': true,'p-inputnumber-buttons-stacked': this.showButtons && this.buttonLayout === 'stacked',
+                'p-inputnumber-buttons-horizontal': this.showButtons && this.buttonLayout === 'horizontal', 'p-inputnumber-buttons-vertical': this.showButtons && this.buttonLayout === 'vertical'}"
+                [ngStyle]="style" [class]="styleClass">
+            <input #input [ngClass]="'p-inputnumber-input'" [ngStyle]="inputStyle" [class]="inputStyleClass" pInputText [value]="formattedValue()" [attr.placeholder]="placeholder" [attr.title]="title" [attr.id]="inputId"
+                [attr.size]="size" [attr.name]="name" [attr.autocomplete]="autocomplete" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [attr.aria-label]="ariaLabel"
+                [attr.aria-required]="ariaRequired" [disabled]="disabled" [attr.required]="required" [attr.aria-valuemin]="min" [attr.aria-valuemax]="max" [readonly]="readonly" inputmode="decimal"
+                (input)="onUserInput($event)" (keydown)="onInputKeyDown($event)" (keypress)="onInputKeyPress($event)" (paste)="onPaste($event)" (click)="onInputClick()"
+                (focus)="onInputFocus($event)" (blur)="onInputBlur($event)">
+            <span class="p-inputnumber-button-group" *ngIf="showButtons && buttonLayout === 'stacked'">
+                <button type="button" pButton [ngClass]="{'p-inputnumber-button p-inputnumber-button-up': true}" [class]="incrementButtonClass" [icon]="incrementButtonIcon" [disabled]="disabled"
+                    (mousedown)="this.onUpButtonMouseDown($event)" (mouseup)="onUpButtonMouseUp()" (mouseleave)="onUpButtonMouseLeave()" (keydown)="onUpButtonKeyDown($event)" (keyup)="onUpButtonKeyUp()"></button>
+                <button type="button" pButton [ngClass]="{'p-inputnumber-button p-inputnumber-button-down': true}" [class]="decrementButtonClass" [icon]="decrementButtonIcon" [disabled]="disabled"
+                    (mousedown)="this.onDownButtonMouseDown($event)" (mouseup)="onDownButtonMouseUp()" (mouseleave)="onDownButtonMouseLeave()" (keydown)="onDownButtonKeyDown($event)" (keyup)="onDownButtonKeyUp()"></button>
+            </span>
+            <button type="button" pButton [ngClass]="{'p-inputnumber-button p-inputnumber-button-up': true}" [class]="incrementButtonClass" [icon]="incrementButtonIcon" *ngIf="showButtons && buttonLayout !== 'stacked'" [disabled]="disabled"
+                (mousedown)="this.onUpButtonMouseDown($event)" (mouseup)="onUpButtonMouseUp()" (mouseleave)="onUpButtonMouseLeave()" (keydown)="onUpButtonKeyDown($event)" (keyup)="onUpButtonKeyUp()"></button>
+            <button type="button" pButton [ngClass]="{'p-inputnumber-button p-inputnumber-button-down': true}" [class]="decrementButtonClass" [icon]="decrementButtonIcon" *ngIf="showButtons && buttonLayout !== 'stacked'" [disabled]="disabled"
+                (mousedown)="this.onDownButtonMouseDown($event)" (mouseup)="onDownButtonMouseUp()" (mouseleave)="onDownButtonMouseLeave()" (keydown)="onDownButtonKeyDown($event)" (keyup)="onDownButtonKeyUp()"></button>
+        </span>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, providers: [INPUTNUMBER_VALUE_ACCESSOR], encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': 'filled',
+                        '[class.p-inputwrapper-focus]': 'focused'
+                    }, styles: ["p-inputnumber,.p-inputnumber{display:inline-flex}.p-inputnumber-button{display:flex;align-items:center;justify-content:center;flex:0 0 auto}.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button .p-button-label,.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button .p-button-label{display:none}.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-up{border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0;padding:0}.p-inputnumber-buttons-stacked .p-inputnumber-input{border-top-right-radius:0;border-bottom-right-radius:0}.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-down{border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:0;padding:0}.p-inputnumber-buttons-stacked .p-inputnumber-button-group{display:flex;flex-direction:column}.p-inputnumber-buttons-stacked .p-inputnumber-button-group .p-button.p-inputnumber-button{flex:1 1 auto}.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{order:3;border-top-left-radius:0;border-bottom-left-radius:0}.p-inputnumber-buttons-horizontal .p-inputnumber-input{order:2;border-radius:0}.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{order:1;border-top-right-radius:0;border-bottom-right-radius:0}.p-inputnumber-buttons-vertical{flex-direction:column}.p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-up{order:1;border-bottom-left-radius:0;border-bottom-right-radius:0;width:100%}.p-inputnumber-buttons-vertical .p-inputnumber-input{order:2;border-radius:0;text-align:center}.p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-down{order:3;border-top-left-radius:0;border-top-right-radius:0;width:100%}.p-inputnumber-input{flex:1 1 auto}.p-fluid p-inputnumber,.p-fluid .p-inputnumber{width:100%}.p-fluid .p-inputnumber .p-inputnumber-input{width:1%}.p-fluid .p-inputnumber-buttons-vertical .p-inputnumber-input{width:100%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { showButtons: [{
+                type: Input
+            }], format: [{
+                type: Input
+            }], buttonLayout: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], maxlength: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], title: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }], ariaRequired: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], required: [{
+                type: Input
+            }], autocomplete: [{
+                type: Input
+            }], min: [{
+                type: Input
+            }], max: [{
+                type: Input
+            }], incrementButtonClass: [{
+                type: Input
+            }], decrementButtonClass: [{
+                type: Input
+            }], incrementButtonIcon: [{
+                type: Input
+            }], decrementButtonIcon: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], step: [{
+                type: Input
+            }], allowEmpty: [{
+                type: Input
+            }], locale: [{
+                type: Input
+            }], localeMatcher: [{
+                type: Input
+            }], mode: [{
+                type: Input
+            }], currency: [{
+                type: Input
+            }], currencyDisplay: [{
+                type: Input
+            }], useGrouping: [{
+                type: Input
+            }], minFractionDigits: [{
+                type: Input
+            }], maxFractionDigits: [{
+                type: Input
+            }], prefix: [{
+                type: Input
+            }], suffix: [{
+                type: Input
+            }], inputStyle: [{
+                type: Input
+            }], inputStyleClass: [{
+                type: Input
+            }], input: [{
+                type: ViewChild,
+                args: ['input']
+            }], onInput: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], onKeyDown: [{
+                type: Output
+            }], disabled: [{
+                type: Input
+            }] } });
+class InputNumberModule {
+}
+InputNumberModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputNumberModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+InputNumberModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputNumberModule, declarations: [InputNumber], imports: [CommonModule, InputTextModule, ButtonModule], exports: [InputNumber] });
+InputNumberModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputNumberModule, imports: [[CommonModule, InputTextModule, ButtonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputNumberModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, InputTextModule, ButtonModule],
+                    exports: [InputNumber],
+                    declarations: [InputNumber]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { INPUTNUMBER_VALUE_ACCESSOR, InputNumber, InputNumberModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputnumber.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputnumber.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputnumber.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-inputnumber.mjs","sources":["../../src/app/components/inputnumber/inputnumber.ts","../../src/app/components/inputnumber/primeng-inputnumber.ts"],"sourcesContent":["\nimport {NgModule,Component,ChangeDetectionStrategy, Input, ElementRef, ViewChild, OnInit, EventEmitter, Output, forwardRef, ViewEncapsulation, ChangeDetectorRef, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {InputTextModule} from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\nexport const INPUTNUMBER_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => InputNumber),\n    multi: true\n};\n@Component({\n    selector: 'p-inputNumber',\n    template: `\n        <span [ngClass]=\"{'p-inputnumber p-component': true,'p-inputnumber-buttons-stacked': this.showButtons && this.buttonLayout === 'stacked',\n                'p-inputnumber-buttons-horizontal': this.showButtons && this.buttonLayout === 'horizontal', 'p-inputnumber-buttons-vertical': this.showButtons && this.buttonLayout === 'vertical'}\"\n                [ngStyle]=\"style\" [class]=\"styleClass\">\n            <input #input [ngClass]=\"'p-inputnumber-input'\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" pInputText [value]=\"formattedValue()\" [attr.placeholder]=\"placeholder\" [attr.title]=\"title\" [attr.id]=\"inputId\"\n                [attr.size]=\"size\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [attr.maxlength]=\"maxlength\" [attr.tabindex]=\"tabindex\" [attr.aria-label]=\"ariaLabel\"\n                [attr.aria-required]=\"ariaRequired\" [disabled]=\"disabled\" [attr.required]=\"required\" [attr.aria-valuemin]=\"min\" [attr.aria-valuemax]=\"max\" [readonly]=\"readonly\" inputmode=\"decimal\"\n                (input)=\"onUserInput($event)\" (keydown)=\"onInputKeyDown($event)\" (keypress)=\"onInputKeyPress($event)\" (paste)=\"onPaste($event)\" (click)=\"onInputClick()\"\n                (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\">\n            <span class=\"p-inputnumber-button-group\" *ngIf=\"showButtons && buttonLayout === 'stacked'\">\n                <button type=\"button\" pButton [ngClass]=\"{'p-inputnumber-button p-inputnumber-button-up': true}\" [class]=\"incrementButtonClass\" [icon]=\"incrementButtonIcon\" [disabled]=\"disabled\"\n                    (mousedown)=\"this.onUpButtonMouseDown($event)\" (mouseup)=\"onUpButtonMouseUp()\" (mouseleave)=\"onUpButtonMouseLeave()\" (keydown)=\"onUpButtonKeyDown($event)\" (keyup)=\"onUpButtonKeyUp()\"></button>\n                <button type=\"button\" pButton [ngClass]=\"{'p-inputnumber-button p-inputnumber-button-down': true}\" [class]=\"decrementButtonClass\" [icon]=\"decrementButtonIcon\" [disabled]=\"disabled\"\n                    (mousedown)=\"this.onDownButtonMouseDown($event)\" (mouseup)=\"onDownButtonMouseUp()\" (mouseleave)=\"onDownButtonMouseLeave()\" (keydown)=\"onDownButtonKeyDown($event)\" (keyup)=\"onDownButtonKeyUp()\"></button>\n            </span>\n            <button type=\"button\" pButton [ngClass]=\"{'p-inputnumber-button p-inputnumber-button-up': true}\" [class]=\"incrementButtonClass\" [icon]=\"incrementButtonIcon\" *ngIf=\"showButtons && buttonLayout !== 'stacked'\" [disabled]=\"disabled\"\n                (mousedown)=\"this.onUpButtonMouseDown($event)\" (mouseup)=\"onUpButtonMouseUp()\" (mouseleave)=\"onUpButtonMouseLeave()\" (keydown)=\"onUpButtonKeyDown($event)\" (keyup)=\"onUpButtonKeyUp()\"></button>\n            <button type=\"button\" pButton [ngClass]=\"{'p-inputnumber-button p-inputnumber-button-down': true}\" [class]=\"decrementButtonClass\" [icon]=\"decrementButtonIcon\" *ngIf=\"showButtons && buttonLayout !== 'stacked'\" [disabled]=\"disabled\"\n                (mousedown)=\"this.onDownButtonMouseDown($event)\" (mouseup)=\"onDownButtonMouseUp()\" (mouseleave)=\"onDownButtonMouseLeave()\" (keydown)=\"onDownButtonKeyDown($event)\" (keyup)=\"onDownButtonKeyUp()\"></button>\n        </span>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [INPUTNUMBER_VALUE_ACCESSOR],\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./inputnumber.css'],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focused'\n    }\n})\nexport class InputNumber implements OnInit,ControlValueAccessor {\n\n    @Input() showButtons: boolean = false;\n\n    @Input() format: boolean = true;\n\n    @Input() buttonLayout: string = \"stacked\";\n\n    @Input() inputId: string;\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() placeholder: string;\n\n    @Input() size: number;\n\n    @Input() maxlength: number;\n\n    @Input() tabindex: string;\n\n    @Input() title: string;\n\n    @Input() ariaLabel: string;\n\n    @Input() ariaRequired: boolean;\n\n    @Input() name: string;\n\n    @Input() required: boolean;\n\n    @Input() autocomplete: string;\n\n    @Input() min: number;\n\n    @Input() max: number;\n\n    @Input() incrementButtonClass: string;\n\n    @Input() decrementButtonClass: string;\n\n    @Input() incrementButtonIcon: string = 'pi pi-angle-up';\n\n    @Input() decrementButtonIcon: string = 'pi pi-angle-down';\n\n    @Input() readonly: boolean = false;\n\n    @Input() step: number = 1;\n\n    @Input() allowEmpty: boolean = true;\n\n    @Input() locale: string;\n\n    @Input() localeMatcher: string;\n\n    @Input() mode: string = \"decimal\";\n\n    @Input() currency: string;\n\n    @Input() currencyDisplay: string;\n\n    @Input() useGrouping: boolean = true;\n\n    @Input() minFractionDigits: number;\n\n    @Input() maxFractionDigits: number;\n\n    @Input() prefix: string;\n\n    @Input() suffix: string;\n\n    @Input() inputStyle: any;\n\n    @Input() inputStyleClass: string;\n\n    @ViewChild('input') input: ElementRef;\n\n    @Output() onInput: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onKeyDown: EventEmitter<any> = new EventEmitter();\n\n    value: number;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    focused: boolean;\n\n    initialized: boolean;\n\n    groupChar: string = '';\n\n    prefixChar: string = '';\n\n    suffixChar: string = '';\n\n    isSpecialChar: boolean;\n\n    timer: any;\n\n    lastValue: string;\n\n    _numeral: any;\n\n    numberFormat: any;\n\n    _decimal: any;\n\n    _group: any;\n\n    _minusSign: any;\n\n    _currency: any;\n\n    _prefix: any;\n\n    _suffix: any;\n\n    _index: any;\n\n    _disabled: boolean;\n\n    @Input() get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(disabled: boolean) {\n        if (disabled)\n            this.focused = false;\n\n        this._disabled = disabled;\n\n        if (this.timer)\n            this.clearTimer();\n    }\n\n    constructor(public el: ElementRef, private cd: ChangeDetectorRef) { }\n\n    ngOnChanges(simpleChange: SimpleChanges) {\n        const props = ['locale', 'localeMatcher', 'mode', 'currency', 'currencyDisplay', 'useGrouping', 'minFractionDigits', 'maxFractionDigits', 'prefix', 'suffix'];\n        if (props.some(p => !!simpleChange[p])) {\n            this.updateConstructParser();\n        }\n    }\n\n    ngOnInit() {\n        this.constructParser();\n\n        this.initialized = true;\n    }\n\n    getOptions() {\n        return {\n            localeMatcher: this.localeMatcher,\n            style: this.mode,\n            currency: this.currency,\n            currencyDisplay: this.currencyDisplay,\n            useGrouping: this.useGrouping,\n            minimumFractionDigits: this.minFractionDigits,\n            maximumFractionDigits: this.maxFractionDigits\n        };\n    }\n\n    constructParser() {\n        this.numberFormat = new Intl.NumberFormat(this.locale, this.getOptions());\n        const numerals = [...new Intl.NumberFormat(this.locale, {useGrouping: false}).format(9876543210)].reverse();\n        const index = new Map(numerals.map((d, i) => [d, i]));\n        this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n        this._group = this.getGroupingExpression();\n        this._minusSign = this.getMinusSignExpression();\n        this._currency = this.getCurrencyExpression();\n        this._decimal = this.getDecimalExpression();\n        this._suffix = this.getSuffixExpression();\n        this._prefix = this.getPrefixExpression();\n        this._index = d => index.get(d);\n    }\n\n    updateConstructParser() {\n        if (this.initialized) {\n            this.constructParser();\n        }\n    }\n\n    escapeRegExp(text) {\n        return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n    }\n\n    getDecimalExpression() {\n        const formatter = new Intl.NumberFormat(this.locale, {...this.getOptions(), useGrouping: false});\n        return new RegExp(`[${formatter.format(1.1).replace(this._currency, '').trim().replace(this._numeral, '')}]`, 'g');\n    }\n\n    getGroupingExpression() {\n        const formatter = new Intl.NumberFormat(this.locale, {useGrouping: true});\n        this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n        return new RegExp(`[${this.groupChar}]`, 'g');\n    }\n\n    getMinusSignExpression() {\n        const formatter = new Intl.NumberFormat(this.locale, {useGrouping: false});\n        return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n    }\n\n    getCurrencyExpression() {\n        if (this.currency) {\n            const formatter = new Intl.NumberFormat(this.locale, {style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay,\n                minimumFractionDigits: 0, maximumFractionDigits: 0});\n            return new RegExp(`[${formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._group, '')}]`, 'g');\n        }\n\n        return new RegExp(`[]`,'g');\n    }\n\n    getPrefixExpression() {\n        if (this.prefix) {\n            this.prefixChar = this.prefix;\n        }\n        else {\n            const formatter = new Intl.NumberFormat(this.locale, {style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay});\n            this.prefixChar = formatter.format(1).split('1')[0];\n        }\n\n        return new RegExp(`${this.escapeRegExp(this.prefixChar||'')}`, 'g');\n    }\n\n    getSuffixExpression() {\n        if (this.suffix) {\n            this.suffixChar = this.suffix;\n        }\n        else {\n            const formatter = new Intl.NumberFormat(this.locale, {style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay,\n                minimumFractionDigits: 0, maximumFractionDigits: 0});\n            this.suffixChar = formatter.format(1).split('1')[1];\n        }\n\n        return new RegExp(`${this.escapeRegExp(this.suffixChar||'')}`, 'g');\n    }\n\n    formatValue(value) {\n        if (value != null) {\n            if (value === '-') { // Minus sign\n                return value;\n            }\n\n            if (this.format) {\n                let formatter = new Intl.NumberFormat(this.locale, this.getOptions());\n                let formattedValue = formatter.format(value);\n                if (this.prefix) {\n                    formattedValue = this.prefix + formattedValue;\n                }\n\n                if (this.suffix) {\n                    formattedValue = formattedValue + this.suffix;\n                }\n\n                return formattedValue;\n            }\n\n            return value.toString();\n        }\n\n        return '';\n    }\n\n    parseValue(text) {\n        let filteredText = text\n                            .replace(this._suffix, '')\n                            .replace(this._prefix, '')\n                            .trim()\n                            .replace(/\\s/g, '')\n                            .replace(this._currency, '')\n                            .replace(this._group, '')\n                            .replace(this._minusSign, '-')\n                            .replace(this._decimal, '.')\n                            .replace(this._numeral, this._index);\n\n        if (filteredText) {\n            if (filteredText === '-') // Minus sign\n                return filteredText;\n\n            let parsedValue = +filteredText;\n            return isNaN(parsedValue) ? null : parsedValue;\n        }\n\n        return null;\n    }\n\n    repeat(event, interval, dir) {\n        if (this.readonly) {\n            return;\n        }\n\n        let i = interval || 500;\n\n        this.clearTimer();\n        this.timer = setTimeout(() => {\n            this.repeat(event, 40, dir);\n        }, i);\n\n        this.spin(event, dir);\n    }\n\n    spin(event, dir) {\n        let step = this.step * dir;\n        let currentValue = this.parseValue(this.input.nativeElement.value) || 0;\n        let newValue = this.validateValue(currentValue + step);\n        if (this.maxlength && this.maxlength < this.formatValue(newValue).length) {\n            return;\n        }\n\n        this.updateInput(newValue, null, 'spin', null);\n        this.updateModel(event, newValue);\n\n        this.handleOnInput(event, currentValue, newValue);\n    }\n\n    onUpButtonMouseDown(event) {\n        this.input.nativeElement.focus();\n        this.repeat(event, null, 1);\n        event.preventDefault();\n    }\n\n    onUpButtonMouseUp() {\n        this.clearTimer();\n    }\n\n    onUpButtonMouseLeave() {\n        this.clearTimer();\n    }\n\n    onUpButtonKeyDown(event) {\n        if (event.keyCode === 32 || event.keyCode === 13) {\n            this.repeat(event, null, 1);\n        }\n    }\n\n    onUpButtonKeyUp() {\n        this.clearTimer();\n    }\n\n    onDownButtonMouseDown(event) {\n        this.input.nativeElement.focus();\n        this.repeat(event, null, -1);\n        event.preventDefault();\n    }\n\n    onDownButtonMouseUp() {\n        this.clearTimer();\n    }\n\n    onDownButtonMouseLeave() {\n        this.clearTimer();\n    }\n\n    onDownButtonKeyUp() {\n        this.clearTimer();\n    }\n\n    onDownButtonKeyDown(event) {\n        if (event.keyCode === 32 || event.keyCode === 13) {\n            this.repeat(event, null, -1);\n        }\n    }\n\n    onUserInput(event) {\n        if (this.isSpecialChar) {\n            event.target.value = this.lastValue;\n        }\n        this.isSpecialChar = false;\n    }\n\n    onInputKeyDown(event) {\n        this.lastValue = event.target.value;\n        if (event.shiftKey || event.altKey) {\n            this.isSpecialChar = true;\n            return;\n        }\n\n        let selectionStart = event.target.selectionStart;\n        let selectionEnd = event.target.selectionEnd;\n        let inputValue = event.target.value;\n        let newValueStr = null;\n\n        if (event.altKey) {\n            event.preventDefault();\n        }\n\n        switch (event.which) {\n            //up\n            case 38:\n                this.spin(event, 1);\n                event.preventDefault();\n            break;\n\n            //down\n            case 40:\n                this.spin(event, -1);\n                event.preventDefault();\n            break;\n\n            //left\n            case 37:\n                if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n                    event.preventDefault();\n                }\n            break;\n\n            //right\n            case 39:\n                if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n                    event.preventDefault();\n                }\n            break;\n\n            //enter\n            case 13:\n                newValueStr = this.validateValue(this.parseValue(this.input.nativeElement.value));\n                this.input.nativeElement.value = this.formatValue(newValueStr);\n                this.input.nativeElement.setAttribute('aria-valuenow', newValueStr);\n                this.updateModel(event, newValueStr);\n            break;\n\n            //backspace\n            case 8: {\n                event.preventDefault();\n\n                if (selectionStart === selectionEnd) {\n                    const deleteChar = inputValue.charAt(selectionStart - 1);\n                    const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n                    if (this.isNumeralChar(deleteChar)) {\n                        const decimalLength = this.getDecimalLength(inputValue);\n\n                        if (this._group.test(deleteChar)) {\n                            this._group.lastIndex = 0;\n                            newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n                        }\n                        else if (this._decimal.test(deleteChar)) {\n                            this._decimal.lastIndex = 0;\n\n                            if (decimalLength) {\n                                this.input.nativeElement.setSelectionRange(selectionStart - 1, selectionStart - 1);\n                            }\n                            else {\n                                newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n                            }\n                        }\n                        else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                            const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n                            newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);\n                        }\n                        else if (decimalCharIndexWithoutPrefix === 1) {\n                            newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n                            newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n                        }\n                        else {\n                            newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n                        }\n                    }\n\n                    this.updateValue(event, newValueStr, null, 'delete-single');\n                }\n                else {\n                    newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, null, 'delete-range');\n                }\n\n                break;\n            }\n\n            // del\n            case 46:\n                event.preventDefault();\n\n                if (selectionStart === selectionEnd) {\n                    const deleteChar = inputValue.charAt(selectionStart);\n                    const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n                    if (this.isNumeralChar(deleteChar)) {\n                        const decimalLength = this.getDecimalLength(inputValue);\n\n                        if (this._group.test(deleteChar)) {\n                            this._group.lastIndex = 0;\n                            newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n                        }\n                        else if (this._decimal.test(deleteChar)) {\n                            this._decimal.lastIndex = 0;\n\n                            if (decimalLength) {\n                                this.input.nativeElement.setSelectionRange(selectionStart + 1, selectionStart + 1);\n                            }\n                            else {\n                                newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n                            }\n                        }\n                        else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                            const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n                            newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1);\n                        }\n                        else if (decimalCharIndexWithoutPrefix === 1) {\n                            newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n                            newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n                        }\n                        else {\n                            newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n                        }\n                    }\n\n                    this.updateValue(event, newValueStr, null, 'delete-back-single');\n                }\n                else {\n                    newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, null, 'delete-range');\n                }\n            break;\n\n            default:\n            break;\n        }\n\n        this.onKeyDown.emit(event);\n    }\n\n    onInputKeyPress(event) {\n        event.preventDefault();\n        let code = event.which || event.keyCode;\n        let char = String.fromCharCode(code);\n        const isDecimalSign = this.isDecimalSign(char);\n        const isMinusSign = this.isMinusSign(char);\n\n        if ((48 <= code && code <= 57) || isMinusSign || isDecimalSign) {\n            this.insert(event, char, { isDecimalSign, isMinusSign });\n        }\n    }\n\n    onPaste(event) {\n        if (!this.disabled) {\n            event.preventDefault();\n            let data = (event.clipboardData || window['clipboardData']).getData('Text');\n            if (data) {\n                let filteredData = this.parseValue(data);\n                if (filteredData != null) {\n                    this.insert(event, filteredData.toString());\n                }\n            }\n        }\n    }\n\n    allowMinusSign() {\n        return this.min == null || this.min < 0;\n    }\n\n    isMinusSign(char) {\n        if (this._minusSign.test(char) || char === '-') {\n            this._minusSign.lastIndex = 0;\n            return true;\n        }\n\n        return false;\n    }\n\n    isDecimalSign(char) {\n        if (this._decimal.test(char)) {\n            this._decimal.lastIndex = 0;\n            return true;\n        }\n\n        return false;\n    }\n\n    isDecimalMode() {\n        return this.mode === 'decimal';\n    }\n\n    getDecimalCharIndexes(val) {\n        let decimalCharIndex = val.search(this._decimal);\n        this._decimal.lastIndex = 0;\n\n        const filteredVal = val.replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '');\n        const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n        this._decimal.lastIndex = 0;\n\n        return { decimalCharIndex, decimalCharIndexWithoutPrefix };\n    }\n\n    getCharIndexes(val) {\n        const decimalCharIndex = val.search(this._decimal);\n        this._decimal.lastIndex = 0;\n        const minusCharIndex = val.search(this._minusSign);\n        this._minusSign.lastIndex = 0;\n        const suffixCharIndex = val.search(this._suffix);\n        this._suffix.lastIndex = 0;\n        const currencyCharIndex = val.search(this._currency);\n        this._currency.lastIndex = 0;\n\n        return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };\n    }\n\n    insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {\n        const minusCharIndexOnText = text.search(this._minusSign);\n        this._minusSign.lastIndex = 0;\n        if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n            return;\n        }\n\n        let selectionStart = this.input.nativeElement.selectionStart;\n        let selectionEnd = this.input.nativeElement.selectionEnd;\n        let inputValue = this.input.nativeElement.value.trim();\n        const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);\n        let newValueStr;\n\n        if (sign.isMinusSign) {\n            if (selectionStart === 0) {\n                newValueStr = inputValue;\n                if (minusCharIndex === -1 || selectionEnd !== 0) {\n                    newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n                }\n\n                this.updateValue(event, newValueStr, text, 'insert');\n            }\n        }\n        else if (sign.isDecimalSign) {\n            if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n                this.updateValue(event, inputValue, text, 'insert');\n            }\n            else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n                newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                this.updateValue(event, newValueStr, text, 'insert');\n            }\n            else if (decimalCharIndex === -1 && this.maxFractionDigits) {\n                newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                this.updateValue(event, newValueStr, text, 'insert');\n            }\n        }\n        else {\n            const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n            const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n\n            if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                if ((selectionStart + text.length - (decimalCharIndex + 1)) <= maxFractionDigits) {\n                    const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : (suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length);\n\n                    newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);\n                    this.updateValue(event, newValueStr, text, operation);\n                }\n            }\n            else {\n                newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                this.updateValue(event, newValueStr, text, operation);\n            }\n        }\n    }\n\n    insertText(value, text, start, end) {\n        let textSplit = text === '.' ? text : text.split('.');\n\n        if (textSplit.length === 2) {\n            const decimalCharIndex = value.slice(start, end).search(this._decimal);\n            this._decimal.lastIndex = 0;\n            return (decimalCharIndex > 0) ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : (value || this.formatValue(text));\n        }\n        else if ((end - start) === value.length) {\n            return this.formatValue(text);\n        }\n        else if (start === 0) {\n            return text + value.slice(end);\n        }\n        else if (end === value.length) {\n            return value.slice(0, start) + text;\n        }\n        else {\n            return value.slice(0, start) + text + value.slice(end);\n        }\n    }\n\n    deleteRange(value, start, end) {\n        let newValueStr;\n\n        if ((end - start) === value.length)\n            newValueStr = '';\n        else if (start === 0)\n            newValueStr = value.slice(end);\n        else if (end === value.length)\n            newValueStr = value.slice(0, start);\n        else\n            newValueStr = value.slice(0, start) + value.slice(end);\n\n        return newValueStr;\n    }\n\n    initCursor() {\n        let selectionStart = this.input.nativeElement.selectionStart;\n        let inputValue = this.input.nativeElement.value;\n        let valueLength = inputValue.length;\n        let index = null;\n\n        // remove prefix\n        let prefixLength = (this.prefixChar || '').length;\n        inputValue = inputValue.replace(this._prefix, '');\n        selectionStart = selectionStart - prefixLength;\n\n        let char = inputValue.charAt(selectionStart);\n        if (this.isNumeralChar(char)) {\n            return selectionStart + prefixLength;\n        }\n\n        //left\n        let i = selectionStart - 1;\n        while (i >= 0) {\n            char = inputValue.charAt(i);\n            if (this.isNumeralChar(char)) {\n                index = i + prefixLength;\n                break;\n            }\n            else {\n                i--;\n            }\n        }\n\n        if (index !== null) {\n            this.input.nativeElement.setSelectionRange(index + 1, index + 1);\n        }\n        else {\n            i = selectionStart;\n            while (i < valueLength) {\n                char = inputValue.charAt(i);\n                if (this.isNumeralChar(char)) {\n                    index = i + prefixLength;\n                    break;\n                }\n                else {\n                    i++;\n                }\n            }\n\n            if (index !== null) {\n                this.input.nativeElement.setSelectionRange(index, index);\n            }\n        }\n\n        return index || 0;\n    }\n\n    onInputClick() {\n        this.initCursor();\n    }\n\n    isNumeralChar(char) {\n        if (char.length === 1 && (this._numeral.test(char) || this._decimal.test(char) || this._group.test(char) || this._minusSign.test(char))) {\n            this.resetRegex();\n            return true;\n        }\n\n        return false;\n    }\n\n    resetRegex() {\n        this._numeral.lastIndex =  0;\n        this._decimal.lastIndex =  0;\n        this._group.lastIndex =  0;\n        this._minusSign.lastIndex =  0;\n    }\n\n    updateValue(event, valueStr, insertedValueStr, operation) {\n        let currentValue = this.input.nativeElement.value;\n        let newValue = null;\n\n        if (valueStr != null) {\n            newValue = this.parseValue(valueStr);\n            newValue = !newValue && !this.allowEmpty ? 0 : newValue;\n            this.updateInput(newValue, insertedValueStr, operation, valueStr);\n\n            this.handleOnInput(event, currentValue, newValue);\n        }\n    }\n\n    handleOnInput(event, currentValue, newValue) {\n        if (this.isValueChanged(currentValue, newValue)) {\n            this.onInput.emit({ originalEvent: event, value: newValue });\n        }\n    }\n\n    isValueChanged(currentValue, newValue) {\n        if (newValue === null && currentValue !== null) {\n            return true;\n        }\n\n        if (newValue != null) {\n            let parsedCurrentValue = (typeof currentValue === 'string') ? this.parseValue(currentValue) : currentValue;\n            return newValue !== parsedCurrentValue;\n        }\n\n        return false;\n    }\n\n    validateValue(value) {\n        if (value === '-' || value == null) {\n            return null;\n        }\n\n        if (this.min != null && value < this.min) {\n            return this.min;\n        }\n\n        if (this.max != null && value > this.max) {\n            return this.max;\n        }\n\n        return value;\n    }\n\n    updateInput(value, insertedValueStr, operation, valueStr) {\n        insertedValueStr = insertedValueStr || '';\n\n        let inputValue = this.input.nativeElement.value;\n        let newValue = this.formatValue(value);\n        let currentLength = inputValue.length;\n\n        if (newValue !== valueStr) {\n            newValue = this.concatValues(newValue, valueStr);\n        }\n\n        if (currentLength === 0) {\n            this.input.nativeElement.value = newValue;\n            this.input.nativeElement.setSelectionRange(0, 0);\n            const index = this.initCursor();\n            const selectionEnd = index + insertedValueStr.length;\n            this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n        }\n        else {\n            let selectionStart = this.input.nativeElement.selectionStart;\n            let selectionEnd = this.input.nativeElement.selectionEnd;\n            if (this.maxlength && this.maxlength < newValue.length) {\n                return;\n            }\n\n            this.input.nativeElement.value = newValue;\n            let newLength = newValue.length;\n\n            if (operation === 'range-insert') {\n                const startValue = this.parseValue((inputValue || '').slice(0, selectionStart));\n                const startValueStr = startValue !== null ? startValue.toString() : '';\n                const startExpr = startValueStr.split('').join(`(${this.groupChar})?`);\n                const sRegex = new RegExp(startExpr, 'g');\n                sRegex.test(newValue);\n\n                const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n                const tRegex = new RegExp(tExpr, 'g');\n                tRegex.test(newValue.slice(sRegex.lastIndex));\n\n                selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n                this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            }\n            else if (newLength === currentLength) {\n                if (operation === 'insert' || operation === 'delete-back-single')\n                    this.input.nativeElement.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n                else if (operation === 'delete-single')\n                    this.input.nativeElement.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n                else if (operation === 'delete-range' || operation === 'spin')\n                    this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            }\n            else if (operation === 'delete-back-single') {\n                let prevChar = inputValue.charAt(selectionEnd - 1);\n                let nextChar = inputValue.charAt(selectionEnd);\n                let diff = currentLength - newLength;\n                let isGroupChar = this._group.test(nextChar);\n\n                if (isGroupChar && diff === 1) {\n                    selectionEnd += 1;\n                }\n                else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n                    selectionEnd += (-1 * diff) + 1;\n                }\n\n                this._group.lastIndex = 0;\n                this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            }\n            else if (inputValue === '-' && operation === 'insert') {\n                this.input.nativeElement.setSelectionRange(0, 0);\n                const index = this.initCursor();\n                const selectionEnd = index + insertedValueStr.length + 1;\n                this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            }\n            else {\n                selectionEnd = selectionEnd + (newLength - currentLength);\n                this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            }\n        }\n\n        this.input.nativeElement.setAttribute('aria-valuenow', value);\n    }\n\n    concatValues(val1, val2) {\n        if (val1 && val2) {\n            let decimalCharIndex = val2.search(this._decimal);\n            this._decimal.lastIndex = 0;\n\n            return decimalCharIndex !== -1 ? (val1.split(this._decimal)[0] + val2.slice(decimalCharIndex)) : val1;\n        }\n\n        return val1;\n    }\n\n    getDecimalLength(value) {\n        if (value) {\n            const valueSplit = value.split(this._decimal);\n\n            if (valueSplit.length === 2) {\n                return valueSplit[1].replace(this._suffix, '')\n                            .trim()\n                            .replace(/\\s/g, '')\n                            .replace(this._currency, '').length;\n            }\n        }\n\n        return 0;\n    }\n\n    onInputFocus(event) {\n        this.focused = true;\n        this.onFocus.emit(event);\n    }\n\n    onInputBlur(event) {\n        this.focused = false;\n\n        let newValue = this.validateValue(this.parseValue(this.input.nativeElement.value));\n        this.input.nativeElement.value = this.formatValue(newValue);\n        this.input.nativeElement.setAttribute('aria-valuenow', newValue);\n        this.updateModel(event, newValue);\n\n        this.onBlur.emit(event);\n    }\n\n    formattedValue() {\n        const val = !this.value && !this.allowEmpty ? 0 : this.value;\n        return this.formatValue(val);\n    }\n\n    updateModel(event, value) {\n        if (this.value !== value) {\n            this.value = value;\n            this.onModelChange(value);\n        }\n\n        this.onModelTouched();\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    get filled() {\n        return (this.value != null && this.value.toString().length > 0)\n    }\n\n    clearTimer() {\n        if (this.timer) {\n            clearInterval(this.timer);\n        }\n    }\n\n    getFormatter() {\n        return this.numberFormat;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,InputTextModule, ButtonModule],\n    exports: [InputNumber],\n    declarations: [InputNumber]\n})\nexport class InputNumberModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputswitch.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputswitch.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputswitch.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,138 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const INPUTSWITCH_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => InputSwitch),
+    multi: true
+};
+class InputSwitch {
+    constructor(cd) {
+        this.cd = cd;
+        this.trueValue = true;
+        this.falseValue = false;
+        this.onChange = new EventEmitter();
+        this.modelValue = false;
+        this.focused = false;
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    onClick(event, cb) {
+        if (!this.disabled && !this.readonly) {
+            event.preventDefault();
+            this.toggle(event);
+            cb.focus();
+        }
+    }
+    onInputChange(event) {
+        if (!this.readonly) {
+            const inputChecked = event.target.checked;
+            this.updateModel(event, inputChecked);
+        }
+    }
+    toggle(event) {
+        this.updateModel(event, !this.checked());
+    }
+    updateModel(event, value) {
+        this.modelValue = value ? this.trueValue : this.falseValue;
+        this.onModelChange(this.modelValue);
+        this.onChange.emit({
+            originalEvent: event,
+            checked: this.modelValue
+        });
+    }
+    onFocus(event) {
+        this.focused = true;
+    }
+    onBlur(event) {
+        this.focused = false;
+        this.onModelTouched();
+    }
+    writeValue(value) {
+        this.modelValue = value;
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    checked() {
+        return this.modelValue === this.trueValue;
+    }
+}
+InputSwitch.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputSwitch, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+InputSwitch.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: InputSwitch, selector: "p-inputSwitch", inputs: { style: "style", styleClass: "styleClass", tabindex: "tabindex", inputId: "inputId", name: "name", disabled: "disabled", readonly: "readonly", trueValue: "trueValue", falseValue: "falseValue", ariaLabelledBy: "ariaLabelledBy" }, outputs: { onChange: "onChange" }, host: { classAttribute: "p-element" }, providers: [INPUTSWITCH_VALUE_ACCESSOR], ngImport: i0, template: `
+        <div [ngClass]="{'p-inputswitch p-component': true, 'p-inputswitch-checked': checked(), 'p-disabled': disabled, 'p-focus': focused}"
+            [ngStyle]="style" [class]="styleClass" (click)="onClick($event, cb)">
+            <div class="p-hidden-accessible">
+                <input #cb type="checkbox" [attr.id]="inputId" [attr.name]="name" [attr.tabindex]="tabindex" [checked]="checked()" (change)="onInputChange($event)"
+                    (focus)="onFocus($event)" (blur)="onBlur($event)" [disabled]="disabled" role="switch" [attr.aria-checked]="checked()" [attr.aria-labelledby]="ariaLabelledBy"/>
+            </div>
+            <span class="p-inputswitch-slider"></span>
+        </div>
+    `, isInline: true, styles: [".p-inputswitch{position:relative;display:inline-block;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-inputswitch-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0}.p-inputswitch-slider:before{position:absolute;content:\"\";top:50%}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputSwitch, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-inputSwitch', template: `
+        <div [ngClass]="{'p-inputswitch p-component': true, 'p-inputswitch-checked': checked(), 'p-disabled': disabled, 'p-focus': focused}"
+            [ngStyle]="style" [class]="styleClass" (click)="onClick($event, cb)">
+            <div class="p-hidden-accessible">
+                <input #cb type="checkbox" [attr.id]="inputId" [attr.name]="name" [attr.tabindex]="tabindex" [checked]="checked()" (change)="onInputChange($event)"
+                    (focus)="onFocus($event)" (blur)="onBlur($event)" [disabled]="disabled" role="switch" [attr.aria-checked]="checked()" [attr.aria-labelledby]="ariaLabelledBy"/>
+            </div>
+            <span class="p-inputswitch-slider"></span>
+        </div>
+    `, providers: [INPUTSWITCH_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-inputswitch{position:relative;display:inline-block;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-inputswitch-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0}.p-inputswitch-slider:before{position:absolute;content:\"\";top:50%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], trueValue: [{
+                type: Input
+            }], falseValue: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], onChange: [{
+                type: Output
+            }] } });
+class InputSwitchModule {
+}
+InputSwitchModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputSwitchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+InputSwitchModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputSwitchModule, declarations: [InputSwitch], imports: [CommonModule], exports: [InputSwitch] });
+InputSwitchModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputSwitchModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputSwitchModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [InputSwitch],
+                    declarations: [InputSwitch]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { INPUTSWITCH_VALUE_ACCESSOR, InputSwitch, InputSwitchModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputswitch.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputswitch.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputswitch.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-inputswitch.mjs","sources":["../../src/app/components/inputswitch/inputswitch.ts","../../src/app/components/inputswitch/primeng-inputswitch.ts"],"sourcesContent":["import {NgModule,Component,Input,forwardRef,EventEmitter,Output,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NG_VALUE_ACCESSOR,ControlValueAccessor} from '@angular/forms';\n\nexport const INPUTSWITCH_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => InputSwitch),\n  multi: true\n};\n\n@Component({\n    selector: 'p-inputSwitch',\n    template: `\n        <div [ngClass]=\"{'p-inputswitch p-component': true, 'p-inputswitch-checked': checked(), 'p-disabled': disabled, 'p-focus': focused}\"\n            [ngStyle]=\"style\" [class]=\"styleClass\" (click)=\"onClick($event, cb)\">\n            <div class=\"p-hidden-accessible\">\n                <input #cb type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [attr.tabindex]=\"tabindex\" [checked]=\"checked()\" (change)=\"onInputChange($event)\"\n                    (focus)=\"onFocus($event)\" (blur)=\"onBlur($event)\" [disabled]=\"disabled\" role=\"switch\" [attr.aria-checked]=\"checked()\" [attr.aria-labelledby]=\"ariaLabelledBy\"/>\n            </div>\n            <span class=\"p-inputswitch-slider\"></span>\n        </div>\n    `,\n    providers: [INPUTSWITCH_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./inputswitch.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class InputSwitch implements ControlValueAccessor {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() tabindex: number;\n\n    @Input() inputId: string;\n\n    @Input() name: string;\n\n    @Input() disabled: boolean;\n\n    @Input() readonly: boolean;\n\n    @Input() trueValue: any = true;\n\n    @Input() falseValue: any = false;\n\n    @Input() ariaLabelledBy: string;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    modelValue: any = false;\n\n    focused: boolean = false;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    constructor(private cd: ChangeDetectorRef) {}\n\n    onClick(event: Event, cb: HTMLInputElement) {\n        if (!this.disabled && !this.readonly) {\n            event.preventDefault();\n            this.toggle(event);\n            cb.focus();\n        }\n    }\n\n    onInputChange(event: Event) {\n        if (!this.readonly) {\n            const inputChecked = (<HTMLInputElement> event.target).checked;\n            this.updateModel(event, inputChecked);\n        }\n    }\n\n    toggle(event: Event) {\n        this.updateModel(event, !this.checked());\n    }\n\n    updateModel(event: Event, value: boolean) {\n        this.modelValue = value ? this.trueValue : this.falseValue;\n        this.onModelChange(this.modelValue);\n        this.onChange.emit({\n            originalEvent: event,\n            checked: this.modelValue\n        });\n    }\n\n    onFocus(event: Event) {\n        this.focused = true;\n    }\n\n    onBlur(event: Event) {\n        this.focused = false;\n        this.onModelTouched();\n    }\n\n    writeValue(value: any) : void {\n        this.modelValue = value;\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    checked() {\n        return this.modelValue === this.trueValue;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [InputSwitch],\n    declarations: [InputSwitch]\n})\nexport class InputSwitchModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtext.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtext.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtext.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,62 @@
+import * as i0 from '@angular/core';
+import { Directive, Optional, HostListener, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import * as i1 from '@angular/forms';
+
+class InputText {
+    constructor(el, ngModel, cd) {
+        this.el = el;
+        this.ngModel = ngModel;
+        this.cd = cd;
+    }
+    ngAfterViewInit() {
+        this.updateFilledState();
+        this.cd.detectChanges();
+    }
+    ngDoCheck() {
+        this.updateFilledState();
+    }
+    onInput(e) {
+        this.updateFilledState();
+    }
+    updateFilledState() {
+        this.filled = (this.el.nativeElement.value && this.el.nativeElement.value.length) ||
+            (this.ngModel && this.ngModel.model);
+    }
+}
+InputText.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputText, deps: [{ token: i0.ElementRef }, { token: i1.NgModel, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
+InputText.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: InputText, selector: "[pInputText]", host: { listeners: { "input": "onInput($event)" }, properties: { "class.p-filled": "filled" }, classAttribute: "p-inputtext p-component p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputText, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pInputText]',
+                    host: {
+                        'class': 'p-inputtext p-component p-element',
+                        '[class.p-filled]': 'filled'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.NgModel, decorators: [{
+                    type: Optional
+                }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { onInput: [{
+                type: HostListener,
+                args: ['input', ['$event']]
+            }] } });
+class InputTextModule {
+}
+InputTextModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+InputTextModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextModule, declarations: [InputText], imports: [CommonModule], exports: [InputText] });
+InputTextModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [InputText],
+                    declarations: [InputText]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { InputText, InputTextModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtext.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtext.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtext.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-inputtext.mjs","sources":["../../src/app/components/inputtext/inputtext.ts","../../src/app/components/inputtext/primeng-inputtext.ts"],"sourcesContent":["import {NgModule, Directive, ElementRef, HostListener, DoCheck, Optional, ChangeDetectorRef, AfterViewInit} from '@angular/core';\nimport {NgModel} from '@angular/forms';\nimport {CommonModule} from '@angular/common';\n\n@Directive({\n    selector: '[pInputText]',\n    host: {\n        'class': 'p-inputtext p-component p-element',\n        '[class.p-filled]': 'filled'\n    }\n})\nexport class InputText implements DoCheck, AfterViewInit {\n\n    filled: boolean;\n\n    constructor(public el: ElementRef, @Optional() public ngModel: NgModel, private cd: ChangeDetectorRef) {\n    }\n\n    ngAfterViewInit() {\n        this.updateFilledState();\n        this.cd.detectChanges();\n    }\n\n    ngDoCheck() {\n        this.updateFilledState();\n    }\n\n    @HostListener('input', ['$event'])\n    onInput(e) {\n        this.updateFilledState();\n    }\n\n    updateFilledState() {\n        this.filled = (this.el.nativeElement.value && this.el.nativeElement.value.length) ||\n            (this.ngModel && this.ngModel.model);\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [InputText],\n    declarations: [InputText]\n})\nexport class InputTextModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAWa,SAAS;IAIlB,YAAmB,EAAc,EAAqB,OAAgB,EAAU,EAAqB;QAAlF,OAAE,GAAF,EAAE,CAAY;QAAqB,YAAO,GAAP,OAAO,CAAS;QAAU,OAAE,GAAF,EAAE,CAAmB;KACpG;IAED,eAAe;QACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;KAC3B;IAED,SAAS;QACL,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;IAGD,OAAO,CAAC,CAAC;QACL,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;IAED,iBAAiB;QACb,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM;aAC3E,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC5C;;sGAxBQ,SAAS;0FAAT,SAAS;2FAAT,SAAS;kBAPrB,SAAS;mBAAC;oBACP,QAAQ,EAAE,cAAc;oBACxB,IAAI,EAAE;wBACF,OAAO,EAAE,mCAAmC;wBAC5C,kBAAkB,EAAE,QAAQ;qBAC/B;iBACJ;;0BAKuC,QAAQ;4EAa5C,OAAO;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;MAgBxB,eAAe;;4GAAf,eAAe;6GAAf,eAAe,iBAhCf,SAAS,aA4BR,YAAY,aA5Bb,SAAS;6GAgCT,eAAe,YAJf,CAAC,YAAY,CAAC;2FAId,eAAe;kBAL3B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,YAAY,EAAE,CAAC,SAAS,CAAC;iBAC5B;;;AC1CD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtextarea.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtextarea.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtextarea.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,123 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Directive, Optional, Input, Output, HostListener, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import * as i1 from '@angular/forms';
+
+class InputTextarea {
+    constructor(el, ngModel, control, cd) {
+        this.el = el;
+        this.ngModel = ngModel;
+        this.control = control;
+        this.cd = cd;
+        this.onResize = new EventEmitter();
+    }
+    ngOnInit() {
+        if (this.ngModel) {
+            this.ngModelSubscription = this.ngModel.valueChanges.subscribe(() => {
+                this.updateState();
+            });
+        }
+        if (this.control) {
+            this.ngControlSubscription = this.control.valueChanges.subscribe(() => {
+                this.updateState();
+            });
+        }
+    }
+    ngAfterViewInit() {
+        if (this.autoResize)
+            this.resize();
+        this.updateFilledState();
+        this.cd.detectChanges();
+    }
+    onInput(e) {
+        this.updateState();
+    }
+    updateFilledState() {
+        this.filled = this.el.nativeElement.value && this.el.nativeElement.value.length;
+    }
+    onFocus(e) {
+        if (this.autoResize) {
+            this.resize(e);
+        }
+    }
+    onBlur(e) {
+        if (this.autoResize) {
+            this.resize(e);
+        }
+    }
+    resize(event) {
+        this.el.nativeElement.style.height = 'auto';
+        this.el.nativeElement.style.height = this.el.nativeElement.scrollHeight + 'px';
+        if (parseFloat(this.el.nativeElement.style.height) >= parseFloat(this.el.nativeElement.style.maxHeight)) {
+            this.el.nativeElement.style.overflowY = "scroll";
+            this.el.nativeElement.style.height = this.el.nativeElement.style.maxHeight;
+        }
+        else {
+            this.el.nativeElement.style.overflow = "hidden";
+        }
+        this.onResize.emit(event || {});
+    }
+    updateState() {
+        this.updateFilledState();
+        if (this.autoResize) {
+            this.resize();
+        }
+    }
+    ngOnDestroy() {
+        if (this.ngModelSubscription) {
+            this.ngModelSubscription.unsubscribe();
+        }
+        if (this.ngControlSubscription) {
+            this.ngControlSubscription.unsubscribe();
+        }
+    }
+}
+InputTextarea.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextarea, deps: [{ token: i0.ElementRef }, { token: i1.NgModel, optional: true }, { token: i1.NgControl, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
+InputTextarea.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: InputTextarea, selector: "[pInputTextarea]", inputs: { autoResize: "autoResize" }, outputs: { onResize: "onResize" }, host: { listeners: { "input": "onInput($event)", "focus": "onFocus($event)", "blur": "onBlur($event)" }, properties: { "class.p-filled": "filled", "class.p-inputtextarea-resizable": "autoResize" }, classAttribute: "p-inputtextarea p-inputtext p-component p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextarea, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pInputTextarea]',
+                    host: {
+                        'class': 'p-inputtextarea p-inputtext p-component p-element',
+                        '[class.p-filled]': 'filled',
+                        '[class.p-inputtextarea-resizable]': 'autoResize'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.NgModel, decorators: [{
+                    type: Optional
+                }] }, { type: i1.NgControl, decorators: [{
+                    type: Optional
+                }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { autoResize: [{
+                type: Input
+            }], onResize: [{
+                type: Output
+            }], onInput: [{
+                type: HostListener,
+                args: ['input', ['$event']]
+            }], onFocus: [{
+                type: HostListener,
+                args: ['focus', ['$event']]
+            }], onBlur: [{
+                type: HostListener,
+                args: ['blur', ['$event']]
+            }] } });
+class InputTextareaModule {
+}
+InputTextareaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextareaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+InputTextareaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextareaModule, declarations: [InputTextarea], imports: [CommonModule], exports: [InputTextarea] });
+InputTextareaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextareaModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InputTextareaModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [InputTextarea],
+                    declarations: [InputTextarea]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { InputTextarea, InputTextareaModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtextarea.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtextarea.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-inputtextarea.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-inputtextarea.mjs","sources":["../../src/app/components/inputtextarea/inputtextarea.ts","../../src/app/components/inputtextarea/primeng-inputtextarea.ts"],"sourcesContent":["import {NgModule,Directive,ElementRef,HostListener,Input,Output, EventEmitter,Optional, AfterViewInit, OnInit, OnDestroy, ChangeDetectorRef} from '@angular/core';\nimport {NgModel, NgControl} from '@angular/forms';\nimport {CommonModule} from '@angular/common';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n    selector: '[pInputTextarea]',\n    host: {\n        'class': 'p-inputtextarea p-inputtext p-component p-element',\n        '[class.p-filled]': 'filled',\n        '[class.p-inputtextarea-resizable]': 'autoResize'\n    }\n})\nexport class InputTextarea implements OnInit, AfterViewInit, OnDestroy  {\n\n    @Input() autoResize: boolean;\n\n    @Output() onResize: EventEmitter<any> = new EventEmitter();\n\n    filled: boolean;\n\n    cachedScrollHeight:number;\n\n    ngModelSubscription: Subscription;\n\n    ngControlSubscription: Subscription;\n\n    constructor(public el: ElementRef, @Optional() public ngModel: NgModel, @Optional() public control : NgControl, private cd: ChangeDetectorRef) {}\n\n    ngOnInit() {\n        if (this.ngModel) {\n            this.ngModelSubscription = this.ngModel.valueChanges.subscribe(() =>{\n                this.updateState();\n            })\n        }\n\n        if (this.control) {\n            this.ngControlSubscription = this.control.valueChanges.subscribe(() => {\n                this.updateState();\n            });\n        }\n    }\n\n    ngAfterViewInit() {\n        if (this.autoResize)\n            this.resize();\n\n        this.updateFilledState();\n        this.cd.detectChanges();\n    }\n\n    @HostListener('input', ['$event'])\n    onInput(e) {\n        this.updateState();\n    }\n\n    updateFilledState() {\n        this.filled = this.el.nativeElement.value && this.el.nativeElement.value.length;\n    }\n\n    @HostListener('focus', ['$event'])\n    onFocus(e) {\n        if (this.autoResize) {\n            this.resize(e);\n        }\n    }\n\n    @HostListener('blur', ['$event'])\n    onBlur(e) {\n        if (this.autoResize) {\n            this.resize(e);\n        }\n    }\n\n    resize(event?: Event) {\n        this.el.nativeElement.style.height = 'auto';\n        this.el.nativeElement.style.height = this.el.nativeElement.scrollHeight + 'px';\n\n        if (parseFloat(this.el.nativeElement.style.height) >= parseFloat(this.el.nativeElement.style.maxHeight)) {\n            this.el.nativeElement.style.overflowY = \"scroll\";\n            this.el.nativeElement.style.height = this.el.nativeElement.style.maxHeight;\n        }\n        else {\n            this.el.nativeElement.style.overflow = \"hidden\";\n        }\n\n        this.onResize.emit(event||{});\n    }\n\n    updateState() {\n        this.updateFilledState();\n\n        if (this.autoResize) {\n            this.resize();\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.ngModelSubscription) {\n            this.ngModelSubscription.unsubscribe();\n        }\n\n        if (this.ngControlSubscription) {\n            this.ngControlSubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [InputTextarea],\n    declarations: [InputTextarea]\n})\nexport class InputTextareaModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-keyfilter.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-keyfilter.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-keyfilter.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,209 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Directive, Input, Output, HostListener, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import { NG_VALIDATORS } from '@angular/forms';
+
+const KEYFILTER_VALIDATOR = {
+    provide: NG_VALIDATORS,
+    useExisting: forwardRef(() => KeyFilter),
+    multi: true
+};
+const DEFAULT_MASKS = {
+    pint: /[\d]/,
+    'int': /[\d\-]/,
+    pnum: /[\d\.]/,
+    money: /[\d\.\s,]/,
+    num: /[\d\-\.]/,
+    hex: /[0-9a-f]/i,
+    email: /[a-z0-9_\.\-@]/i,
+    alpha: /[a-z_]/i,
+    alphanum: /[a-z0-9_]/i
+};
+const KEYS = {
+    TAB: 9,
+    RETURN: 13,
+    ESC: 27,
+    BACKSPACE: 8,
+    DELETE: 46
+};
+const SAFARI_KEYS = {
+    63234: 37,
+    63235: 39,
+    63232: 38,
+    63233: 40,
+    63276: 33,
+    63277: 34,
+    63272: 46,
+    63273: 36,
+    63275: 35 // end
+};
+class KeyFilter {
+    constructor(el) {
+        this.el = el;
+        this.ngModelChange = new EventEmitter();
+        this.isAndroid = DomHandler.isAndroid();
+    }
+    get pattern() {
+        return this._pattern;
+    }
+    set pattern(_pattern) {
+        this._pattern = _pattern;
+        this.regex = DEFAULT_MASKS[this._pattern] || this._pattern;
+    }
+    isNavKeyPress(e) {
+        let k = e.keyCode;
+        k = DomHandler.getBrowser().safari ? (SAFARI_KEYS[k] || k) : k;
+        return (k >= 33 && k <= 40) || k == KEYS.RETURN || k == KEYS.TAB || k == KEYS.ESC;
+    }
+    ;
+    isSpecialKey(e) {
+        let k = e.keyCode || e.charCode;
+        return k == 9 || k == 13 || k == 27 || k == 16 || k == 17 || (k >= 18 && k <= 20) ||
+            (DomHandler.getBrowser().opera && !e.shiftKey && (k == 8 || (k >= 33 && k <= 35) || (k >= 36 && k <= 39) || (k >= 44 && k <= 45)));
+    }
+    getKey(e) {
+        let k = e.keyCode || e.charCode;
+        return DomHandler.getBrowser().safari ? (SAFARI_KEYS[k] || k) : k;
+    }
+    getCharCode(e) {
+        return e.charCode || e.keyCode || e.which;
+    }
+    findDelta(value, prevValue) {
+        let delta = '';
+        for (let i = 0; i < value.length; i++) {
+            let str = value.substr(0, i) + value.substr(i + value.length - prevValue.length);
+            if (str === prevValue)
+                delta = value.substr(i, value.length - prevValue.length);
+        }
+        return delta;
+    }
+    isValidChar(c) {
+        return this.regex.test(c);
+    }
+    isValidString(str) {
+        for (let i = 0; i < str.length; i++) {
+            if (!this.isValidChar(str.substr(i, 1))) {
+                return false;
+            }
+        }
+        return true;
+    }
+    onInput(e) {
+        if (this.isAndroid && !this.pValidateOnly) {
+            let val = this.el.nativeElement.value;
+            let lastVal = this.lastValue || '';
+            let inserted = this.findDelta(val, lastVal);
+            let removed = this.findDelta(lastVal, val);
+            let pasted = inserted.length > 1 || (!inserted && !removed);
+            if (pasted) {
+                if (!this.isValidString(val)) {
+                    this.el.nativeElement.value = lastVal;
+                    this.ngModelChange.emit(lastVal);
+                }
+            }
+            else if (!removed) {
+                if (!this.isValidChar(inserted)) {
+                    this.el.nativeElement.value = lastVal;
+                    this.ngModelChange.emit(lastVal);
+                }
+            }
+            val = this.el.nativeElement.value;
+            if (this.isValidString(val)) {
+                this.lastValue = val;
+            }
+        }
+    }
+    onKeyPress(e) {
+        if (this.isAndroid || this.pValidateOnly) {
+            return;
+        }
+        let browser = DomHandler.getBrowser();
+        let k = this.getKey(e);
+        if (browser.mozilla && (e.ctrlKey || e.altKey)) {
+            return;
+        }
+        else if (k == 17 || k == 18) {
+            return;
+        }
+        let c = this.getCharCode(e);
+        let cc = String.fromCharCode(c);
+        let ok = true;
+        if (!browser.mozilla && (this.isSpecialKey(e) || !cc)) {
+            return;
+        }
+        ok = this.regex.test(cc);
+        if (!ok) {
+            e.preventDefault();
+        }
+    }
+    onPaste(e) {
+        const clipboardData = e.clipboardData || window.clipboardData.getData('text');
+        if (clipboardData) {
+            const pastedText = clipboardData.getData('text');
+            for (let char of pastedText.toString()) {
+                if (!this.regex.test(char)) {
+                    e.preventDefault();
+                    return;
+                }
+            }
+        }
+    }
+    validate(c) {
+        if (this.pValidateOnly) {
+            let value = this.el.nativeElement.value;
+            if (value && !this.regex.test(value)) {
+                return {
+                    validatePattern: false
+                };
+            }
+        }
+    }
+}
+KeyFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KeyFilter, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+KeyFilter.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: KeyFilter, selector: "[pKeyFilter]", inputs: { pValidateOnly: "pValidateOnly", pattern: ["pKeyFilter", "pattern"] }, outputs: { ngModelChange: "ngModelChange" }, host: { listeners: { "input": "onInput($event)", "keypress": "onKeyPress($event)", "paste": "onPaste($event)" }, classAttribute: "p-element" }, providers: [KEYFILTER_VALIDATOR], ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KeyFilter, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pKeyFilter]',
+                    providers: [KEYFILTER_VALIDATOR],
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { pValidateOnly: [{
+                type: Input
+            }], ngModelChange: [{
+                type: Output
+            }], pattern: [{
+                type: Input,
+                args: ['pKeyFilter']
+            }], onInput: [{
+                type: HostListener,
+                args: ['input', ['$event']]
+            }], onKeyPress: [{
+                type: HostListener,
+                args: ['keypress', ['$event']]
+            }], onPaste: [{
+                type: HostListener,
+                args: ['paste', ['$event']]
+            }] } });
+class KeyFilterModule {
+}
+KeyFilterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KeyFilterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+KeyFilterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KeyFilterModule, declarations: [KeyFilter], imports: [CommonModule], exports: [KeyFilter] });
+KeyFilterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KeyFilterModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KeyFilterModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [KeyFilter],
+                    declarations: [KeyFilter]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { KEYFILTER_VALIDATOR, KeyFilter, KeyFilterModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-keyfilter.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-keyfilter.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-keyfilter.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-keyfilter.mjs","sources":["../../src/app/components/keyfilter/keyfilter.ts","../../src/app/components/keyfilter/primeng-keyfilter.ts"],"sourcesContent":["import { NgModule, Directive, ElementRef, HostListener, Input, forwardRef, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler } from 'primeng/dom';\nimport { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';\n\nexport const KEYFILTER_VALIDATOR: any = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(() => KeyFilter),\n    multi: true\n};\n\nconst DEFAULT_MASKS = {\n    pint: /[\\d]/,\n    'int': /[\\d\\-]/,\n    pnum: /[\\d\\.]/,\n    money: /[\\d\\.\\s,]/,\n    num: /[\\d\\-\\.]/,\n    hex: /[0-9a-f]/i,\n    email: /[a-z0-9_\\.\\-@]/i,\n    alpha: /[a-z_]/i,\n    alphanum: /[a-z0-9_]/i\n};\n\nconst KEYS = {\n    TAB: 9,\n    RETURN: 13,\n    ESC: 27,\n    BACKSPACE: 8,\n    DELETE: 46\n};\n\nconst SAFARI_KEYS = {\n    63234: 37, // left\n    63235: 39, // right\n    63232: 38, // up\n    63233: 40, // down\n    63276: 33, // page up\n    63277: 34, // page down\n    63272: 46, // delete\n    63273: 36, // home\n    63275: 35  // end\n};\n\n@Directive({\n    selector: '[pKeyFilter]',\n    providers: [KEYFILTER_VALIDATOR],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class KeyFilter implements Validator {\n\n    @Input() pValidateOnly: boolean;\n\n    @Output() ngModelChange: EventEmitter<any> = new EventEmitter();\n\n    regex: RegExp;\n\n    _pattern: any;\n\n    isAndroid: boolean;\n\n    lastValue: any;\n\n    constructor(public el: ElementRef) {\n        this.isAndroid = DomHandler.isAndroid();\n    }\n\n    get pattern(): any {\n        return this._pattern;\n    }\n\n    @Input('pKeyFilter') set pattern(_pattern: any) {\n        this._pattern = _pattern;\n        this.regex = DEFAULT_MASKS[this._pattern] || this._pattern;\n    }\n\n    isNavKeyPress(e: KeyboardEvent) {\n        let k = e.keyCode;\n        k = DomHandler.getBrowser().safari ? (SAFARI_KEYS[k] || k) : k;\n\n        return (k >= 33 && k <= 40) || k == KEYS.RETURN || k == KEYS.TAB || k == KEYS.ESC;\n    };\n\n    isSpecialKey(e: KeyboardEvent) {\n        let k = e.keyCode || e.charCode;\n\n        return k == 9 || k == 13 || k == 27 || k == 16 || k == 17 ||(k >= 18 && k <= 20) ||\n            (DomHandler.getBrowser().opera && !e.shiftKey && (k == 8 || (k >= 33 && k <= 35) || (k >= 36 && k <= 39) || (k >= 44 && k <= 45)));\n    }\n\n\n    getKey(e: KeyboardEvent) {\n        let k = e.keyCode || e.charCode;\n        return DomHandler.getBrowser().safari ? (SAFARI_KEYS[k] || k) : k;\n    }\n\n    getCharCode(e: KeyboardEvent) {\n        return e.charCode || e.keyCode || e.which;\n    }\n\n    findDelta(value: string, prevValue: string) {\n        let delta = '';\n\n        for (let i = 0; i < value.length; i++) {\n            let str = value.substr(0, i) + value.substr(i + value.length - prevValue.length);\n\n            if (str === prevValue)\n                delta = value.substr(i, value.length - prevValue.length);\n        }\n\n        return delta;\n    }\n\n    isValidChar(c: string) {\n        return this.regex.test(c);\n    }\n\n    isValidString(str: string) {\n        for (let i = 0; i < str.length; i++) {\n            if (!this.isValidChar(str.substr(i, 1))) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    @HostListener('input', ['$event'])\n    onInput(e: KeyboardEvent) {\n        if (this.isAndroid && !this.pValidateOnly) {\n            let val = this.el.nativeElement.value;\n            let lastVal = this.lastValue || '';\n\n            let inserted = this.findDelta(val, lastVal);\n            let removed = this.findDelta(lastVal, val);\n            let pasted = inserted.length > 1 || (!inserted && !removed);\n\n            if (pasted) {\n                if (!this.isValidString(val)) {\n                    this.el.nativeElement.value = lastVal;\n                    this.ngModelChange.emit(lastVal);\n                }\n            }\n            else if (!removed) {\n                if (!this.isValidChar(inserted)) {\n                    this.el.nativeElement.value = lastVal;\n                    this.ngModelChange.emit(lastVal);\n                }\n            }\n\n            val = this.el.nativeElement.value;\n            if (this.isValidString(val)) {\n                this.lastValue = val;\n            }\n        }\n    }\n\n    @HostListener('keypress', ['$event'])\n    onKeyPress(e: KeyboardEvent) {\n        if (this.isAndroid || this.pValidateOnly) {\n            return;\n        }\n\n        let browser = DomHandler.getBrowser();\n        let k = this.getKey(e);\n\n        if (browser.mozilla && (e.ctrlKey || e.altKey)) {\n            return;\n        }\n        else if (k == 17 || k == 18) {\n            return;\n        }\n\n        let c = this.getCharCode(e);\n        let cc = String.fromCharCode(c);\n        let ok = true;\n\n        if (!browser.mozilla && (this.isSpecialKey(e) || !cc)) {\n            return;\n        }\n\n        ok = this.regex.test(cc);\n\n        if (!ok) {\n            e.preventDefault();\n        }\n    }\n\n    @HostListener('paste', ['$event'])\n    onPaste(e) {\n        const clipboardData = e.clipboardData || (<any>window).clipboardData.getData('text');\n        if (clipboardData) {\n            const pastedText = clipboardData.getData('text');\n            for (let char of pastedText.toString()) {\n                if (!this.regex.test(char)) {\n                    e.preventDefault();\n                    return;\n                }\n            }\n        }\n    }\n\n    validate(c: AbstractControl): { [key: string]: any } {\n        if (this.pValidateOnly) {\n            let value = this.el.nativeElement.value;\n            if (value && !this.regex.test(value)) {\n                return {\n                    validatePattern: false\n                }\n            }\n        }\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [KeyFilter],\n    declarations: [KeyFilter]\n})\nexport class KeyFilterModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;MAKa,mBAAmB,GAAQ;IACpC,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,UAAU,CAAC,MAAM,SAAS,CAAC;IACxC,KAAK,EAAE,IAAI;EACb;AAEF,MAAM,aAAa,GAAG;IAClB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,WAAW;IAClB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,WAAW;IAChB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,YAAY;CACzB,CAAC;AAEF,MAAM,IAAI,GAAG;IACT,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,EAAE;IACV,GAAG,EAAE,EAAE;IACP,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,WAAW,GAAG;IAChB,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;CACZ,CAAC;MASW,SAAS;IAclB,YAAmB,EAAc;QAAd,OAAE,GAAF,EAAE,CAAY;QAVvB,kBAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;QAW5D,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;KAC3C;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IAED,IAAyB,OAAO,CAAC,QAAa;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;KAC9D;IAED,aAAa,CAAC,CAAgB;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QAClB,CAAC,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/D,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC;KACrF;;IAED,YAAY,CAAC,CAAgB;QACzB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC;QAEhC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;aAC3E,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KAC1I;IAGD,MAAM,CAAC,CAAgB;QACnB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC;QAChC,OAAO,UAAU,CAAC,UAAU,EAAE,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACrE;IAED,WAAW,CAAC,CAAgB;QACxB,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC;KAC7C;IAED,SAAS,CAAC,KAAa,EAAE,SAAiB;QACtC,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAEjF,IAAI,GAAG,KAAK,SAAS;gBACjB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;SAChE;QAED,OAAO,KAAK,CAAC;KAChB;IAED,WAAW,CAAC,CAAS;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC7B;IAED,aAAa,CAAC,GAAW;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBACrC,OAAO,KAAK,CAAC;aAChB;SACJ;QAED,OAAO,IAAI,CAAC;KACf;IAGD,OAAO,CAAC,CAAgB;QACpB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;YACtC,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YAEnC,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC5C,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC;YAE5D,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;oBAC1B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,OAAO,CAAC;oBACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACpC;aACJ;iBACI,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;oBAC7B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,OAAO,CAAC;oBACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACpC;aACJ;YAED,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;YAClC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;aACxB;SACJ;KACJ;IAGD,UAAU,CAAC,CAAgB;QACvB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE;YACtC,OAAO;SACV;QAED,IAAI,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEvB,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;YAC5C,OAAO;SACV;aACI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO;SACV;QAED,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,IAAI,CAAC;QAEd,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACnD,OAAO;SACV;QAED,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzB,IAAI,CAAC,EAAE,EAAE;YACL,CAAC,CAAC,cAAc,EAAE,CAAC;SACtB;KACJ;IAGD,OAAO,CAAC,CAAC;QACL,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,IAAU,MAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrF,IAAI,aAAa,EAAE;YACf,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,KAAK,IAAI,IAAI,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACxB,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,OAAO;iBACV;aACJ;SACJ;KACJ;IAED,QAAQ,CAAC,CAAkB;QACvB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;YACxC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAClC,OAAO;oBACH,eAAe,EAAE,KAAK;iBACzB,CAAA;aACJ;SACJ;KACJ;;sGAlKQ,SAAS;0FAAT,SAAS,oTALP,CAAC,mBAAmB,CAAC;2FAKvB,SAAS;kBAPrB,SAAS;mBAAC;oBACP,QAAQ,EAAE,cAAc;oBACxB,SAAS,EAAE,CAAC,mBAAmB,CAAC;oBAChC,IAAI,EAAE;wBACF,OAAO,EAAE,WAAW;qBACvB;iBACJ;iGAGY,aAAa;sBAArB,KAAK;gBAEI,aAAa;sBAAtB,MAAM;gBAkBkB,OAAO;sBAA/B,KAAK;uBAAC,YAAY;gBAyDnB,OAAO;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;gBA+BjC,UAAU;sBADT,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;gBAgCpC,OAAO;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;MAgCxB,eAAe;;4GAAf,eAAe;6GAAf,eAAe,iBA3Kf,SAAS,aAuKR,YAAY,aAvKb,SAAS;6GA2KT,eAAe,YAJf,CAAC,YAAY,CAAC;2FAId,eAAe;kBAL3B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,YAAY,EAAE,CAAC,SAAS,CAAC;iBAC5B;;;AC5ND;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-knob.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-knob.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-knob.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,266 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const KNOB_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Knob),
+    multi: true
+};
+class Knob {
+    constructor(cd, el) {
+        this.cd = cd;
+        this.el = el;
+        this.valueColor = "var(--primary-color, Black)";
+        this.rangeColor = "var(--surface-d, LightGray)";
+        this.textColor = "var(--text-color-secondary, Black)";
+        this.valueTemplate = "{value}";
+        this.size = 100;
+        this.step = 1;
+        this.min = 0;
+        this.max = 100;
+        this.strokeWidth = 14;
+        this.showValue = true;
+        this.readonly = false;
+        this.onChange = new EventEmitter();
+        this.radius = 40;
+        this.midX = 50;
+        this.midY = 50;
+        this.minRadians = 4 * Math.PI / 3;
+        this.maxRadians = -Math.PI / 3;
+        this.value = null;
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    mapRange(x, inMin, inMax, outMin, outMax) {
+        return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
+    }
+    onClick(event) {
+        if (!this.disabled && !this.readonly) {
+            this.updateValue(event.offsetX, event.offsetY);
+        }
+    }
+    updateValue(offsetX, offsetY) {
+        let dx = offsetX - this.size / 2;
+        let dy = this.size / 2 - offsetY;
+        let angle = Math.atan2(dy, dx);
+        let start = -Math.PI / 2 - Math.PI / 6;
+        this.updateModel(angle, start);
+    }
+    updateModel(angle, start) {
+        let mappedValue;
+        if (angle > this.maxRadians)
+            mappedValue = this.mapRange(angle, this.minRadians, this.maxRadians, this.min, this.max);
+        else if (angle < start)
+            mappedValue = this.mapRange(angle + 2 * Math.PI, this.minRadians, this.maxRadians, this.min, this.max);
+        else
+            return;
+        let newValue = Math.round((mappedValue - this.min) / this.step) * this.step + this.min;
+        this.value = newValue;
+        this.onModelChange(this.value);
+        this.onChange.emit(this.value);
+    }
+    onMouseDown(event) {
+        if (!this.disabled && !this.readonly) {
+            this.windowMouseMoveListener = this.onMouseMove.bind(this);
+            this.windowMouseUpListener = this.onMouseUp.bind(this);
+            window.addEventListener('mousemove', this.windowMouseMoveListener);
+            window.addEventListener('mouseup', this.windowMouseUpListener);
+            event.preventDefault();
+        }
+    }
+    onMouseUp(event) {
+        if (!this.disabled && !this.readonly) {
+            window.removeEventListener('mousemove', this.windowMouseMoveListener);
+            window.removeEventListener('mouseup', this.windowMouseUpListener);
+            this.windowMouseUpListener = null;
+            this.windowMouseMoveListener = null;
+            event.preventDefault();
+        }
+    }
+    onTouchStart(event) {
+        if (!this.disabled && !this.readonly) {
+            this.windowTouchMoveListener = this.onTouchMove.bind(this);
+            this.windowTouchEndListener = this.onTouchEnd.bind(this);
+            window.addEventListener('touchmove', this.windowTouchMoveListener);
+            window.addEventListener('touchend', this.windowTouchEndListener);
+            event.preventDefault();
+        }
+    }
+    onTouchEnd(event) {
+        if (!this.disabled && !this.readonly) {
+            window.removeEventListener('touchmove', this.windowTouchMoveListener);
+            window.removeEventListener('touchend', this.windowTouchEndListener);
+            this.windowTouchMoveListener = null;
+            this.windowTouchEndListener = null;
+            event.preventDefault();
+        }
+    }
+    onMouseMove(event) {
+        if (!this.disabled && !this.readonly) {
+            this.updateValue(event.offsetX, event.offsetY);
+            event.preventDefault();
+        }
+    }
+    onTouchMove(event) {
+        if (!this.disabled && !this.readonly && event.touches.length == 1) {
+            const rect = this.el.nativeElement.children[0].getBoundingClientRect();
+            const touch = event.targetTouches.item(0);
+            const offsetX = touch.clientX - rect.left;
+            const offsetY = touch.clientY - rect.top;
+            this.updateValue(offsetX, offsetY);
+        }
+    }
+    writeValue(value) {
+        this.value = value;
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    containerClass() {
+        return {
+            'p-knob p-component': true,
+            'p-disabled': this.disabled
+        };
+    }
+    rangePath() {
+        return `M ${this.minX()} ${this.minY()} A ${this.radius} ${this.radius} 0 1 1 ${this.maxX()} ${this.maxY()}`;
+    }
+    valuePath() {
+        return `M ${this.zeroX()} ${this.zeroY()} A ${this.radius} ${this.radius} 0 ${this.largeArc()} ${this.sweep()} ${this.valueX()} ${this.valueY()}`;
+    }
+    zeroRadians() {
+        if (this.min > 0 && this.max > 0)
+            return this.mapRange(this.min, this.min, this.max, this.minRadians, this.maxRadians);
+        else
+            return this.mapRange(0, this.min, this.max, this.minRadians, this.maxRadians);
+    }
+    valueRadians() {
+        return this.mapRange(this._value, this.min, this.max, this.minRadians, this.maxRadians);
+    }
+    minX() {
+        return this.midX + Math.cos(this.minRadians) * this.radius;
+    }
+    minY() {
+        return this.midY - Math.sin(this.minRadians) * this.radius;
+    }
+    maxX() {
+        return this.midX + Math.cos(this.maxRadians) * this.radius;
+    }
+    maxY() {
+        return this.midY - Math.sin(this.maxRadians) * this.radius;
+    }
+    zeroX() {
+        return this.midX + Math.cos(this.zeroRadians()) * this.radius;
+    }
+    zeroY() {
+        return this.midY - Math.sin(this.zeroRadians()) * this.radius;
+    }
+    valueX() {
+        return this.midX + Math.cos(this.valueRadians()) * this.radius;
+    }
+    valueY() {
+        return this.midY - Math.sin(this.valueRadians()) * this.radius;
+    }
+    largeArc() {
+        return Math.abs(this.zeroRadians() - this.valueRadians()) < Math.PI ? 0 : 1;
+    }
+    sweep() {
+        return this.valueRadians() > this.zeroRadians() ? 0 : 1;
+    }
+    valueToDisplay() {
+        return this.valueTemplate.replace("{value}", this._value.toString());
+    }
+    get _value() {
+        return this.value != null ? this.value : this.min;
+    }
+}
+Knob.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Knob, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+Knob.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Knob, selector: "p-knob", inputs: { styleClass: "styleClass", style: "style", severity: "severity", valueColor: "valueColor", rangeColor: "rangeColor", textColor: "textColor", valueTemplate: "valueTemplate", name: "name", size: "size", step: "step", min: "min", max: "max", strokeWidth: "strokeWidth", disabled: "disabled", showValue: "showValue", readonly: "readonly" }, outputs: { onChange: "onChange" }, host: { classAttribute: "p-element" }, providers: [KNOB_VALUE_ACCESSOR], ngImport: i0, template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+        <svg viewBox="0 0 100 100" [style.width]="size + 'px'" [style.height]="size + 'px'" (click)="onClick($event)" (mousedown)="onMouseDown($event)" (mouseup)="onMouseUp($event)"
+            (touchstart)="onTouchStart($event)" (touchend)="onTouchEnd($event)">
+            <path [attr.d]="rangePath()" [attr.stroke-width]="strokeWidth" [attr.stroke]="rangeColor" class="p-knob-range"></path>
+            <path [attr.d]="valuePath()" [attr.stroke-width]="strokeWidth" [attr.stroke]="valueColor" class="p-knob-value"></path>
+            <text *ngIf="showValue" [attr.x]="50" [attr.y]="57" text-anchor="middle" [attr.fill]="textColor" class="p-knob-text" [attr.name]="name">{{valueToDisplay()}}</text>
+        </svg>
+        </div>
+    `, isInline: true, styles: ["@keyframes dash-frame{to{stroke-dashoffset:0}}.p-knob-range{fill:none;transition:stroke .1s ease-in}.p-knob-value{animation-name:dash-frame;animation-fill-mode:forwards;fill:none}.p-knob-text{font-size:1.3rem;text-align:center}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Knob, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-knob', template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+        <svg viewBox="0 0 100 100" [style.width]="size + 'px'" [style.height]="size + 'px'" (click)="onClick($event)" (mousedown)="onMouseDown($event)" (mouseup)="onMouseUp($event)"
+            (touchstart)="onTouchStart($event)" (touchend)="onTouchEnd($event)">
+            <path [attr.d]="rangePath()" [attr.stroke-width]="strokeWidth" [attr.stroke]="rangeColor" class="p-knob-range"></path>
+            <path [attr.d]="valuePath()" [attr.stroke-width]="strokeWidth" [attr.stroke]="valueColor" class="p-knob-value"></path>
+            <text *ngIf="showValue" [attr.x]="50" [attr.y]="57" text-anchor="middle" [attr.fill]="textColor" class="p-knob-text" [attr.name]="name">{{valueToDisplay()}}</text>
+        </svg>
+        </div>
+    `, providers: [KNOB_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: ["@keyframes dash-frame{to{stroke-dashoffset:0}}.p-knob-range{fill:none;transition:stroke .1s ease-in}.p-knob-value{animation-name:dash-frame;animation-fill-mode:forwards;fill:none}.p-knob-text{font-size:1.3rem;text-align:center}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], severity: [{
+                type: Input
+            }], valueColor: [{
+                type: Input
+            }], rangeColor: [{
+                type: Input
+            }], textColor: [{
+                type: Input
+            }], valueTemplate: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], step: [{
+                type: Input
+            }], min: [{
+                type: Input
+            }], max: [{
+                type: Input
+            }], strokeWidth: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], showValue: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], onChange: [{
+                type: Output
+            }] } });
+class KnobModule {
+}
+KnobModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KnobModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+KnobModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KnobModule, declarations: [Knob], imports: [CommonModule], exports: [Knob] });
+KnobModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KnobModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: KnobModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Knob],
+                    declarations: [Knob]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { KNOB_VALUE_ACCESSOR, Knob, KnobModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-knob.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-knob.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-knob.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-knob.mjs","sources":["../../src/app/components/knob/knob.ts","../../src/app/components/knob/primeng-knob.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, forwardRef, ChangeDetectorRef, ElementRef, Output, EventEmitter} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const KNOB_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Knob),\n    multi: true\n};\n\n@Component({\n    selector: 'p-knob',\n    template: `\n        <div [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\">\n        <svg viewBox=\"0 0 100 100\" [style.width]=\"size + 'px'\" [style.height]=\"size + 'px'\" (click)=\"onClick($event)\" (mousedown)=\"onMouseDown($event)\" (mouseup)=\"onMouseUp($event)\"\n            (touchstart)=\"onTouchStart($event)\" (touchend)=\"onTouchEnd($event)\">\n            <path [attr.d]=\"rangePath()\" [attr.stroke-width]=\"strokeWidth\" [attr.stroke]=\"rangeColor\" class=\"p-knob-range\"></path>\n            <path [attr.d]=\"valuePath()\" [attr.stroke-width]=\"strokeWidth\" [attr.stroke]=\"valueColor\" class=\"p-knob-value\"></path>\n            <text *ngIf=\"showValue\" [attr.x]=\"50\" [attr.y]=\"57\" text-anchor=\"middle\" [attr.fill]=\"textColor\" class=\"p-knob-text\" [attr.name]=\"name\">{{valueToDisplay()}}</text>\n        </svg>\n        </div>\n    `,\n    providers: [KNOB_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./knob.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Knob {\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() severity: string;\n\n    @Input() valueColor: string = \"var(--primary-color, Black)\";\n\n    @Input() rangeColor: string = \"var(--surface-d, LightGray)\";\n\n    @Input() textColor: string = \"var(--text-color-secondary, Black)\";\n\n    @Input() valueTemplate: string = \"{value}\";\n\n    @Input() name: string;\n\n    @Input() size: number = 100;\n\n    @Input() step: number = 1;\n\n    @Input() min: number = 0;\n\n    @Input() max: number = 100;\n\n    @Input() strokeWidth: number = 14;\n\n    @Input() disabled: boolean;\n\n    @Input() showValue: boolean = true;\n\n    @Input() readonly: boolean = false;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    radius: number = 40;\n\n    midX: number = 50;\n\n    midY: number = 50;\n\n    minRadians: number = 4 * Math.PI / 3;\n\n    maxRadians: number = -Math.PI / 3;\n\n    value: number = null;\n\n    windowMouseMoveListener: any;\n\n    windowMouseUpListener: any;\n\n    windowTouchMoveListener: any;\n\n    windowTouchEndListener: any;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    constructor(private cd: ChangeDetectorRef, private el: ElementRef) { }\n\n    mapRange(x, inMin, inMax, outMin, outMax) {\n        return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n    }\n\n    onClick(event) {\n        if (!this.disabled && !this.readonly) {\n            this.updateValue(event.offsetX, event.offsetY);\n        }\n    }\n\n    updateValue(offsetX, offsetY) {\n        let dx = offsetX - this.size / 2;\n        let dy =  this.size / 2 - offsetY;\n        let angle = Math.atan2(dy, dx);\n        let start = -Math.PI / 2 - Math.PI / 6;\n        this.updateModel(angle, start);\n    }\n\n    updateModel(angle, start) {\n        let mappedValue;\n        if (angle > this.maxRadians)\n            mappedValue = this.mapRange(angle, this.minRadians, this.maxRadians, this.min, this.max);\n        else if (angle < start)\n            mappedValue = this.mapRange(angle + 2 * Math.PI, this.minRadians, this.maxRadians, this.min, this.max);\n        else\n            return;\n\n        let newValue = Math.round((mappedValue - this.min) / this.step) * this.step + this.min;\n        this.value = newValue;\n        this.onModelChange(this.value);\n        this.onChange.emit(this.value);\n    }\n\n    onMouseDown(event) {\n        if (!this.disabled && !this.readonly) {\n            this.windowMouseMoveListener = this.onMouseMove.bind(this)\n            this.windowMouseUpListener = this.onMouseUp.bind(this)\n            window.addEventListener('mousemove', this.windowMouseMoveListener);\n            window.addEventListener('mouseup', this.windowMouseUpListener);\n            event.preventDefault();\n        }\n    }\n\n    onMouseUp(event) {\n        if (!this.disabled && !this.readonly) {\n            window.removeEventListener('mousemove', this.windowMouseMoveListener);\n            window.removeEventListener('mouseup', this.windowMouseUpListener);\n            this.windowMouseUpListener = null;\n            this.windowMouseMoveListener = null;\n            event.preventDefault();\n        }\n    }\n\n    onTouchStart(event) {\n        if (!this.disabled && !this.readonly) {\n            this.windowTouchMoveListener = this.onTouchMove.bind(this);\n            this.windowTouchEndListener = this.onTouchEnd.bind(this);\n            window.addEventListener('touchmove', this.windowTouchMoveListener);\n            window.addEventListener('touchend', this.windowTouchEndListener);\n            event.preventDefault();\n        }\n    }\n\n    onTouchEnd(event) {\n        if (!this.disabled && !this.readonly) {\n            window.removeEventListener('touchmove', this.windowTouchMoveListener);\n            window.removeEventListener('touchend', this.windowTouchEndListener);\n            this.windowTouchMoveListener = null;\n            this.windowTouchEndListener = null;\n            event.preventDefault();\n        }\n    }\n\n    onMouseMove(event) {\n        if (!this.disabled && !this.readonly) {\n            this.updateValue(event.offsetX, event.offsetY);\n            event.preventDefault();\n        }\n    }\n\n    onTouchMove(event) {\n        if (!this.disabled && !this.readonly && event.touches.length == 1) {\n            const rect = this.el.nativeElement.children[0].getBoundingClientRect();\n            const touch = event.targetTouches.item(0);\n            const offsetX = touch.clientX - rect.left;\n            const offsetY = touch.clientY - rect.top;\n            this.updateValue(offsetX, offsetY);\n        }\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    containerClass() {\n        return {\n            'p-knob p-component': true,\n            'p-disabled': this.disabled\n        };\n    }\n\n    rangePath() {\n        return `M ${this.minX()} ${this.minY()} A ${this.radius} ${this.radius} 0 1 1 ${this.maxX()} ${this.maxY()}`;\n    }\n\n    valuePath() {\n        return `M ${this.zeroX()} ${this.zeroY()} A ${this.radius} ${this.radius} 0 ${this.largeArc()} ${this.sweep()} ${this.valueX()} ${this.valueY()}`;\n    }\n\n    zeroRadians() {\n        if (this.min > 0 && this.max > 0)\n            return this.mapRange(this.min, this.min, this.max, this.minRadians, this.maxRadians);\n        else\n            return this.mapRange(0, this.min, this.max, this.minRadians, this.maxRadians);\n    }\n\n    valueRadians() {\n        return this.mapRange(this._value, this.min, this.max, this.minRadians, this.maxRadians);\n    }\n\n    minX() {\n        return this.midX + Math.cos(this.minRadians) * this.radius;\n    }\n\n    minY() {\n        return this.midY - Math.sin(this.minRadians) * this.radius;\n    }\n\n    maxX() {\n        return this.midX + Math.cos(this.maxRadians) * this.radius;\n    }\n\n    maxY() {\n        return this.midY - Math.sin(this.maxRadians) * this.radius;\n    }\n\n    zeroX() {\n        return this.midX + Math.cos(this.zeroRadians()) * this.radius;\n    }\n\n    zeroY() {\n        return this.midY - Math.sin(this.zeroRadians()) * this.radius;\n    }\n\n    valueX() {\n        return this.midX + Math.cos(this.valueRadians()) * this.radius;\n    }\n\n    valueY() {\n        return this.midY - Math.sin(this.valueRadians()) * this.radius;\n    }\n\n    largeArc() {\n        return Math.abs(this.zeroRadians() - this.valueRadians()) < Math.PI ? 0 : 1;\n    }\n\n    sweep() {\n        return this.valueRadians() > this.zeroRadians() ? 0 : 1;\n    }\n\n    valueToDisplay() {\n        return this.valueTemplate.replace(\"{value}\", this._value.toString());\n    }\n\n    get _value(): number {\n        return this.value != null ? this.value : this.min;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Knob],\n    declarations: [Knob]\n})\nexport class KnobModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-lightbox.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-lightbox.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-lightbox.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,266 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+
+class Lightbox {
+    constructor(el, renderer, cd) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.type = 'image';
+        this.effectDuration = '500ms';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.closeOnEscape = true;
+    }
+    onImageClick(event, image, i, content) {
+        this.index = i;
+        this.loading = true;
+        content.style.width = 32 + 'px';
+        content.style.height = 32 + 'px';
+        this.preventDocumentClickListener = true;
+        this.show();
+        this.displayImage(image);
+        event.preventDefault();
+    }
+    ngAfterViewInit() {
+        this.panel = DomHandler.findSingle(this.el.nativeElement, '.ui-lightbox ');
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.panel);
+            else
+                DomHandler.appendChild(this.panel, this.appendTo);
+        }
+    }
+    onLinkClick(event, content) {
+        this.preventDocumentClickListener = true;
+        this.show();
+        event.preventDefault();
+    }
+    displayImage(image) {
+        setTimeout(() => {
+            this.cd.markForCheck();
+            this.currentImage = image;
+            this.captionText = image.title;
+            this.center();
+        }, 1000);
+    }
+    show() {
+        this.mask = document.createElement('div');
+        DomHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-dialog-mask');
+        document.body.appendChild(this.mask);
+        if (this.autoZIndex) {
+            this.zindex = this.baseZIndex + (++DomHandler.zindex);
+        }
+        this.mask.style.zIndex = this.zindex - 1;
+        this.center();
+        this.visible = true;
+        this.bindGlobalListeners();
+    }
+    hide(event) {
+        this.captionText = null;
+        this.index = null;
+        this.currentImage = null;
+        this.visible = false;
+        if (this.mask) {
+            document.body.removeChild(this.mask);
+            this.mask = null;
+        }
+        this.unbindGlobalListeners();
+        event.preventDefault();
+    }
+    center() {
+        let elementWidth = DomHandler.getOuterWidth(this.panel);
+        let elementHeight = DomHandler.getOuterHeight(this.panel);
+        if (elementWidth == 0 && elementHeight == 0) {
+            this.panel.style.visibility = 'hidden';
+            this.panel.style.display = 'block';
+            elementWidth = DomHandler.getOuterWidth(this.panel);
+            elementHeight = DomHandler.getOuterHeight(this.panel);
+            this.panel.style.display = 'none';
+            this.panel.style.visibility = 'visible';
+        }
+    }
+    onImageLoad(event, content) {
+        let image = event.target;
+        image.style.visibility = 'hidden';
+        image.style.display = 'block';
+        let imageWidth = DomHandler.getOuterWidth(image);
+        let imageHeight = DomHandler.getOuterHeight(image);
+        image.style.display = 'none';
+        image.style.visibility = 'visible';
+        content.style.width = imageWidth + 'px';
+        content.style.height = imageHeight + 'px';
+        this.panel.style.left = parseInt(this.panel.style.left) + (DomHandler.getOuterWidth(this.panel) - imageWidth) / 2 + 'px';
+        this.panel.style.top = parseInt(this.panel.style.top) + (DomHandler.getOuterHeight(this.panel) - imageHeight) / 2 + 'px';
+        setTimeout(() => {
+            this.cd.markForCheck();
+            DomHandler.fadeIn(image, 500);
+            image.style.display = 'block';
+            //this.captionText = this.currentImage.title;
+            this.loading = false;
+        }, parseInt(this.effectDuration));
+    }
+    prev(placeholder) {
+        this.captionText = null;
+        this.loading = true;
+        placeholder.style.display = 'none';
+        if (this.index > 0) {
+            this.displayImage(this.images[--this.index]);
+        }
+    }
+    next(placeholder) {
+        this.captionText = null;
+        this.loading = true;
+        placeholder.style.display = 'none';
+        if (this.index <= (this.images.length - 1)) {
+            this.displayImage(this.images[++this.index]);
+        }
+    }
+    bindGlobalListeners() {
+        const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+        this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {
+            if (!this.preventDocumentClickListener && this.visible) {
+                this.hide(event);
+            }
+            this.preventDocumentClickListener = false;
+            this.cd.markForCheck();
+        });
+        if (this.closeOnEscape && !this.documentEscapeListener) {
+            this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
+                if (event.which == 27) {
+                    if (parseInt(this.panel.style.zIndex) === (DomHandler.zindex + this.baseZIndex)) {
+                        this.hide(event);
+                    }
+                }
+            });
+        }
+    }
+    unbindGlobalListeners() {
+        if (this.documentEscapeListener) {
+            this.documentEscapeListener();
+            this.documentEscapeListener = null;
+        }
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    get leftVisible() {
+        return this.images && this.images.length && this.index != 0 && !this.loading;
+    }
+    get rightVisible() {
+        return this.images && this.images.length && this.index < (this.images.length - 1) && !this.loading;
+    }
+    ngOnDestroy() {
+        this.unbindGlobalListeners();
+        if (this.appendTo) {
+            this.el.nativeElement.appendChild(this.panel);
+        }
+    }
+}
+Lightbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Lightbox, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Lightbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Lightbox, selector: "p-lightbox", inputs: { images: "images", type: "type", style: "style", styleClass: "styleClass", appendTo: "appendTo", easing: "easing", effectDuration: "effectDuration", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", closeOnEscape: "closeOnEscape" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngStyle]="style" [class]="styleClass" *ngIf="(type == 'image')">
+            <a *ngFor="let image of images; let i = index;" [href]="image.source" (click)="onImageClick($event,image,i,content)">
+                <img [src]="image.thumbnail" [title]="image.title" [alt]="image.alt">
+            </a>
+        </div>
+        <span [ngStyle]="style" [class]="styleClass" *ngIf="(type == 'content')" (click)="onLinkClick($event,content)">
+            <ng-content select="a"></ng-content>
+        </span>
+        <div class="ui-lightbox ui-widget ui-corner-all ui-shadow" [style.display]="visible ? 'block' : 'none'" [style.zIndex]="zindex"
+            [ngClass]="{'ui-lightbox-loading': loading}"
+            [style.transitionProperty]="'all'" [style.transitionDuration]="effectDuration" [style.transitionTimingFunction]="easing" (click)="preventDocumentClickListener=true">
+           <div class="ui-lightbox-content-wrapper">
+              <a class="ui-state-default ui-lightbox-nav-left ui-corner-right" [style.zIndex]="zindex + 1" (click)="prev(img)"
+                [ngClass]="{'ui-helper-hidden':!leftVisible}"><span class="ui-lightbox-nav-icon pi pi-chevron-left"></span></a>
+              <div #content class="ui-lightbox-content ui-corner-all"
+                [style.transitionProperty]="'width,height'" [style.transitionDuration]="effectDuration" [style.transitionTimingFunction]="easing">
+                <img #img [src]="currentImage ? currentImage.source||'' : ''" (load)="onImageLoad($event,content)" style="display:none">
+                <ng-content></ng-content>
+              </div>
+              <a class="ui-state-default ui-lightbox-nav-right ui-corner-left ui-helper-hidden" [style.zIndex]="zindex + 1" (click)="next(img)"
+                [ngClass]="{'ui-helper-hidden':!rightVisible}"><span class="ui-lightbox-nav-icon pi pi-chevron-right"></span></a>
+           </div>
+           <div class="ui-lightbox-caption ui-widget-header" [style.display]="captionText ? 'block' : 'none'">
+              <span class="ui-lightbox-caption-text">{{captionText}}</span><a class="ui-lightbox-close ui-corner-all" tabindex="0" (click)="hide($event)" (keydown.enter)="hide($event)"><span class="pi pi-times"></span></a>
+              <div style="clear:both"></div>
+           </div>
+        </div>
+    `, isInline: true, styles: [".ui-lightbox{position:fixed;display:none;top:50%;left:50%;transform:translate(-50%) translateY(-50%)}.ui-lightbox-content-wrapper{position:relative}.ui-lightbox-content{position:relative;margin:0;padding:0;background-color:#000}.ui-lightbox-nav-right,.ui-lightbox-nav-left{position:absolute;top:50%;cursor:pointer}.ui-lightbox-nav-left{left:0}.ui-lightbox-nav-right{right:0}.ui-lightbox-loading .ui-lightbox-content{background:url(data:image/gif;base64,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) #000000 center center no-repeat}.ui-lightbox-caption{padding:.2em .4em;display:none}.ui-lightbox-caption-text{margin:.3em 0 .1em;float:left}.ui-lightbox-close{float:right;margin:0;padding:.125em}.ui-lightbox-close.ui-state-hover{padding:0}.ui-lightbox-nav-left,.ui-lightbox-nav-right{opacity:.5}.ui-lightbox-nav-left:hover,.ui-lightbox-nav-right:hover{opacity:1}\n", ".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translate(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0px!important;left:0px!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Lightbox, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-lightbox', template: `
+        <div [ngStyle]="style" [class]="styleClass" *ngIf="(type == 'image')">
+            <a *ngFor="let image of images; let i = index;" [href]="image.source" (click)="onImageClick($event,image,i,content)">
+                <img [src]="image.thumbnail" [title]="image.title" [alt]="image.alt">
+            </a>
+        </div>
+        <span [ngStyle]="style" [class]="styleClass" *ngIf="(type == 'content')" (click)="onLinkClick($event,content)">
+            <ng-content select="a"></ng-content>
+        </span>
+        <div class="ui-lightbox ui-widget ui-corner-all ui-shadow" [style.display]="visible ? 'block' : 'none'" [style.zIndex]="zindex"
+            [ngClass]="{'ui-lightbox-loading': loading}"
+            [style.transitionProperty]="'all'" [style.transitionDuration]="effectDuration" [style.transitionTimingFunction]="easing" (click)="preventDocumentClickListener=true">
+           <div class="ui-lightbox-content-wrapper">
+              <a class="ui-state-default ui-lightbox-nav-left ui-corner-right" [style.zIndex]="zindex + 1" (click)="prev(img)"
+                [ngClass]="{'ui-helper-hidden':!leftVisible}"><span class="ui-lightbox-nav-icon pi pi-chevron-left"></span></a>
+              <div #content class="ui-lightbox-content ui-corner-all"
+                [style.transitionProperty]="'width,height'" [style.transitionDuration]="effectDuration" [style.transitionTimingFunction]="easing">
+                <img #img [src]="currentImage ? currentImage.source||'' : ''" (load)="onImageLoad($event,content)" style="display:none">
+                <ng-content></ng-content>
+              </div>
+              <a class="ui-state-default ui-lightbox-nav-right ui-corner-left ui-helper-hidden" [style.zIndex]="zindex + 1" (click)="next(img)"
+                [ngClass]="{'ui-helper-hidden':!rightVisible}"><span class="ui-lightbox-nav-icon pi pi-chevron-right"></span></a>
+           </div>
+           <div class="ui-lightbox-caption ui-widget-header" [style.display]="captionText ? 'block' : 'none'">
+              <span class="ui-lightbox-caption-text">{{captionText}}</span><a class="ui-lightbox-close ui-corner-all" tabindex="0" (click)="hide($event)" (keydown.enter)="hide($event)"><span class="pi pi-times"></span></a>
+              <div style="clear:both"></div>
+           </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".ui-lightbox{position:fixed;display:none;top:50%;left:50%;transform:translate(-50%) translateY(-50%)}.ui-lightbox-content-wrapper{position:relative}.ui-lightbox-content{position:relative;margin:0;padding:0;background-color:#000}.ui-lightbox-nav-right,.ui-lightbox-nav-left{position:absolute;top:50%;cursor:pointer}.ui-lightbox-nav-left{left:0}.ui-lightbox-nav-right{right:0}.ui-lightbox-loading .ui-lightbox-content{background:url(data:image/gif;base64,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) #000000 center center no-repeat}.ui-lightbox-caption{padding:.2em .4em;display:none}.ui-lightbox-caption-text{margin:.3em 0 .1em;float:left}.ui-lightbox-close{float:right;margin:0;padding:.125em}.ui-lightbox-close.ui-state-hover{padding:0}.ui-lightbox-nav-left,.ui-lightbox-nav-right{opacity:.5}.ui-lightbox-nav-left:hover,.ui-lightbox-nav-right:hover{opacity:1}\n", ".p-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.p-dialog-mask.p-component-overlay{pointer-events:auto}.p-dialog{display:flex;flex-direction:column;pointer-events:auto;max-height:90%;transform:scale(1);position:relative}.p-dialog-content{overflow-y:auto;flex-grow:1}.p-dialog-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.p-dialog-footer{flex-shrink:0}.p-dialog .p-dialog-header-icons{display:flex;align-items:center}.p-dialog .p-dialog-header-icon{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-fluid .p-dialog-footer .p-button{width:auto}.p-dialog-top .p-dialog,.p-dialog-bottom .p-dialog,.p-dialog-left .p-dialog,.p-dialog-right .p-dialog,.p-dialog-top-left .p-dialog,.p-dialog-top-right .p-dialog,.p-dialog-bottom-left .p-dialog,.p-dialog-bottom-right .p-dialog{margin:.75rem;transform:translate(0)}.p-dialog-maximized{transition:none;transform:none;width:100vw!important;height:100vh!important;top:0px!important;left:0px!important;max-height:100%;height:100%}.p-dialog-maximized .p-dialog-content{flex-grow:1}.p-dialog-left{justify-content:flex-start}.p-dialog-right{justify-content:flex-end}.p-dialog-top{align-items:flex-start}.p-dialog-top-left{justify-content:flex-start;align-items:flex-start}.p-dialog-top-right{justify-content:flex-end;align-items:flex-start}.p-dialog-bottom{align-items:flex-end}.p-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.p-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.p-dialog .p-resizable-handle{position:absolute;font-size:.1px;display:block;cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.p-confirm-dialog .p-dialog-content{display:flex;align-items:center}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { images: [{
+                type: Input
+            }], type: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], easing: [{
+                type: Input
+            }], effectDuration: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], closeOnEscape: [{
+                type: Input
+            }] } });
+class LightboxModule {
+}
+LightboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: LightboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+LightboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: LightboxModule, declarations: [Lightbox], imports: [CommonModule], exports: [Lightbox] });
+LightboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: LightboxModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: LightboxModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Lightbox],
+                    declarations: [Lightbox]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Lightbox, LightboxModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-lightbox.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-lightbox.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-lightbox.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-lightbox.mjs","sources":["../../src/app/components/lightbox/lightbox.ts","../../src/app/components/lightbox/primeng-lightbox.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,Input,Renderer2,AfterViewInit,OnDestroy,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\n\n@Component({\n    selector: 'p-lightbox',\n    template: `\n        <div [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"(type == 'image')\">\n            <a *ngFor=\"let image of images; let i = index;\" [href]=\"image.source\" (click)=\"onImageClick($event,image,i,content)\">\n                <img [src]=\"image.thumbnail\" [title]=\"image.title\" [alt]=\"image.alt\">\n            </a>\n        </div>\n        <span [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"(type == 'content')\" (click)=\"onLinkClick($event,content)\">\n            <ng-content select=\"a\"></ng-content>\n        </span>\n        <div class=\"ui-lightbox ui-widget ui-corner-all ui-shadow\" [style.display]=\"visible ? 'block' : 'none'\" [style.zIndex]=\"zindex\"\n            [ngClass]=\"{'ui-lightbox-loading': loading}\"\n            [style.transitionProperty]=\"'all'\" [style.transitionDuration]=\"effectDuration\" [style.transitionTimingFunction]=\"easing\" (click)=\"preventDocumentClickListener=true\">\n           <div class=\"ui-lightbox-content-wrapper\">\n              <a class=\"ui-state-default ui-lightbox-nav-left ui-corner-right\" [style.zIndex]=\"zindex + 1\" (click)=\"prev(img)\"\n                [ngClass]=\"{'ui-helper-hidden':!leftVisible}\"><span class=\"ui-lightbox-nav-icon pi pi-chevron-left\"></span></a>\n              <div #content class=\"ui-lightbox-content ui-corner-all\"\n                [style.transitionProperty]=\"'width,height'\" [style.transitionDuration]=\"effectDuration\" [style.transitionTimingFunction]=\"easing\">\n                <img #img [src]=\"currentImage ? currentImage.source||'' : ''\" (load)=\"onImageLoad($event,content)\" style=\"display:none\">\n                <ng-content></ng-content>\n              </div>\n              <a class=\"ui-state-default ui-lightbox-nav-right ui-corner-left ui-helper-hidden\" [style.zIndex]=\"zindex + 1\" (click)=\"next(img)\"\n                [ngClass]=\"{'ui-helper-hidden':!rightVisible}\"><span class=\"ui-lightbox-nav-icon pi pi-chevron-right\"></span></a>\n           </div>\n           <div class=\"ui-lightbox-caption ui-widget-header\" [style.display]=\"captionText ? 'block' : 'none'\">\n              <span class=\"ui-lightbox-caption-text\">{{captionText}}</span><a class=\"ui-lightbox-close ui-corner-all\" tabindex=\"0\" (click)=\"hide($event)\" (keydown.enter)=\"hide($event)\"><span class=\"pi pi-times\"></span></a>\n              <div style=\"clear:both\"></div>\n           </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.Default,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: [\n        './lightbox.css',\n        '../dialog/dialog.css'\n    ],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Lightbox implements AfterViewInit,OnDestroy {\n\n    @Input() images: any[];\n\n    @Input() type: string = 'image';\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() appendTo: any;\n\n    @Input() easing: 'ease-out';\n\n    @Input() effectDuration: any = '500ms';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() closeOnEscape: boolean = true;\n\n    public visible: boolean;\n\n    public loading: boolean;\n\n    public currentImage: any;\n\n    public captionText: string;\n\n    public zindex: any;\n\n    public panel: any;\n\n    public index: number;\n\n    public mask: any;\n\n    public preventDocumentClickListener: boolean;\n\n    public documentClickListener: any;\n\n    public documentEscapeListener: any;\n\n    constructor(public el: ElementRef, public renderer: Renderer2,private cd: ChangeDetectorRef) {}\n\n    onImageClick(event,image,i,content) {\n        this.index = i;\n        this.loading = true;\n        content.style.width = 32 + 'px';\n        content.style.height = 32 + 'px';\n        this.preventDocumentClickListener = true;\n        this.show();\n        this.displayImage(image);\n        event.preventDefault();\n    }\n\n    ngAfterViewInit() {\n        this.panel = DomHandler.findSingle(this.el.nativeElement, '.ui-lightbox ');\n\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panel);\n            else\n                DomHandler.appendChild(this.panel, this.appendTo);\n        }\n    }\n\n    onLinkClick(event,content) {\n        this.preventDocumentClickListener = true;\n        this.show();\n        event.preventDefault();\n    }\n\n    displayImage(image) {\n        setTimeout(() => {\n            this.cd.markForCheck();\n            this.currentImage = image;\n            this.captionText = image.title;\n            this.center();\n        }, 1000);\n    }\n\n    show() {\n        this.mask = document.createElement('div');\n\n        DomHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-dialog-mask');\n        document.body.appendChild(this.mask);\n        if (this.autoZIndex) {\n            this.zindex = this.baseZIndex + (++DomHandler.zindex);\n        }\n        this.mask.style.zIndex = this.zindex - 1;\n        this.center();\n        this.visible = true;\n        this.bindGlobalListeners();\n    }\n\n    hide(event) {\n        this.captionText = null;\n        this.index = null;\n        this.currentImage = null;\n        this.visible = false;\n\n        if (this.mask) {\n            document.body.removeChild(this.mask);\n            this.mask = null;\n        }\n\n        this.unbindGlobalListeners();\n        event.preventDefault();\n    }\n\n    center() {\n        let elementWidth = DomHandler.getOuterWidth(this.panel);\n        let elementHeight = DomHandler.getOuterHeight(this.panel);\n        if (elementWidth == 0 && elementHeight == 0) {\n            this.panel.style.visibility = 'hidden';\n            this.panel.style.display = 'block';\n            elementWidth = DomHandler.getOuterWidth(this.panel);\n            elementHeight = DomHandler.getOuterHeight(this.panel);\n            this.panel.style.display = 'none';\n            this.panel.style.visibility = 'visible';\n        }\n    }\n\n    onImageLoad(event,content) {\n        let image = event.target;\n        image.style.visibility = 'hidden';\n        image.style.display = 'block';\n        let imageWidth = DomHandler.getOuterWidth(image);\n        let imageHeight = DomHandler.getOuterHeight(image);\n        image.style.display = 'none';\n        image.style.visibility = 'visible';\n\n        content.style.width = imageWidth + 'px';\n        content.style.height = imageHeight + 'px';\n        this.panel.style.left = parseInt(this.panel.style.left) + (DomHandler.getOuterWidth(this.panel) - imageWidth) / 2 + 'px';\n        this.panel.style.top = parseInt(this.panel.style.top) + (DomHandler.getOuterHeight(this.panel) - imageHeight) / 2 + 'px';\n\n        setTimeout(() => {\n            this.cd.markForCheck();\n            DomHandler.fadeIn(image, 500);\n            image.style.display = 'block';\n            //this.captionText = this.currentImage.title;\n            this.loading = false;\n        }, parseInt(this.effectDuration));\n    }\n\n    prev(placeholder: any) {\n        this.captionText = null;\n        this.loading = true;\n        placeholder.style.display = 'none';\n        if (this.index > 0) {\n            this.displayImage(this.images[--this.index]);\n        }\n    }\n\n    next(placeholder: any) {\n        this.captionText = null;\n        this.loading = true;\n        placeholder.style.display = 'none';\n        if (this.index <= (this.images.length - 1)) {\n            this.displayImage(this.images[++this.index]);\n        }\n    }\n\n    bindGlobalListeners() {\n        const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n        this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n            if (!this.preventDocumentClickListener && this.visible) {\n                this.hide(event);\n            }\n            this.preventDocumentClickListener = false;\n            this.cd.markForCheck();\n        });\n        if (this.closeOnEscape && !this.documentEscapeListener) {\n            this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {\n                    if (event.which == 27) {\n                    if (parseInt(this.panel.style.zIndex) === (DomHandler.zindex + this.baseZIndex)) {\n                        this.hide(event);\n                    }\n                }\n            });\n        }\n    }\n\n    unbindGlobalListeners() {\n        if (this.documentEscapeListener){\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    get leftVisible():boolean {\n        return this.images && this.images.length && this.index != 0 && !this.loading;\n    }\n\n    get rightVisible():boolean {\n        return this.images && this.images.length && this.index < (this.images.length - 1) && !this.loading;\n    }\n\n    ngOnDestroy() {\n        this.unbindGlobalListeners();\n\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panel);\n        }\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Lightbox],\n    declarations: [Lightbox]\n})\nexport class LightboxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-listbox.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-listbox.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-listbox.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,703 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChild, ContentChildren, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i1 from 'primeng/api';
+import { TranslationKeys, Header, Footer, PrimeTemplate, SharedModule } from 'primeng/api';
+import { DomHandler } from 'primeng/dom';
+import { ObjectUtils } from 'primeng/utils';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+
+const LISTBOX_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Listbox),
+    multi: true
+};
+class Listbox {
+    constructor(el, cd, filterService, config) {
+        this.el = el;
+        this.cd = cd;
+        this.filterService = filterService;
+        this.config = config;
+        this.checkbox = false;
+        this.filter = false;
+        this.filterMatchMode = 'contains';
+        this.metaKeySelection = true;
+        this.showToggleAll = true;
+        this.optionGroupChildren = "items";
+        this.onChange = new EventEmitter();
+        this.onClick = new EventEmitter();
+        this.onDblClick = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    get options() {
+        return this._options;
+    }
+    set options(val) {
+        this._options = val;
+        if (this.hasFilter())
+            this.activateFilter();
+    }
+    get filterValue() {
+        return this._filterValue;
+    }
+    set filterValue(val) {
+        this._filterValue = val;
+        this.activateFilter();
+    }
+    ngOnInit() {
+        this.translationSubscription = this.config.translationObserver.subscribe(() => {
+            this.cd.markForCheck();
+        });
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                case 'group':
+                    this.groupTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                case 'empty':
+                    this.emptyTemplate = item.template;
+                    break;
+                case 'emptyfilter':
+                    this.emptyFilterTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    getOptionLabel(option) {
+        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);
+    }
+    getOptionGroupChildren(optionGroup) {
+        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;
+    }
+    getOptionGroupLabel(optionGroup) {
+        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);
+    }
+    getOptionValue(option) {
+        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);
+    }
+    isOptionDisabled(option) {
+        return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);
+    }
+    writeValue(value) {
+        this.value = value;
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    onOptionClick(event, option) {
+        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {
+            return;
+        }
+        if (this.multiple) {
+            if (this.checkbox)
+                this.onOptionClickCheckbox(event, option);
+            else
+                this.onOptionClickMultiple(event, option);
+        }
+        else {
+            this.onOptionClickSingle(event, option);
+        }
+        this.onClick.emit({
+            originalEvent: event,
+            option: option,
+            value: this.value
+        });
+        this.optionTouched = false;
+    }
+    onOptionTouchEnd(option) {
+        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {
+            return;
+        }
+        this.optionTouched = true;
+    }
+    onOptionDoubleClick(event, option) {
+        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {
+            return;
+        }
+        this.onDblClick.emit({
+            originalEvent: event,
+            option: option,
+            value: this.value
+        });
+    }
+    onOptionClickSingle(event, option) {
+        let selected = this.isSelected(option);
+        let valueChanged = false;
+        let metaSelection = this.optionTouched ? false : this.metaKeySelection;
+        if (metaSelection) {
+            let metaKey = (event.metaKey || event.ctrlKey);
+            if (selected) {
+                if (metaKey) {
+                    this.value = null;
+                    valueChanged = true;
+                }
+            }
+            else {
+                this.value = this.getOptionValue(option);
+                valueChanged = true;
+            }
+        }
+        else {
+            this.value = selected ? null : this.getOptionValue(option);
+            valueChanged = true;
+        }
+        if (valueChanged) {
+            this.onModelChange(this.value);
+            this.onChange.emit({
+                originalEvent: event,
+                value: this.value
+            });
+        }
+    }
+    onOptionClickMultiple(event, option) {
+        let selected = this.isSelected(option);
+        let valueChanged = false;
+        let metaSelection = this.optionTouched ? false : this.metaKeySelection;
+        if (metaSelection) {
+            let metaKey = (event.metaKey || event.ctrlKey);
+            if (selected) {
+                if (metaKey) {
+                    this.removeOption(option);
+                }
+                else {
+                    this.value = [this.getOptionValue(option)];
+                }
+                valueChanged = true;
+            }
+            else {
+                this.value = (metaKey) ? this.value || [] : [];
+                this.value = [...this.value, this.getOptionValue(option)];
+                valueChanged = true;
+            }
+        }
+        else {
+            if (selected) {
+                this.removeOption(option);
+            }
+            else {
+                this.value = [...this.value || [], this.getOptionValue(option)];
+            }
+            valueChanged = true;
+        }
+        if (valueChanged) {
+            this.onModelChange(this.value);
+            this.onChange.emit({
+                originalEvent: event,
+                value: this.value
+            });
+        }
+    }
+    onOptionClickCheckbox(event, option) {
+        if (this.disabled || this.readonly) {
+            return;
+        }
+        let selected = this.isSelected(option);
+        if (selected) {
+            this.removeOption(option);
+        }
+        else {
+            this.value = this.value ? this.value : [];
+            this.value = [...this.value, this.getOptionValue(option)];
+        }
+        this.onModelChange(this.value);
+        this.onChange.emit({
+            originalEvent: event,
+            value: this.value
+        });
+    }
+    removeOption(option) {
+        this.value = this.value.filter(val => !ObjectUtils.equals(val, this.getOptionValue(option), this.dataKey));
+    }
+    isSelected(option) {
+        let selected = false;
+        let optionValue = this.getOptionValue(option);
+        if (this.multiple) {
+            if (this.value) {
+                for (let val of this.value) {
+                    if (ObjectUtils.equals(val, optionValue, this.dataKey)) {
+                        selected = true;
+                        break;
+                    }
+                }
+            }
+        }
+        else {
+            selected = ObjectUtils.equals(this.value, optionValue, this.dataKey);
+        }
+        return selected;
+    }
+    get allChecked() {
+        let optionsToRender = this.optionsToRender;
+        if (!optionsToRender || optionsToRender.length === 0) {
+            return false;
+        }
+        else {
+            let selectedDisabledItemsLength = 0;
+            let unselectedDisabledItemsLength = 0;
+            let selectedEnabledItemsLength = 0;
+            let visibleOptionsLength = this.group ? 0 : this.optionsToRender.length;
+            for (let option of optionsToRender) {
+                if (!this.group) {
+                    let disabled = this.isOptionDisabled(option);
+                    let selected = this.isSelected(option);
+                    if (disabled) {
+                        if (selected)
+                            selectedDisabledItemsLength++;
+                        else
+                            unselectedDisabledItemsLength++;
+                    }
+                    else {
+                        if (selected)
+                            selectedEnabledItemsLength++;
+                        else
+                            return false;
+                    }
+                }
+                else {
+                    for (let opt of this.getOptionGroupChildren(option)) {
+                        let disabled = this.isOptionDisabled(opt);
+                        let selected = this.isSelected(opt);
+                        if (disabled) {
+                            if (selected)
+                                selectedDisabledItemsLength++;
+                            else
+                                unselectedDisabledItemsLength++;
+                        }
+                        else {
+                            if (selected)
+                                selectedEnabledItemsLength++;
+                            else {
+                                return false;
+                            }
+                        }
+                        visibleOptionsLength++;
+                    }
+                }
+            }
+            return (visibleOptionsLength === selectedDisabledItemsLength
+                || visibleOptionsLength === selectedEnabledItemsLength
+                || selectedEnabledItemsLength && visibleOptionsLength === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));
+        }
+    }
+    get optionsToRender() {
+        return this._filteredOptions || this.options;
+    }
+    get emptyMessageLabel() {
+        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
+    }
+    get emptyFilterMessageLabel() {
+        return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);
+    }
+    hasFilter() {
+        return this._filterValue && this._filterValue.trim().length > 0;
+    }
+    isEmpty(optionsToDisplay) {
+        return !optionsToDisplay || (optionsToDisplay && optionsToDisplay.length === 0);
+    }
+    onFilter(event) {
+        this._filterValue = event.target.value;
+        this.activateFilter();
+    }
+    activateFilter() {
+        if (this.hasFilter() && this._options) {
+            if (this.group) {
+                let searchFields = (this.optionLabel || 'label').split(',');
+                let filteredGroups = [];
+                for (let optgroup of this.options) {
+                    let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);
+                    if (filteredSubOptions && filteredSubOptions.length) {
+                        filteredGroups.push({ ...optgroup, ...{ [this.optionGroupChildren]: filteredSubOptions } });
+                    }
+                }
+                this._filteredOptions = filteredGroups;
+            }
+            else {
+                this._filteredOptions = this._options.filter(option => this.filterService.filters[this.filterMatchMode](this.getOptionLabel(option), this._filterValue, this.filterLocale));
+            }
+        }
+        else {
+            this._filteredOptions = null;
+        }
+    }
+    get toggleAllDisabled() {
+        let optionsToRender = this.optionsToRender;
+        if (!optionsToRender || optionsToRender.length === 0) {
+            return true;
+        }
+        else {
+            for (let option of optionsToRender) {
+                if (!this.isOptionDisabled(option))
+                    return false;
+            }
+            return true;
+        }
+    }
+    toggleAll(event) {
+        if (this.disabled || this.toggleAllDisabled || this.readonly) {
+            return;
+        }
+        let allChecked = this.allChecked;
+        if (allChecked)
+            this.uncheckAll();
+        else
+            this.checkAll();
+        this.onModelChange(this.value);
+        this.onChange.emit({ originalEvent: event, value: this.value });
+        event.preventDefault();
+    }
+    checkAll() {
+        let optionsToRender = this.optionsToRender;
+        let val = [];
+        optionsToRender.forEach(opt => {
+            if (!this.group) {
+                let optionDisabled = this.isOptionDisabled(opt);
+                if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {
+                    val.push(this.getOptionValue(opt));
+                }
+            }
+            else {
+                let subOptions = this.getOptionGroupChildren(opt);
+                if (subOptions) {
+                    subOptions.forEach(option => {
+                        let optionDisabled = this.isOptionDisabled(option);
+                        if (!optionDisabled || (optionDisabled && this.isSelected(option))) {
+                            val.push(this.getOptionValue(option));
+                        }
+                    });
+                }
+            }
+        });
+        this.value = val;
+    }
+    uncheckAll() {
+        let optionsToRender = this.optionsToRender;
+        let val = [];
+        optionsToRender.forEach(opt => {
+            if (!this.group) {
+                let optionDisabled = this.isOptionDisabled(opt);
+                if (optionDisabled && this.isSelected(opt)) {
+                    val.push(this.getOptionValue(opt));
+                }
+            }
+            else {
+                if (opt.items) {
+                    opt.items.forEach(option => {
+                        let optionDisabled = this.isOptionDisabled(option);
+                        if (optionDisabled && this.isSelected(option)) {
+                            val.push(this.getOptionValue(option));
+                        }
+                    });
+                }
+            }
+        });
+        this.value = val;
+    }
+    onOptionKeyDown(event, option) {
+        if (this.readonly) {
+            return;
+        }
+        let item = event.currentTarget;
+        switch (event.which) {
+            //down
+            case 40:
+                var nextItem = this.findNextItem(item);
+                if (nextItem) {
+                    nextItem.focus();
+                }
+                event.preventDefault();
+                break;
+            //up
+            case 38:
+                var prevItem = this.findPrevItem(item);
+                if (prevItem) {
+                    prevItem.focus();
+                }
+                event.preventDefault();
+                break;
+            //enter
+            case 13:
+                this.onOptionClick(event, option);
+                event.preventDefault();
+                break;
+        }
+    }
+    findNextItem(item) {
+        let nextItem = item.nextElementSibling;
+        if (nextItem)
+            return DomHandler.hasClass(nextItem, 'p-disabled') || DomHandler.isHidden(nextItem) || DomHandler.hasClass(nextItem, 'p-listbox-item-group') ? this.findNextItem(nextItem) : nextItem;
+        else
+            return null;
+    }
+    findPrevItem(item) {
+        let prevItem = item.previousElementSibling;
+        if (prevItem)
+            return DomHandler.hasClass(prevItem, 'p-disabled') || DomHandler.isHidden(prevItem) || DomHandler.hasClass(prevItem, 'p-listbox-item-group') ? this.findPrevItem(prevItem) : prevItem;
+        else
+            return null;
+    }
+    onHeaderCheckboxFocus() {
+        this.headerCheckboxFocus = true;
+    }
+    onHeaderCheckboxBlur() {
+        this.headerCheckboxFocus = false;
+    }
+    ngOnDestroy() {
+        if (this.translationSubscription) {
+            this.translationSubscription.unsubscribe();
+        }
+    }
+}
+Listbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Listbox, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FilterService }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+Listbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Listbox, selector: "p-listbox", inputs: { multiple: "multiple", style: "style", styleClass: "styleClass", listStyle: "listStyle", listStyleClass: "listStyleClass", readonly: "readonly", disabled: "disabled", checkbox: "checkbox", filter: "filter", filterMatchMode: "filterMatchMode", filterLocale: "filterLocale", metaKeySelection: "metaKeySelection", dataKey: "dataKey", showToggleAll: "showToggleAll", optionLabel: "optionLabel", optionValue: "optionValue", optionGroupChildren: "optionGroupChildren", optionGroupLabel: "optionGroupLabel", optionDisabled: "optionDisabled", ariaFilterLabel: "ariaFilterLabel", filterPlaceHolder: "filterPlaceHolder", emptyFilterMessage: "emptyFilterMessage", emptyMessage: "emptyMessage", group: "group", options: "options", filterValue: "filterValue" }, outputs: { onChange: "onChange", onClick: "onClick", onDblClick: "onDblClick" }, host: { classAttribute: "p-element" }, providers: [LISTBOX_VALUE_ACCESSOR], queries: [{ propertyName: "headerFacet", first: true, predicate: Header, descendants: true }, { propertyName: "footerFacet", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "headerCheckboxViewChild", first: true, predicate: ["headerchkbox"], descendants: true }], ngImport: i0, template: `
+    <div [ngClass]="{'p-listbox p-component': true, 'p-disabled': disabled}" [ngStyle]="style" [class]="styleClass">
+      <div class="p-listbox-header" *ngIf="headerFacet || headerTemplate">
+        <ng-content select="p-header"></ng-content>
+        <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+      </div>
+      <div class="p-listbox-header" *ngIf="(checkbox && multiple && showToggleAll) || filter">
+        <div class="p-checkbox p-component" *ngIf="checkbox && multiple && showToggleAll" [ngClass]="{'p-checkbox-disabled': disabled || toggleAllDisabled}">
+          <div class="p-hidden-accessible">
+            <input type="checkbox" readonly="readonly" [checked]="allChecked" (focus)="onHeaderCheckboxFocus()" (blur)="onHeaderCheckboxBlur()" (keydown.space)="toggleAll($event)" [disabled]="disabled || toggleAllDisabled">
+          </div>
+          <div #headerchkbox class="p-checkbox-box" [ngClass]="{'p-highlight': allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}" (click)="toggleAll($event)">
+            <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':allChecked}"></span>
+          </div>
+        </div>
+        <div class="p-listbox-filter-container" *ngIf="filter">
+          <input type="text" [value]="filterValue||''" (input)="onFilter($event)" class="p-listbox-filter p-inputtext p-component" [disabled]="disabled" [attr.placeholder]="filterPlaceHolder" [attr.aria-label]="ariaFilterLabel">
+          <span class="p-listbox-filter-icon pi pi-search"></span>
+        </div>
+      </div>
+      <div [ngClass]="'p-listbox-list-wrapper'" [ngStyle]="listStyle" [class]="listStyleClass">
+        <ul class="p-listbox-list" role="listbox" aria-multiselectable="multiple">
+            <ng-container *ngIf="group">
+                <ng-template ngFor let-optgroup [ngForOf]="optionsToRender">
+                    <li class="p-listbox-item-group">
+                        <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
+                        <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
+                    </li>
+                    <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}"></ng-container>
+                </ng-template>
+            </ng-container>
+            <ng-container *ngIf="!group">
+                    <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: optionsToRender}"></ng-container>
+            </ng-container>
+            <ng-template #itemslist let-optionsToDisplay>
+                <li *ngFor="let option of optionsToDisplay; let i = index;" [attr.tabindex]="disabled || isOptionDisabled(option) ? null : '0'" pRipple
+                    [ngClass]="{'p-listbox-item':true,'p-highlight':isSelected(option), 'p-disabled': this.isOptionDisabled(option)}" role="option" [attr.aria-label]="getOptionLabel(option)"
+                    [attr.aria-selected]="isSelected(option)" (click)="onOptionClick($event,option)" (dblclick)="onOptionDoubleClick($event,option)" (touchend)="onOptionTouchEnd(option)" (keydown)="onOptionKeyDown($event,option)">
+                    <div class="p-checkbox p-component" *ngIf="checkbox && multiple" [ngClass]="{'p-checkbox-disabled': disabled || isOptionDisabled(option)}">
+                        <div class="p-checkbox-box" [ngClass]="{'p-highlight':isSelected(option)}">
+                            <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':isSelected(option)}"></span>
+                        </div>
+                    </div>
+                    <span *ngIf="!itemTemplate">{{getOptionLabel(option)}}</span>
+                    <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: option, index: i}"></ng-container>
+                </li>
+                <li *ngIf="hasFilter() && isEmpty(optionsToDisplay)" class="p-listbox-empty-message">
+                    <ng-container *ngIf="!emptyFilterTemplate && !emptyTemplate; else emptyFilter">
+                        {{emptyFilterMessageLabel}}
+                    </ng-container>
+                    <ng-container #emptyFilter *ngTemplateOutlet="emptyFilterTemplate || emptyTemplate"></ng-container>
+                </li>
+                <li *ngIf="!hasFilter() && isEmpty(optionsToDisplay)" class="p-listbox-empty-message">
+                    <ng-container *ngIf="!emptyTemplate; else empty">
+                        {{emptyMessageLabel}}
+                    </ng-container>
+                    <ng-container #empty *ngTemplateOutlet="emptyTemplate"></ng-container>
+                </li>
+            </ng-template>
+        </ul>
+      </div>
+      <div class="p-listbox-footer" *ngIf="footerFacet || footerTemplate">
+        <ng-content select="p-footer"></ng-content>
+        <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+      </div>
+    </div>
+  `, isInline: true, styles: [".p-listbox-list-wrapper{overflow:auto}.p-listbox-list{list-style-type:none;margin:0;padding:0}.p-listbox-item{cursor:pointer;position:relative;overflow:hidden;display:flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-listbox-header{display:flex;align-items:center}.p-listbox-filter-container{position:relative;flex:1 1 auto}.p-listbox-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-listbox-filter{width:100%}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.Ripple, selector: "[pRipple]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Listbox, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-listbox', template: `
+    <div [ngClass]="{'p-listbox p-component': true, 'p-disabled': disabled}" [ngStyle]="style" [class]="styleClass">
+      <div class="p-listbox-header" *ngIf="headerFacet || headerTemplate">
+        <ng-content select="p-header"></ng-content>
+        <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+      </div>
+      <div class="p-listbox-header" *ngIf="(checkbox && multiple && showToggleAll) || filter">
+        <div class="p-checkbox p-component" *ngIf="checkbox && multiple && showToggleAll" [ngClass]="{'p-checkbox-disabled': disabled || toggleAllDisabled}">
+          <div class="p-hidden-accessible">
+            <input type="checkbox" readonly="readonly" [checked]="allChecked" (focus)="onHeaderCheckboxFocus()" (blur)="onHeaderCheckboxBlur()" (keydown.space)="toggleAll($event)" [disabled]="disabled || toggleAllDisabled">
+          </div>
+          <div #headerchkbox class="p-checkbox-box" [ngClass]="{'p-highlight': allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}" (click)="toggleAll($event)">
+            <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':allChecked}"></span>
+          </div>
+        </div>
+        <div class="p-listbox-filter-container" *ngIf="filter">
+          <input type="text" [value]="filterValue||''" (input)="onFilter($event)" class="p-listbox-filter p-inputtext p-component" [disabled]="disabled" [attr.placeholder]="filterPlaceHolder" [attr.aria-label]="ariaFilterLabel">
+          <span class="p-listbox-filter-icon pi pi-search"></span>
+        </div>
+      </div>
+      <div [ngClass]="'p-listbox-list-wrapper'" [ngStyle]="listStyle" [class]="listStyleClass">
+        <ul class="p-listbox-list" role="listbox" aria-multiselectable="multiple">
+            <ng-container *ngIf="group">
+                <ng-template ngFor let-optgroup [ngForOf]="optionsToRender">
+                    <li class="p-listbox-item-group">
+                        <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
+                        <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
+                    </li>
+                    <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}"></ng-container>
+                </ng-template>
+            </ng-container>
+            <ng-container *ngIf="!group">
+                    <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: optionsToRender}"></ng-container>
+            </ng-container>
+            <ng-template #itemslist let-optionsToDisplay>
+                <li *ngFor="let option of optionsToDisplay; let i = index;" [attr.tabindex]="disabled || isOptionDisabled(option) ? null : '0'" pRipple
+                    [ngClass]="{'p-listbox-item':true,'p-highlight':isSelected(option), 'p-disabled': this.isOptionDisabled(option)}" role="option" [attr.aria-label]="getOptionLabel(option)"
+                    [attr.aria-selected]="isSelected(option)" (click)="onOptionClick($event,option)" (dblclick)="onOptionDoubleClick($event,option)" (touchend)="onOptionTouchEnd(option)" (keydown)="onOptionKeyDown($event,option)">
+                    <div class="p-checkbox p-component" *ngIf="checkbox && multiple" [ngClass]="{'p-checkbox-disabled': disabled || isOptionDisabled(option)}">
+                        <div class="p-checkbox-box" [ngClass]="{'p-highlight':isSelected(option)}">
+                            <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':isSelected(option)}"></span>
+                        </div>
+                    </div>
+                    <span *ngIf="!itemTemplate">{{getOptionLabel(option)}}</span>
+                    <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: option, index: i}"></ng-container>
+                </li>
+                <li *ngIf="hasFilter() && isEmpty(optionsToDisplay)" class="p-listbox-empty-message">
+                    <ng-container *ngIf="!emptyFilterTemplate && !emptyTemplate; else emptyFilter">
+                        {{emptyFilterMessageLabel}}
+                    </ng-container>
+                    <ng-container #emptyFilter *ngTemplateOutlet="emptyFilterTemplate || emptyTemplate"></ng-container>
+                </li>
+                <li *ngIf="!hasFilter() && isEmpty(optionsToDisplay)" class="p-listbox-empty-message">
+                    <ng-container *ngIf="!emptyTemplate; else empty">
+                        {{emptyMessageLabel}}
+                    </ng-container>
+                    <ng-container #empty *ngTemplateOutlet="emptyTemplate"></ng-container>
+                </li>
+            </ng-template>
+        </ul>
+      </div>
+      <div class="p-listbox-footer" *ngIf="footerFacet || footerTemplate">
+        <ng-content select="p-footer"></ng-content>
+        <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+      </div>
+    </div>
+  `, providers: [LISTBOX_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-listbox-list-wrapper{overflow:auto}.p-listbox-list{list-style-type:none;margin:0;padding:0}.p-listbox-item{cursor:pointer;position:relative;overflow:hidden;display:flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-listbox-header{display:flex;align-items:center}.p-listbox-filter-container{position:relative;flex:1 1 auto}.p-listbox-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-listbox-filter{width:100%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FilterService }, { type: i1.PrimeNGConfig }]; }, propDecorators: { multiple: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], listStyle: [{
+                type: Input
+            }], listStyleClass: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], checkbox: [{
+                type: Input
+            }], filter: [{
+                type: Input
+            }], filterMatchMode: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], metaKeySelection: [{
+                type: Input
+            }], dataKey: [{
+                type: Input
+            }], showToggleAll: [{
+                type: Input
+            }], optionLabel: [{
+                type: Input
+            }], optionValue: [{
+                type: Input
+            }], optionGroupChildren: [{
+                type: Input
+            }], optionGroupLabel: [{
+                type: Input
+            }], optionDisabled: [{
+                type: Input
+            }], ariaFilterLabel: [{
+                type: Input
+            }], filterPlaceHolder: [{
+                type: Input
+            }], emptyFilterMessage: [{
+                type: Input
+            }], emptyMessage: [{
+                type: Input
+            }], group: [{
+                type: Input
+            }], onChange: [{
+                type: Output
+            }], onClick: [{
+                type: Output
+            }], onDblClick: [{
+                type: Output
+            }], headerCheckboxViewChild: [{
+                type: ViewChild,
+                args: ['headerchkbox']
+            }], headerFacet: [{
+                type: ContentChild,
+                args: [Header]
+            }], footerFacet: [{
+                type: ContentChild,
+                args: [Footer]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], options: [{
+                type: Input
+            }], filterValue: [{
+                type: Input
+            }] } });
+class ListboxModule {
+}
+ListboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ListboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ListboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ListboxModule, declarations: [Listbox], imports: [CommonModule, SharedModule, RippleModule], exports: [Listbox, SharedModule] });
+ListboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ListboxModule, imports: [[CommonModule, SharedModule, RippleModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ListboxModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, RippleModule],
+                    exports: [Listbox, SharedModule],
+                    declarations: [Listbox]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { LISTBOX_VALUE_ACCESSOR, Listbox, ListboxModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-listbox.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-listbox.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-listbox.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-listbox.mjs","sources":["../../src/app/components/listbox/listbox.ts","../../src/app/components/listbox/primeng-listbox.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, Input, Output, EventEmitter, AfterContentInit, ContentChildren, ContentChild, QueryList, TemplateRef,forwardRef, ChangeDetectorRef, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule, PrimeTemplate, Footer, Header, FilterService, TranslationKeys, PrimeNGConfig } from 'primeng/api';\nimport { DomHandler } from 'primeng/dom';\nimport { ObjectUtils } from 'primeng/utils';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { RippleModule } from 'primeng/ripple';\nimport { Subscription } from 'rxjs';\n\nexport const LISTBOX_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Listbox),\n    multi: true\n};\n\n@Component({\n    selector: 'p-listbox',\n    template: `\n    <div [ngClass]=\"{'p-listbox p-component': true, 'p-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n      <div class=\"p-listbox-header\" *ngIf=\"headerFacet || headerTemplate\">\n        <ng-content select=\"p-header\"></ng-content>\n        <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n      </div>\n      <div class=\"p-listbox-header\" *ngIf=\"(checkbox && multiple && showToggleAll) || filter\">\n        <div class=\"p-checkbox p-component\" *ngIf=\"checkbox && multiple && showToggleAll\" [ngClass]=\"{'p-checkbox-disabled': disabled || toggleAllDisabled}\">\n          <div class=\"p-hidden-accessible\">\n            <input type=\"checkbox\" readonly=\"readonly\" [checked]=\"allChecked\" (focus)=\"onHeaderCheckboxFocus()\" (blur)=\"onHeaderCheckboxBlur()\" (keydown.space)=\"toggleAll($event)\" [disabled]=\"disabled || toggleAllDisabled\">\n          </div>\n          <div #headerchkbox class=\"p-checkbox-box\" [ngClass]=\"{'p-highlight': allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}\" (click)=\"toggleAll($event)\">\n            <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':allChecked}\"></span>\n          </div>\n        </div>\n        <div class=\"p-listbox-filter-container\" *ngIf=\"filter\">\n          <input type=\"text\" [value]=\"filterValue||''\" (input)=\"onFilter($event)\" class=\"p-listbox-filter p-inputtext p-component\" [disabled]=\"disabled\" [attr.placeholder]=\"filterPlaceHolder\" [attr.aria-label]=\"ariaFilterLabel\">\n          <span class=\"p-listbox-filter-icon pi pi-search\"></span>\n        </div>\n      </div>\n      <div [ngClass]=\"'p-listbox-list-wrapper'\" [ngStyle]=\"listStyle\" [class]=\"listStyleClass\">\n        <ul class=\"p-listbox-list\" role=\"listbox\" aria-multiselectable=\"multiple\">\n            <ng-container *ngIf=\"group\">\n                <ng-template ngFor let-optgroup [ngForOf]=\"optionsToRender\">\n                    <li class=\"p-listbox-item-group\">\n                        <span *ngIf=\"!groupTemplate\">{{getOptionGroupLabel(optgroup)||'empty'}}</span>\n                        <ng-container *ngTemplateOutlet=\"groupTemplate; context: {$implicit: optgroup}\"></ng-container>\n                    </li>\n                    <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}\"></ng-container>\n                </ng-template>\n            </ng-container>\n            <ng-container *ngIf=\"!group\">\n                    <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: optionsToRender}\"></ng-container>\n            </ng-container>\n            <ng-template #itemslist let-optionsToDisplay>\n                <li *ngFor=\"let option of optionsToDisplay; let i = index;\" [attr.tabindex]=\"disabled || isOptionDisabled(option) ? null : '0'\" pRipple\n                    [ngClass]=\"{'p-listbox-item':true,'p-highlight':isSelected(option), 'p-disabled': this.isOptionDisabled(option)}\" role=\"option\" [attr.aria-label]=\"getOptionLabel(option)\"\n                    [attr.aria-selected]=\"isSelected(option)\" (click)=\"onOptionClick($event,option)\" (dblclick)=\"onOptionDoubleClick($event,option)\" (touchend)=\"onOptionTouchEnd(option)\" (keydown)=\"onOptionKeyDown($event,option)\">\n                    <div class=\"p-checkbox p-component\" *ngIf=\"checkbox && multiple\" [ngClass]=\"{'p-checkbox-disabled': disabled || isOptionDisabled(option)}\">\n                        <div class=\"p-checkbox-box\" [ngClass]=\"{'p-highlight':isSelected(option)}\">\n                            <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':isSelected(option)}\"></span>\n                        </div>\n                    </div>\n                    <span *ngIf=\"!itemTemplate\">{{getOptionLabel(option)}}</span>\n                    <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: option, index: i}\"></ng-container>\n                </li>\n                <li *ngIf=\"hasFilter() && isEmpty(optionsToDisplay)\" class=\"p-listbox-empty-message\">\n                    <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\">\n                        {{emptyFilterMessageLabel}}\n                    </ng-container>\n                    <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\n                </li>\n                <li *ngIf=\"!hasFilter() && isEmpty(optionsToDisplay)\" class=\"p-listbox-empty-message\">\n                    <ng-container *ngIf=\"!emptyTemplate; else empty\">\n                        {{emptyMessageLabel}}\n                    </ng-container>\n                    <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n                </li>\n            </ng-template>\n        </ul>\n      </div>\n      <div class=\"p-listbox-footer\" *ngIf=\"footerFacet || footerTemplate\">\n        <ng-content select=\"p-footer\"></ng-content>\n        <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n      </div>\n    </div>\n  `,\n    providers: [LISTBOX_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./listbox.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Listbox implements AfterContentInit, OnInit, ControlValueAccessor, OnDestroy {\n\n    @Input() multiple: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() listStyle: any;\n\n    @Input() listStyleClass: string;\n\n    @Input() readonly: boolean;\n\n    @Input() disabled: boolean;\n\n    @Input() checkbox: boolean = false;\n\n    @Input() filter: boolean = false;\n\n    @Input() filterMatchMode: string = 'contains';\n\n    @Input() filterLocale: string;\n\n    @Input() metaKeySelection: boolean = true;\n\n    @Input() dataKey: string;\n\n    @Input() showToggleAll: boolean = true;\n\n    @Input() optionLabel: string;\n\n    @Input() optionValue: string;\n\n    @Input() optionGroupChildren: string = \"items\";\n\n    @Input() optionGroupLabel: string;\n\n    @Input() optionDisabled: string;\n\n    @Input() ariaFilterLabel: string;\n\n    @Input() filterPlaceHolder: string;\n\n    @Input() emptyFilterMessage: string;\n\n    @Input() emptyMessage: string;\n\n    @Input() group: boolean;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDblClick: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('headerchkbox') headerCheckboxViewChild: ElementRef;\n\n    @ContentChild(Header) headerFacet;\n\n    @ContentChild(Footer) footerFacet;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    public _options: any[];\n\n    public itemTemplate: TemplateRef<any>;\n\n    public groupTemplate: TemplateRef<any>;\n\n    public headerTemplate: TemplateRef<any>;\n\n    public footerTemplate: TemplateRef<any>;\n\n    public emptyFilterTemplate: TemplateRef<any>;\n\n    public emptyTemplate: TemplateRef<any>;\n\n    public _filterValue: string;\n\n    public _filteredOptions: any[];\n\n    public filtered: boolean;\n\n    public value: any;\n\n    public onModelChange: Function = () => { };\n\n    public onModelTouched: Function = () => { };\n\n    public optionTouched: boolean;\n\n    public focus: boolean;\n\n    public headerCheckboxFocus: boolean;\n\n    translationSubscription: Subscription;\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef, public filterService: FilterService, public config: PrimeNGConfig) { }\n\n    @Input() get options(): any[] {\n        return this._options;\n    }\n\n    set options(val: any[]) {\n        this._options = val;\n\n        if (this.hasFilter())\n            this.activateFilter();\n    }\n\n    @Input() get filterValue(): string {\n        return this._filterValue;\n    }\n\n    set filterValue(val: string) {\n        this._filterValue = val;\n        this.activateFilter();\n    }\n\n    ngOnInit() {\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.cd.markForCheck();\n        });\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'group':\n                    this.groupTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyTemplate = item.template;\n                break;\n\n                case 'emptyfilter':\n                    this.emptyFilterTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    getOptionLabel(option: any) {\n        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);\n    }\n\n    getOptionGroupChildren(optionGroup: any) {\n        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;\n    }\n\n    getOptionGroupLabel(optionGroup: any) {\n        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);\n    }\n\n    getOptionValue(option: any) {\n        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);\n    }\n\n    isOptionDisabled(option: any) {\n        return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);\n    }\n\n    writeValue(value: any): void {\n        this.value = value;\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    onOptionClick(event: Event, option: any) {\n        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {\n            return;\n        }\n\n        if (this.multiple) {\n            if (this.checkbox)\n                this.onOptionClickCheckbox(event, option);\n            else\n                this.onOptionClickMultiple(event, option);\n        }\n        else {\n            this.onOptionClickSingle(event, option);\n        }\n        this.onClick.emit({\n            originalEvent: event,\n            option: option,\n            value: this.value\n        });\n        this.optionTouched = false;\n    }\n\n    onOptionTouchEnd(option: any) {\n        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {\n            return;\n        }\n\n        this.optionTouched = true;\n    }\n\n    onOptionDoubleClick(event: Event, option: any): any {\n        if (this.disabled || this.isOptionDisabled(option) || this.readonly) {\n            return;\n        }\n\n        this.onDblClick.emit({\n            originalEvent: event,\n            option: option,\n            value: this.value\n        })\n    }\n\n    onOptionClickSingle(event, option) {\n        let selected = this.isSelected(option);\n        let valueChanged = false;\n        let metaSelection = this.optionTouched ? false : this.metaKeySelection;\n\n        if (metaSelection) {\n            let metaKey = (event.metaKey || event.ctrlKey);\n\n            if (selected) {\n                if (metaKey) {\n                    this.value = null;\n                    valueChanged = true;\n                }\n            }\n            else {\n                this.value = this.getOptionValue(option);\n                valueChanged = true;\n            }\n        }\n        else {\n            this.value = selected ? null : this.getOptionValue(option);\n            valueChanged = true;\n        }\n\n        if (valueChanged) {\n            this.onModelChange(this.value);\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    }\n\n    onOptionClickMultiple(event, option) {\n        let selected = this.isSelected(option);\n        let valueChanged = false;\n        let metaSelection = this.optionTouched ? false : this.metaKeySelection;\n\n        if (metaSelection) {\n            let metaKey = (event.metaKey || event.ctrlKey);\n\n            if (selected) {\n                if (metaKey) {\n                    this.removeOption(option);\n                }\n                else {\n                    this.value = [this.getOptionValue(option)];\n                }\n                valueChanged = true;\n            }\n            else {\n                this.value = (metaKey) ? this.value || [] : [];\n                this.value = [...this.value, this.getOptionValue(option)];\n                valueChanged = true;\n            }\n        }\n        else {\n            if (selected) {\n                this.removeOption(option);\n            }\n            else {\n                this.value = [...this.value || [], this.getOptionValue(option)];\n            }\n\n            valueChanged = true;\n        }\n\n        if (valueChanged) {\n            this.onModelChange(this.value);\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    }\n\n    onOptionClickCheckbox(event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n\n        let selected = this.isSelected(option);\n\n        if (selected) {\n            this.removeOption(option);\n        }\n        else {\n            this.value = this.value ? this.value : [];\n            this.value = [...this.value, this.getOptionValue(option)];\n        }\n\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    }\n\n    removeOption(option: any): void {\n        this.value = this.value.filter(val => !ObjectUtils.equals(val, this.getOptionValue(option), this.dataKey));\n    }\n\n    isSelected(option: any) {\n        let selected = false;\n        let optionValue = this.getOptionValue(option);\n\n        if (this.multiple) {\n            if (this.value) {\n                for (let val of this.value) {\n                    if (ObjectUtils.equals(val, optionValue, this.dataKey)) {\n                        selected = true;\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            selected = ObjectUtils.equals(this.value, optionValue, this.dataKey);\n        }\n\n        return selected;\n    }\n\n    get allChecked(): boolean {\n        let optionsToRender = this.optionsToRender;\n        if (!optionsToRender || optionsToRender.length === 0) {\n            return false;\n        }\n        else {\n            let selectedDisabledItemsLength = 0;\n            let unselectedDisabledItemsLength = 0;\n            let selectedEnabledItemsLength = 0;\n            let visibleOptionsLength = this.group ? 0 : this.optionsToRender.length;\n\n            for (let option of optionsToRender) {\n                if (!this.group) {\n                    let disabled = this.isOptionDisabled(option);\n                    let selected = this.isSelected(option);\n\n                    if (disabled) {\n                        if (selected)\n                            selectedDisabledItemsLength++;\n                        else\n                            unselectedDisabledItemsLength++;\n                    }\n                    else {\n                        if (selected)\n                            selectedEnabledItemsLength++;\n                        else\n                            return false;\n                    }\n                }\n                else {\n                    for (let opt of this.getOptionGroupChildren(option)) {\n                        let disabled = this.isOptionDisabled(opt);\n                        let selected = this.isSelected(opt);\n\n                        if (disabled) {\n                            if (selected)\n                                selectedDisabledItemsLength++;\n                            else\n                                unselectedDisabledItemsLength++;\n                        }\n                        else {\n                            if (selected)\n                                selectedEnabledItemsLength++;\n                            else {\n                                return false;\n                            }\n                        }\n\n                        visibleOptionsLength++;\n                    }\n                }\n            }\n\n            return (visibleOptionsLength === selectedDisabledItemsLength\n                    || visibleOptionsLength === selectedEnabledItemsLength\n                    || selectedEnabledItemsLength && visibleOptionsLength === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));\n        }\n    }\n\n    get optionsToRender(): any[] {\n        return this._filteredOptions || this.options;\n    }\n\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    get emptyFilterMessageLabel(): string {\n        return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);\n    }\n\n    hasFilter() {\n        return this._filterValue && this._filterValue.trim().length > 0;\n    }\n\n    isEmpty(optionsToDisplay) {\n        return !optionsToDisplay || (optionsToDisplay && optionsToDisplay.length === 0);\n    }\n\n    onFilter(event: KeyboardEvent) {\n        this._filterValue = (<HTMLInputElement> event.target).value;\n        this.activateFilter();\n    }\n\n    activateFilter() {\n        if (this.hasFilter() && this._options) {\n            if (this.group) {\n                let searchFields: string[] = (this.optionLabel || 'label').split(',');\n\n                let filteredGroups = [];\n                for (let optgroup of this.options) {\n                    let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);\n                    if (filteredSubOptions && filteredSubOptions.length) {\n                        filteredGroups.push({...optgroup, ...{[this.optionGroupChildren]: filteredSubOptions}});\n                    }\n                }\n\n                this._filteredOptions = filteredGroups;\n            }\n            else {\n                this._filteredOptions = this._options.filter(option => this.filterService.filters[this.filterMatchMode](this.getOptionLabel(option), this._filterValue, this.filterLocale));\n            }\n        }\n        else {\n            this._filteredOptions = null;\n        }\n    }\n\n    get toggleAllDisabled(): boolean {\n        let optionsToRender = this.optionsToRender;\n        if (!optionsToRender || optionsToRender.length === 0) {\n            return true;\n        }\n        else {\n            for (let option of optionsToRender) {\n                if (!this.isOptionDisabled(option))\n                    return false;\n            }\n\n            return true;\n        }\n    }\n\n    toggleAll(event) {\n        if (this.disabled || this.toggleAllDisabled || this.readonly) {\n            return;\n        }\n\n        let allChecked = this.allChecked;\n\n        if (allChecked)\n            this.uncheckAll();\n        else\n            this.checkAll();\n\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value });\n        event.preventDefault();\n    }\n\n    checkAll() {\n        let optionsToRender = this.optionsToRender;\n        let val: any[] = [];\n\n        optionsToRender.forEach(opt => {\n            if (!this.group) {\n                let optionDisabled = this.isOptionDisabled(opt);\n                if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {\n                    val.push(this.getOptionValue(opt));\n                }\n            }\n            else {\n                let subOptions = this.getOptionGroupChildren(opt);\n\n                if (subOptions) {\n                    subOptions.forEach(option => {\n                        let optionDisabled = this.isOptionDisabled(option);\n                        if (!optionDisabled || (optionDisabled && this.isSelected(option))) {\n                            val.push(this.getOptionValue(option));\n                        }\n                    });\n                }\n            }\n        });\n\n        this.value = val;\n    }\n\n    uncheckAll() {\n        let optionsToRender = this.optionsToRender;\n        let val: any[] = [];\n\n        optionsToRender.forEach(opt => {\n            if (!this.group) {\n                let optionDisabled = this.isOptionDisabled(opt);\n                if (optionDisabled && this.isSelected(opt)) {\n                    val.push(this.getOptionValue(opt));\n                }\n            }\n            else {\n                if (opt.items) {\n                    opt.items.forEach(option => {\n                        let optionDisabled = this.isOptionDisabled(option);\n                        if (optionDisabled && this.isSelected(option)) {\n                            val.push(this.getOptionValue(option));\n                        }\n                    });\n                }\n            }\n        });\n\n        this.value = val;\n    }\n\n    onOptionKeyDown(event:KeyboardEvent, option) {\n        if (this.readonly) {\n            return;\n        }\n\n        let item = <HTMLLIElement> event.currentTarget;\n\n        switch(event.which) {\n            //down\n            case 40:\n                var nextItem = this.findNextItem(item);\n                if (nextItem) {\n                    nextItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //up\n            case 38:\n                var prevItem = this.findPrevItem(item);\n                if (prevItem) {\n                    prevItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //enter\n            case 13:\n                this.onOptionClick(event, option);\n                event.preventDefault();\n            break;\n        }\n    }\n\n    findNextItem(item) {\n        let nextItem = item.nextElementSibling;\n\n        if (nextItem)\n            return DomHandler.hasClass(nextItem, 'p-disabled') || DomHandler.isHidden(nextItem) || DomHandler.hasClass(nextItem, 'p-listbox-item-group') ? this.findNextItem(nextItem) : nextItem;\n        else\n            return null;\n    }\n\n    findPrevItem(item) {\n        let prevItem = item.previousElementSibling;\n\n        if (prevItem)\n            return DomHandler.hasClass(prevItem, 'p-disabled') || DomHandler.isHidden(prevItem) || DomHandler.hasClass(prevItem, 'p-listbox-item-group') ? this.findPrevItem(prevItem) : prevItem;\n        else\n            return null;\n    }\n\n    onHeaderCheckboxFocus() {\n        this.headerCheckboxFocus = true;\n    }\n\n    onHeaderCheckboxBlur() {\n        this.headerCheckboxFocus = false;\n    }\n\n    ngOnDestroy() {\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule, SharedModule, RippleModule],\n    exports: [Listbox, SharedModule],\n    declarations: [Listbox]\n})\nexport class ListboxModule { }\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-megamenu.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-megamenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-megamenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,314 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { PrimeTemplate } from 'primeng/api';
+import * as i4 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i2 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+
+class MegaMenu {
+    constructor(el, renderer, cd) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.orientation = 'horizontal';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'start':
+                    this.startTemplate = item.template;
+                    break;
+                case 'end':
+                    this.endTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    onCategoryMouseEnter(event, menuitem) {
+        if (menuitem.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (this.activeItem) {
+            this.activeItem = menuitem;
+        }
+    }
+    onCategoryClick(event, item) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (!item.url) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        if (item.items) {
+            if (this.activeItem && this.activeItem === item) {
+                this.activeItem = null;
+                this.unbindDocumentClickListener();
+            }
+            else {
+                this.activeItem = item;
+                this.bindDocumentClickListener();
+            }
+        }
+    }
+    itemClick(event, item) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (!item.url) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        this.activeItem = null;
+    }
+    getColumnClass(menuitem) {
+        let length = menuitem.items ? menuitem.items.length : 0;
+        let columnClass;
+        switch (length) {
+            case 2:
+                columnClass = 'p-megamenu-col-6';
+                break;
+            case 3:
+                columnClass = 'p-megamenu-col-4';
+                break;
+            case 4:
+                columnClass = 'p-megamenu-col-3';
+                break;
+            case 6:
+                columnClass = 'p-megamenu-col-2';
+                break;
+            default:
+                columnClass = 'p-megamenu-col-12';
+                break;
+        }
+        return columnClass;
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            this.documentClickListener = (event) => {
+                if (this.el && !this.el.nativeElement.contains(event.target)) {
+                    this.activeItem = null;
+                    this.unbindDocumentClickListener();
+                    this.cd.markForCheck();
+                }
+            };
+            document.addEventListener('click', this.documentClickListener);
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            document.removeEventListener('click', this.documentClickListener);
+            this.documentClickListener = null;
+        }
+    }
+}
+MegaMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MegaMenu, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+MegaMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: MegaMenu, selector: "p-megaMenu", inputs: { model: "model", style: "style", styleClass: "styleClass", orientation: "orientation", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [class]="styleClass" [ngStyle]="style"
+            [ngClass]="{'p-megamenu p-component':true,'p-megamenu-horizontal': orientation == 'horizontal','p-megamenu-vertical': orientation == 'vertical'}">
+            <div class="p-megamenu-start" *ngIf="startTemplate">
+                <ng-container *ngTemplateOutlet="startTemplate"></ng-container>
+            </div>
+            <ul class="p-megamenu-root-list" role="menubar">
+                <ng-template ngFor let-category [ngForOf]="model">
+                    <li *ngIf="category.separator" class="p-menu-separator" [ngClass]="{'p-hidden': category.visible === false}">
+                    <li *ngIf="!category.separator" [ngClass]="{'p-menuitem':true,'p-menuitem-active':category==activeItem, 'p-hidden': category.visible === false}" pTooltip [tooltipOptions]="category.tooltipOptions"
+                        (mouseenter)="onCategoryMouseEnter($event, category)">
+                        <a *ngIf="!category.routerLink" [href]="category.url||'#'" [attr.target]="category.target" [attr.title]="category.title" [attr.id]="category.id" (click)="onCategoryClick($event, category)" [attr.tabindex]="category.tabindex ? category.tabindex : '0'"
+                            [ngClass]="{'p-menuitem-link':true,'p-disabled':category.disabled}" [ngStyle]="category.style" [class]="category.styleClass" pRipple>
+                            <span class="p-menuitem-icon" *ngIf="category.icon" [ngClass]="category.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="category.escape !== false; else categoryHtmlLabel">{{category.label}}</span>
+                            <ng-template #categoryHtmlLabel><span class="p-menuitem-text" [innerHTML]="category.label"></span></ng-template>
+                            <span *ngIf="category.items" class="p-submenu-icon pi" [ngClass]="{'pi-angle-down':orientation=='horizontal','pi-angle-right':orientation=='vertical'}"></span>
+                        </a>
+                        <a *ngIf="category.routerLink" [routerLink]="category.routerLink" [queryParams]="category.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="category.routerLinkActiveOptions||{exact:false}" [attr.tabindex]="category.tabindex ? category.tabindex : '0'"
+                            [attr.target]="category.target" [attr.title]="category.title" [attr.id]="category.id"
+                            (click)="onCategoryClick($event, category)" [ngClass]="{'p-menuitem-link':true,'p-disabled':category.disabled}" [ngStyle]="category.style" [class]="category.styleClass"
+                            [fragment]="category.fragment" [queryParamsHandling]="category.queryParamsHandling" [preserveFragment]="category.preserveFragment" [skipLocationChange]="category.skipLocationChange" [replaceUrl]="category.replaceUrl" [state]="category.state" pRipple>
+                            <span class="p-menuitem-icon" *ngIf="category.icon" [ngClass]="category.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="category.escape !== false; else categoryHtmlRouteLabel">{{category.label}}</span>
+                            <ng-template #categoryHtmlRouteLabel><span class="p-menuitem-text" [innerHTML]="category.label"></span></ng-template>
+                        </a>
+                        <div class="p-megamenu-panel" *ngIf="category.items">
+                            <div class="p-megamenu-grid">
+                                <ng-template ngFor let-column [ngForOf]="category.items">
+                                    <div [class]="getColumnClass(category)">
+                                        <ng-template ngFor let-submenu [ngForOf]="column">
+                                            <ul class="p-megamenu-submenu" role="menu">
+                                                <li class="p-megamenu-submenu-header">
+                                                    <span *ngIf="submenu.escape !== false; else submenuHtmlLabel">{{submenu.label}}</span>
+                                                    <ng-template #submenuHtmlLabel><span [innerHTML]="submenu.label"></span></ng-template>
+                                                </li>
+                                                <ng-template ngFor let-item [ngForOf]="submenu.items">
+                                                    <li *ngIf="item.separator" class="p-menu-separator" [ngClass]="{'p-hidden': item.visible === false}" role="separator">
+                                                    <li *ngIf="!item.separator" class="p-menuitem" [ngClass]="{'p-hidden': item.visible === false}" role="none" pTooltip [tooltipOptions]="item.tooltipOptions">
+                                                        <a *ngIf="!item.routerLink" role="menuitem" [href]="item.url||'#'" class="p-menuitem-link" [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id" [attr.tabindex]="item.tabindex ? item.tabindex : '0'"
+                                                            [ngClass]="{'p-disabled':item.disabled}" (click)="itemClick($event, item)" pRipple>
+                                                            <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+                                                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+                                                            <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                                                        </a>
+                                                        <a *ngIf="item.routerLink" role="menuitem" [routerLink]="item.routerLink" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [attr.tabindex]="item.tabindex ? item.tabindex : '0'"
+                                                            [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link"
+                                                             [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id"
+                                                            [ngClass]="{'p-disabled':item.disabled}" (click)="itemClick($event, item)"
+                                                            [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state" pRipple>
+                                                            <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+                                                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+                                                            <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                                                        </a>
+                                                    </li>
+                                                </ng-template>
+                                            </ul>
+                                        </ng-template>
+                                    </div>
+                                </ng-template>
+                            </div>
+                        </div>
+                    </li>
+                </ng-template>
+                <div class="p-megamenu-end" *ngIf="endTemplate; else legacy">
+                    <ng-container *ngTemplateOutlet="endTemplate"></ng-container>
+                </div>
+                <ng-template #legacy>
+                    <div class="p-megamenu-end">
+                        <ng-content></ng-content>
+                    </div>
+                </ng-template>
+            </ul>
+        </div>
+    `, isInline: true, styles: [".p-megamenu-root-list{margin:0;padding:0;list-style:none}.p-megamenu-root-list>.p-menuitem{position:relative}.p-megamenu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-megamenu .p-menuitem-text{line-height:1}.p-megamenu-panel{display:none;position:absolute;width:auto;z-index:1}.p-megamenu-root-list>.p-menuitem-active>.p-megamenu-panel{display:block}.p-megamenu-submenu{margin:0;padding:0;list-style:none}.p-megamenu-horizontal .p-megamenu-root-list{display:flex;align-items:center;flex-wrap:wrap}.p-megamenu-vertical .p-megamenu-root-list{flex-direction:column}.p-megamenu-vertical .p-megamenu-root-list>.p-menuitem-active>.p-megamenu-panel{left:100%;top:0}.p-megamenu-vertical .p-megamenu-root-list>.p-menuitem>.p-menuitem-link>.p-submenu-icon{margin-left:auto}.p-megamenu-grid{display:flex}.p-megamenu-col-2,.p-megamenu-col-3,.p-megamenu-col-4,.p-megamenu-col-6,.p-megamenu-col-12{flex:0 0 auto;padding:.5rem}.p-megamenu-col-2{width:16.6667%}.p-megamenu-col-3{width:25%}.p-megamenu-col-4{width:33.3333%}.p-megamenu-col-6{width:50%}.p-megamenu-col-12{width:100%}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MegaMenu, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-megaMenu', template: `
+        <div [class]="styleClass" [ngStyle]="style"
+            [ngClass]="{'p-megamenu p-component':true,'p-megamenu-horizontal': orientation == 'horizontal','p-megamenu-vertical': orientation == 'vertical'}">
+            <div class="p-megamenu-start" *ngIf="startTemplate">
+                <ng-container *ngTemplateOutlet="startTemplate"></ng-container>
+            </div>
+            <ul class="p-megamenu-root-list" role="menubar">
+                <ng-template ngFor let-category [ngForOf]="model">
+                    <li *ngIf="category.separator" class="p-menu-separator" [ngClass]="{'p-hidden': category.visible === false}">
+                    <li *ngIf="!category.separator" [ngClass]="{'p-menuitem':true,'p-menuitem-active':category==activeItem, 'p-hidden': category.visible === false}" pTooltip [tooltipOptions]="category.tooltipOptions"
+                        (mouseenter)="onCategoryMouseEnter($event, category)">
+                        <a *ngIf="!category.routerLink" [href]="category.url||'#'" [attr.target]="category.target" [attr.title]="category.title" [attr.id]="category.id" (click)="onCategoryClick($event, category)" [attr.tabindex]="category.tabindex ? category.tabindex : '0'"
+                            [ngClass]="{'p-menuitem-link':true,'p-disabled':category.disabled}" [ngStyle]="category.style" [class]="category.styleClass" pRipple>
+                            <span class="p-menuitem-icon" *ngIf="category.icon" [ngClass]="category.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="category.escape !== false; else categoryHtmlLabel">{{category.label}}</span>
+                            <ng-template #categoryHtmlLabel><span class="p-menuitem-text" [innerHTML]="category.label"></span></ng-template>
+                            <span *ngIf="category.items" class="p-submenu-icon pi" [ngClass]="{'pi-angle-down':orientation=='horizontal','pi-angle-right':orientation=='vertical'}"></span>
+                        </a>
+                        <a *ngIf="category.routerLink" [routerLink]="category.routerLink" [queryParams]="category.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="category.routerLinkActiveOptions||{exact:false}" [attr.tabindex]="category.tabindex ? category.tabindex : '0'"
+                            [attr.target]="category.target" [attr.title]="category.title" [attr.id]="category.id"
+                            (click)="onCategoryClick($event, category)" [ngClass]="{'p-menuitem-link':true,'p-disabled':category.disabled}" [ngStyle]="category.style" [class]="category.styleClass"
+                            [fragment]="category.fragment" [queryParamsHandling]="category.queryParamsHandling" [preserveFragment]="category.preserveFragment" [skipLocationChange]="category.skipLocationChange" [replaceUrl]="category.replaceUrl" [state]="category.state" pRipple>
+                            <span class="p-menuitem-icon" *ngIf="category.icon" [ngClass]="category.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="category.escape !== false; else categoryHtmlRouteLabel">{{category.label}}</span>
+                            <ng-template #categoryHtmlRouteLabel><span class="p-menuitem-text" [innerHTML]="category.label"></span></ng-template>
+                        </a>
+                        <div class="p-megamenu-panel" *ngIf="category.items">
+                            <div class="p-megamenu-grid">
+                                <ng-template ngFor let-column [ngForOf]="category.items">
+                                    <div [class]="getColumnClass(category)">
+                                        <ng-template ngFor let-submenu [ngForOf]="column">
+                                            <ul class="p-megamenu-submenu" role="menu">
+                                                <li class="p-megamenu-submenu-header">
+                                                    <span *ngIf="submenu.escape !== false; else submenuHtmlLabel">{{submenu.label}}</span>
+                                                    <ng-template #submenuHtmlLabel><span [innerHTML]="submenu.label"></span></ng-template>
+                                                </li>
+                                                <ng-template ngFor let-item [ngForOf]="submenu.items">
+                                                    <li *ngIf="item.separator" class="p-menu-separator" [ngClass]="{'p-hidden': item.visible === false}" role="separator">
+                                                    <li *ngIf="!item.separator" class="p-menuitem" [ngClass]="{'p-hidden': item.visible === false}" role="none" pTooltip [tooltipOptions]="item.tooltipOptions">
+                                                        <a *ngIf="!item.routerLink" role="menuitem" [href]="item.url||'#'" class="p-menuitem-link" [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id" [attr.tabindex]="item.tabindex ? item.tabindex : '0'"
+                                                            [ngClass]="{'p-disabled':item.disabled}" (click)="itemClick($event, item)" pRipple>
+                                                            <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+                                                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+                                                            <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                                                        </a>
+                                                        <a *ngIf="item.routerLink" role="menuitem" [routerLink]="item.routerLink" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [attr.tabindex]="item.tabindex ? item.tabindex : '0'"
+                                                            [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link"
+                                                             [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id"
+                                                            [ngClass]="{'p-disabled':item.disabled}" (click)="itemClick($event, item)"
+                                                            [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state" pRipple>
+                                                            <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+                                                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+                                                            <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                                                        </a>
+                                                    </li>
+                                                </ng-template>
+                                            </ul>
+                                        </ng-template>
+                                    </div>
+                                </ng-template>
+                            </div>
+                        </div>
+                    </li>
+                </ng-template>
+                <div class="p-megamenu-end" *ngIf="endTemplate; else legacy">
+                    <ng-container *ngTemplateOutlet="endTemplate"></ng-container>
+                </div>
+                <ng-template #legacy>
+                    <div class="p-megamenu-end">
+                        <ng-content></ng-content>
+                    </div>
+                </ng-template>
+            </ul>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-megamenu-root-list{margin:0;padding:0;list-style:none}.p-megamenu-root-list>.p-menuitem{position:relative}.p-megamenu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-megamenu .p-menuitem-text{line-height:1}.p-megamenu-panel{display:none;position:absolute;width:auto;z-index:1}.p-megamenu-root-list>.p-menuitem-active>.p-megamenu-panel{display:block}.p-megamenu-submenu{margin:0;padding:0;list-style:none}.p-megamenu-horizontal .p-megamenu-root-list{display:flex;align-items:center;flex-wrap:wrap}.p-megamenu-vertical .p-megamenu-root-list{flex-direction:column}.p-megamenu-vertical .p-megamenu-root-list>.p-menuitem-active>.p-megamenu-panel{left:100%;top:0}.p-megamenu-vertical .p-megamenu-root-list>.p-menuitem>.p-menuitem-link>.p-submenu-icon{margin-left:auto}.p-megamenu-grid{display:flex}.p-megamenu-col-2,.p-megamenu-col-3,.p-megamenu-col-4,.p-megamenu-col-6,.p-megamenu-col-12{flex:0 0 auto;padding:.5rem}.p-megamenu-col-2{width:16.6667%}.p-megamenu-col-3{width:25%}.p-megamenu-col-4{width:33.3333%}.p-megamenu-col-6{width:50%}.p-megamenu-col-12{width:100%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], orientation: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class MegaMenuModule {
+}
+MegaMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MegaMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+MegaMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MegaMenuModule, declarations: [MegaMenu], imports: [CommonModule, RouterModule, RippleModule, TooltipModule], exports: [MegaMenu, RouterModule, TooltipModule] });
+MegaMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MegaMenuModule, imports: [[CommonModule, RouterModule, RippleModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MegaMenuModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, RippleModule, TooltipModule],
+                    exports: [MegaMenu, RouterModule, TooltipModule],
+                    declarations: [MegaMenu]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { MegaMenu, MegaMenuModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-megamenu.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-megamenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-megamenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-megamenu.mjs","sources":["../../src/app/components/megamenu/megamenu.ts","../../src/app/components/megamenu/primeng-megamenu.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,Input,Renderer2,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, AfterContentInit, ContentChildren, QueryList, TemplateRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MegaMenuItem,MenuItem, PrimeTemplate} from 'primeng/api';\nimport {RouterModule} from '@angular/router';\nimport {RippleModule} from 'primeng/ripple';\nimport {TooltipModule} from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-megaMenu',\n    template: `\n        <div [class]=\"styleClass\" [ngStyle]=\"style\"\n            [ngClass]=\"{'p-megamenu p-component':true,'p-megamenu-horizontal': orientation == 'horizontal','p-megamenu-vertical': orientation == 'vertical'}\">\n            <div class=\"p-megamenu-start\" *ngIf=\"startTemplate\">\n                <ng-container *ngTemplateOutlet=\"startTemplate\"></ng-container>\n            </div>\n            <ul class=\"p-megamenu-root-list\" role=\"menubar\">\n                <ng-template ngFor let-category [ngForOf]=\"model\">\n                    <li *ngIf=\"category.separator\" class=\"p-menu-separator\" [ngClass]=\"{'p-hidden': category.visible === false}\">\n                    <li *ngIf=\"!category.separator\" [ngClass]=\"{'p-menuitem':true,'p-menuitem-active':category==activeItem, 'p-hidden': category.visible === false}\" pTooltip [tooltipOptions]=\"category.tooltipOptions\"\n                        (mouseenter)=\"onCategoryMouseEnter($event, category)\">\n                        <a *ngIf=\"!category.routerLink\" [href]=\"category.url||'#'\" [attr.target]=\"category.target\" [attr.title]=\"category.title\" [attr.id]=\"category.id\" (click)=\"onCategoryClick($event, category)\" [attr.tabindex]=\"category.tabindex ? category.tabindex : '0'\"\n                            [ngClass]=\"{'p-menuitem-link':true,'p-disabled':category.disabled}\" [ngStyle]=\"category.style\" [class]=\"category.styleClass\" pRipple>\n                            <span class=\"p-menuitem-icon\" *ngIf=\"category.icon\" [ngClass]=\"category.icon\"></span>\n                            <span class=\"p-menuitem-text\" *ngIf=\"category.escape !== false; else categoryHtmlLabel\">{{category.label}}</span>\n                            <ng-template #categoryHtmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"category.label\"></span></ng-template>\n                            <span *ngIf=\"category.items\" class=\"p-submenu-icon pi\" [ngClass]=\"{'pi-angle-down':orientation=='horizontal','pi-angle-right':orientation=='vertical'}\"></span>\n                        </a>\n                        <a *ngIf=\"category.routerLink\" [routerLink]=\"category.routerLink\" [queryParams]=\"category.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" [routerLinkActiveOptions]=\"category.routerLinkActiveOptions||{exact:false}\" [attr.tabindex]=\"category.tabindex ? category.tabindex : '0'\"\n                            [attr.target]=\"category.target\" [attr.title]=\"category.title\" [attr.id]=\"category.id\"\n                            (click)=\"onCategoryClick($event, category)\" [ngClass]=\"{'p-menuitem-link':true,'p-disabled':category.disabled}\" [ngStyle]=\"category.style\" [class]=\"category.styleClass\"\n                            [fragment]=\"category.fragment\" [queryParamsHandling]=\"category.queryParamsHandling\" [preserveFragment]=\"category.preserveFragment\" [skipLocationChange]=\"category.skipLocationChange\" [replaceUrl]=\"category.replaceUrl\" [state]=\"category.state\" pRipple>\n                            <span class=\"p-menuitem-icon\" *ngIf=\"category.icon\" [ngClass]=\"category.icon\"></span>\n                            <span class=\"p-menuitem-text\" *ngIf=\"category.escape !== false; else categoryHtmlRouteLabel\">{{category.label}}</span>\n                            <ng-template #categoryHtmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"category.label\"></span></ng-template>\n                        </a>\n                        <div class=\"p-megamenu-panel\" *ngIf=\"category.items\">\n                            <div class=\"p-megamenu-grid\">\n                                <ng-template ngFor let-column [ngForOf]=\"category.items\">\n                                    <div [class]=\"getColumnClass(category)\">\n                                        <ng-template ngFor let-submenu [ngForOf]=\"column\">\n                                            <ul class=\"p-megamenu-submenu\" role=\"menu\">\n                                                <li class=\"p-megamenu-submenu-header\">\n                                                    <span *ngIf=\"submenu.escape !== false; else submenuHtmlLabel\">{{submenu.label}}</span>\n                                                    <ng-template #submenuHtmlLabel><span [innerHTML]=\"submenu.label\"></span></ng-template>\n                                                </li>\n                                                <ng-template ngFor let-item [ngForOf]=\"submenu.items\">\n                                                    <li *ngIf=\"item.separator\" class=\"p-menu-separator\" [ngClass]=\"{'p-hidden': item.visible === false}\" role=\"separator\">\n                                                    <li *ngIf=\"!item.separator\" class=\"p-menuitem\" [ngClass]=\"{'p-hidden': item.visible === false}\" role=\"none\" pTooltip [tooltipOptions]=\"item.tooltipOptions\">\n                                                        <a *ngIf=\"!item.routerLink\" role=\"menuitem\" [href]=\"item.url||'#'\" class=\"p-menuitem-link\" [attr.target]=\"item.target\" [attr.title]=\"item.title\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.tabindex ? item.tabindex : '0'\"\n                                                            [ngClass]=\"{'p-disabled':item.disabled}\" (click)=\"itemClick($event, item)\" pRipple>\n                                                            <span class=\"p-menuitem-icon\" *ngIf=\"item.icon\" [ngClass]=\"item.icon\"></span>\n                                                            <span class=\"p-menuitem-text\" *ngIf=\"item.escape !== false; else htmlLabel\">{{item.label}}</span>\n                                                            <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n                                                        </a>\n                                                        <a *ngIf=\"item.routerLink\" role=\"menuitem\" [routerLink]=\"item.routerLink\" [queryParams]=\"item.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" [attr.tabindex]=\"item.tabindex ? item.tabindex : '0'\"\n                                                            [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{exact:false}\" class=\"p-menuitem-link\"\n                                                             [attr.target]=\"item.target\" [attr.title]=\"item.title\" [attr.id]=\"item.id\"\n                                                            [ngClass]=\"{'p-disabled':item.disabled}\" (click)=\"itemClick($event, item)\"\n                                                            [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\" [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\" pRipple>\n                                                            <span class=\"p-menuitem-icon\" *ngIf=\"item.icon\" [ngClass]=\"item.icon\"></span>\n                                                            <span class=\"p-menuitem-text\" *ngIf=\"item.escape !== false; else htmlRouteLabel\">{{item.label}}</span>\n                                                            <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n                                                        </a>\n                                                    </li>\n                                                </ng-template>\n                                            </ul>\n                                        </ng-template>\n                                    </div>\n                                </ng-template>\n                            </div>\n                        </div>\n                    </li>\n                </ng-template>\n                <div class=\"p-megamenu-end\" *ngIf=\"endTemplate; else legacy\">\n                    <ng-container *ngTemplateOutlet=\"endTemplate\"></ng-container>\n                </div>\n                <ng-template #legacy>\n                    <div class=\"p-megamenu-end\">\n                        <ng-content></ng-content>\n                    </div>\n                </ng-template>\n            </ul>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./megamenu.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class MegaMenu implements AfterContentInit {\n\n    @Input() model: MegaMenuItem[];\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() orientation: string = 'horizontal';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    activeItem: any;\n\n    documentClickListener: any;\n\n    startTemplate: TemplateRef<any>;\n\n    endTemplate: TemplateRef<any>;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef) {}\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'start':\n                    this.startTemplate = item.template;\n                break;\n\n                case 'end':\n                    this.endTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    onCategoryMouseEnter(event, menuitem: MegaMenuItem) {\n        if (menuitem.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (this.activeItem) {\n            this.activeItem = menuitem;\n        }\n    }\n\n    onCategoryClick(event, item: MenuItem | MegaMenuItem) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (!item.url) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        if (item.items) {\n            if (this.activeItem && this.activeItem === item) {\n                this.activeItem = null;\n                this.unbindDocumentClickListener();\n            }\n            else {\n                this.activeItem = item;\n                this.bindDocumentClickListener();\n            }\n        }\n    }\n\n    itemClick(event, item: MenuItem | MegaMenuItem) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (!item.url) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        this.activeItem = null;\n    }\n\n    getColumnClass(menuitem: MegaMenuItem) {\n        let length = menuitem.items ? menuitem.items.length: 0;\n        let columnClass;\n        switch(length) {\n            case 2:\n                columnClass= 'p-megamenu-col-6';\n            break;\n\n            case 3:\n                columnClass= 'p-megamenu-col-4';\n            break;\n\n            case 4:\n                columnClass= 'p-megamenu-col-3';\n            break;\n\n            case 6:\n                columnClass= 'p-megamenu-col-2';\n            break;\n\n            default:\n                columnClass= 'p-megamenu-col-12';\n            break;\n        }\n\n        return columnClass;\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            this.documentClickListener = (event) => {\n                if (this.el && !this.el.nativeElement.contains(event.target)) {\n                    this.activeItem = null;\n                    this.unbindDocumentClickListener();\n                    this.cd.markForCheck();\n                }\n            };\n\n            document.addEventListener('click', this.documentClickListener);\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            document.removeEventListener('click', this.documentClickListener);\n            this.documentClickListener = null;\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,RippleModule,TooltipModule],\n    exports: [MegaMenu,RouterModule,TooltipModule],\n    declarations: [MegaMenu]\n})\nexport class MegaMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-menu.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-menu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-menu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,416 @@
+import * as i0 from '@angular/core';
+import { forwardRef, Component, ViewEncapsulation, Inject, Input, EventEmitter, ChangeDetectionStrategy, ViewChild, Output, NgModule } from '@angular/core';
+import { trigger, transition, style, animate } from '@angular/animations';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i2 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i5 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+import * as i4 from 'primeng/api';
+
+class MenuItemContent {
+    constructor(menu) {
+        this.menu = menu;
+    }
+    onItemKeyDown(event) {
+        let listItem = event.currentTarget.parentElement;
+        switch (event.code) {
+            case 'ArrowDown':
+                var nextItem = this.findNextItem(listItem);
+                if (nextItem) {
+                    nextItem.children[0].focus();
+                }
+                event.preventDefault();
+                break;
+            case 'ArrowUp':
+                var prevItem = this.findPrevItem(listItem);
+                if (prevItem) {
+                    prevItem.children[0].focus();
+                }
+                event.preventDefault();
+                break;
+            case 'Space':
+            case 'Enter':
+                if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {
+                    listItem.children[0].click();
+                }
+                event.preventDefault();
+                break;
+            default:
+                break;
+        }
+    }
+    findNextItem(item) {
+        let nextItem = item.nextElementSibling;
+        if (nextItem)
+            return DomHandler.hasClass(nextItem, 'p-disabled') || !DomHandler.hasClass(nextItem, 'p-menuitem') ? this.findNextItem(nextItem) : nextItem;
+        else
+            return null;
+    }
+    findPrevItem(item) {
+        let prevItem = item.previousElementSibling;
+        if (prevItem)
+            return DomHandler.hasClass(prevItem, 'p-disabled') || !DomHandler.hasClass(prevItem, 'p-menuitem') ? this.findPrevItem(prevItem) : prevItem;
+        else
+            return null;
+    }
+}
+MenuItemContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenuItemContent, deps: [{ token: forwardRef(() => Menu) }], target: i0.ɵɵFactoryTarget.Component });
+MenuItemContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: MenuItemContent, selector: "[pMenuItemContent]", inputs: { item: ["pMenuItemContent", "item"] }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <a *ngIf="!item.routerLink"  (keydown)="onItemKeyDown($event)" [attr.href]="item.url||null" class="p-menuitem-link" [attr.tabindex]="item.disabled ? null : '0'" [attr.data-automationid]="item.automationId" [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id"
+            [ngClass]="{'p-disabled':item.disabled}" (click)="menu.itemClick($event, item)" role="menuitem">
+            <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+            <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+        </a>
+        <a *ngIf="item.routerLink" (keydown)="onItemKeyDown($event)" [routerLink]="item.routerLink" [attr.data-automationid]="item.automationId" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'"
+            [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link" [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled ? null : '0'"
+            [attr.title]="item.title" [ngClass]="{'p-disabled':item.disabled}" (click)="menu.itemClick($event, item)" role="menuitem" pRipple
+            [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+            <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+            <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+        </a>
+    `, isInline: true, directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenuItemContent, decorators: [{
+            type: Component,
+            args: [{
+                    selector: '[pMenuItemContent]',
+                    template: `
+        <a *ngIf="!item.routerLink"  (keydown)="onItemKeyDown($event)" [attr.href]="item.url||null" class="p-menuitem-link" [attr.tabindex]="item.disabled ? null : '0'" [attr.data-automationid]="item.automationId" [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id"
+            [ngClass]="{'p-disabled':item.disabled}" (click)="menu.itemClick($event, item)" role="menuitem">
+            <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+            <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+        </a>
+        <a *ngIf="item.routerLink" (keydown)="onItemKeyDown($event)" [routerLink]="item.routerLink" [attr.data-automationid]="item.automationId" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'"
+            [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link" [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled ? null : '0'"
+            [attr.title]="item.title" [ngClass]="{'p-disabled':item.disabled}" (click)="menu.itemClick($event, item)" role="menuitem" pRipple
+            [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+            <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+            <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+        </a>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: undefined, decorators: [{
+                    type: Inject,
+                    args: [forwardRef(() => Menu)]
+                }] }]; }, propDecorators: { item: [{
+                type: Input,
+                args: ["pMenuItemContent"]
+            }] } });
+class Menu {
+    constructor(el, renderer, cd, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+    }
+    toggle(event) {
+        if (this.visible)
+            this.hide();
+        else
+            this.show(event);
+        this.preventDocumentDefault = true;
+    }
+    show(event) {
+        this.target = event.currentTarget;
+        this.relativeAlign = event.relativeAlign;
+        this.visible = true;
+        this.preventDocumentDefault = true;
+        this.cd.markForCheck();
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                if (this.popup) {
+                    this.container = event.element;
+                    this.moveOnTop();
+                    this.onShow.emit({});
+                    this.appendOverlay();
+                    this.alignOverlay();
+                    this.bindDocumentClickListener();
+                    this.bindDocumentResizeListener();
+                    this.bindScrollListener();
+                }
+                break;
+            case 'void':
+                this.onOverlayHide();
+                this.onHide.emit({});
+                break;
+        }
+    }
+    onOverlayAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                if (this.autoZIndex) {
+                    ZIndexUtils.clear(event.element);
+                }
+                break;
+        }
+    }
+    alignOverlay() {
+        if (this.relativeAlign)
+            DomHandler.relativePosition(this.container, this.target);
+        else
+            DomHandler.absolutePosition(this.container, this.target);
+    }
+    appendOverlay() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.container);
+            else
+                DomHandler.appendChild(this.container, this.appendTo);
+        }
+    }
+    restoreOverlayAppend() {
+        if (this.container && this.appendTo) {
+            this.el.nativeElement.appendChild(this.container);
+        }
+    }
+    moveOnTop() {
+        if (this.autoZIndex) {
+            ZIndexUtils.set('menu', this.container, this.baseZIndex + this.config.zIndex.menu);
+        }
+    }
+    hide() {
+        this.visible = false;
+        this.relativeAlign = false;
+        this.cd.markForCheck();
+    }
+    onWindowResize() {
+        this.hide();
+    }
+    itemClick(event, item) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (!item.url) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        if (this.popup) {
+            this.hide();
+        }
+    }
+    onOverlayClick(event) {
+        if (this.popup) {
+            this.overlayService.add({
+                originalEvent: event,
+                target: this.el.nativeElement
+            });
+        }
+        this.preventDocumentDefault = true;
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {
+                if (!this.preventDocumentDefault) {
+                    this.hide();
+                }
+                this.preventDocumentDefault = false;
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {
+                if (this.visible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    onOverlayHide() {
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.preventDocumentDefault = false;
+        this.target = null;
+    }
+    ngOnDestroy() {
+        if (this.popup) {
+            if (this.scrollHandler) {
+                this.scrollHandler.destroy();
+                this.scrollHandler = null;
+            }
+            if (this.container && this.autoZIndex) {
+                ZIndexUtils.clear(this.container);
+            }
+            this.restoreOverlayAppend();
+            this.onOverlayHide();
+        }
+    }
+    hasSubMenu() {
+        if (this.model) {
+            for (var item of this.model) {
+                if (item.items) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+}
+Menu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Menu, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i4.PrimeNGConfig }, { token: i4.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+Menu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Menu, selector: "p-menu", inputs: { model: "model", popup: "popup", style: "style", styleClass: "styleClass", appendTo: "appendTo", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="{'p-menu p-component': true, 'p-menu-overlay': popup}"
+            [class]="styleClass" [ngStyle]="style" *ngIf="!popup || visible" (click)="onOverlayClick($event)"
+            [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="popup !== true" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)">
+            <ul class="p-menu-list p-reset" role="menu">
+                <ng-template ngFor let-submenu [ngForOf]="model" *ngIf="hasSubMenu()">
+                    <li class="p-menu-separator" *ngIf="submenu.separator" [ngClass]="{'p-hidden': submenu.visible === false}" role="separator"></li>
+                    <li class="p-submenu-header" [attr.data-automationid]="submenu.automationId" *ngIf="!submenu.separator" [ngClass]="{'p-hidden': submenu.visible === false}" role="none">
+                        <span *ngIf="submenu.escape !== false; else htmlSubmenuLabel">{{submenu.label}}</span>
+                        <ng-template #htmlSubmenuLabel><span [innerHTML]="submenu.label"></span></ng-template>
+                    </li>
+                    <ng-template ngFor let-item [ngForOf]="submenu.items">
+                        <li class="p-menu-separator" *ngIf="item.separator" [ngClass]="{'p-hidden': (item.visible === false || submenu.visible === false)}" role="separator"></li>
+                        <li class="p-menuitem" *ngIf="!item.separator" [pMenuItemContent]="item" [ngClass]="{'p-hidden': (item.visible === false || submenu.visible === false)}" [ngStyle]="item.style" [class]="item.styleClass" role="none"></li>
+                    </ng-template>
+                </ng-template>
+                <ng-template ngFor let-item [ngForOf]="model" *ngIf="!hasSubMenu()">
+                    <li class="p-menu-separator" *ngIf="item.separator" [ngClass]="{'p-hidden': item.visible === false}" role="separator"></li>
+                    <li class="p-menuitem" *ngIf="!item.separator" [pMenuItemContent]="item" [ngClass]="{'p-hidden': item.visible === false}" [ngStyle]="item.style" [class]="item.styleClass" pTooltip [tooltipOptions]="item.tooltipOptions" role="none"></li>
+                </ng-template>
+            </ul>
+        </div>
+    `, isInline: true, styles: [".p-menu-overlay{position:absolute;top:0;left:0}.p-menu ul{margin:0;padding:0;list-style:none}.p-menu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-menu .p-menuitem-text{line-height:1}\n"], components: [{ type: MenuItemContent, selector: "[pMenuItemContent]", inputs: ["pMenuItemContent"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Menu, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-menu', template: `
+        <div #container [ngClass]="{'p-menu p-component': true, 'p-menu-overlay': popup}"
+            [class]="styleClass" [ngStyle]="style" *ngIf="!popup || visible" (click)="onOverlayClick($event)"
+            [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="popup !== true" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)">
+            <ul class="p-menu-list p-reset" role="menu">
+                <ng-template ngFor let-submenu [ngForOf]="model" *ngIf="hasSubMenu()">
+                    <li class="p-menu-separator" *ngIf="submenu.separator" [ngClass]="{'p-hidden': submenu.visible === false}" role="separator"></li>
+                    <li class="p-submenu-header" [attr.data-automationid]="submenu.automationId" *ngIf="!submenu.separator" [ngClass]="{'p-hidden': submenu.visible === false}" role="none">
+                        <span *ngIf="submenu.escape !== false; else htmlSubmenuLabel">{{submenu.label}}</span>
+                        <ng-template #htmlSubmenuLabel><span [innerHTML]="submenu.label"></span></ng-template>
+                    </li>
+                    <ng-template ngFor let-item [ngForOf]="submenu.items">
+                        <li class="p-menu-separator" *ngIf="item.separator" [ngClass]="{'p-hidden': (item.visible === false || submenu.visible === false)}" role="separator"></li>
+                        <li class="p-menuitem" *ngIf="!item.separator" [pMenuItemContent]="item" [ngClass]="{'p-hidden': (item.visible === false || submenu.visible === false)}" [ngStyle]="item.style" [class]="item.styleClass" role="none"></li>
+                    </ng-template>
+                </ng-template>
+                <ng-template ngFor let-item [ngForOf]="model" *ngIf="!hasSubMenu()">
+                    <li class="p-menu-separator" *ngIf="item.separator" [ngClass]="{'p-hidden': item.visible === false}" role="separator"></li>
+                    <li class="p-menuitem" *ngIf="!item.separator" [pMenuItemContent]="item" [ngClass]="{'p-hidden': item.visible === false}" [ngStyle]="item.style" [class]="item.styleClass" pTooltip [tooltipOptions]="item.tooltipOptions" role="none"></li>
+                </ng-template>
+            </ul>
+        </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-menu-overlay{position:absolute;top:0;left:0}.p-menu ul{margin:0;padding:0;list-style:none}.p-menu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-menu .p-menuitem-text{line-height:1}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i4.PrimeNGConfig }, { type: i4.OverlayService }]; }, propDecorators: { model: [{
+                type: Input
+            }], popup: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }] } });
+class MenuModule {
+}
+MenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+MenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenuModule, declarations: [Menu, MenuItemContent], imports: [CommonModule, RouterModule, RippleModule, TooltipModule], exports: [Menu, RouterModule, TooltipModule] });
+MenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenuModule, imports: [[CommonModule, RouterModule, RippleModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenuModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, RippleModule, TooltipModule],
+                    exports: [Menu, RouterModule, TooltipModule],
+                    declarations: [Menu, MenuItemContent]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Menu, MenuItemContent, MenuModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-menu.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-menu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-menu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-menu.mjs","sources":["../../src/app/components/menu/menu.ts","../../src/app/components/menu/primeng-menu.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,Input,Output,EventEmitter,Renderer2,ViewChild,Inject,forwardRef,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {trigger,state,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {MenuItem, OverlayService, PrimeNGConfig} from 'primeng/api';\nimport {ZIndexUtils} from 'primeng/utils';\nimport {RouterModule} from '@angular/router';\nimport {RippleModule} from 'primeng/ripple';\nimport {TooltipModule} from 'primeng/tooltip';\n\n@Component({\n    selector: '[pMenuItemContent]',\n    template: `\n        <a *ngIf=\"!item.routerLink\"  (keydown)=\"onItemKeyDown($event)\" [attr.href]=\"item.url||null\" class=\"p-menuitem-link\" [attr.tabindex]=\"item.disabled ? null : '0'\" [attr.data-automationid]=\"item.automationId\" [attr.target]=\"item.target\" [attr.title]=\"item.title\" [attr.id]=\"item.id\"\n            [ngClass]=\"{'p-disabled':item.disabled}\" (click)=\"menu.itemClick($event, item)\" role=\"menuitem\">\n            <span class=\"p-menuitem-icon\" *ngIf=\"item.icon\" [ngClass]=\"item.icon\"></span>\n            <span class=\"p-menuitem-text\" *ngIf=\"item.escape !== false; else htmlLabel\">{{item.label}}</span>\n            <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n        </a>\n        <a *ngIf=\"item.routerLink\" (keydown)=\"onItemKeyDown($event)\" [routerLink]=\"item.routerLink\" [attr.data-automationid]=\"item.automationId\" [queryParams]=\"item.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\"\n            [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{exact:false}\" class=\"p-menuitem-link\" [attr.target]=\"item.target\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled ? null : '0'\"\n            [attr.title]=\"item.title\" [ngClass]=\"{'p-disabled':item.disabled}\" (click)=\"menu.itemClick($event, item)\" role=\"menuitem\" pRipple\n            [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\" [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\">\n            <span class=\"p-menuitem-icon\" *ngIf=\"item.icon\" [ngClass]=\"item.icon\"></span>\n            <span class=\"p-menuitem-text\" *ngIf=\"item.escape !== false; else htmlRouteLabel\">{{item.label}}</span>\n            <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n        </a>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class MenuItemContent {\n\n    @Input(\"pMenuItemContent\") item: MenuItem;\n\n    menu: Menu;\n\n    constructor(@Inject(forwardRef(() => Menu)) menu) {\n        this.menu = menu as Menu;\n    }\n\n    onItemKeyDown(event) {\n        let listItem = event.currentTarget.parentElement;\n\n        switch (event.code) {\n            case 'ArrowDown':\n                var nextItem = this.findNextItem(listItem);\n                if (nextItem) {\n                    nextItem.children[0].focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'ArrowUp':\n                var prevItem = this.findPrevItem(listItem);\n                if (prevItem) {\n                    prevItem.children[0].focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'Space':\n            case 'Enter':\n                if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {\n                    listItem.children[0].click();\n                }\n\n                event.preventDefault();\n            break;\n\n            default:\n            break;\n        }\n    }\n\n    findNextItem(item) {\n        let nextItem = item.nextElementSibling;\n\n        if (nextItem)\n            return DomHandler.hasClass(nextItem, 'p-disabled') || !DomHandler.hasClass(nextItem, 'p-menuitem') ? this.findNextItem(nextItem) : nextItem;\n        else\n            return null;\n    }\n\n    findPrevItem(item) {\n        let prevItem = item.previousElementSibling;\n\n        if (prevItem)\n            return DomHandler.hasClass(prevItem, 'p-disabled') || !DomHandler.hasClass(prevItem, 'p-menuitem') ? this.findPrevItem(prevItem) : prevItem;\n        else\n            return null;\n    }\n}\n\n@Component({\n    selector: 'p-menu',\n    template: `\n        <div #container [ngClass]=\"{'p-menu p-component': true, 'p-menu-overlay': popup}\"\n            [class]=\"styleClass\" [ngStyle]=\"style\" *ngIf=\"!popup || visible\" (click)=\"onOverlayClick($event)\"\n            [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" [@.disabled]=\"popup !== true\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\">\n            <ul class=\"p-menu-list p-reset\" role=\"menu\">\n                <ng-template ngFor let-submenu [ngForOf]=\"model\" *ngIf=\"hasSubMenu()\">\n                    <li class=\"p-menu-separator\" *ngIf=\"submenu.separator\" [ngClass]=\"{'p-hidden': submenu.visible === false}\" role=\"separator\"></li>\n                    <li class=\"p-submenu-header\" [attr.data-automationid]=\"submenu.automationId\" *ngIf=\"!submenu.separator\" [ngClass]=\"{'p-hidden': submenu.visible === false}\" role=\"none\">\n                        <span *ngIf=\"submenu.escape !== false; else htmlSubmenuLabel\">{{submenu.label}}</span>\n                        <ng-template #htmlSubmenuLabel><span [innerHTML]=\"submenu.label\"></span></ng-template>\n                    </li>\n                    <ng-template ngFor let-item [ngForOf]=\"submenu.items\">\n                        <li class=\"p-menu-separator\" *ngIf=\"item.separator\" [ngClass]=\"{'p-hidden': (item.visible === false || submenu.visible === false)}\" role=\"separator\"></li>\n                        <li class=\"p-menuitem\" *ngIf=\"!item.separator\" [pMenuItemContent]=\"item\" [ngClass]=\"{'p-hidden': (item.visible === false || submenu.visible === false)}\" [ngStyle]=\"item.style\" [class]=\"item.styleClass\" role=\"none\"></li>\n                    </ng-template>\n                </ng-template>\n                <ng-template ngFor let-item [ngForOf]=\"model\" *ngIf=\"!hasSubMenu()\">\n                    <li class=\"p-menu-separator\" *ngIf=\"item.separator\" [ngClass]=\"{'p-hidden': item.visible === false}\" role=\"separator\"></li>\n                    <li class=\"p-menuitem\" *ngIf=\"!item.separator\" [pMenuItemContent]=\"item\" [ngClass]=\"{'p-hidden': item.visible === false}\" [ngStyle]=\"item.style\" [class]=\"item.styleClass\" pTooltip [tooltipOptions]=\"item.tooltipOptions\" role=\"none\"></li>\n                </ng-template>\n            </ul>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./menu.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Menu implements OnDestroy {\n\n    @Input() model: MenuItem[];\n\n    @Input() popup: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() appendTo: any;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    container: HTMLDivElement;\n\n    scrollHandler: any;\n\n    documentClickListener: any;\n\n    documentResizeListener: any;\n\n    preventDocumentDefault: boolean;\n\n    target: any;\n\n    visible: boolean;\n\n    relativeAlign: boolean;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, private cd: ChangeDetectorRef, public config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    toggle(event) {\n        if (this.visible)\n            this.hide();\n        else\n            this.show(event);\n\n        this.preventDocumentDefault = true;\n    }\n\n    show(event) {\n        this.target = event.currentTarget;\n        this.relativeAlign = event.relativeAlign;\n        this.visible = true;\n        this.preventDocumentDefault = true;\n        this.cd.markForCheck();\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                if (this.popup) {\n                    this.container = event.element;\n                    this.moveOnTop();\n                    this.onShow.emit({});\n                    this.appendOverlay();\n                    this.alignOverlay();\n                    this.bindDocumentClickListener();\n                    this.bindDocumentResizeListener();\n                    this.bindScrollListener();\n                }\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n                this.onHide.emit({});\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                if (this.autoZIndex) {\n                    ZIndexUtils.clear(event.element);\n                }\n            break;\n        }\n    }\n\n    alignOverlay() {\n        if (this.relativeAlign)\n            DomHandler.relativePosition(this.container, this.target);\n        else\n            DomHandler.absolutePosition(this.container, this.target);\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.container);\n            else\n                DomHandler.appendChild(this.container, this.appendTo);\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.container && this.appendTo) {\n            this.el.nativeElement.appendChild(this.container);\n        }\n    }\n\n    moveOnTop() {\n        if (this.autoZIndex) {\n            ZIndexUtils.set('menu', this.container, this.baseZIndex + this.config.zIndex.menu);\n        }\n    }\n\n    hide() {\n        this.visible = false;\n        this.relativeAlign = false;\n        this.cd.markForCheck();\n    }\n\n    onWindowResize() {\n        this.hide();\n    }\n\n    itemClick(event, item: MenuItem) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (!item.url) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        if (this.popup) {\n            this.hide();\n        }\n    }\n\n    onOverlayClick(event) {\n        if (this.popup) {\n            this.overlayService.add({\n                originalEvent: event,\n                target: this.el.nativeElement\n            });\n        }\n\n        this.preventDocumentDefault=true\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {\n                if (!this.preventDocumentDefault) {\n                    this.hide();\n                }\n\n                this.preventDocumentDefault = false;\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n                if (this.visible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    onOverlayHide() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.preventDocumentDefault = false;\n        this.target = null;\n    }\n\n    ngOnDestroy() {\n        if (this.popup) {\n            if (this.scrollHandler) {\n                this.scrollHandler.destroy();\n                this.scrollHandler = null;\n            }\n\n            if (this.container && this.autoZIndex) {\n                ZIndexUtils.clear(this.container);\n            }\n\n            this.restoreOverlayAppend();\n            this.onOverlayHide();\n        }\n    }\n\n    hasSubMenu(): boolean {\n        if (this.model) {\n            for (var item of this.model) {\n                if (item.items) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,RippleModule,TooltipModule],\n    exports: [Menu,RouterModule,TooltipModule],\n    declarations: [Menu,MenuItemContent]\n})\nexport class MenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-menubar.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-menubar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-menubar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,339 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ViewEncapsulation, Input, Output, ChangeDetectionStrategy, ContentChildren, ViewChild, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i5 from 'primeng/api';
+import { PrimeTemplate } from 'primeng/api';
+import * as i4 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i2 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+
+class MenubarSub {
+    constructor(el, renderer, cd) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.leafClick = new EventEmitter();
+        this.menuHoverActive = false;
+    }
+    get parentActive() {
+        return this._parentActive;
+    }
+    set parentActive(value) {
+        if (!this.root) {
+            this._parentActive = value;
+            if (!value)
+                this.activeItem = null;
+        }
+    }
+    onItemClick(event, item) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (!item.url && !item.routerLink) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        if (item.items) {
+            if (this.activeItem && item === this.activeItem) {
+                this.activeItem = null;
+                this.unbindDocumentClickListener();
+            }
+            else {
+                this.activeItem = item;
+                if (this.root) {
+                    this.bindDocumentClickListener();
+                }
+            }
+        }
+        if (!item.items) {
+            this.onLeafClick();
+        }
+    }
+    onItemMouseEnter(event, item) {
+        if (item.disabled || this.mobileActive) {
+            event.preventDefault();
+            return;
+        }
+        if (this.root) {
+            if (this.activeItem || this.autoDisplay) {
+                this.activeItem = item;
+                this.bindDocumentClickListener();
+            }
+        }
+        else {
+            this.activeItem = item;
+            this.bindDocumentClickListener();
+        }
+    }
+    onLeafClick() {
+        this.activeItem = null;
+        if (this.root) {
+            this.unbindDocumentClickListener();
+        }
+        this.leafClick.emit();
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            this.documentClickListener = (event) => {
+                if (this.el && !this.el.nativeElement.contains(event.target)) {
+                    this.activeItem = null;
+                    this.cd.markForCheck();
+                    this.unbindDocumentClickListener();
+                }
+            };
+            document.addEventListener('click', this.documentClickListener);
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            document.removeEventListener('click', this.documentClickListener);
+            this.documentClickListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.unbindDocumentClickListener();
+    }
+}
+MenubarSub.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenubarSub, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+MenubarSub.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: MenubarSub, selector: "p-menubarSub", inputs: { item: "item", root: "root", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", mobileActive: "mobileActive", autoDisplay: "autoDisplay", parentActive: "parentActive" }, outputs: { leafClick: "leafClick" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <ul [ngClass]="{'p-submenu-list': !root, 'p-menubar-root-list': root}" [attr.role]="root ? 'menubar' : 'menu'">
+            <ng-template ngFor let-child [ngForOf]="(root ? item : item.items)">
+                <li *ngIf="child.separator" class="p-menu-separator" [ngClass]="{'p-hidden': child.visible === false}" role="separator">
+                <li *ngIf="!child.separator" #listItem [ngClass]="{'p-menuitem':true, 'p-menuitem-active': child === activeItem, 'p-hidden': child.visible === false}" [ngStyle]="child.style" [class]="child.styleClass" role="none" pTooltip [tooltipOptions]="child.tooltipOptions">
+                    <a *ngIf="!child.routerLink" [attr.href]="child.url" [attr.data-automationid]="child.automationId" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" role="menuitem"
+                        (click)="onItemClick($event, child)" (mouseenter)="onItemMouseEnter($event,child)"
+                         [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}" [attr.tabindex]="child.disabled ? null : '0'" [attr.aria-haspopup]="item.items != null" [attr.aria-expanded]="item === activeItem" pRipple>
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlLabel">{{child.label}}</span>
+                        <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi" *ngIf="child.items" [ngClass]="{'pi-angle-down':root,'pi-angle-right':!root}"></span>
+                    </a>
+                    <a *ngIf="child.routerLink" [routerLink]="child.routerLink" [attr.data-automationid]="child.automationId" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}"
+                        [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" [attr.tabindex]="child.disabled ? null : '0'" role="menuitem"
+                        (click)="onItemClick($event, child)" (mouseenter)="onItemMouseEnter($event,child)"
+                        [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}"
+                        [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state" pRipple>
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi" *ngIf="child.items" [ngClass]="{'pi-angle-down':root,'pi-angle-right':!root}"></span>
+                    </a>
+                    <p-menubarSub [parentActive]="child === activeItem" [item]="child" *ngIf="child.items" [mobileActive]="mobileActive" [autoDisplay]="autoDisplay" (leafClick)="onLeafClick()"></p-menubarSub>
+                </li>
+            </ng-template>
+        </ul>
+    `, isInline: true, components: [{ type: MenubarSub, selector: "p-menubarSub", inputs: ["item", "root", "autoZIndex", "baseZIndex", "mobileActive", "autoDisplay", "parentActive"], outputs: ["leafClick"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenubarSub, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-menubarSub',
+                    template: `
+        <ul [ngClass]="{'p-submenu-list': !root, 'p-menubar-root-list': root}" [attr.role]="root ? 'menubar' : 'menu'">
+            <ng-template ngFor let-child [ngForOf]="(root ? item : item.items)">
+                <li *ngIf="child.separator" class="p-menu-separator" [ngClass]="{'p-hidden': child.visible === false}" role="separator">
+                <li *ngIf="!child.separator" #listItem [ngClass]="{'p-menuitem':true, 'p-menuitem-active': child === activeItem, 'p-hidden': child.visible === false}" [ngStyle]="child.style" [class]="child.styleClass" role="none" pTooltip [tooltipOptions]="child.tooltipOptions">
+                    <a *ngIf="!child.routerLink" [attr.href]="child.url" [attr.data-automationid]="child.automationId" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" role="menuitem"
+                        (click)="onItemClick($event, child)" (mouseenter)="onItemMouseEnter($event,child)"
+                         [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}" [attr.tabindex]="child.disabled ? null : '0'" [attr.aria-haspopup]="item.items != null" [attr.aria-expanded]="item === activeItem" pRipple>
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlLabel">{{child.label}}</span>
+                        <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi" *ngIf="child.items" [ngClass]="{'pi-angle-down':root,'pi-angle-right':!root}"></span>
+                    </a>
+                    <a *ngIf="child.routerLink" [routerLink]="child.routerLink" [attr.data-automationid]="child.automationId" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}"
+                        [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" [attr.tabindex]="child.disabled ? null : '0'" role="menuitem"
+                        (click)="onItemClick($event, child)" (mouseenter)="onItemMouseEnter($event,child)"
+                        [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}"
+                        [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state" pRipple>
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi" *ngIf="child.items" [ngClass]="{'pi-angle-down':root,'pi-angle-right':!root}"></span>
+                    </a>
+                    <p-menubarSub [parentActive]="child === activeItem" [item]="child" *ngIf="child.items" [mobileActive]="mobileActive" [autoDisplay]="autoDisplay" (leafClick)="onLeafClick()"></p-menubarSub>
+                </li>
+            </ng-template>
+        </ul>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{
+                type: Input
+            }], root: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], mobileActive: [{
+                type: Input
+            }], autoDisplay: [{
+                type: Input
+            }], parentActive: [{
+                type: Input
+            }], leafClick: [{
+                type: Output
+            }] } });
+class Menubar {
+    constructor(el, renderer, cd, config) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.config = config;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'start':
+                    this.startTemplate = item.template;
+                    break;
+                case 'end':
+                    this.endTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    toggle(event) {
+        if (this.mobileActive) {
+            this.hide();
+            ZIndexUtils.clear(this.rootmenu.el.nativeElement);
+        }
+        else {
+            this.mobileActive = true;
+            ZIndexUtils.set('menu', this.rootmenu.el.nativeElement, this.config.zIndex.menu);
+        }
+        this.bindOutsideClickListener();
+        event.preventDefault();
+    }
+    bindOutsideClickListener() {
+        if (!this.outsideClickListener) {
+            this.outsideClickListener = (event) => {
+                if (this.mobileActive && this.rootmenu.el.nativeElement !== event.target && !this.rootmenu.el.nativeElement.contains(event.target)
+                    && this.menubutton.nativeElement !== event.target && !this.menubutton.nativeElement.contains(event.target)) {
+                    this.hide();
+                }
+            };
+            document.addEventListener('click', this.outsideClickListener);
+        }
+    }
+    hide() {
+        this.mobileActive = false;
+        this.cd.markForCheck();
+        ZIndexUtils.clear(this.rootmenu.el.nativeElement);
+        this.unbindOutsideClickListener();
+    }
+    onLeafClick() {
+        this.hide();
+    }
+    unbindOutsideClickListener() {
+        if (this.outsideClickListener) {
+            document.removeEventListener('click', this.outsideClickListener);
+            this.outsideClickListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.unbindOutsideClickListener();
+    }
+}
+Menubar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Menubar, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+Menubar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Menubar, selector: "p-menubar", inputs: { model: "model", style: "style", styleClass: "styleClass", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", autoDisplay: "autoDisplay" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "menubutton", first: true, predicate: ["menubutton"], descendants: true }, { propertyName: "rootmenu", first: true, predicate: ["rootmenu"], descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="{'p-menubar p-component':true, 'p-menubar-mobile-active': mobileActive}" [class]="styleClass" [ngStyle]="style">
+            <div class="p-menubar-start" *ngIf="startTemplate">
+                <ng-container *ngTemplateOutlet="startTemplate"></ng-container>
+            </div>
+            <a #menubutton tabindex="0" class="p-menubar-button" (click)="toggle($event)">
+                <i class="pi pi-bars"></i>
+            </a>
+            <p-menubarSub #rootmenu [item]="model" root="root" [baseZIndex]="baseZIndex" (leafClick)="onLeafClick()" [autoZIndex]="autoZIndex" [mobileActive]="mobileActive" [autoDisplay]="autoDisplay"></p-menubarSub>
+            <div class="p-menubar-end" *ngIf="endTemplate; else legacy">
+                <ng-container *ngTemplateOutlet="endTemplate"></ng-container>
+            </div>
+            <ng-template #legacy>
+                <div class="p-menubar-end">
+                    <ng-content></ng-content>
+                </div>
+            </ng-template>
+        </div>
+    `, isInline: true, styles: [".p-menubar{display:flex;align-items:center}.p-menubar ul{margin:0;padding:0;list-style:none}.p-menubar .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-menubar .p-menuitem-text{line-height:1}.p-menubar .p-menuitem{position:relative}.p-menubar-root-list{display:flex;align-items:center}.p-menubar-root-list>li ul{display:none;z-index:1}.p-menubar-root-list>.p-menuitem-active>p-menubarsub>.p-submenu-list{display:block}.p-menubar .p-submenu-list{display:none;position:absolute;z-index:1}.p-menubar .p-submenu-list>.p-menuitem-active>p-menubarsub>.p-submenu-list{display:block;left:100%;top:0}.p-menubar .p-submenu-list .p-menuitem-link .p-submenu-icon{margin-left:auto}.p-menubar .p-menubar-custom,.p-menubar .p-menubar-end{margin-left:auto;align-self:center}.p-menubar-button{display:none;cursor:pointer;align-items:center;justify-content:center}\n"], components: [{ type: MenubarSub, selector: "p-menubarSub", inputs: ["item", "root", "autoZIndex", "baseZIndex", "mobileActive", "autoDisplay", "parentActive"], outputs: ["leafClick"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Menubar, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-menubar', template: `
+        <div [ngClass]="{'p-menubar p-component':true, 'p-menubar-mobile-active': mobileActive}" [class]="styleClass" [ngStyle]="style">
+            <div class="p-menubar-start" *ngIf="startTemplate">
+                <ng-container *ngTemplateOutlet="startTemplate"></ng-container>
+            </div>
+            <a #menubutton tabindex="0" class="p-menubar-button" (click)="toggle($event)">
+                <i class="pi pi-bars"></i>
+            </a>
+            <p-menubarSub #rootmenu [item]="model" root="root" [baseZIndex]="baseZIndex" (leafClick)="onLeafClick()" [autoZIndex]="autoZIndex" [mobileActive]="mobileActive" [autoDisplay]="autoDisplay"></p-menubarSub>
+            <div class="p-menubar-end" *ngIf="endTemplate; else legacy">
+                <ng-container *ngTemplateOutlet="endTemplate"></ng-container>
+            </div>
+            <ng-template #legacy>
+                <div class="p-menubar-end">
+                    <ng-content></ng-content>
+                </div>
+            </ng-template>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-menubar{display:flex;align-items:center}.p-menubar ul{margin:0;padding:0;list-style:none}.p-menubar .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-menubar .p-menuitem-text{line-height:1}.p-menubar .p-menuitem{position:relative}.p-menubar-root-list{display:flex;align-items:center}.p-menubar-root-list>li ul{display:none;z-index:1}.p-menubar-root-list>.p-menuitem-active>p-menubarsub>.p-submenu-list{display:block}.p-menubar .p-submenu-list{display:none;position:absolute;z-index:1}.p-menubar .p-submenu-list>.p-menuitem-active>p-menubarsub>.p-submenu-list{display:block;left:100%;top:0}.p-menubar .p-submenu-list .p-menuitem-link .p-submenu-icon{margin-left:auto}.p-menubar .p-menubar-custom,.p-menubar .p-menubar-end{margin-left:auto;align-self:center}.p-menubar-button{display:none;cursor:pointer;align-items:center;justify-content:center}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i5.PrimeNGConfig }]; }, propDecorators: { model: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], autoDisplay: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], menubutton: [{
+                type: ViewChild,
+                args: ['menubutton']
+            }], rootmenu: [{
+                type: ViewChild,
+                args: ['rootmenu']
+            }] } });
+class MenubarModule {
+}
+MenubarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenubarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+MenubarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenubarModule, declarations: [Menubar, MenubarSub], imports: [CommonModule, RouterModule, RippleModule, TooltipModule], exports: [Menubar, RouterModule, TooltipModule] });
+MenubarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenubarModule, imports: [[CommonModule, RouterModule, RippleModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MenubarModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, RippleModule, TooltipModule],
+                    exports: [Menubar, RouterModule, TooltipModule],
+                    declarations: [Menubar, MenubarSub]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Menubar, MenubarModule, MenubarSub };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-menubar.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-menubar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-menubar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-menubar.mjs","sources":["../../src/app/components/menubar/menubar.ts","../../src/app/components/menubar/primeng-menubar.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, Input, Renderer2, OnDestroy,ChangeDetectorRef, ChangeDetectionStrategy, ViewEncapsulation, AfterContentInit, ContentChildren, QueryList, TemplateRef, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler } from 'primeng/dom';\nimport { ZIndexUtils } from 'primeng/utils';\nimport { MenuItem, PrimeNGConfig, PrimeTemplate } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from 'primeng/ripple';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-menubarSub',\n    template: `\n        <ul [ngClass]=\"{'p-submenu-list': !root, 'p-menubar-root-list': root}\" [attr.role]=\"root ? 'menubar' : 'menu'\">\n            <ng-template ngFor let-child [ngForOf]=\"(root ? item : item.items)\">\n                <li *ngIf=\"child.separator\" class=\"p-menu-separator\" [ngClass]=\"{'p-hidden': child.visible === false}\" role=\"separator\">\n                <li *ngIf=\"!child.separator\" #listItem [ngClass]=\"{'p-menuitem':true, 'p-menuitem-active': child === activeItem, 'p-hidden': child.visible === false}\" [ngStyle]=\"child.style\" [class]=\"child.styleClass\" role=\"none\" pTooltip [tooltipOptions]=\"child.tooltipOptions\">\n                    <a *ngIf=\"!child.routerLink\" [attr.href]=\"child.url\" [attr.data-automationid]=\"child.automationId\" [attr.target]=\"child.target\" [attr.title]=\"child.title\" [attr.id]=\"child.id\" role=\"menuitem\"\n                        (click)=\"onItemClick($event, child)\" (mouseenter)=\"onItemMouseEnter($event,child)\"\n                         [ngClass]=\"{'p-menuitem-link':true,'p-disabled':child.disabled}\" [attr.tabindex]=\"child.disabled ? null : '0'\" [attr.aria-haspopup]=\"item.items != null\" [attr.aria-expanded]=\"item === activeItem\" pRipple>\n                        <span class=\"p-menuitem-icon\" *ngIf=\"child.icon\" [ngClass]=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlLabel\">{{child.label}}</span>\n                        <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                        <span class=\"p-submenu-icon pi\" *ngIf=\"child.items\" [ngClass]=\"{'pi-angle-down':root,'pi-angle-right':!root}\"></span>\n                    </a>\n                    <a *ngIf=\"child.routerLink\" [routerLink]=\"child.routerLink\" [attr.data-automationid]=\"child.automationId\" [queryParams]=\"child.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" [routerLinkActiveOptions]=\"child.routerLinkActiveOptions||{exact:false}\"\n                        [attr.target]=\"child.target\" [attr.title]=\"child.title\" [attr.id]=\"child.id\" [attr.tabindex]=\"child.disabled ? null : '0'\" role=\"menuitem\"\n                        (click)=\"onItemClick($event, child)\" (mouseenter)=\"onItemMouseEnter($event,child)\"\n                        [ngClass]=\"{'p-menuitem-link':true,'p-disabled':child.disabled}\"\n                        [fragment]=\"child.fragment\" [queryParamsHandling]=\"child.queryParamsHandling\" [preserveFragment]=\"child.preserveFragment\" [skipLocationChange]=\"child.skipLocationChange\" [replaceUrl]=\"child.replaceUrl\" [state]=\"child.state\" pRipple>\n                        <span class=\"p-menuitem-icon\" *ngIf=\"child.icon\" [ngClass]=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlRouteLabel\">{{child.label}}</span>\n                        <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                        <span class=\"p-submenu-icon pi\" *ngIf=\"child.items\" [ngClass]=\"{'pi-angle-down':root,'pi-angle-right':!root}\"></span>\n                    </a>\n                    <p-menubarSub [parentActive]=\"child === activeItem\" [item]=\"child\" *ngIf=\"child.items\" [mobileActive]=\"mobileActive\" [autoDisplay]=\"autoDisplay\" (leafClick)=\"onLeafClick()\"></p-menubarSub>\n                </li>\n            </ng-template>\n        </ul>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class MenubarSub implements OnDestroy {\n\n    @Input() item: MenuItem;\n\n    @Input() root: boolean;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() mobileActive: boolean;\n\n    @Input() autoDisplay: boolean;\n\n    @Input() get parentActive():boolean\n    {\n        return this._parentActive;\n    }\n    set parentActive(value) {\n        if (!this.root) {\n            this._parentActive = value;\n\n            if (!value)\n                this.activeItem = null;\n        }\n    }\n\n    @Output() leafClick: EventEmitter<any> = new EventEmitter();\n\n    _parentActive: boolean;\n\n    documentClickListener: any;\n\n    menuHoverActive: boolean = false;\n\n    activeItem: any;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, private cd: ChangeDetectorRef) { }\n\n    onItemClick(event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (!item.url && !item.routerLink) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        if (item.items) {\n            if (this.activeItem && item === this.activeItem) {\n                this.activeItem = null;\n                this.unbindDocumentClickListener();\n            }\n            else {\n                this.activeItem = item;\n                if (this.root) {\n                    this.bindDocumentClickListener();\n                }\n            }\n        }\n\n        if (!item.items) {\n            this.onLeafClick();\n        }\n    }\n\n    onItemMouseEnter(event, item) {\n        if (item.disabled || this.mobileActive) {\n            event.preventDefault();\n            return;\n        }\n\n        if (this.root) {\n            if (this.activeItem || this.autoDisplay) {\n                this.activeItem = item;\n                this.bindDocumentClickListener();\n            }\n        }\n        else {\n            this.activeItem = item;\n            this.bindDocumentClickListener();\n        }\n    }\n\n    onLeafClick() {\n        this.activeItem = null;\n        if (this.root) {\n            this.unbindDocumentClickListener();\n        }\n\n        this.leafClick.emit();\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            this.documentClickListener = (event) => {\n                if (this.el && !this.el.nativeElement.contains(event.target)) {\n                    this.activeItem = null;\n                    this.cd.markForCheck();\n                    this.unbindDocumentClickListener();\n                }\n            };\n\n            document.addEventListener('click', this.documentClickListener);\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            document.removeEventListener('click', this.documentClickListener);\n            this.documentClickListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.unbindDocumentClickListener();\n    }\n}\n\n@Component({\n    selector: 'p-menubar',\n    template: `\n        <div [ngClass]=\"{'p-menubar p-component':true, 'p-menubar-mobile-active': mobileActive}\" [class]=\"styleClass\" [ngStyle]=\"style\">\n            <div class=\"p-menubar-start\" *ngIf=\"startTemplate\">\n                <ng-container *ngTemplateOutlet=\"startTemplate\"></ng-container>\n            </div>\n            <a #menubutton tabindex=\"0\" class=\"p-menubar-button\" (click)=\"toggle($event)\">\n                <i class=\"pi pi-bars\"></i>\n            </a>\n            <p-menubarSub #rootmenu [item]=\"model\" root=\"root\" [baseZIndex]=\"baseZIndex\" (leafClick)=\"onLeafClick()\" [autoZIndex]=\"autoZIndex\" [mobileActive]=\"mobileActive\" [autoDisplay]=\"autoDisplay\"></p-menubarSub>\n            <div class=\"p-menubar-end\" *ngIf=\"endTemplate; else legacy\">\n                <ng-container *ngTemplateOutlet=\"endTemplate\"></ng-container>\n            </div>\n            <ng-template #legacy>\n                <div class=\"p-menubar-end\">\n                    <ng-content></ng-content>\n                </div>\n            </ng-template>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./menubar.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Menubar implements AfterContentInit, OnDestroy {\n\n    @Input() model: MenuItem[];\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() autoDisplay: boolean;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @ViewChild('menubutton') menubutton: ElementRef;\n\n    @ViewChild('rootmenu') rootmenu: MenubarSub;\n\n    startTemplate: TemplateRef<any>;\n\n    endTemplate: TemplateRef<any>;\n\n    mobileActive: boolean;\n\n    outsideClickListener: any;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public config: PrimeNGConfig) { }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'start':\n                    this.startTemplate = item.template;\n                break;\n\n                case 'end':\n                    this.endTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    toggle(event) {\n        if (this.mobileActive) {\n            this.hide();\n            ZIndexUtils.clear(this.rootmenu.el.nativeElement);\n        }\n        else {\n            this.mobileActive = true;\n            ZIndexUtils.set('menu', this.rootmenu.el.nativeElement, this.config.zIndex.menu);\n        }\n\n        this.bindOutsideClickListener();\n        event.preventDefault();\n    }\n\n    bindOutsideClickListener() {\n        if (!this.outsideClickListener) {\n            this.outsideClickListener = (event) => {\n                if (this.mobileActive && this.rootmenu.el.nativeElement !== event.target && !this.rootmenu.el.nativeElement.contains(event.target)\n                    && this.menubutton.nativeElement !== event.target && !this.menubutton.nativeElement.contains(event.target)) {\n                    this.hide();\n                }\n            };\n            document.addEventListener('click', this.outsideClickListener);\n        }\n    }\n\n    hide() {\n        this.mobileActive = false;\n        this.cd.markForCheck();\n        ZIndexUtils.clear(this.rootmenu.el.nativeElement);\n        this.unbindOutsideClickListener();\n    }\n\n    onLeafClick() {\n        this.hide();\n    }\n\n    unbindOutsideClickListener() {\n        if (this.outsideClickListener) {\n            document.removeEventListener('click', this.outsideClickListener);\n            this.outsideClickListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.unbindOutsideClickListener();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,RippleModule,TooltipModule],\n    exports: [Menubar,RouterModule,TooltipModule],\n    declarations: [Menubar,MenubarSub]\n})\nexport class MenubarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-message.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-message.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-message.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,100 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class UIMessage {
+    constructor() {
+        this.escape = true;
+    }
+    get icon() {
+        let icon = null;
+        if (this.severity) {
+            switch (this.severity) {
+                case 'success':
+                    icon = 'pi pi-check';
+                    break;
+                case 'info':
+                    icon = 'pi pi-info-circle';
+                    break;
+                case 'error':
+                    icon = 'pi pi-times-circle';
+                    break;
+                case 'warn':
+                    icon = 'pi pi-exclamation-triangle';
+                    break;
+                default:
+                    icon = 'pi pi-info-circle';
+                    break;
+            }
+        }
+        return icon;
+    }
+}
+UIMessage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: UIMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
+UIMessage.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: UIMessage, selector: "p-message", inputs: { severity: "severity", text: "text", escape: "escape", style: "style", styleClass: "styleClass" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div aria-live="polite" class="p-inline-message p-component p-inline-message" *ngIf="severity" [ngStyle]="style" [class]="styleClass"
+        [ngClass]="{'p-inline-message-info': (severity === 'info'),
+                'p-inline-message-warn': (severity === 'warn'),
+                'p-inline-message-error': (severity === 'error'),
+                'p-inline-message-success': (severity === 'success'),
+                'p-inline-message-icon-only': this.text == null}">
+            <span class="p-inline-message-icon" [ngClass]="icon"></span>
+            <div *ngIf="!escape; else escapeOut">
+                <span *ngIf="!escape" class="p-inline-message-text" [innerHTML]="text"></span>
+            </div>
+            <ng-template #escapeOut>
+                <span *ngIf="escape" class="p-inline-message-text">{{text}}</span>
+            </ng-template>
+        </div>
+    `, isInline: true, styles: [".p-inline-message{display:inline-flex;align-items:center;justify-content:center;vertical-align:top}.p-inline-message-icon-only .p-inline-message-text{visibility:hidden;width:0}.p-fluid .p-inline-message{display:flex}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: UIMessage, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-message', template: `
+        <div aria-live="polite" class="p-inline-message p-component p-inline-message" *ngIf="severity" [ngStyle]="style" [class]="styleClass"
+        [ngClass]="{'p-inline-message-info': (severity === 'info'),
+                'p-inline-message-warn': (severity === 'warn'),
+                'p-inline-message-error': (severity === 'error'),
+                'p-inline-message-success': (severity === 'success'),
+                'p-inline-message-icon-only': this.text == null}">
+            <span class="p-inline-message-icon" [ngClass]="icon"></span>
+            <div *ngIf="!escape; else escapeOut">
+                <span *ngIf="!escape" class="p-inline-message-text" [innerHTML]="text"></span>
+            </div>
+            <ng-template #escapeOut>
+                <span *ngIf="escape" class="p-inline-message-text">{{text}}</span>
+            </ng-template>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-inline-message{display:inline-flex;align-items:center;justify-content:center;vertical-align:top}.p-inline-message-icon-only .p-inline-message-text{visibility:hidden;width:0}.p-fluid .p-inline-message{display:flex}\n"] }]
+        }], propDecorators: { severity: [{
+                type: Input
+            }], text: [{
+                type: Input
+            }], escape: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }] } });
+class MessageModule {
+}
+MessageModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+MessageModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessageModule, declarations: [UIMessage], imports: [CommonModule], exports: [UIMessage] });
+MessageModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessageModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessageModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [UIMessage],
+                    declarations: [UIMessage]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { MessageModule, UIMessage };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-message.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-message.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-message.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-message.mjs","sources":["../../src/app/components/message/message.ts","../../src/app/components/message/primeng-message.ts"],"sourcesContent":["import {NgModule,Component,Input,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\n@Component({\n    selector: 'p-message',\n    template: `\n        <div aria-live=\"polite\" class=\"p-inline-message p-component p-inline-message\" *ngIf=\"severity\" [ngStyle]=\"style\" [class]=\"styleClass\"\n        [ngClass]=\"{'p-inline-message-info': (severity === 'info'),\n                'p-inline-message-warn': (severity === 'warn'),\n                'p-inline-message-error': (severity === 'error'),\n                'p-inline-message-success': (severity === 'success'),\n                'p-inline-message-icon-only': this.text == null}\">\n            <span class=\"p-inline-message-icon\" [ngClass]=\"icon\"></span>\n            <div *ngIf=\"!escape; else escapeOut\">\n                <span *ngIf=\"!escape\" class=\"p-inline-message-text\" [innerHTML]=\"text\"></span>\n            </div>\n            <ng-template #escapeOut>\n                <span *ngIf=\"escape\" class=\"p-inline-message-text\">{{text}}</span>\n            </ng-template>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./message.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class UIMessage {\n\n    @Input() severity: string;\n\n    @Input() text: string;\n\n    @Input() escape: boolean = true;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    get icon(): string {\n        let icon: string = null;\n\n        if (this.severity) {\n            switch(this.severity) {\n                case 'success':\n                    icon = 'pi pi-check';\n                break;\n\n                case 'info':\n                    icon = 'pi pi-info-circle';\n                break;\n\n                case 'error':\n                    icon = 'pi pi-times-circle';\n                break;\n\n                case 'warn':\n                    icon = 'pi pi-exclamation-triangle';\n                break;\n\n                default:\n                    icon = 'pi pi-info-circle';\n                break;\n            }\n        }\n\n        return icon;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [UIMessage],\n    declarations: [UIMessage]\n})\nexport class MessageModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MA4Ba,SAAS;IAzBtB;QA+Ba,WAAM,GAAY,IAAI,CAAC;KAmCnC;IA7BG,IAAI,IAAI;QACJ,IAAI,IAAI,GAAW,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,QAAO,IAAI,CAAC,QAAQ;gBAChB,KAAK,SAAS;oBACV,IAAI,GAAG,aAAa,CAAC;oBACzB,MAAM;gBAEN,KAAK,MAAM;oBACP,IAAI,GAAG,mBAAmB,CAAC;oBAC/B,MAAM;gBAEN,KAAK,OAAO;oBACR,IAAI,GAAG,oBAAoB,CAAC;oBAChC,MAAM;gBAEN,KAAK,MAAM;oBACP,IAAI,GAAG,4BAA4B,CAAC;oBACxC,MAAM;gBAEN;oBACI,IAAI,GAAG,mBAAmB,CAAC;oBAC/B,MAAM;aACT;SACJ;QAED,OAAO,IAAI,CAAC;KACf;;sGAxCQ,SAAS;0FAAT,SAAS,oMAvBR;;;;;;;;;;;;;;;KAeT;2FAQQ,SAAS;kBAzBrB,SAAS;+BACI,WAAW,YACX;;;;;;;;;;;;;;;KAeT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,QAAQ;sBAAhB,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,MAAM;sBAAd,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;;MAsCG,aAAa;;0GAAb,aAAa;2GAAb,aAAa,iBAhDb,SAAS,aA4CR,YAAY,aA5Cb,SAAS;2GAgDT,aAAa,YAJb,CAAC,YAAY,CAAC;2FAId,aAAa;kBALzB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,YAAY,EAAE,CAAC,SAAS,CAAC;iBAC5B;;;AC3ED;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-messages.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-messages.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-messages.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,244 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Input, ContentChildren, Output, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { trigger, transition, style, animate } from '@angular/animations';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate } from 'primeng/api';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+
+class Messages {
+    constructor(messageService, el, cd) {
+        this.messageService = messageService;
+        this.el = el;
+        this.cd = cd;
+        this.closable = true;
+        this.enableService = true;
+        this.escape = true;
+        this.showTransitionOptions = '300ms ease-out';
+        this.hideTransitionOptions = '200ms cubic-bezier(0.86, 0, 0.07, 1)';
+        this.valueChange = new EventEmitter();
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+        if (this.messageService && this.enableService && !this.contentTemplate) {
+            this.messageSubscription = this.messageService.messageObserver.subscribe((messages) => {
+                if (messages) {
+                    if (messages instanceof Array) {
+                        let filteredMessages = messages.filter(m => this.key === m.key);
+                        this.value = this.value ? [...this.value, ...filteredMessages] : [...filteredMessages];
+                    }
+                    else if (this.key === messages.key) {
+                        this.value = this.value ? [...this.value, ...[messages]] : [messages];
+                    }
+                    this.cd.markForCheck();
+                }
+            });
+            this.clearSubscription = this.messageService.clearObserver.subscribe(key => {
+                if (key) {
+                    if (this.key === key) {
+                        this.value = null;
+                    }
+                }
+                else {
+                    this.value = null;
+                }
+                this.cd.markForCheck();
+            });
+        }
+    }
+    hasMessages() {
+        let parentEl = this.el.nativeElement.parentElement;
+        if (parentEl && parentEl.offsetParent) {
+            return this.contentTemplate != null || this.value && this.value.length > 0;
+        }
+        return false;
+    }
+    clear() {
+        this.value = [];
+        this.valueChange.emit(this.value);
+    }
+    removeMessage(i) {
+        this.value = this.value.filter((msg, index) => index !== i);
+        this.valueChange.emit(this.value);
+    }
+    get icon() {
+        const severity = this.severity || (this.hasMessages() ? this.value[0].severity : null);
+        if (this.hasMessages()) {
+            switch (severity) {
+                case 'success':
+                    return 'pi-check';
+                    break;
+                case 'info':
+                    return 'pi-info-circle';
+                    break;
+                case 'error':
+                    return 'pi-times';
+                    break;
+                case 'warn':
+                    return 'pi-exclamation-triangle';
+                    break;
+                default:
+                    return 'pi-info-circle';
+                    break;
+            }
+        }
+        return null;
+    }
+    ngOnDestroy() {
+        if (this.messageSubscription) {
+            this.messageSubscription.unsubscribe();
+        }
+        if (this.clearSubscription) {
+            this.clearSubscription.unsubscribe();
+        }
+    }
+}
+Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Messages, deps: [{ token: i1.MessageService, optional: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Messages.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Messages, selector: "p-messages", inputs: { value: "value", closable: "closable", style: "style", styleClass: "styleClass", enableService: "enableService", key: "key", escape: "escape", severity: "severity", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { valueChange: "valueChange" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div class="p-messages p-component" role="alert" [ngStyle]="style" [class]="styleClass">
+            <ng-container *ngIf="!contentTemplate; else staticMessage">
+                <div *ngFor="let msg of value; let i=index" [ngClass]="'p-message p-message-' + msg.severity" role="alert"
+                    [@messageAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}">
+                    <div class="p-message-wrapper">
+                       <span [class]="'p-message-icon pi' + (msg.icon ? ' ' + msg.icon : '')" [ngClass]="{'pi-info-circle': msg.severity === 'info',
+                            'pi-check': msg.severity === 'success',
+                            'pi-exclamation-triangle': msg.severity === 'warn',
+                            'pi-times-circle': msg.severity === 'error'}"></span>
+                        <ng-container *ngIf="!escape; else escapeOut">
+                            <span *ngIf="msg.summary" class="p-message-summary" [innerHTML]="msg.summary"></span>
+                            <span *ngIf="msg.detail" class="p-message-detail" [innerHTML]="msg.detail"></span>
+                        </ng-container>
+                        <ng-template #escapeOut>
+                            <span *ngIf="msg.summary" class="p-message-summary">{{msg.summary}}</span>
+                            <span *ngIf="msg.detail" class="p-message-detail">{{msg.detail}}</span>
+                        </ng-template>
+                        <button class="p-message-close p-link" (click)="removeMessage(i)" *ngIf="closable" type="button" pRipple>
+                            <i class="p-message-close-icon pi pi-times"></i>
+                        </button>
+                    </div>
+                </div>
+            </ng-container>
+            <ng-template #staticMessage>
+                <div [ngClass]="'p-message p-message-' + severity" role="alert">
+                    <div class="p-message-wrapper">
+                        <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                    </div>
+                </div>
+            </ng-template>
+            </div>
+    `, isInline: true, styles: [".p-message-wrapper{display:flex;align-items:center}.p-message-close{display:flex;align-items:center;justify-content:center}.p-message-close.p-link{margin-left:auto;overflow:hidden;position:relative}\n"], directives: [{ type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
+        trigger('messageAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'translateY(-25%)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ height: 0, marginTop: 0, marginBottom: 0, marginLeft: 0, marginRight: 0, overflow: 'hidden', opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Messages, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-messages', template: `
+        <div class="p-messages p-component" role="alert" [ngStyle]="style" [class]="styleClass">
+            <ng-container *ngIf="!contentTemplate; else staticMessage">
+                <div *ngFor="let msg of value; let i=index" [ngClass]="'p-message p-message-' + msg.severity" role="alert"
+                    [@messageAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}">
+                    <div class="p-message-wrapper">
+                       <span [class]="'p-message-icon pi' + (msg.icon ? ' ' + msg.icon : '')" [ngClass]="{'pi-info-circle': msg.severity === 'info',
+                            'pi-check': msg.severity === 'success',
+                            'pi-exclamation-triangle': msg.severity === 'warn',
+                            'pi-times-circle': msg.severity === 'error'}"></span>
+                        <ng-container *ngIf="!escape; else escapeOut">
+                            <span *ngIf="msg.summary" class="p-message-summary" [innerHTML]="msg.summary"></span>
+                            <span *ngIf="msg.detail" class="p-message-detail" [innerHTML]="msg.detail"></span>
+                        </ng-container>
+                        <ng-template #escapeOut>
+                            <span *ngIf="msg.summary" class="p-message-summary">{{msg.summary}}</span>
+                            <span *ngIf="msg.detail" class="p-message-detail">{{msg.detail}}</span>
+                        </ng-template>
+                        <button class="p-message-close p-link" (click)="removeMessage(i)" *ngIf="closable" type="button" pRipple>
+                            <i class="p-message-close-icon pi pi-times"></i>
+                        </button>
+                    </div>
+                </div>
+            </ng-container>
+            <ng-template #staticMessage>
+                <div [ngClass]="'p-message p-message-' + severity" role="alert">
+                    <div class="p-message-wrapper">
+                        <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                    </div>
+                </div>
+            </ng-template>
+            </div>
+    `, animations: [
+                        trigger('messageAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'translateY(-25%)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ height: 0, marginTop: 0, marginBottom: 0, marginLeft: 0, marginRight: 0, overflow: 'hidden', opacity: 0 }))
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-message-wrapper{display:flex;align-items:center}.p-message-close{display:flex;align-items:center;justify-content:center}.p-message-close.p-link{margin-left:auto;overflow:hidden;position:relative}\n"] }]
+        }], ctorParameters: function () { return [{ type: i1.MessageService, decorators: [{
+                    type: Optional
+                }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { value: [{
+                type: Input
+            }], closable: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], enableService: [{
+                type: Input
+            }], key: [{
+                type: Input
+            }], escape: [{
+                type: Input
+            }], severity: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], valueChange: [{
+                type: Output
+            }] } });
+class MessagesModule {
+}
+MessagesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessagesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+MessagesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessagesModule, declarations: [Messages], imports: [CommonModule, RippleModule], exports: [Messages] });
+MessagesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessagesModule, imports: [[CommonModule, RippleModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MessagesModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule],
+                    exports: [Messages],
+                    declarations: [Messages]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Messages, MessagesModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-messages.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-messages.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-messages.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-messages.mjs","sources":["../../src/app/components/messages/messages.ts","../../src/app/components/messages/primeng-messages.ts"],"sourcesContent":["import {NgModule,Component,OnDestroy,Input,Output,EventEmitter,AfterContentInit,Optional,ElementRef,ChangeDetectionStrategy,ContentChildren,QueryList,TemplateRef, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {trigger,state,style,transition,animate} from '@angular/animations';\nimport {Message,PrimeTemplate,MessageService} from 'primeng/api';\nimport {Subscription} from 'rxjs';\nimport {RippleModule} from 'primeng/ripple';\n\n@Component({\n    selector: 'p-messages',\n    template: `\n        <div class=\"p-messages p-component\" role=\"alert\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <ng-container *ngIf=\"!contentTemplate; else staticMessage\">\n                <div *ngFor=\"let msg of value; let i=index\" [ngClass]=\"'p-message p-message-' + msg.severity\" role=\"alert\"\n                    [@messageAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\">\n                    <div class=\"p-message-wrapper\">\n                       <span [class]=\"'p-message-icon pi' + (msg.icon ? ' ' + msg.icon : '')\" [ngClass]=\"{'pi-info-circle': msg.severity === 'info',\n                            'pi-check': msg.severity === 'success',\n                            'pi-exclamation-triangle': msg.severity === 'warn',\n                            'pi-times-circle': msg.severity === 'error'}\"></span>\n                        <ng-container *ngIf=\"!escape; else escapeOut\">\n                            <span *ngIf=\"msg.summary\" class=\"p-message-summary\" [innerHTML]=\"msg.summary\"></span>\n                            <span *ngIf=\"msg.detail\" class=\"p-message-detail\" [innerHTML]=\"msg.detail\"></span>\n                        </ng-container>\n                        <ng-template #escapeOut>\n                            <span *ngIf=\"msg.summary\" class=\"p-message-summary\">{{msg.summary}}</span>\n                            <span *ngIf=\"msg.detail\" class=\"p-message-detail\">{{msg.detail}}</span>\n                        </ng-template>\n                        <button class=\"p-message-close p-link\" (click)=\"removeMessage(i)\" *ngIf=\"closable\" type=\"button\" pRipple>\n                            <i class=\"p-message-close-icon pi pi-times\"></i>\n                        </button>\n                    </div>\n                </div>\n            </ng-container>\n            <ng-template #staticMessage>\n                <div [ngClass]=\"'p-message p-message-' + severity\" role=\"alert\">\n                    <div class=\"p-message-wrapper\">\n                        <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                    </div>\n                </div>\n            </ng-template>\n            </div>\n    `,\n    animations: [\n        trigger('messageAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'translateY(-25%)'}),\n                animate('{{showTransitionParams}}')\n            ]),\n            transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ height: 0, marginTop: 0, marginBottom: 0, marginLeft: 0, marginRight: 0, overflow: 'hidden', opacity: 0 }))\n            ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./messages.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Messages implements AfterContentInit, OnDestroy {\n\n    @Input() value: Message[];\n\n    @Input() closable: boolean = true;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() enableService: boolean = true;\n\n    @Input() key: string;\n\n    @Input() escape: boolean = true;\n\n    @Input() severity: string;\n\n    @Input() showTransitionOptions: string = '300ms ease-out';\n\n    @Input() hideTransitionOptions: string = '200ms cubic-bezier(0.86, 0, 0.07, 1)';\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Output() valueChange: EventEmitter<Message[]> = new EventEmitter<Message[]>();\n\n    messageSubscription: Subscription;\n\n    clearSubscription: Subscription;\n\n    contentTemplate: TemplateRef<any>;\n\n    constructor(@Optional() public messageService: MessageService, public el: ElementRef, public cd: ChangeDetectorRef) {}\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n\n        if (this.messageService && this.enableService && !this.contentTemplate) {\n            this.messageSubscription = this.messageService.messageObserver.subscribe((messages: any) => {\n                if (messages) {\n                    if (messages instanceof Array) {\n                        let filteredMessages = messages.filter(m => this.key === m.key);\n                        this.value = this.value ? [...this.value, ...filteredMessages] : [...filteredMessages];\n                    }\n                    else if (this.key === messages.key) {\n                        this.value = this.value ? [...this.value, ...[messages]] : [messages];\n                    }\n\n                    this.cd.markForCheck();\n                }\n            });\n\n            this.clearSubscription = this.messageService.clearObserver.subscribe(key => {\n                if (key) {\n                    if (this.key === key) {\n                        this.value = null;\n                    }\n                }\n                else {\n                    this.value = null;\n                }\n\n                this.cd.markForCheck();\n            });\n        }\n    }\n\n    hasMessages() {\n        let parentEl = this.el.nativeElement.parentElement;\n        if (parentEl && parentEl.offsetParent) {\n            return this.contentTemplate != null || this.value && this.value.length > 0;\n        }\n\n        return false;\n    }\n\n    clear() {\n        this.value = [];\n        this.valueChange.emit(this.value);\n    }\n\n    removeMessage(i: number) {\n        this.value = this.value.filter((msg, index) => index !== i);\n        this.valueChange.emit(this.value);\n    }\n\n    get icon(): string {\n        const severity = this.severity || (this.hasMessages() ? this.value[0].severity : null);\n\n        if (this.hasMessages()) {\n            switch(severity) {\n                case 'success':\n                    return 'pi-check';\n                break;\n\n                case 'info':\n                    return 'pi-info-circle';\n                break;\n\n                case 'error':\n                    return 'pi-times';\n                break;\n\n                case 'warn':\n                    return 'pi-exclamation-triangle';\n                break;\n\n                default:\n                    return 'pi-info-circle';\n                break;\n            }\n        }\n\n        return null;\n    }\n\n    ngOnDestroy() {\n        if (this.messageSubscription) {\n            this.messageSubscription.unsubscribe();\n        }\n\n        if (this.clearSubscription) {\n            this.clearSubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RippleModule],\n    exports: [Messages],\n    declarations: [Messages]\n})\nexport class MessagesModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-multiselect.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-multiselect.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-multiselect.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1167 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ViewEncapsulation, Input, Output, ChangeDetectionStrategy, ViewChild, ContentChild, ContentChildren, NgModule } from '@angular/core';
+import { trigger, transition, style, animate } from '@angular/animations';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import { ObjectUtils, ZIndexUtils } from 'primeng/utils';
+import * as i3 from 'primeng/api';
+import { TranslationKeys, Footer, Header, PrimeTemplate, SharedModule } from 'primeng/api';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import * as i4 from '@angular/cdk/scrolling';
+import { ScrollingModule } from '@angular/cdk/scrolling';
+import * as i5 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+import * as i1 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+
+const MULTISELECT_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => MultiSelect),
+    multi: true
+};
+class MultiSelectItem {
+    constructor() {
+        this.onClick = new EventEmitter();
+        this.onKeydown = new EventEmitter();
+    }
+    onOptionClick(event) {
+        this.onClick.emit({
+            originalEvent: event,
+            option: this.option
+        });
+    }
+    onOptionKeydown(event) {
+        this.onKeydown.emit({
+            originalEvent: event,
+            option: this.option
+        });
+    }
+}
+MultiSelectItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MultiSelectItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
+MultiSelectItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: MultiSelectItem, selector: "p-multiSelectItem", inputs: { option: "option", selected: "selected", label: "label", disabled: "disabled", itemSize: "itemSize", template: "template" }, outputs: { onClick: "onClick", onKeydown: "onKeydown" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <li class="p-multiselect-item" (click)="onOptionClick($event)" (keydown)="onOptionKeydown($event)" [attr.aria-label]="label"
+            [attr.tabindex]="disabled ? null : '0'" [ngStyle]="{'height': itemSize + 'px'}"
+            [ngClass]="{'p-highlight': selected, 'p-disabled': disabled}" pRipple>
+            <div class="p-checkbox p-component">
+                <div class="p-checkbox-box" [ngClass]="{'p-highlight': selected}">
+                    <span class="p-checkbox-icon" [ngClass]="{'pi pi-check': selected}"></span>
+                </div>
+            </div>
+            <span *ngIf="!template">{{label}}</span>
+            <ng-container *ngTemplateOutlet="template; context: {$implicit: option}"></ng-container>
+        </li>
+    `, isInline: true, directives: [{ type: i1.Ripple, selector: "[pRipple]" }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MultiSelectItem, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-multiSelectItem',
+                    template: `
+        <li class="p-multiselect-item" (click)="onOptionClick($event)" (keydown)="onOptionKeydown($event)" [attr.aria-label]="label"
+            [attr.tabindex]="disabled ? null : '0'" [ngStyle]="{'height': itemSize + 'px'}"
+            [ngClass]="{'p-highlight': selected, 'p-disabled': disabled}" pRipple>
+            <div class="p-checkbox p-component">
+                <div class="p-checkbox-box" [ngClass]="{'p-highlight': selected}">
+                    <span class="p-checkbox-icon" [ngClass]="{'pi pi-check': selected}"></span>
+                </div>
+            </div>
+            <span *ngIf="!template">{{label}}</span>
+            <ng-container *ngTemplateOutlet="template; context: {$implicit: option}"></ng-container>
+        </li>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], propDecorators: { option: [{
+                type: Input
+            }], selected: [{
+                type: Input
+            }], label: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], itemSize: [{
+                type: Input
+            }], template: [{
+                type: Input
+            }], onClick: [{
+                type: Output
+            }], onKeydown: [{
+                type: Output
+            }] } });
+class MultiSelect {
+    constructor(el, renderer, cd, filterService, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.filterService = filterService;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.filter = true;
+        this.displaySelectedLabel = true;
+        this.maxSelectedLabels = 3;
+        this.selectedItemsLabel = 'ellipsis';
+        this.showToggleAll = true;
+        this.emptyFilterMessage = '';
+        this.emptyMessage = '';
+        this.resetFilterOnHide = false;
+        this.dropdownIcon = 'pi pi-chevron-down';
+        this.optionGroupChildren = "items";
+        this.showHeader = true;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.filterMatchMode = "contains";
+        this.tooltip = '';
+        this.tooltipPosition = 'right';
+        this.tooltipPositionStyle = 'absolute';
+        this.autofocusFilter = true;
+        this.display = 'comma';
+        this.onChange = new EventEmitter();
+        this.onFilter = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.onClick = new EventEmitter();
+        this.onPanelShow = new EventEmitter();
+        this.onPanelHide = new EventEmitter();
+        this.scrollHeight = '200px';
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    set defaultLabel(val) {
+        this._defaultLabel = val;
+        this.updateLabel();
+    }
+    get defaultLabel() {
+        return this._defaultLabel;
+    }
+    set placeholder(val) {
+        this._placeholder = val;
+        this.updateLabel();
+    }
+    get placeholder() {
+        return this._placeholder;
+    }
+    get options() {
+        return this._options;
+    }
+    set options(val) {
+        this._options = val;
+        this.updateLabel();
+    }
+    get filterValue() {
+        return this._filterValue;
+    }
+    set filterValue(val) {
+        this._filterValue = val;
+        this.activateFilter();
+    }
+    ngOnInit() {
+        this.updateLabel();
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                case 'group':
+                    this.groupTemplate = item.template;
+                    break;
+                case 'selectedItems':
+                    this.selectedItemsTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'emptyfilter':
+                    this.emptyFilterTemplate = item.template;
+                    break;
+                case 'empty':
+                    this.emptyTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngAfterViewInit() {
+        if (this.overlayVisible) {
+            this.show();
+        }
+    }
+    ngAfterViewChecked() {
+        if (this.filtered) {
+            this.alignOverlay();
+            this.filtered = false;
+        }
+    }
+    getOptionLabel(option) {
+        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);
+    }
+    getOptionValue(option) {
+        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);
+    }
+    getOptionGroupLabel(optionGroup) {
+        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);
+    }
+    getOptionGroupChildren(optionGroup) {
+        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;
+    }
+    isOptionDisabled(option) {
+        let disabled = this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);
+        return (disabled || (this.maxSelectionLimitReached && !this.isSelected(option)));
+    }
+    writeValue(value) {
+        this.value = value;
+        this.updateLabel();
+        this.updateFilledState();
+        this.checkSelectionLimit();
+        this.cd.markForCheck();
+    }
+    checkSelectionLimit() {
+        if (this.selectionLimit && (this.value && this.value.length === this.selectionLimit)) {
+            this.maxSelectionLimitReached = true;
+        }
+        else {
+            this.maxSelectionLimitReached = false;
+        }
+    }
+    updateFilledState() {
+        this.filled = (this.value && this.value.length > 0);
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    onOptionClick(event) {
+        let option = event.option;
+        if (this.isOptionDisabled(option)) {
+            return;
+        }
+        let optionValue = this.getOptionValue(option);
+        let selectionIndex = this.findSelectionIndex(optionValue);
+        if (selectionIndex != -1) {
+            this.value = this.value.filter((val, i) => i != selectionIndex);
+            if (this.selectionLimit) {
+                this.maxSelectionLimitReached = false;
+            }
+        }
+        else {
+            if (!this.selectionLimit || (!this.value || this.value.length < this.selectionLimit)) {
+                this.value = [...this.value || [], optionValue];
+            }
+            this.checkSelectionLimit();
+        }
+        this.onModelChange(this.value);
+        this.onChange.emit({ originalEvent: event.originalEvent, value: this.value, itemValue: optionValue });
+        this.updateLabel();
+        this.updateFilledState();
+    }
+    isSelected(option) {
+        return this.findSelectionIndex(this.getOptionValue(option)) != -1;
+    }
+    findSelectionIndex(val) {
+        let index = -1;
+        if (this.value) {
+            for (let i = 0; i < this.value.length; i++) {
+                if (ObjectUtils.equals(this.value[i], val, this.dataKey)) {
+                    index = i;
+                    break;
+                }
+            }
+        }
+        return index;
+    }
+    get toggleAllDisabled() {
+        let optionsToRender = this.optionsToRender;
+        if (!optionsToRender || optionsToRender.length === 0) {
+            return true;
+        }
+        else {
+            for (let option of optionsToRender) {
+                if (!this.isOptionDisabled(option))
+                    return false;
+            }
+            return true;
+        }
+    }
+    toggleAll(event) {
+        if (this.disabled || this.toggleAllDisabled || this.readonly) {
+            return;
+        }
+        let allChecked = this.allChecked;
+        if (allChecked)
+            this.uncheckAll();
+        else
+            this.checkAll();
+        this.onModelChange(this.value);
+        this.onChange.emit({ originalEvent: event, value: this.value });
+        this.updateFilledState();
+        this.updateLabel();
+        event.preventDefault();
+    }
+    checkAll() {
+        let optionsToRender = this.optionsToRender;
+        let val = [];
+        optionsToRender.forEach(opt => {
+            if (!this.group) {
+                let optionDisabled = this.isOptionDisabled(opt);
+                if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {
+                    val.push(this.getOptionValue(opt));
+                }
+            }
+            else {
+                let subOptions = this.getOptionGroupChildren(opt);
+                if (subOptions) {
+                    subOptions.forEach(option => {
+                        let optionDisabled = this.isOptionDisabled(option);
+                        if (!optionDisabled || (optionDisabled && this.isSelected(option))) {
+                            val.push(this.getOptionValue(option));
+                        }
+                    });
+                }
+            }
+        });
+        this.value = val;
+    }
+    uncheckAll() {
+        let optionsToRender = this.optionsToRender;
+        let val = [];
+        optionsToRender.forEach(opt => {
+            if (!this.group) {
+                let optionDisabled = this.isOptionDisabled(opt);
+                if (optionDisabled && this.isSelected(opt)) {
+                    val.push(this.getOptionValue(opt));
+                }
+            }
+            else {
+                if (opt.items) {
+                    opt.items.forEach(option => {
+                        let optionDisabled = this.isOptionDisabled(option);
+                        if (optionDisabled && this.isSelected(option)) {
+                            val.push(this.getOptionValue(option));
+                        }
+                    });
+                }
+            }
+        });
+        this.value = val;
+    }
+    show() {
+        if (!this.overlayVisible) {
+            this.overlayVisible = true;
+        }
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.overlay = event.element;
+                this.appendOverlay();
+                if (this.autoZIndex) {
+                    ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);
+                }
+                this.alignOverlay();
+                this.bindDocumentClickListener();
+                this.bindDocumentResizeListener();
+                this.bindScrollListener();
+                if (this.filterInputChild && this.filterInputChild.nativeElement) {
+                    this.preventModelTouched = true;
+                    if (this.autofocusFilter) {
+                        this.filterInputChild.nativeElement.focus();
+                    }
+                }
+                this.onPanelShow.emit();
+                break;
+            case 'void':
+                this.onOverlayHide();
+                break;
+        }
+    }
+    onOverlayAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                ZIndexUtils.clear(event.element);
+                break;
+        }
+    }
+    appendOverlay() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.overlay);
+            else
+                DomHandler.appendChild(this.overlay, this.appendTo);
+            if (!this.overlay.style.minWidth) {
+                this.overlay.style.minWidth = DomHandler.getWidth(this.containerViewChild.nativeElement) + 'px';
+            }
+        }
+    }
+    restoreOverlayAppend() {
+        if (this.overlay && this.appendTo) {
+            this.el.nativeElement.appendChild(this.overlay);
+        }
+    }
+    alignOverlay() {
+        if (this.overlay) {
+            if (this.appendTo)
+                DomHandler.absolutePosition(this.overlay, this.containerViewChild.nativeElement);
+            else
+                DomHandler.relativePosition(this.overlay, this.containerViewChild.nativeElement);
+        }
+    }
+    hide() {
+        this.overlayVisible = false;
+        this.unbindDocumentClickListener();
+        if (this.resetFilterOnHide) {
+            this.filterInputChild.nativeElement.value = '';
+            this._filterValue = null;
+            this._filteredOptions = null;
+        }
+        this.onPanelHide.emit();
+        this.cd.markForCheck();
+    }
+    close(event) {
+        this.hide();
+        event.preventDefault();
+        event.stopPropagation();
+    }
+    onMouseclick(event, input) {
+        if (this.disabled || this.readonly || event.target.isSameNode(this.accessibleViewChild.nativeElement)) {
+            return;
+        }
+        this.onClick.emit(event);
+        if (!this.isOverlayClick(event) && !DomHandler.hasClass(event.target, 'p-multiselect-token-icon')) {
+            if (this.overlayVisible) {
+                this.hide();
+            }
+            else {
+                input.focus();
+                this.show();
+            }
+        }
+    }
+    removeChip(chip, event) {
+        this.value = this.value.filter(val => !ObjectUtils.equals(val, chip, this.dataKey));
+        this.onModelChange(this.value);
+        this.checkSelectionLimit();
+        this.onChange.emit({ originalEvent: event, value: this.value, itemValue: chip });
+        this.updateLabel();
+        this.updateFilledState();
+    }
+    isOverlayClick(event) {
+        let targetNode = event.target;
+        return this.overlay ? (this.overlay.isSameNode(targetNode) || this.overlay.contains(targetNode)) : false;
+    }
+    isOutsideClicked(event) {
+        return !(this.el.nativeElement.isSameNode(event.target) || this.el.nativeElement.contains(event.target) || this.isOverlayClick(event));
+    }
+    onInputFocus(event) {
+        this.focus = true;
+        this.onFocus.emit({ originalEvent: event });
+    }
+    onInputBlur(event) {
+        this.focus = false;
+        this.onBlur.emit({ originalEvent: event });
+        if (!this.preventModelTouched) {
+            this.onModelTouched();
+        }
+        this.preventModelTouched = false;
+    }
+    onOptionKeydown(event) {
+        if (this.readonly) {
+            return;
+        }
+        switch (event.originalEvent.which) {
+            //down
+            case 40:
+                var nextItem = this.findNextItem(event.originalEvent.target.parentElement);
+                if (nextItem) {
+                    nextItem.focus();
+                }
+                event.originalEvent.preventDefault();
+                break;
+            //up
+            case 38:
+                var prevItem = this.findPrevItem(event.originalEvent.target.parentElement);
+                if (prevItem) {
+                    prevItem.focus();
+                }
+                event.originalEvent.preventDefault();
+                break;
+            //enter
+            case 13:
+                this.onOptionClick(event);
+                event.originalEvent.preventDefault();
+                break;
+        }
+    }
+    findNextItem(item) {
+        let nextItem = item.nextElementSibling;
+        if (nextItem)
+            return DomHandler.hasClass(nextItem.children[0], 'p-disabled') || DomHandler.isHidden(nextItem.children[0]) || DomHandler.hasClass(nextItem, 'p-multiselect-item-group') ? this.findNextItem(nextItem) : nextItem.children[0];
+        else
+            return null;
+    }
+    findPrevItem(item) {
+        let prevItem = item.previousElementSibling;
+        if (prevItem)
+            return DomHandler.hasClass(prevItem.children[0], 'p-disabled') || DomHandler.isHidden(prevItem.children[0]) || DomHandler.hasClass(prevItem, 'p-multiselect-item-group') ? this.findPrevItem(prevItem) : prevItem.children[0];
+        else
+            return null;
+    }
+    onKeydown(event) {
+        switch (event.which) {
+            //down
+            case 40:
+                if (!this.overlayVisible && event.altKey) {
+                    this.show();
+                    event.preventDefault();
+                }
+                break;
+            //space
+            case 32:
+                if (!this.overlayVisible) {
+                    this.show();
+                    event.preventDefault();
+                }
+                break;
+            //escape
+            case 27:
+                this.hide();
+                break;
+        }
+    }
+    updateLabel() {
+        if (this.value && this.options && this.value.length && this.displaySelectedLabel) {
+            let label = '';
+            for (let i = 0; i < this.value.length; i++) {
+                let itemLabel = this.findLabelByValue(this.value[i]);
+                if (itemLabel) {
+                    if (label.length > 0) {
+                        label = label + ', ';
+                    }
+                    label = label + itemLabel;
+                }
+            }
+            if (this.value.length <= this.maxSelectedLabels || this.selectedItemsLabel === 'ellipsis') {
+                this.valuesAsString = label;
+            }
+            else {
+                let pattern = /{(.*?)}/;
+                if (pattern.test(this.selectedItemsLabel)) {
+                    this.valuesAsString = this.selectedItemsLabel.replace(this.selectedItemsLabel.match(pattern)[0], this.value.length + '');
+                }
+                else {
+                    this.valuesAsString = this.selectedItemsLabel;
+                }
+            }
+        }
+        else {
+            this.valuesAsString = this.placeholder || this.defaultLabel;
+        }
+    }
+    findLabelByValue(val) {
+        if (this.group) {
+            let label = null;
+            for (let i = 0; i < this.options.length; i++) {
+                let subOptions = this.getOptionGroupChildren(this.options[i]);
+                if (subOptions) {
+                    label = this.searchLabelByValue(val, subOptions);
+                    if (label) {
+                        break;
+                    }
+                }
+            }
+            return label;
+        }
+        else {
+            return this.searchLabelByValue(val, this.options);
+        }
+    }
+    searchLabelByValue(val, options) {
+        let label = null;
+        for (let i = 0; i < options.length; i++) {
+            let option = options[i];
+            let optionValue = this.getOptionValue(option);
+            if (val == null && optionValue == null || ObjectUtils.equals(val, optionValue, this.dataKey)) {
+                label = this.getOptionLabel(option);
+                break;
+            }
+        }
+        return label;
+    }
+    get allChecked() {
+        let optionsToRender = this.optionsToRender;
+        if (!optionsToRender || optionsToRender.length === 0) {
+            return false;
+        }
+        else {
+            let selectedDisabledItemsLength = 0;
+            let unselectedDisabledItemsLength = 0;
+            let selectedEnabledItemsLength = 0;
+            let visibleOptionsLength = this.group ? 0 : this.optionsToRender.length;
+            for (let option of optionsToRender) {
+                if (!this.group) {
+                    let disabled = this.isOptionDisabled(option);
+                    let selected = this.isSelected(option);
+                    if (disabled) {
+                        if (selected)
+                            selectedDisabledItemsLength++;
+                        else
+                            unselectedDisabledItemsLength++;
+                    }
+                    else {
+                        if (selected)
+                            selectedEnabledItemsLength++;
+                        else
+                            return false;
+                    }
+                }
+                else {
+                    for (let opt of this.getOptionGroupChildren(option)) {
+                        let disabled = this.isOptionDisabled(opt);
+                        let selected = this.isSelected(opt);
+                        if (disabled) {
+                            if (selected)
+                                selectedDisabledItemsLength++;
+                            else
+                                unselectedDisabledItemsLength++;
+                        }
+                        else {
+                            if (selected)
+                                selectedEnabledItemsLength++;
+                            else {
+                                return false;
+                            }
+                        }
+                        visibleOptionsLength++;
+                    }
+                }
+            }
+            return (visibleOptionsLength === selectedDisabledItemsLength
+                || visibleOptionsLength === selectedEnabledItemsLength
+                || selectedEnabledItemsLength && visibleOptionsLength === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));
+        }
+    }
+    get optionsToRender() {
+        return this._filteredOptions || this.options;
+    }
+    get emptyOptions() {
+        let optionsToRender = this.optionsToRender;
+        return !optionsToRender || optionsToRender.length === 0;
+    }
+    get emptyMessageLabel() {
+        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
+    }
+    get emptyFilterMessageLabel() {
+        return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);
+    }
+    hasFilter() {
+        return this._filterValue && this._filterValue.trim().length > 0;
+    }
+    onFilterInputChange(event) {
+        this._filterValue = event.target.value;
+        this.activateFilter();
+        this.onFilter.emit({ originalEvent: event, filter: this._filterValue });
+        this.cd.detectChanges();
+        this.alignOverlay();
+    }
+    activateFilter() {
+        if (this.hasFilter() && this._options) {
+            let searchFields = (this.filterBy || this.optionLabel || 'label').split(',');
+            if (this.group) {
+                let searchFields = (this.optionLabel || 'label').split(',');
+                let filteredGroups = [];
+                for (let optgroup of this.options) {
+                    let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);
+                    if (filteredSubOptions && filteredSubOptions.length) {
+                        filteredGroups.push({ ...optgroup, ...{ [this.optionGroupChildren]: filteredSubOptions } });
+                    }
+                }
+                this._filteredOptions = filteredGroups;
+            }
+            else {
+                this._filteredOptions = this.filterService.filter(this.options, searchFields, this._filterValue, this.filterMatchMode, this.filterLocale);
+            }
+        }
+        else {
+            this._filteredOptions = null;
+        }
+    }
+    onHeaderCheckboxFocus() {
+        this.headerCheckboxFocus = true;
+    }
+    onHeaderCheckboxBlur() {
+        this.headerCheckboxFocus = false;
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {
+                if (this.isOutsideClicked(event)) {
+                    this.hide();
+                }
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    onWindowResize() {
+        if (!DomHandler.isAndroid()) {
+            this.hide();
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    onOverlayHide() {
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.overlay = null;
+        this.onModelTouched();
+    }
+    ngOnDestroy() {
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        if (this.overlay) {
+            ZIndexUtils.clear(this.overlay);
+        }
+        this.restoreOverlayAppend();
+        this.onOverlayHide();
+    }
+}
+MultiSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MultiSelect, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i3.FilterService }, { token: i3.PrimeNGConfig }, { token: i3.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+MultiSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: MultiSelect, selector: "p-multiSelect", inputs: { style: "style", styleClass: "styleClass", panelStyle: "panelStyle", panelStyleClass: "panelStyleClass", inputId: "inputId", disabled: "disabled", readonly: "readonly", group: "group", filter: "filter", filterPlaceHolder: "filterPlaceHolder", filterLocale: "filterLocale", overlayVisible: "overlayVisible", tabindex: "tabindex", appendTo: "appendTo", dataKey: "dataKey", name: "name", ariaLabelledBy: "ariaLabelledBy", displaySelectedLabel: "displaySelectedLabel", maxSelectedLabels: "maxSelectedLabels", selectionLimit: "selectionLimit", selectedItemsLabel: "selectedItemsLabel", showToggleAll: "showToggleAll", emptyFilterMessage: "emptyFilterMessage", emptyMessage: "emptyMessage", resetFilterOnHide: "resetFilterOnHide", dropdownIcon: "dropdownIcon", optionLabel: "optionLabel", optionValue: "optionValue", optionDisabled: "optionDisabled", optionGroupLabel: "optionGroupLabel", optionGroupChildren: "optionGroupChildren", showHeader: "showHeader", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", filterBy: "filterBy", virtualScroll: "virtualScroll", itemSize: "itemSize", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", ariaFilterLabel: "ariaFilterLabel", filterMatchMode: "filterMatchMode", tooltip: "tooltip", tooltipPosition: "tooltipPosition", tooltipPositionStyle: "tooltipPositionStyle", tooltipStyleClass: "tooltipStyleClass", autofocusFilter: "autofocusFilter", display: "display", scrollHeight: "scrollHeight", defaultLabel: "defaultLabel", placeholder: "placeholder", options: "options", filterValue: "filterValue" }, outputs: { onChange: "onChange", onFilter: "onFilter", onFocus: "onFocus", onBlur: "onBlur", onClick: "onClick", onPanelShow: "onPanelShow", onPanelHide: "onPanelHide" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "focus || overlayVisible" }, classAttribute: "p-element p-inputwrapper" }, providers: [MULTISELECT_VALUE_ACCESSOR], queries: [{ propertyName: "footerFacet", first: true, predicate: Footer, descendants: true }, { propertyName: "headerFacet", first: true, predicate: Header, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "filterInputChild", first: true, predicate: ["filterInput"], descendants: true }, { propertyName: "accessibleViewChild", first: true, predicate: ["in"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="{'p-multiselect p-component':true,
+            'p-multiselect-open':overlayVisible,
+            'p-multiselect-chip': display === 'chip',
+            'p-focus':focus,
+            'p-disabled': disabled}" [ngStyle]="style" [class]="styleClass"
+            (click)="onMouseclick($event,in)">
+            <div class="p-hidden-accessible">
+                <input #in type="text" readonly="readonly" [attr.id]="inputId" [attr.name]="name" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)"
+                       [disabled]="disabled" [attr.tabindex]="tabindex" (keydown)="onKeydown($event)" aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible"
+                       [attr.aria-labelledby]="ariaLabelledBy" role="listbox">
+            </div>
+            <div class="p-multiselect-label-container" [pTooltip]="tooltip" [tooltipPosition]="tooltipPosition" [positionStyle]="tooltipPositionStyle" [tooltipStyleClass]="tooltipStyleClass">
+                <div class="p-multiselect-label" [ngClass]="{'p-placeholder': valuesAsString === (defaultLabel || placeholder), 'p-multiselect-label-empty': ((valuesAsString == null || valuesAsString.length === 0) && (placeholder == null || placeholder.length === 0))}">
+                    <ng-container *ngIf="!selectedItemsTemplate">
+                        <ng-container *ngIf="display === 'comma'">{{valuesAsString || 'empty'}}</ng-container>
+                        <ng-container *ngIf="display === 'chip'">
+                            <div #token *ngFor="let item of value; let i = index;" class="p-multiselect-token">
+                                <span class="p-multiselect-token-label">{{findLabelByValue(item)}}</span>
+                                <span *ngIf="!disabled" class="p-multiselect-token-icon pi pi-times-circle" (click)="removeChip(item, $event)"></span>
+                            </div>
+                            <ng-container *ngIf="!value || value.length === 0">{{placeholder || defaultLabel || 'empty'}}</ng-container>
+                        </ng-container>
+                    </ng-container>
+                    <ng-container *ngTemplateOutlet="selectedItemsTemplate; context: {$implicit: value}"></ng-container>
+                </div>
+            </div>
+            <div [ngClass]="{'p-multiselect-trigger':true}">
+                <span class="p-multiselect-trigger-icon" [ngClass]="dropdownIcon"></span>
+            </div>
+            <div *ngIf="overlayVisible" [ngClass]="['p-multiselect-panel p-component']" [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)"onOverlayAnimationEnd
+                (@overlayAnimation.done)="onOverlayAnimationEnd($event)" [ngStyle]="panelStyle" [class]="panelStyleClass" (keydown)="onKeydown($event)" (click)="onOverlayClick($event)" >
+                <div class="p-multiselect-header" *ngIf="showHeader">
+                    <ng-content select="p-header"></ng-content>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                    <div class="p-checkbox p-component" *ngIf="showToggleAll && !selectionLimit" [ngClass]="{'p-checkbox-disabled': disabled || toggleAllDisabled}">
+                        <div class="p-hidden-accessible">
+                            <input type="checkbox" readonly="readonly" [checked]="allChecked" (focus)="onHeaderCheckboxFocus()" (blur)="onHeaderCheckboxBlur()" (keydown.space)="toggleAll($event)" [disabled]="disabled || toggleAllDisabled">
+                        </div>
+                        <div class="p-checkbox-box" role="checkbox" [attr.aria-checked]="allChecked" [ngClass]="{'p-highlight':allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}" (click)="toggleAll($event)">
+                            <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':allChecked}"></span>
+                        </div>
+                    </div>
+                    <div class="p-multiselect-filter-container" *ngIf="filter">
+                        <input #filterInput type="text" role="textbox" [value]="filterValue||''" (input)="onFilterInputChange($event)" class="p-multiselect-filter p-inputtext p-component" [disabled]="disabled" [attr.placeholder]="filterPlaceHolder" [attr.aria-label]="ariaFilterLabel">
+                        <span class="p-multiselect-filter-icon pi pi-search"></span>
+                    </div>
+                    <button class="p-multiselect-close p-link" type="button" (click)="close($event)" pRipple>
+                        <span class="p-multiselect-close-icon pi pi-times"></span>
+                    </button>
+                </div>
+                <div class="p-multiselect-items-wrapper" [style.max-height]="virtualScroll ? 'auto' : (scrollHeight||'auto')">
+                    <ul class="p-multiselect-items p-component" [ngClass]="{'p-multiselect-virtualscroll': virtualScroll}" role="listbox" aria-multiselectable="true">
+                        <ng-container *ngIf="group">
+                            <ng-template ngFor let-optgroup [ngForOf]="optionsToRender">
+                                <li class="p-multiselect-item-group">
+                                    <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
+                                    <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
+                                </li>
+                                <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}"></ng-container>
+                            </ng-template>
+                        </ng-container>
+                        <ng-container *ngIf="!group">
+                            <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: optionsToRender}"></ng-container>
+                        </ng-container>
+                        <ng-template #itemslist let-optionsToDisplay let-selectedOption="selectedOption">
+                            <ng-container *ngIf="!virtualScroll; else virtualScrollList">
+                                <ng-template ngFor let-option let-i="index" [ngForOf]="optionsToDisplay">
+                                    <p-multiSelectItem [option]="option" [selected]="isSelected(option)" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)" (onClick)="onOptionClick($event)" (onKeydown)="onOptionKeydown($event)"
+                                            [template]="itemTemplate"></p-multiSelectItem>
+                                </ng-template>
+                            </ng-container>
+                            <ng-template #virtualScrollList>
+                                <cdk-virtual-scroll-viewport #viewport [ngStyle]="{'height': scrollHeight}" [itemSize]="itemSize" *ngIf="virtualScroll && !emptyOptions">
+                                    <ng-container *cdkVirtualFor="let option of optionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd">
+                                        <p-multiSelectItem [option]="option" [selected]="isSelected(option)" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)" (onClick)="onOptionClick($event)" (onKeydown)="onOptionKeydown($event)"
+                                            [template]="itemTemplate" [itemSize]="itemSize"></p-multiSelectItem>
+                                    </ng-container>
+                                </cdk-virtual-scroll-viewport>
+                            </ng-template>
+                            <li *ngIf="hasFilter() && emptyOptions" class="p-multiselect-empty-message">
+                                <ng-container *ngIf="!emptyFilterTemplate && !emptyTemplate; else emptyFilter">
+                                    {{emptyFilterMessageLabel}}
+                                </ng-container>
+                                <ng-container #emptyFilter *ngTemplateOutlet="emptyFilterTemplate || emptyTemplate"></ng-container>
+                            </li>
+                            <li *ngIf="!hasFilter() && emptyOptions" class="p-multiselect-empty-message">
+                                <ng-container *ngIf="!emptyTemplate; else empty">
+                                    {{emptyMessageLabel}}
+                                </ng-container>
+                                <ng-container #empty *ngTemplateOutlet="emptyTemplate"></ng-container>
+                            </li>
+                        </ng-template>
+                    </ul>
+                </div>
+                <div class="p-multiselect-footer" *ngIf="footerFacet || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-multiselect{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-multiselect-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-multiselect-label-container{overflow:hidden;flex:1 1 auto;cursor:pointer}.p-multiselect-label{display:block;white-space:nowrap;cursor:pointer;overflow:hidden;text-overflow:ellipsis}.p-multiselect-label-empty{overflow:hidden;visibility:hidden}.p-multiselect-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto}.p-multiselect-token-icon{cursor:pointer}.p-multiselect .p-multiselect-panel{min-width:100%}.p-multiselect-panel{position:absolute;top:0;left:0}.p-multiselect-items-wrapper{overflow:auto}.p-multiselect-items{margin:0;padding:0;list-style-type:none}.p-multiselect-item{cursor:pointer;display:flex;align-items:center;font-weight:normal;white-space:nowrap;position:relative;overflow:hidden}.p-multiselect-header{display:flex;align-items:center;justify-content:space-between}.p-multiselect-filter-container{position:relative;flex:1 1 auto}.p-multiselect-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-multiselect-filter-container .p-inputtext{width:100%}.p-multiselect-close{display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;position:relative}.p-fluid .p-multiselect{display:flex}\n"], components: [{ type: MultiSelectItem, selector: "p-multiSelectItem", inputs: ["option", "selected", "label", "disabled", "itemSize", "template"], outputs: ["onClick", "onKeydown"] }, { type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.Ripple, selector: "[pRipple]" }, { type: i4.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i4.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MultiSelect, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-multiSelect', template: `
+        <div #container [ngClass]="{'p-multiselect p-component':true,
+            'p-multiselect-open':overlayVisible,
+            'p-multiselect-chip': display === 'chip',
+            'p-focus':focus,
+            'p-disabled': disabled}" [ngStyle]="style" [class]="styleClass"
+            (click)="onMouseclick($event,in)">
+            <div class="p-hidden-accessible">
+                <input #in type="text" readonly="readonly" [attr.id]="inputId" [attr.name]="name" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)"
+                       [disabled]="disabled" [attr.tabindex]="tabindex" (keydown)="onKeydown($event)" aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible"
+                       [attr.aria-labelledby]="ariaLabelledBy" role="listbox">
+            </div>
+            <div class="p-multiselect-label-container" [pTooltip]="tooltip" [tooltipPosition]="tooltipPosition" [positionStyle]="tooltipPositionStyle" [tooltipStyleClass]="tooltipStyleClass">
+                <div class="p-multiselect-label" [ngClass]="{'p-placeholder': valuesAsString === (defaultLabel || placeholder), 'p-multiselect-label-empty': ((valuesAsString == null || valuesAsString.length === 0) && (placeholder == null || placeholder.length === 0))}">
+                    <ng-container *ngIf="!selectedItemsTemplate">
+                        <ng-container *ngIf="display === 'comma'">{{valuesAsString || 'empty'}}</ng-container>
+                        <ng-container *ngIf="display === 'chip'">
+                            <div #token *ngFor="let item of value; let i = index;" class="p-multiselect-token">
+                                <span class="p-multiselect-token-label">{{findLabelByValue(item)}}</span>
+                                <span *ngIf="!disabled" class="p-multiselect-token-icon pi pi-times-circle" (click)="removeChip(item, $event)"></span>
+                            </div>
+                            <ng-container *ngIf="!value || value.length === 0">{{placeholder || defaultLabel || 'empty'}}</ng-container>
+                        </ng-container>
+                    </ng-container>
+                    <ng-container *ngTemplateOutlet="selectedItemsTemplate; context: {$implicit: value}"></ng-container>
+                </div>
+            </div>
+            <div [ngClass]="{'p-multiselect-trigger':true}">
+                <span class="p-multiselect-trigger-icon" [ngClass]="dropdownIcon"></span>
+            </div>
+            <div *ngIf="overlayVisible" [ngClass]="['p-multiselect-panel p-component']" [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)"onOverlayAnimationEnd
+                (@overlayAnimation.done)="onOverlayAnimationEnd($event)" [ngStyle]="panelStyle" [class]="panelStyleClass" (keydown)="onKeydown($event)" (click)="onOverlayClick($event)" >
+                <div class="p-multiselect-header" *ngIf="showHeader">
+                    <ng-content select="p-header"></ng-content>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                    <div class="p-checkbox p-component" *ngIf="showToggleAll && !selectionLimit" [ngClass]="{'p-checkbox-disabled': disabled || toggleAllDisabled}">
+                        <div class="p-hidden-accessible">
+                            <input type="checkbox" readonly="readonly" [checked]="allChecked" (focus)="onHeaderCheckboxFocus()" (blur)="onHeaderCheckboxBlur()" (keydown.space)="toggleAll($event)" [disabled]="disabled || toggleAllDisabled">
+                        </div>
+                        <div class="p-checkbox-box" role="checkbox" [attr.aria-checked]="allChecked" [ngClass]="{'p-highlight':allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}" (click)="toggleAll($event)">
+                            <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':allChecked}"></span>
+                        </div>
+                    </div>
+                    <div class="p-multiselect-filter-container" *ngIf="filter">
+                        <input #filterInput type="text" role="textbox" [value]="filterValue||''" (input)="onFilterInputChange($event)" class="p-multiselect-filter p-inputtext p-component" [disabled]="disabled" [attr.placeholder]="filterPlaceHolder" [attr.aria-label]="ariaFilterLabel">
+                        <span class="p-multiselect-filter-icon pi pi-search"></span>
+                    </div>
+                    <button class="p-multiselect-close p-link" type="button" (click)="close($event)" pRipple>
+                        <span class="p-multiselect-close-icon pi pi-times"></span>
+                    </button>
+                </div>
+                <div class="p-multiselect-items-wrapper" [style.max-height]="virtualScroll ? 'auto' : (scrollHeight||'auto')">
+                    <ul class="p-multiselect-items p-component" [ngClass]="{'p-multiselect-virtualscroll': virtualScroll}" role="listbox" aria-multiselectable="true">
+                        <ng-container *ngIf="group">
+                            <ng-template ngFor let-optgroup [ngForOf]="optionsToRender">
+                                <li class="p-multiselect-item-group">
+                                    <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
+                                    <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
+                                </li>
+                                <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}"></ng-container>
+                            </ng-template>
+                        </ng-container>
+                        <ng-container *ngIf="!group">
+                            <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: optionsToRender}"></ng-container>
+                        </ng-container>
+                        <ng-template #itemslist let-optionsToDisplay let-selectedOption="selectedOption">
+                            <ng-container *ngIf="!virtualScroll; else virtualScrollList">
+                                <ng-template ngFor let-option let-i="index" [ngForOf]="optionsToDisplay">
+                                    <p-multiSelectItem [option]="option" [selected]="isSelected(option)" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)" (onClick)="onOptionClick($event)" (onKeydown)="onOptionKeydown($event)"
+                                            [template]="itemTemplate"></p-multiSelectItem>
+                                </ng-template>
+                            </ng-container>
+                            <ng-template #virtualScrollList>
+                                <cdk-virtual-scroll-viewport #viewport [ngStyle]="{'height': scrollHeight}" [itemSize]="itemSize" *ngIf="virtualScroll && !emptyOptions">
+                                    <ng-container *cdkVirtualFor="let option of optionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd">
+                                        <p-multiSelectItem [option]="option" [selected]="isSelected(option)" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)" (onClick)="onOptionClick($event)" (onKeydown)="onOptionKeydown($event)"
+                                            [template]="itemTemplate" [itemSize]="itemSize"></p-multiSelectItem>
+                                    </ng-container>
+                                </cdk-virtual-scroll-viewport>
+                            </ng-template>
+                            <li *ngIf="hasFilter() && emptyOptions" class="p-multiselect-empty-message">
+                                <ng-container *ngIf="!emptyFilterTemplate && !emptyTemplate; else emptyFilter">
+                                    {{emptyFilterMessageLabel}}
+                                </ng-container>
+                                <ng-container #emptyFilter *ngTemplateOutlet="emptyFilterTemplate || emptyTemplate"></ng-container>
+                            </li>
+                            <li *ngIf="!hasFilter() && emptyOptions" class="p-multiselect-empty-message">
+                                <ng-container *ngIf="!emptyTemplate; else empty">
+                                    {{emptyMessageLabel}}
+                                </ng-container>
+                                <ng-container #empty *ngTemplateOutlet="emptyTemplate"></ng-container>
+                            </li>
+                        </ng-template>
+                    </ul>
+                </div>
+                <div class="p-multiselect-footer" *ngIf="footerFacet || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': 'filled',
+                        '[class.p-inputwrapper-focus]': 'focus || overlayVisible'
+                    }, providers: [MULTISELECT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".p-multiselect{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-multiselect-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-multiselect-label-container{overflow:hidden;flex:1 1 auto;cursor:pointer}.p-multiselect-label{display:block;white-space:nowrap;cursor:pointer;overflow:hidden;text-overflow:ellipsis}.p-multiselect-label-empty{overflow:hidden;visibility:hidden}.p-multiselect-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto}.p-multiselect-token-icon{cursor:pointer}.p-multiselect .p-multiselect-panel{min-width:100%}.p-multiselect-panel{position:absolute;top:0;left:0}.p-multiselect-items-wrapper{overflow:auto}.p-multiselect-items{margin:0;padding:0;list-style-type:none}.p-multiselect-item{cursor:pointer;display:flex;align-items:center;font-weight:normal;white-space:nowrap;position:relative;overflow:hidden}.p-multiselect-header{display:flex;align-items:center;justify-content:space-between}.p-multiselect-filter-container{position:relative;flex:1 1 auto}.p-multiselect-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-multiselect-filter-container .p-inputtext{width:100%}.p-multiselect-close{display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;position:relative}.p-fluid .p-multiselect{display:flex}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i3.FilterService }, { type: i3.PrimeNGConfig }, { type: i3.OverlayService }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], panelStyle: [{
+                type: Input
+            }], panelStyleClass: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], group: [{
+                type: Input
+            }], filter: [{
+                type: Input
+            }], filterPlaceHolder: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], overlayVisible: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], dataKey: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], displaySelectedLabel: [{
+                type: Input
+            }], maxSelectedLabels: [{
+                type: Input
+            }], selectionLimit: [{
+                type: Input
+            }], selectedItemsLabel: [{
+                type: Input
+            }], showToggleAll: [{
+                type: Input
+            }], emptyFilterMessage: [{
+                type: Input
+            }], emptyMessage: [{
+                type: Input
+            }], resetFilterOnHide: [{
+                type: Input
+            }], dropdownIcon: [{
+                type: Input
+            }], optionLabel: [{
+                type: Input
+            }], optionValue: [{
+                type: Input
+            }], optionDisabled: [{
+                type: Input
+            }], optionGroupLabel: [{
+                type: Input
+            }], optionGroupChildren: [{
+                type: Input
+            }], showHeader: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], filterBy: [{
+                type: Input
+            }], virtualScroll: [{
+                type: Input
+            }], itemSize: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], ariaFilterLabel: [{
+                type: Input
+            }], filterMatchMode: [{
+                type: Input
+            }], tooltip: [{
+                type: Input
+            }], tooltipPosition: [{
+                type: Input
+            }], tooltipPositionStyle: [{
+                type: Input
+            }], tooltipStyleClass: [{
+                type: Input
+            }], autofocusFilter: [{
+                type: Input
+            }], display: [{
+                type: Input
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], filterInputChild: [{
+                type: ViewChild,
+                args: ['filterInput']
+            }], accessibleViewChild: [{
+                type: ViewChild,
+                args: ['in']
+            }], footerFacet: [{
+                type: ContentChild,
+                args: [Footer]
+            }], headerFacet: [{
+                type: ContentChild,
+                args: [Header]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], onChange: [{
+                type: Output
+            }], onFilter: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], onClick: [{
+                type: Output
+            }], onPanelShow: [{
+                type: Output
+            }], onPanelHide: [{
+                type: Output
+            }], scrollHeight: [{
+                type: Input
+            }], defaultLabel: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], options: [{
+                type: Input
+            }], filterValue: [{
+                type: Input
+            }] } });
+class MultiSelectModule {
+}
+MultiSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MultiSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+MultiSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MultiSelectModule, declarations: [MultiSelect, MultiSelectItem], imports: [CommonModule, SharedModule, ScrollingModule, TooltipModule, RippleModule], exports: [MultiSelect, SharedModule, ScrollingModule] });
+MultiSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MultiSelectModule, imports: [[CommonModule, SharedModule, ScrollingModule, TooltipModule, RippleModule], SharedModule, ScrollingModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: MultiSelectModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, ScrollingModule, TooltipModule, RippleModule],
+                    exports: [MultiSelect, SharedModule, ScrollingModule],
+                    declarations: [MultiSelect, MultiSelectItem]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { MULTISELECT_VALUE_ACCESSOR, MultiSelect, MultiSelectItem, MultiSelectModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-multiselect.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-multiselect.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-multiselect.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-multiselect.mjs","sources":["../../src/app/components/multiselect/multiselect.ts","../../src/app/components/multiselect/primeng-multiselect.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, OnInit, AfterViewInit, AfterContentInit, AfterViewChecked, OnDestroy, Input, Output, Renderer2, EventEmitter,\n    forwardRef, ViewChild, ChangeDetectorRef, TemplateRef, ContentChildren, QueryList, ContentChild, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\nimport { trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { ObjectUtils, ZIndexUtils } from 'primeng/utils';\nimport { SharedModule, PrimeTemplate, Footer, Header, FilterService, PrimeNGConfig, TranslationKeys, OverlayService } from 'primeng/api';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { RippleModule } from 'primeng/ripple';\n\nexport const MULTISELECT_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MultiSelect),\n  multi: true\n};\n\n@Component({\n    selector: 'p-multiSelectItem',\n    template: `\n        <li class=\"p-multiselect-item\" (click)=\"onOptionClick($event)\" (keydown)=\"onOptionKeydown($event)\" [attr.aria-label]=\"label\"\n            [attr.tabindex]=\"disabled ? null : '0'\" [ngStyle]=\"{'height': itemSize + 'px'}\"\n            [ngClass]=\"{'p-highlight': selected, 'p-disabled': disabled}\" pRipple>\n            <div class=\"p-checkbox p-component\">\n                <div class=\"p-checkbox-box\" [ngClass]=\"{'p-highlight': selected}\">\n                    <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check': selected}\"></span>\n                </div>\n            </div>\n            <span *ngIf=\"!template\">{{label}}</span>\n            <ng-container *ngTemplateOutlet=\"template; context: {$implicit: option}\"></ng-container>\n        </li>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class MultiSelectItem {\n\n    @Input() option: any;\n\n    @Input() selected: boolean;\n\n    @Input() label: any;\n\n    @Input() disabled: boolean;\n\n    @Input() itemSize: number;\n\n    @Input() template: TemplateRef<any>;\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onKeydown: EventEmitter<any> = new EventEmitter();\n\n    onOptionClick(event: Event) {\n        this.onClick.emit({\n            originalEvent: event,\n            option: this.option\n        });\n    }\n\n    onOptionKeydown(event: Event) {\n        this.onKeydown.emit({\n            originalEvent: event,\n            option: this.option\n        });\n    }\n}\n\n@Component({\n    selector: 'p-multiSelect',\n    template: `\n        <div #container [ngClass]=\"{'p-multiselect p-component':true,\n            'p-multiselect-open':overlayVisible,\n            'p-multiselect-chip': display === 'chip',\n            'p-focus':focus,\n            'p-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\"\n            (click)=\"onMouseclick($event,in)\">\n            <div class=\"p-hidden-accessible\">\n                <input #in type=\"text\" readonly=\"readonly\" [attr.id]=\"inputId\" [attr.name]=\"name\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\"\n                       [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\" (keydown)=\"onKeydown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible\"\n                       [attr.aria-labelledby]=\"ariaLabelledBy\" role=\"listbox\">\n            </div>\n            <div class=\"p-multiselect-label-container\" [pTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition\" [positionStyle]=\"tooltipPositionStyle\" [tooltipStyleClass]=\"tooltipStyleClass\">\n                <div class=\"p-multiselect-label\" [ngClass]=\"{'p-placeholder': valuesAsString === (defaultLabel || placeholder), 'p-multiselect-label-empty': ((valuesAsString == null || valuesAsString.length === 0) && (placeholder == null || placeholder.length === 0))}\">\n                    <ng-container *ngIf=\"!selectedItemsTemplate\">\n                        <ng-container *ngIf=\"display === 'comma'\">{{valuesAsString || 'empty'}}</ng-container>\n                        <ng-container *ngIf=\"display === 'chip'\">\n                            <div #token *ngFor=\"let item of value; let i = index;\" class=\"p-multiselect-token\">\n                                <span class=\"p-multiselect-token-label\">{{findLabelByValue(item)}}</span>\n                                <span *ngIf=\"!disabled\" class=\"p-multiselect-token-icon pi pi-times-circle\" (click)=\"removeChip(item, $event)\"></span>\n                            </div>\n                            <ng-container *ngIf=\"!value || value.length === 0\">{{placeholder || defaultLabel || 'empty'}}</ng-container>\n                        </ng-container>\n                    </ng-container>\n                    <ng-container *ngTemplateOutlet=\"selectedItemsTemplate; context: {$implicit: value}\"></ng-container>\n                </div>\n            </div>\n            <div [ngClass]=\"{'p-multiselect-trigger':true}\">\n                <span class=\"p-multiselect-trigger-icon\" [ngClass]=\"dropdownIcon\"></span>\n            </div>\n            <div *ngIf=\"overlayVisible\" [ngClass]=\"['p-multiselect-panel p-component']\" [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"onOverlayAnimationEnd\n                (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\" (keydown)=\"onKeydown($event)\" (click)=\"onOverlayClick($event)\" >\n                <div class=\"p-multiselect-header\" *ngIf=\"showHeader\">\n                    <ng-content select=\"p-header\"></ng-content>\n                    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                    <div class=\"p-checkbox p-component\" *ngIf=\"showToggleAll && !selectionLimit\" [ngClass]=\"{'p-checkbox-disabled': disabled || toggleAllDisabled}\">\n                        <div class=\"p-hidden-accessible\">\n                            <input type=\"checkbox\" readonly=\"readonly\" [checked]=\"allChecked\" (focus)=\"onHeaderCheckboxFocus()\" (blur)=\"onHeaderCheckboxBlur()\" (keydown.space)=\"toggleAll($event)\" [disabled]=\"disabled || toggleAllDisabled\">\n                        </div>\n                        <div class=\"p-checkbox-box\" role=\"checkbox\" [attr.aria-checked]=\"allChecked\" [ngClass]=\"{'p-highlight':allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}\" (click)=\"toggleAll($event)\">\n                            <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':allChecked}\"></span>\n                        </div>\n                    </div>\n                    <div class=\"p-multiselect-filter-container\" *ngIf=\"filter\">\n                        <input #filterInput type=\"text\" role=\"textbox\" [value]=\"filterValue||''\" (input)=\"onFilterInputChange($event)\" class=\"p-multiselect-filter p-inputtext p-component\" [disabled]=\"disabled\" [attr.placeholder]=\"filterPlaceHolder\" [attr.aria-label]=\"ariaFilterLabel\">\n                        <span class=\"p-multiselect-filter-icon pi pi-search\"></span>\n                    </div>\n                    <button class=\"p-multiselect-close p-link\" type=\"button\" (click)=\"close($event)\" pRipple>\n                        <span class=\"p-multiselect-close-icon pi pi-times\"></span>\n                    </button>\n                </div>\n                <div class=\"p-multiselect-items-wrapper\" [style.max-height]=\"virtualScroll ? 'auto' : (scrollHeight||'auto')\">\n                    <ul class=\"p-multiselect-items p-component\" [ngClass]=\"{'p-multiselect-virtualscroll': virtualScroll}\" role=\"listbox\" aria-multiselectable=\"true\">\n                        <ng-container *ngIf=\"group\">\n                            <ng-template ngFor let-optgroup [ngForOf]=\"optionsToRender\">\n                                <li class=\"p-multiselect-item-group\">\n                                    <span *ngIf=\"!groupTemplate\">{{getOptionGroupLabel(optgroup)||'empty'}}</span>\n                                    <ng-container *ngTemplateOutlet=\"groupTemplate; context: {$implicit: optgroup}\"></ng-container>\n                                </li>\n                                <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}\"></ng-container>\n                            </ng-template>\n                        </ng-container>\n                        <ng-container *ngIf=\"!group\">\n                            <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: optionsToRender}\"></ng-container>\n                        </ng-container>\n                        <ng-template #itemslist let-optionsToDisplay let-selectedOption=\"selectedOption\">\n                            <ng-container *ngIf=\"!virtualScroll; else virtualScrollList\">\n                                <ng-template ngFor let-option let-i=\"index\" [ngForOf]=\"optionsToDisplay\">\n                                    <p-multiSelectItem [option]=\"option\" [selected]=\"isSelected(option)\" [label]=\"getOptionLabel(option)\" [disabled]=\"isOptionDisabled(option)\" (onClick)=\"onOptionClick($event)\" (onKeydown)=\"onOptionKeydown($event)\"\n                                            [template]=\"itemTemplate\"></p-multiSelectItem>\n                                </ng-template>\n                            </ng-container>\n                            <ng-template #virtualScrollList>\n                                <cdk-virtual-scroll-viewport #viewport [ngStyle]=\"{'height': scrollHeight}\" [itemSize]=\"itemSize\" *ngIf=\"virtualScroll && !emptyOptions\">\n                                    <ng-container *cdkVirtualFor=\"let option of optionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd\">\n                                        <p-multiSelectItem [option]=\"option\" [selected]=\"isSelected(option)\" [label]=\"getOptionLabel(option)\" [disabled]=\"isOptionDisabled(option)\" (onClick)=\"onOptionClick($event)\" (onKeydown)=\"onOptionKeydown($event)\"\n                                            [template]=\"itemTemplate\" [itemSize]=\"itemSize\"></p-multiSelectItem>\n                                    </ng-container>\n                                </cdk-virtual-scroll-viewport>\n                            </ng-template>\n                            <li *ngIf=\"hasFilter() && emptyOptions\" class=\"p-multiselect-empty-message\">\n                                <ng-container *ngIf=\"!emptyFilterTemplate && !emptyTemplate; else emptyFilter\">\n                                    {{emptyFilterMessageLabel}}\n                                </ng-container>\n                                <ng-container #emptyFilter *ngTemplateOutlet=\"emptyFilterTemplate || emptyTemplate\"></ng-container>\n                            </li>\n                            <li *ngIf=\"!hasFilter() && emptyOptions\" class=\"p-multiselect-empty-message\">\n                                <ng-container *ngIf=\"!emptyTemplate; else empty\">\n                                    {{emptyMessageLabel}}\n                                </ng-container>\n                                <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n                            </li>\n                        </ng-template>\n                    </ul>\n                </div>\n                <div class=\"p-multiselect-footer\" *ngIf=\"footerFacet || footerTemplate\">\n                    <ng-content select=\"p-footer\"></ng-content>\n                    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n                </div>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focus || overlayVisible'\n    },\n    providers: [MULTISELECT_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./multiselect.css']\n})\nexport class MultiSelect implements OnInit,AfterViewInit,AfterContentInit,AfterViewChecked,OnDestroy,ControlValueAccessor {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() panelStyle: any;\n\n    @Input() panelStyleClass: string;\n\n    @Input() inputId: string;\n\n    @Input() disabled: boolean;\n\n    @Input() readonly: boolean;\n\n    @Input() group: boolean;\n\n    @Input() filter: boolean = true;\n\n    @Input() filterPlaceHolder: string;\n\n    @Input() filterLocale: string;\n\n    @Input() overlayVisible: boolean;\n\n    @Input() tabindex: number;\n\n    @Input() appendTo: any;\n\n    @Input() dataKey: string;\n\n    @Input() name: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() displaySelectedLabel: boolean = true;\n\n    @Input() maxSelectedLabels: number = 3;\n\n    @Input() selectionLimit: number;\n\n    @Input() selectedItemsLabel: string = 'ellipsis';\n\n    @Input() showToggleAll: boolean = true;\n\n    @Input() emptyFilterMessage: string = '';\n\n    @Input() emptyMessage: string = '';\n\n    @Input() resetFilterOnHide: boolean = false;\n\n    @Input() dropdownIcon: string = 'pi pi-chevron-down';\n\n    @Input() optionLabel: string;\n\n    @Input() optionValue: string;\n\n    @Input() optionDisabled: string;\n\n    @Input() optionGroupLabel: string;\n\n    @Input() optionGroupChildren: string = \"items\";\n\n    @Input() showHeader: boolean = true;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() filterBy: string;\n\n    @Input() virtualScroll: boolean;\n\n    @Input() itemSize: number;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Input() ariaFilterLabel: string;\n\n    @Input() filterMatchMode: string = \"contains\";\n\n    @Input() tooltip: string = '';\n\n    @Input() tooltipPosition: string = 'right';\n\n    @Input() tooltipPositionStyle: string = 'absolute';\n\n    @Input() tooltipStyleClass: string;\n\n    @Input() autofocusFilter: boolean = true;\n\n    @Input() display: string = 'comma';\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @ViewChild('filterInput') filterInputChild: ElementRef;\n\n    @ViewChild('in') accessibleViewChild: ElementRef;\n\n    @ContentChild(Footer) footerFacet;\n\n    @ContentChild(Header) headerFacet;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onPanelShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onPanelHide: EventEmitter<any> = new EventEmitter();\n\n    @Input() scrollHeight: string = '200px';\n\n    _defaultLabel: string;\n\n    @Input() set defaultLabel(val: string) {\n        this._defaultLabel = val;\n        this.updateLabel();\n    }\n\n    get defaultLabel(): string {\n        return this._defaultLabel;\n    }\n\n    _placeholder: string;\n\n    @Input() set placeholder(val: string) {\n        this._placeholder = val;\n        this.updateLabel();\n    }\n\n    get placeholder(): string {\n        return this._placeholder;\n    }\n\n    @Input() get options(): any[] {\n        return this._options;\n    }\n\n    set options(val: any[]) {\n        this._options = val;\n        this.updateLabel();\n    }\n\n    @Input() get filterValue(): string {\n        return this._filterValue;\n    }\n\n    set filterValue(val: string) {\n        this._filterValue = val;\n        this.activateFilter();\n    }\n\n    public value: any[];\n\n    public _filteredOptions: any[];\n\n    public onModelChange: Function = () => {};\n\n    public onModelTouched: Function = () => {};\n\n    overlay: HTMLDivElement;\n\n    public valuesAsString: string;\n\n    public focus: boolean;\n\n    filled: boolean;\n\n    public documentClickListener: any;\n\n    public _filterValue: string;\n\n    public filtered: boolean;\n\n    public itemTemplate: TemplateRef<any>;\n\n    public groupTemplate: TemplateRef<any>;\n\n    public headerTemplate: TemplateRef<any>;\n\n    public footerTemplate: TemplateRef<any>;\n\n    public emptyFilterTemplate: TemplateRef<any>;\n\n    public emptyTemplate: TemplateRef<any>;\n\n    public selectedItemsTemplate: TemplateRef<any>;\n\n    public headerCheckboxFocus: boolean;\n\n    _options: any[];\n\n    maxSelectionLimitReached: boolean;\n\n    scrollHandler: any;\n\n    documentResizeListener: any;\n\n    preventModelTouched: boolean;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public filterService: FilterService, public config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    ngOnInit() {\n        this.updateLabel();\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'group':\n                    this.groupTemplate = item.template;\n                break;\n\n                case 'selectedItems':\n                    this.selectedItemsTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'emptyfilter':\n                    this.emptyFilterTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngAfterViewInit() {\n        if (this.overlayVisible) {\n            this.show();\n        }\n    }\n\n    ngAfterViewChecked() {\n        if (this.filtered) {\n            this.alignOverlay();\n\n            this.filtered = false;\n        }\n    }\n\n    getOptionLabel(option: any) {\n        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);\n    }\n\n    getOptionValue(option: any) {\n        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);\n    }\n\n    getOptionGroupLabel(optionGroup: any) {\n        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);\n    }\n\n    getOptionGroupChildren(optionGroup: any) {\n        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;\n    }\n\n    isOptionDisabled(option: any) {\n        let disabled = this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);\n        return (disabled || (this.maxSelectionLimitReached && !this.isSelected(option)));\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.updateLabel();\n        this.updateFilledState();\n        this.checkSelectionLimit();\n\n        this.cd.markForCheck();\n    }\n\n    checkSelectionLimit() {\n        if (this.selectionLimit && (this.value && this.value.length === this.selectionLimit)) {\n            this.maxSelectionLimitReached = true;\n        }\n        else {\n            this.maxSelectionLimitReached = false;\n        }\n    }\n\n    updateFilledState() {\n        this.filled = (this.value && this.value.length > 0);\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    onOptionClick(event) {\n        let option = event.option;\n        if (this.isOptionDisabled(option)) {\n            return;\n        }\n\n        let optionValue = this.getOptionValue(option);\n        let selectionIndex = this.findSelectionIndex(optionValue);\n        if (selectionIndex != -1) {\n            this.value = this.value.filter((val,i) => i != selectionIndex);\n\n            if (this.selectionLimit) {\n                this.maxSelectionLimitReached = false;\n            }\n        }\n        else {\n            if (!this.selectionLimit || (!this.value || this.value.length < this.selectionLimit)) {\n                this.value = [...this.value || [], optionValue];\n            }\n\n            this.checkSelectionLimit();\n        }\n\n        this.onModelChange(this.value);\n        this.onChange.emit({originalEvent: event.originalEvent, value: this.value, itemValue: optionValue});\n        this.updateLabel();\n        this.updateFilledState();\n    }\n\n    isSelected(option) {\n        return this.findSelectionIndex(this.getOptionValue(option)) != -1;\n    }\n\n    findSelectionIndex(val: any): number {\n        let index = -1;\n\n        if (this.value) {\n            for (let i = 0; i < this.value.length; i++) {\n                if (ObjectUtils.equals(this.value[i], val, this.dataKey)) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n\n        return index;\n    }\n\n    get toggleAllDisabled(): boolean {\n        let optionsToRender = this.optionsToRender;\n        if (!optionsToRender || optionsToRender.length === 0) {\n            return true;\n        }\n        else {\n            for (let option of optionsToRender) {\n                if (!this.isOptionDisabled(option))\n                    return false;\n            }\n\n            return true;\n        }\n    }\n\n    toggleAll(event) {\n        if (this.disabled || this.toggleAllDisabled || this.readonly) {\n            return;\n        }\n\n        let allChecked = this.allChecked;\n\n        if (allChecked)\n            this.uncheckAll();\n        else\n            this.checkAll();\n\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value });\n        this.updateFilledState();\n        this.updateLabel();\n        event.preventDefault();\n    }\n\n    checkAll() {\n        let optionsToRender = this.optionsToRender;\n        let val: any[] = [];\n\n        optionsToRender.forEach(opt => {\n            if (!this.group) {\n                let optionDisabled = this.isOptionDisabled(opt);\n                if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {\n                    val.push(this.getOptionValue(opt));\n                }\n            }\n            else {\n                let subOptions = this.getOptionGroupChildren(opt);\n\n                if (subOptions) {\n                    subOptions.forEach(option => {\n                        let optionDisabled = this.isOptionDisabled(option);\n                        if (!optionDisabled || (optionDisabled && this.isSelected(option))) {\n                            val.push(this.getOptionValue(option));\n                        }\n                    });\n                }\n            }\n        });\n\n        this.value = val;\n    }\n\n    uncheckAll() {\n        let optionsToRender = this.optionsToRender;\n        let val: any[] = [];\n\n        optionsToRender.forEach(opt => {\n            if (!this.group) {\n                let optionDisabled = this.isOptionDisabled(opt);\n                if (optionDisabled && this.isSelected(opt)) {\n                    val.push(this.getOptionValue(opt));\n                }\n            }\n            else {\n                if (opt.items) {\n                    opt.items.forEach(option => {\n                        let optionDisabled = this.isOptionDisabled(option);\n                        if (optionDisabled && this.isSelected(option)) {\n                            val.push(this.getOptionValue(option));\n                        }\n                    });\n                }\n            }\n        });\n\n        this.value = val;\n    }\n\n    show() {\n        if (!this.overlayVisible){\n            this.overlayVisible = true;\n        }\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n                this.overlay = event.element;\n                this.appendOverlay();\n                if (this.autoZIndex) {\n                    ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);\n                }\n                this.alignOverlay();\n                this.bindDocumentClickListener();\n                this.bindDocumentResizeListener();\n                this.bindScrollListener();\n\n                if (this.filterInputChild && this.filterInputChild.nativeElement) {\n                    this.preventModelTouched = true;\n\n                    if (this.autofocusFilter) {\n                        this.filterInputChild.nativeElement.focus();\n                    }\n                }\n\n                this.onPanelShow.emit();\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'void':\n                ZIndexUtils.clear(event.element);\n            break;\n        }\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                DomHandler.appendChild(this.overlay, this.appendTo);\n\n            if (!this.overlay.style.minWidth) {\n                this.overlay.style.minWidth = DomHandler.getWidth(this.containerViewChild.nativeElement) + 'px';\n            }\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.overlay && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlay);\n        }\n    }\n\n    alignOverlay() {\n        if (this.overlay) {\n            if (this.appendTo)\n                DomHandler.absolutePosition(this.overlay, this.containerViewChild.nativeElement);\n            else\n                DomHandler.relativePosition(this.overlay, this.containerViewChild.nativeElement);\n        }\n    }\n\n    hide() {\n        this.overlayVisible = false;\n        this.unbindDocumentClickListener();\n        if (this.resetFilterOnHide){\n            this.filterInputChild.nativeElement.value = '';\n            this._filterValue = null;\n            this._filteredOptions = null;\n        }\n        this.onPanelHide.emit();\n        this.cd.markForCheck();\n    }\n\n    close(event) {\n        this.hide();\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    onMouseclick(event: MouseEvent, input) {\n        if (this.disabled || this.readonly || (<Node> event.target).isSameNode(this.accessibleViewChild.nativeElement)) {\n            return;\n        }\n\n        this.onClick.emit(event);\n\n        if (!this.isOverlayClick(event) && !DomHandler.hasClass(event.target, 'p-multiselect-token-icon')) {\n            if (this.overlayVisible) {\n                this.hide();\n            }\n            else {\n                input.focus();\n                this.show();\n            }\n        }\n    }\n\n    removeChip(chip: any, event: MouseEvent) {\n        this.value = this.value.filter(val => !ObjectUtils.equals(val, chip, this.dataKey));\n        this.onModelChange(this.value);\n        this.checkSelectionLimit();\n        this.onChange.emit({originalEvent: event, value: this.value, itemValue: chip});\n        this.updateLabel();\n        this.updateFilledState();\n    }\n\n    isOverlayClick(event: MouseEvent) {\n        let targetNode = <Node> event.target;\n        return this.overlay ? (this.overlay.isSameNode(targetNode) || this.overlay.contains(targetNode)) : false;\n    }\n\n    isOutsideClicked(event: MouseEvent): boolean {\n        return !(this.el.nativeElement.isSameNode(event.target) || this.el.nativeElement.contains(event.target) || this.isOverlayClick(event));\n    }\n\n    onInputFocus(event) {\n        this.focus = true;\n        this.onFocus.emit({originalEvent: event});\n    }\n\n    onInputBlur(event) {\n        this.focus = false;\n        this.onBlur.emit({originalEvent: event});\n\n        if (!this.preventModelTouched) {\n            this.onModelTouched();\n        }\n        this.preventModelTouched = false;\n    }\n\n    onOptionKeydown(event) {\n        if (this.readonly) {\n            return;\n        }\n\n        switch(event.originalEvent.which) {\n\n            //down\n            case 40:\n                var nextItem = this.findNextItem(event.originalEvent.target.parentElement);\n                if (nextItem) {\n                    nextItem.focus();\n                }\n\n                event.originalEvent.preventDefault();\n            break;\n\n            //up\n            case 38:\n                var prevItem = this.findPrevItem(event.originalEvent.target.parentElement);\n                if (prevItem) {\n                    prevItem.focus();\n                }\n\n                event.originalEvent.preventDefault();\n            break;\n\n            //enter\n            case 13:\n                this.onOptionClick(event);\n                event.originalEvent.preventDefault();\n            break;\n        }\n    }\n\n    findNextItem(item) {\n        let nextItem = item.nextElementSibling;\n\n        if (nextItem)\n            return DomHandler.hasClass(nextItem.children[0], 'p-disabled') || DomHandler.isHidden(nextItem.children[0]) || DomHandler.hasClass(nextItem, 'p-multiselect-item-group') ? this.findNextItem(nextItem) : nextItem.children[0];\n        else\n            return null;\n    }\n\n    findPrevItem(item) {\n        let prevItem = item.previousElementSibling;\n\n        if (prevItem)\n            return DomHandler.hasClass(prevItem.children[0], 'p-disabled') || DomHandler.isHidden(prevItem.children[0]) || DomHandler.hasClass(prevItem, 'p-multiselect-item-group') ? this.findPrevItem(prevItem) : prevItem.children[0];\n        else\n            return null;\n    }\n\n    onKeydown(event: KeyboardEvent){\n        switch(event.which) {\n            //down\n            case 40:\n                if (!this.overlayVisible && event.altKey) {\n                    this.show();\n                    event.preventDefault();\n                }\n            break;\n\n            //space\n            case 32:\n                if (!this.overlayVisible){\n                    this.show();\n                    event.preventDefault();\n                }\n                break;\n\n            //escape\n            case 27:\n                this.hide();\n            break;\n        }\n    }\n\n    updateLabel() {\n        if (this.value && this.options && this.value.length && this.displaySelectedLabel) {\n            let label = '';\n            for (let i = 0; i < this.value.length; i++) {\n                let itemLabel = this.findLabelByValue(this.value[i]);\n                if (itemLabel) {\n                    if (label.length > 0) {\n                        label = label + ', ';\n                    }\n                    label = label + itemLabel;\n                }\n            }\n\n            if (this.value.length <= this.maxSelectedLabels || this.selectedItemsLabel === 'ellipsis') {\n                this.valuesAsString = label;\n            }\n            else {\n                let pattern = /{(.*?)}/;\n                if (pattern.test(this.selectedItemsLabel)) {\n                    this.valuesAsString = this.selectedItemsLabel.replace(this.selectedItemsLabel.match(pattern)[0], this.value.length + '');\n                } else {\n                    this.valuesAsString = this.selectedItemsLabel;\n                }\n            }\n        }\n        else {\n            this.valuesAsString = this.placeholder || this.defaultLabel;\n        }\n    }\n\n    findLabelByValue(val: any): string {\n        if (this.group) {\n            let label = null;\n\n            for (let i = 0; i < this.options.length; i++) {\n                let subOptions = this.getOptionGroupChildren(this.options[i]);\n                if (subOptions) {\n                    label = this.searchLabelByValue(val, subOptions);\n\n                    if (label) {\n                        break;\n                    }\n                }\n            }\n\n            return label;\n        }\n        else {\n            return this.searchLabelByValue(val, this.options)\n        }\n    }\n\n    searchLabelByValue(val: any, options: any[]): string {\n        let label = null;\n\n        for (let i = 0; i < options.length; i++) {\n            let option = options[i];\n            let optionValue = this.getOptionValue(option);\n\n            if (val == null && optionValue == null || ObjectUtils.equals(val, optionValue, this.dataKey)) {\n                label = this.getOptionLabel(option);\n                break;\n            }\n        }\n\n        return label;\n    }\n\n    get allChecked(): boolean {\n        let optionsToRender = this.optionsToRender;\n        if (!optionsToRender || optionsToRender.length === 0) {\n            return false;\n        }\n        else {\n            let selectedDisabledItemsLength = 0;\n            let unselectedDisabledItemsLength = 0;\n            let selectedEnabledItemsLength = 0;\n            let visibleOptionsLength = this.group ? 0 : this.optionsToRender.length;\n\n            for (let option of optionsToRender) {\n                if (!this.group) {\n                    let disabled = this.isOptionDisabled(option);\n                    let selected = this.isSelected(option);\n\n                    if (disabled) {\n                        if (selected)\n                            selectedDisabledItemsLength++;\n                        else\n                            unselectedDisabledItemsLength++;\n                    }\n                    else {\n                        if (selected)\n                            selectedEnabledItemsLength++;\n                        else\n                            return false;\n                    }\n                }\n                else {\n                    for (let opt of this.getOptionGroupChildren(option)) {\n                        let disabled = this.isOptionDisabled(opt);\n                        let selected = this.isSelected(opt);\n\n                        if (disabled) {\n                            if (selected)\n                                selectedDisabledItemsLength++;\n                            else\n                                unselectedDisabledItemsLength++;\n                        }\n                        else {\n                            if (selected)\n                                selectedEnabledItemsLength++;\n                            else {\n                                return false;\n                            }\n                        }\n\n                        visibleOptionsLength++;\n                    }\n                }\n            }\n\n            return (visibleOptionsLength === selectedDisabledItemsLength\n                    || visibleOptionsLength === selectedEnabledItemsLength\n                    || selectedEnabledItemsLength && visibleOptionsLength === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));\n        }\n    }\n\n    get optionsToRender(): any[] {\n        return this._filteredOptions || this.options;\n    }\n\n    get emptyOptions(): boolean {\n        let optionsToRender = this.optionsToRender;\n        return !optionsToRender || optionsToRender.length === 0;\n    }\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    get emptyFilterMessageLabel(): string {\n        return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);\n    }\n\n    hasFilter() {\n        return this._filterValue && this._filterValue.trim().length > 0;\n    }\n\n    onFilterInputChange(event: KeyboardEvent) {\n        this._filterValue = (<HTMLInputElement> event.target).value;\n        this.activateFilter();\n        this.onFilter.emit({originalEvent: event, filter: this._filterValue});\n        this.cd.detectChanges();\n        this.alignOverlay();\n    }\n\n    activateFilter() {\n        if (this.hasFilter() && this._options) {\n            let searchFields: string[] = (this.filterBy || this.optionLabel || 'label').split(',');\n            if (this.group) {\n                let searchFields: string[] = (this.optionLabel || 'label').split(',');\n\n                let filteredGroups = [];\n                for (let optgroup of this.options) {\n                    let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);\n                    if (filteredSubOptions && filteredSubOptions.length) {\n                        filteredGroups.push({...optgroup, ...{[this.optionGroupChildren]: filteredSubOptions}});\n                    }\n                }\n\n                this._filteredOptions = filteredGroups;\n            }\n            else {\n                this._filteredOptions = this.filterService.filter(this.options, searchFields, this._filterValue, this.filterMatchMode, this.filterLocale);\n            }\n        }\n        else {\n            this._filteredOptions = null;\n        }\n    }\n\n    onHeaderCheckboxFocus() {\n        this.headerCheckboxFocus = true;\n    }\n\n    onHeaderCheckboxBlur() {\n        this.headerCheckboxFocus = false;\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n                if (this.isOutsideClicked(event)) {\n                    this.hide();\n                }\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    onWindowResize() {\n        if (!DomHandler.isAndroid()) {\n            this.hide();\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    onOverlayHide() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.overlay = null;\n        this.onModelTouched();\n    }\n\n    ngOnDestroy() {\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.overlay) {\n            ZIndexUtils.clear(this.overlay);\n        }\n\n        this.restoreOverlayAppend();\n        this.onOverlayHide();\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,SharedModule,ScrollingModule,TooltipModule,RippleModule],\n    exports: [MultiSelect,SharedModule,ScrollingModule],\n    declarations: [MultiSelect,MultiSelectItem]\n})\nexport class MultiSelectModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-orderlist.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-orderlist.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-orderlist.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,479 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { DomHandler } from 'primeng/dom';
+import { UniqueComponentId, ObjectUtils } from 'primeng/utils';
+import * as i4 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i5 from '@angular/cdk/drag-drop';
+import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
+
+class OrderList {
+    constructor(el, cd, filterService) {
+        this.el = el;
+        this.cd = cd;
+        this.filterService = filterService;
+        this.metaKeySelection = true;
+        this.dragdrop = false;
+        this.controlsPosition = 'left';
+        this.filterMatchMode = "contains";
+        this.breakpoint = "960px";
+        this.selectionChange = new EventEmitter();
+        this.trackBy = (index, item) => item;
+        this.onReorder = new EventEmitter();
+        this.onSelectionChange = new EventEmitter();
+        this.onFilterEvent = new EventEmitter();
+        this.id = UniqueComponentId();
+    }
+    get selection() {
+        return this._selection;
+    }
+    set selection(val) {
+        this._selection = val;
+    }
+    ngOnInit() {
+        if (this.responsive) {
+            this.createStyle();
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                case 'empty':
+                    this.emptyMessageTemplate = item.template;
+                    break;
+                case 'emptyfilter':
+                    this.emptyFilterMessageTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngAfterViewChecked() {
+        if (this.movedUp || this.movedDown) {
+            let listItems = DomHandler.find(this.listViewChild.nativeElement, 'li.p-highlight');
+            let listItem;
+            if (listItems.length > 0) {
+                if (this.movedUp)
+                    listItem = listItems[0];
+                else
+                    listItem = listItems[listItems.length - 1];
+                DomHandler.scrollInView(this.listViewChild.nativeElement, listItem);
+            }
+            this.movedUp = false;
+            this.movedDown = false;
+        }
+    }
+    get value() {
+        return this._value;
+    }
+    set value(val) {
+        this._value = val;
+        if (this.filterValue) {
+            this.filter();
+        }
+    }
+    onItemClick(event, item, index) {
+        this.itemTouched = false;
+        let selectedIndex = ObjectUtils.findIndexInList(item, this.selection);
+        let selected = (selectedIndex != -1);
+        let metaSelection = this.itemTouched ? false : this.metaKeySelection;
+        if (metaSelection) {
+            let metaKey = (event.metaKey || event.ctrlKey || event.shiftKey);
+            if (selected && metaKey) {
+                this._selection = this._selection.filter((val, index) => index !== selectedIndex);
+            }
+            else {
+                this._selection = (metaKey) ? this._selection ? [...this._selection] : [] : [];
+                ObjectUtils.insertIntoOrderedArray(item, index, this._selection, this.value);
+            }
+        }
+        else {
+            if (selected) {
+                this._selection = this._selection.filter((val, index) => index !== selectedIndex);
+            }
+            else {
+                this._selection = this._selection ? [...this._selection] : [];
+                ObjectUtils.insertIntoOrderedArray(item, index, this._selection, this.value);
+            }
+        }
+        //binding
+        this.selectionChange.emit(this._selection);
+        //event
+        this.onSelectionChange.emit({ originalEvent: event, value: this._selection });
+    }
+    onFilterKeyup(event) {
+        this.filterValue = event.target.value.trim().toLocaleLowerCase(this.filterLocale);
+        this.filter();
+        this.onFilterEvent.emit({
+            originalEvent: event,
+            value: this.visibleOptions
+        });
+    }
+    filter() {
+        let searchFields = this.filterBy.split(',');
+        this.visibleOptions = this.filterService.filter(this.value, searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);
+    }
+    isItemVisible(item) {
+        if (this.filterValue && this.filterValue.trim().length) {
+            for (let i = 0; i < this.visibleOptions.length; i++) {
+                if (item == this.visibleOptions[i]) {
+                    return true;
+                }
+            }
+        }
+        else {
+            return true;
+        }
+    }
+    onItemTouchEnd() {
+        this.itemTouched = true;
+    }
+    isSelected(item) {
+        return ObjectUtils.findIndexInList(item, this.selection) != -1;
+    }
+    isEmpty() {
+        return this.filterValue ? (!this.visibleOptions || this.visibleOptions.length === 0) : (!this.value || this.value.length === 0);
+    }
+    moveUp() {
+        if (this.selection) {
+            for (let i = 0; i < this.selection.length; i++) {
+                let selectedItem = this.selection[i];
+                let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value);
+                if (selectedItemIndex != 0) {
+                    let movedItem = this.value[selectedItemIndex];
+                    let temp = this.value[selectedItemIndex - 1];
+                    this.value[selectedItemIndex - 1] = movedItem;
+                    this.value[selectedItemIndex] = temp;
+                }
+                else {
+                    break;
+                }
+            }
+            if (this.dragdrop && this.filterValue)
+                this.filter();
+            this.movedUp = true;
+            this.onReorder.emit(this.selection);
+        }
+    }
+    moveTop() {
+        if (this.selection) {
+            for (let i = this.selection.length - 1; i >= 0; i--) {
+                let selectedItem = this.selection[i];
+                let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value);
+                if (selectedItemIndex != 0) {
+                    let movedItem = this.value.splice(selectedItemIndex, 1)[0];
+                    this.value.unshift(movedItem);
+                }
+                else {
+                    break;
+                }
+            }
+            if (this.dragdrop && this.filterValue)
+                this.filter();
+            this.onReorder.emit(this.selection);
+            this.listViewChild.nativeElement.scrollTop = 0;
+        }
+    }
+    moveDown() {
+        if (this.selection) {
+            for (let i = this.selection.length - 1; i >= 0; i--) {
+                let selectedItem = this.selection[i];
+                let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value);
+                if (selectedItemIndex != (this.value.length - 1)) {
+                    let movedItem = this.value[selectedItemIndex];
+                    let temp = this.value[selectedItemIndex + 1];
+                    this.value[selectedItemIndex + 1] = movedItem;
+                    this.value[selectedItemIndex] = temp;
+                }
+                else {
+                    break;
+                }
+            }
+            if (this.dragdrop && this.filterValue)
+                this.filter();
+            this.movedDown = true;
+            this.onReorder.emit(this.selection);
+        }
+    }
+    moveBottom() {
+        if (this.selection) {
+            for (let i = 0; i < this.selection.length; i++) {
+                let selectedItem = this.selection[i];
+                let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, this.value);
+                if (selectedItemIndex != (this.value.length - 1)) {
+                    let movedItem = this.value.splice(selectedItemIndex, 1)[0];
+                    this.value.push(movedItem);
+                }
+                else {
+                    break;
+                }
+            }
+            if (this.dragdrop && this.filterValue)
+                this.filter();
+            this.onReorder.emit(this.selection);
+            this.listViewChild.nativeElement.scrollTop = this.listViewChild.nativeElement.scrollHeight;
+        }
+    }
+    onDrop(event) {
+        let previousIndex = event.previousIndex;
+        let currentIndex = event.currentIndex;
+        if (previousIndex !== currentIndex) {
+            if (this.visibleOptions) {
+                if (this.filterValue) {
+                    previousIndex = ObjectUtils.findIndexInList(event.item.data, this.value);
+                    currentIndex = ObjectUtils.findIndexInList(this.visibleOptions[currentIndex], this.value);
+                }
+                moveItemInArray(this.visibleOptions, event.previousIndex, event.currentIndex);
+            }
+            moveItemInArray(this.value, previousIndex, currentIndex);
+            this.onReorder.emit([event.item.data]);
+        }
+    }
+    onItemKeydown(event, item, index) {
+        let listItem = event.currentTarget;
+        switch (event.which) {
+            //down
+            case 40:
+                var nextItem = this.findNextItem(listItem);
+                if (nextItem) {
+                    nextItem.focus();
+                }
+                event.preventDefault();
+                break;
+            //up
+            case 38:
+                var prevItem = this.findPrevItem(listItem);
+                if (prevItem) {
+                    prevItem.focus();
+                }
+                event.preventDefault();
+                break;
+            //enter
+            case 13:
+                this.onItemClick(event, item, index);
+                event.preventDefault();
+                break;
+        }
+    }
+    findNextItem(item) {
+        let nextItem = item.nextElementSibling;
+        if (nextItem)
+            return !DomHandler.hasClass(nextItem, 'p-orderlist-item') || DomHandler.isHidden(nextItem) ? this.findNextItem(nextItem) : nextItem;
+        else
+            return null;
+    }
+    findPrevItem(item) {
+        let prevItem = item.previousElementSibling;
+        if (prevItem)
+            return !DomHandler.hasClass(prevItem, 'p-orderlist-item') || DomHandler.isHidden(prevItem) ? this.findPrevItem(prevItem) : prevItem;
+        else
+            return null;
+    }
+    createStyle() {
+        if (!this.styleElement) {
+            this.el.nativeElement.children[0].setAttribute(this.id, '');
+            this.styleElement = document.createElement('style');
+            this.styleElement.type = 'text/css';
+            document.head.appendChild(this.styleElement);
+            let innerHTML = `
+                @media screen and (max-width: ${this.breakpoint}) {
+                    .p-orderlist[${this.id}] {
+                        flex-direction: column;
+                    }
+
+                    .p-orderlist[${this.id}] .p-orderlist-controls {
+                        padding: var(--content-padding);
+                        flex-direction: row;
+                    }
+
+                    .p-orderlist[${this.id}] .p-orderlist-controls .p-button {
+                        margin-right: var(--inline-spacing);
+                        margin-bottom: 0;
+                    }
+
+                    .p-orderlist[${this.id}] .p-orderlist-controls .p-button:last-child {
+                        margin-right: 0;
+                    }
+                }
+            `;
+            this.styleElement.innerHTML = innerHTML;
+        }
+    }
+    destroyStyle() {
+        if (this.styleElement) {
+            document.head.removeChild(this.styleElement);
+            this.styleElement = null;
+            ``;
+        }
+    }
+    ngOnDestroy() {
+        this.destroyStyle();
+    }
+}
+OrderList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrderList, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FilterService }], target: i0.ɵɵFactoryTarget.Component });
+OrderList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: OrderList, selector: "p-orderList", inputs: { header: "header", style: "style", styleClass: "styleClass", listStyle: "listStyle", responsive: "responsive", filterBy: "filterBy", filterPlaceholder: "filterPlaceholder", filterLocale: "filterLocale", metaKeySelection: "metaKeySelection", dragdrop: "dragdrop", controlsPosition: "controlsPosition", ariaFilterLabel: "ariaFilterLabel", filterMatchMode: "filterMatchMode", breakpoint: "breakpoint", trackBy: "trackBy", selection: "selection", value: "value" }, outputs: { selectionChange: "selectionChange", onReorder: "onReorder", onSelectionChange: "onSelectionChange", onFilterEvent: "onFilterEvent" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "listViewChild", first: true, predicate: ["listelement"], descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="{'p-orderlist p-component': true, 'p-orderlist-controls-left': controlsPosition === 'left',
+                    'p-orderlist-controls-right': controlsPosition === 'right'}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-orderlist-controls">
+                <button type="button" pButton pRipple icon="pi pi-angle-up" (click)="moveUp()"></button>
+                <button type="button" pButton pRipple icon="pi pi-angle-double-up" (click)="moveTop()"></button>
+                <button type="button" pButton pRipple icon="pi pi-angle-down" (click)="moveDown()"></button>
+                <button type="button" pButton pRipple icon="pi pi-angle-double-down" (click)="moveBottom()"></button>
+            </div>
+            <div class="p-orderlist-list-container">
+                <div class="p-orderlist-header" *ngIf="header || headerTemplate">
+                    <div class="p-orderlist-title" *ngIf="!headerTemplate">{{header}}</div>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                </div>
+                <div class="p-orderlist-filter-container" *ngIf="filterBy">
+                    <div class="p-orderlist-filter">
+                        <input type="text" role="textbox" (keyup)="onFilterKeyup($event)" class="p-orderlist-filter-input p-inputtext p-component" [attr.placeholder]="filterPlaceholder" [attr.aria-label]="ariaFilterLabel">
+                        <span class="p-orderlist-filter-icon pi pi-search"></span>
+                    </div>
+                </div>
+                <ul #listelement cdkDropList (cdkDropListDropped)="onDrop($event)" class="p-orderlist-list" [ngStyle]="listStyle">
+                    <ng-template ngFor [ngForTrackBy]="trackBy" let-item [ngForOf]="value" let-i="index" let-l="last">
+                        <li class="p-orderlist-item" tabindex="0" [ngClass]="{'p-highlight':isSelected(item)}" cdkDrag pRipple [cdkDragData]="item" [cdkDragDisabled]="!dragdrop"
+                            (click)="onItemClick($event,item,i)" (touchend)="onItemTouchEnd()" (keydown)="onItemKeydown($event,item,i)"
+                             *ngIf="isItemVisible(item)" role="option" [attr.aria-selected]="isSelected(item)">
+                            <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                        </li>
+                    </ng-template>
+                    <ng-container *ngIf="isEmpty() && (emptyMessageTemplate || emptyFilterMessageTemplate)">
+                        <li *ngIf="!filterValue || !emptyFilterMessageTemplate" class="p-orderlist-empty-message">
+                            <ng-container *ngTemplateOutlet="emptyMessageTemplate"></ng-container>
+                        </li>
+                        <li *ngIf="filterValue" class="p-orderlist-empty-message">
+                            <ng-container *ngTemplateOutlet="emptyFilterMessageTemplate"></ng-container>
+                        </li>
+                    </ng-container>
+                </ul>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-orderlist{display:flex}.p-orderlist-controls{display:flex;flex-direction:column;justify-content:center}.p-orderlist-list-container{flex:1 1 auto}.p-orderlist-list{list-style-type:none;margin:0;padding:0;overflow:auto;min-height:12rem}.p-orderlist-item{display:block;cursor:pointer;overflow:hidden;position:relative}.p-orderlist-item:not(.cdk-drag-disabled){cursor:move}.p-orderlist-item.cdk-drag-placeholder{opacity:0}.p-orderlist-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.p-orderlist.p-state-disabled .p-orderlist-item,.p-orderlist.p-state-disabled .p-button{cursor:default}.p-orderlist.p-state-disabled .p-orderlist-list{overflow:hidden}.p-orderlist-filter{position:relative}.p-orderlist-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-orderlist-filter-input{width:100%}.p-orderlist-controls-right .p-orderlist-controls{order:2}.p-orderlist-controls-right .p-orderlist-list-container{order:1}.p-orderlist-list.cdk-drop-list-dragging .p-orderlist-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i4.Ripple, selector: "[pRipple]" }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrderList, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-orderList', template: `
+        <div [ngClass]="{'p-orderlist p-component': true, 'p-orderlist-controls-left': controlsPosition === 'left',
+                    'p-orderlist-controls-right': controlsPosition === 'right'}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-orderlist-controls">
+                <button type="button" pButton pRipple icon="pi pi-angle-up" (click)="moveUp()"></button>
+                <button type="button" pButton pRipple icon="pi pi-angle-double-up" (click)="moveTop()"></button>
+                <button type="button" pButton pRipple icon="pi pi-angle-down" (click)="moveDown()"></button>
+                <button type="button" pButton pRipple icon="pi pi-angle-double-down" (click)="moveBottom()"></button>
+            </div>
+            <div class="p-orderlist-list-container">
+                <div class="p-orderlist-header" *ngIf="header || headerTemplate">
+                    <div class="p-orderlist-title" *ngIf="!headerTemplate">{{header}}</div>
+                    <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                </div>
+                <div class="p-orderlist-filter-container" *ngIf="filterBy">
+                    <div class="p-orderlist-filter">
+                        <input type="text" role="textbox" (keyup)="onFilterKeyup($event)" class="p-orderlist-filter-input p-inputtext p-component" [attr.placeholder]="filterPlaceholder" [attr.aria-label]="ariaFilterLabel">
+                        <span class="p-orderlist-filter-icon pi pi-search"></span>
+                    </div>
+                </div>
+                <ul #listelement cdkDropList (cdkDropListDropped)="onDrop($event)" class="p-orderlist-list" [ngStyle]="listStyle">
+                    <ng-template ngFor [ngForTrackBy]="trackBy" let-item [ngForOf]="value" let-i="index" let-l="last">
+                        <li class="p-orderlist-item" tabindex="0" [ngClass]="{'p-highlight':isSelected(item)}" cdkDrag pRipple [cdkDragData]="item" [cdkDragDisabled]="!dragdrop"
+                            (click)="onItemClick($event,item,i)" (touchend)="onItemTouchEnd()" (keydown)="onItemKeydown($event,item,i)"
+                             *ngIf="isItemVisible(item)" role="option" [attr.aria-selected]="isSelected(item)">
+                            <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                        </li>
+                    </ng-template>
+                    <ng-container *ngIf="isEmpty() && (emptyMessageTemplate || emptyFilterMessageTemplate)">
+                        <li *ngIf="!filterValue || !emptyFilterMessageTemplate" class="p-orderlist-empty-message">
+                            <ng-container *ngTemplateOutlet="emptyMessageTemplate"></ng-container>
+                        </li>
+                        <li *ngIf="filterValue" class="p-orderlist-empty-message">
+                            <ng-container *ngTemplateOutlet="emptyFilterMessageTemplate"></ng-container>
+                        </li>
+                    </ng-container>
+                </ul>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-orderlist{display:flex}.p-orderlist-controls{display:flex;flex-direction:column;justify-content:center}.p-orderlist-list-container{flex:1 1 auto}.p-orderlist-list{list-style-type:none;margin:0;padding:0;overflow:auto;min-height:12rem}.p-orderlist-item{display:block;cursor:pointer;overflow:hidden;position:relative}.p-orderlist-item:not(.cdk-drag-disabled){cursor:move}.p-orderlist-item.cdk-drag-placeholder{opacity:0}.p-orderlist-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.p-orderlist.p-state-disabled .p-orderlist-item,.p-orderlist.p-state-disabled .p-button{cursor:default}.p-orderlist.p-state-disabled .p-orderlist-list{overflow:hidden}.p-orderlist-filter{position:relative}.p-orderlist-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-orderlist-filter-input{width:100%}.p-orderlist-controls-right .p-orderlist-controls{order:2}.p-orderlist-controls-right .p-orderlist-list-container{order:1}.p-orderlist-list.cdk-drop-list-dragging .p-orderlist-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FilterService }]; }, propDecorators: { header: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], listStyle: [{
+                type: Input
+            }], responsive: [{
+                type: Input
+            }], filterBy: [{
+                type: Input
+            }], filterPlaceholder: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], metaKeySelection: [{
+                type: Input
+            }], dragdrop: [{
+                type: Input
+            }], controlsPosition: [{
+                type: Input
+            }], ariaFilterLabel: [{
+                type: Input
+            }], filterMatchMode: [{
+                type: Input
+            }], breakpoint: [{
+                type: Input
+            }], selectionChange: [{
+                type: Output
+            }], trackBy: [{
+                type: Input
+            }], onReorder: [{
+                type: Output
+            }], onSelectionChange: [{
+                type: Output
+            }], onFilterEvent: [{
+                type: Output
+            }], listViewChild: [{
+                type: ViewChild,
+                args: ['listelement']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], selection: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }] } });
+class OrderListModule {
+}
+OrderListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrderListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+OrderListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrderListModule, declarations: [OrderList], imports: [CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule], exports: [OrderList, SharedModule, DragDropModule] });
+OrderListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrderListModule, imports: [[CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule], SharedModule, DragDropModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrderListModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule],
+                    exports: [OrderList, SharedModule, DragDropModule],
+                    declarations: [OrderList]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { OrderList, OrderListModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-orderlist.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-orderlist.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-orderlist.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-orderlist.mjs","sources":["../../src/app/components/orderlist/orderlist.ts","../../src/app/components/orderlist/primeng-orderlist.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,AfterViewChecked,AfterContentInit,Input,Output,ContentChildren,QueryList,TemplateRef,EventEmitter,ViewChild,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ButtonModule} from 'primeng/button';\nimport {SharedModule,PrimeTemplate,FilterService} from 'primeng/api';\nimport {DomHandler} from 'primeng/dom';\nimport {ObjectUtils, UniqueComponentId} from 'primeng/utils';\nimport {RippleModule} from 'primeng/ripple';\nimport {CdkDragDrop, DragDropModule, moveItemInArray} from '@angular/cdk/drag-drop';\n\n@Component({\n    selector: 'p-orderList',\n    template: `\n        <div [ngClass]=\"{'p-orderlist p-component': true, 'p-orderlist-controls-left': controlsPosition === 'left',\n                    'p-orderlist-controls-right': controlsPosition === 'right'}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-orderlist-controls\">\n                <button type=\"button\" pButton pRipple icon=\"pi pi-angle-up\" (click)=\"moveUp()\"></button>\n                <button type=\"button\" pButton pRipple icon=\"pi pi-angle-double-up\" (click)=\"moveTop()\"></button>\n                <button type=\"button\" pButton pRipple icon=\"pi pi-angle-down\" (click)=\"moveDown()\"></button>\n                <button type=\"button\" pButton pRipple icon=\"pi pi-angle-double-down\" (click)=\"moveBottom()\"></button>\n            </div>\n            <div class=\"p-orderlist-list-container\">\n                <div class=\"p-orderlist-header\" *ngIf=\"header || headerTemplate\">\n                    <div class=\"p-orderlist-title\" *ngIf=\"!headerTemplate\">{{header}}</div>\n                    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                </div>\n                <div class=\"p-orderlist-filter-container\" *ngIf=\"filterBy\">\n                    <div class=\"p-orderlist-filter\">\n                        <input type=\"text\" role=\"textbox\" (keyup)=\"onFilterKeyup($event)\" class=\"p-orderlist-filter-input p-inputtext p-component\" [attr.placeholder]=\"filterPlaceholder\" [attr.aria-label]=\"ariaFilterLabel\">\n                        <span class=\"p-orderlist-filter-icon pi pi-search\"></span>\n                    </div>\n                </div>\n                <ul #listelement cdkDropList (cdkDropListDropped)=\"onDrop($event)\" class=\"p-orderlist-list\" [ngStyle]=\"listStyle\">\n                    <ng-template ngFor [ngForTrackBy]=\"trackBy\" let-item [ngForOf]=\"value\" let-i=\"index\" let-l=\"last\">\n                        <li class=\"p-orderlist-item\" tabindex=\"0\" [ngClass]=\"{'p-highlight':isSelected(item)}\" cdkDrag pRipple [cdkDragData]=\"item\" [cdkDragDisabled]=\"!dragdrop\"\n                            (click)=\"onItemClick($event,item,i)\" (touchend)=\"onItemTouchEnd()\" (keydown)=\"onItemKeydown($event,item,i)\"\n                             *ngIf=\"isItemVisible(item)\" role=\"option\" [attr.aria-selected]=\"isSelected(item)\">\n                            <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, index: i}\"></ng-container>\n                        </li>\n                    </ng-template>\n                    <ng-container *ngIf=\"isEmpty() && (emptyMessageTemplate || emptyFilterMessageTemplate)\">\n                        <li *ngIf=\"!filterValue || !emptyFilterMessageTemplate\" class=\"p-orderlist-empty-message\">\n                            <ng-container *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n                        </li>\n                        <li *ngIf=\"filterValue\" class=\"p-orderlist-empty-message\">\n                            <ng-container *ngTemplateOutlet=\"emptyFilterMessageTemplate\"></ng-container>\n                        </li>\n                    </ng-container>\n                </ul>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./orderlist.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class OrderList implements AfterViewChecked,AfterContentInit {\n\n    @Input() header: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() listStyle: any;\n\n    @Input() responsive: boolean;\n\n    @Input() filterBy: string;\n\n    @Input() filterPlaceholder: string;\n\n    @Input() filterLocale: string;\n\n    @Input() metaKeySelection: boolean = true;\n\n    @Input() dragdrop: boolean = false;\n\n    @Input() controlsPosition: string = 'left';\n\n    @Input() ariaFilterLabel: string;\n\n    @Input() filterMatchMode: string = \"contains\";\n\n    @Input() breakpoint: string = \"960px\";\n\n    @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n    @Input() trackBy: Function = (index: number, item: any) => item;\n\n    @Output() onReorder: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSelectionChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFilterEvent: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('listelement') listViewChild: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    public itemTemplate: TemplateRef<any>;\n\n    public headerTemplate: TemplateRef<any>;\n\n    public emptyMessageTemplate: TemplateRef<any>;\n\n    public emptyFilterMessageTemplate: TemplateRef<any>;\n\n    _selection: any[];\n\n    movedUp: boolean;\n\n    movedDown: boolean;\n\n    itemTouched: boolean;\n\n    styleElement: any;\n\n    id: string = UniqueComponentId();\n\n    public filterValue: string;\n\n    public visibleOptions: any[];\n\n    public _value: any[];\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef, public filterService: FilterService) {}\n\n    get selection(): any[] {\n        return this._selection;\n    }\n\n    @Input() set selection(val:any[]) {\n        this._selection = val;\n    }\n\n    ngOnInit() {\n        if (this.responsive) {\n            this.createStyle();\n        }\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyMessageTemplate = item.template;\n                break;\n\n                case 'emptyfilter':\n                    this.emptyFilterMessageTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngAfterViewChecked() {\n        if (this.movedUp||this.movedDown) {\n            let listItems = DomHandler.find(this.listViewChild.nativeElement, 'li.p-highlight');\n            let listItem;\n\n            if (listItems.length > 0) {\n                if (this.movedUp)\n                    listItem = listItems[0];\n                else\n                    listItem = listItems[listItems.length - 1];\n\n                DomHandler.scrollInView(this.listViewChild.nativeElement, listItem);\n            }\n            this.movedUp = false;\n            this.movedDown = false;\n        }\n    }\n\n    get value(): any[] {\n        return this._value;\n    }\n\n    @Input() set value(val:any[]) {\n        this._value = val;\n        if (this.filterValue) {\n            this.filter();\n        }\n    }\n\n    onItemClick(event, item, index) {\n        this.itemTouched = false;\n        let selectedIndex = ObjectUtils.findIndexInList(item, this.selection);\n        let selected = (selectedIndex != -1);\n        let metaSelection = this.itemTouched ? false : this.metaKeySelection;\n\n        if (metaSelection) {\n            let metaKey = (event.metaKey||event.ctrlKey||event.shiftKey);\n\n            if (selected && metaKey) {\n                this._selection = this._selection.filter((val, index) => index !== selectedIndex);\n            }\n            else {\n                this._selection = (metaKey) ? this._selection ? [...this._selection] : [] : [];\n                ObjectUtils.insertIntoOrderedArray(item, index, this._selection, this.value);\n            }\n        }\n        else {\n            if (selected) {\n                this._selection = this._selection.filter((val, index) => index !== selectedIndex);\n            }\n            else {\n                this._selection = this._selection ? [...this._selection] : [];\n                ObjectUtils.insertIntoOrderedArray(item, index, this._selection, this.value);\n            }\n        }\n\n        //binding\n        this.selectionChange.emit(this._selection);\n\n        //event\n        this.onSelectionChange.emit({originalEvent:event, value: this._selection});\n    }\n\n    onFilterKeyup(event) {\n        this.filterValue = event.target.value.trim().toLocaleLowerCase(this.filterLocale);\n        this.filter();\n\n        this.onFilterEvent.emit({\n            originalEvent: event,\n            value: this.visibleOptions\n        });\n    }\n\n    filter() {\n        let searchFields: string[] = this.filterBy.split(',');\n        this.visibleOptions = this.filterService.filter(this.value, searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);\n    }\n\n    isItemVisible(item: any): boolean {\n        if (this.filterValue && this.filterValue.trim().length) {\n            for (let i = 0; i < this.visibleOptions.length; i++) {\n                if (item == this.visibleOptions[i]) {\n                    return true;\n                }\n            }\n        }\n        else {\n            return true;\n        }\n    }\n\n    onItemTouchEnd() {\n        this.itemTouched = true;\n    }\n\n    isSelected(item: any) {\n        return ObjectUtils.findIndexInList(item, this.selection) != -1;\n    }\n\n    isEmpty() {\n        return this.filterValue ? (!this.visibleOptions || this.visibleOptions.length === 0) : (!this.value || this.value.length === 0);\n    }\n\n    moveUp() {\n        if (this.selection) {\n            for (let i = 0; i < this.selection.length; i++) {\n                let selectedItem = this.selection[i];\n                let selectedItemIndex: number = ObjectUtils.findIndexInList(selectedItem, this.value);\n\n                if (selectedItemIndex != 0) {\n                    let movedItem = this.value[selectedItemIndex];\n                    let temp = this.value[selectedItemIndex-1];\n                    this.value[selectedItemIndex-1] = movedItem;\n                    this.value[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n\n            if (this.dragdrop && this.filterValue)\n                this.filter();\n\n            this.movedUp = true;\n            this.onReorder.emit(this.selection);\n        }\n    }\n\n    moveTop() {\n        if (this.selection) {\n            for (let i = this.selection.length - 1; i >= 0; i--) {\n                let selectedItem = this.selection[i];\n                let selectedItemIndex: number = ObjectUtils.findIndexInList(selectedItem, this.value);\n\n                if (selectedItemIndex != 0) {\n                    let movedItem = this.value.splice(selectedItemIndex,1)[0];\n                    this.value.unshift(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n\n            if (this.dragdrop && this.filterValue)\n                this.filter();\n\n            this.onReorder.emit(this.selection);\n            this.listViewChild.nativeElement.scrollTop = 0;\n        }\n    }\n\n    moveDown() {\n        if (this.selection) {\n            for (let i = this.selection.length - 1; i >= 0; i--) {\n                let selectedItem = this.selection[i];\n                let selectedItemIndex: number = ObjectUtils.findIndexInList(selectedItem, this.value);\n\n                if (selectedItemIndex != (this.value.length - 1)) {\n                    let movedItem = this.value[selectedItemIndex];\n                    let temp = this.value[selectedItemIndex+1];\n                    this.value[selectedItemIndex+1] = movedItem;\n                    this.value[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n\n            if (this.dragdrop && this.filterValue)\n                this.filter();\n\n            this.movedDown = true;\n            this.onReorder.emit(this.selection);\n        }\n    }\n\n    moveBottom() {\n        if (this.selection) {\n            for (let i = 0; i < this.selection.length; i++) {\n                let selectedItem = this.selection[i];\n                let selectedItemIndex: number = ObjectUtils.findIndexInList(selectedItem, this.value);\n\n                if (selectedItemIndex != (this.value.length - 1)) {\n                    let movedItem = this.value.splice(selectedItemIndex,1)[0];\n                    this.value.push(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n\n            if (this.dragdrop && this.filterValue)\n                this.filter();\n\n            this.onReorder.emit(this.selection);\n            this.listViewChild.nativeElement.scrollTop = this.listViewChild.nativeElement.scrollHeight;\n        }\n    }\n\n    onDrop(event: CdkDragDrop<string[]>) {\n        let previousIndex =  event.previousIndex;\n        let currentIndex = event.currentIndex;\n\n        if (previousIndex !== currentIndex) {\n\n            if (this.visibleOptions) {\n                if (this.filterValue) {\n                    previousIndex =  ObjectUtils.findIndexInList(event.item.data, this.value);\n                    currentIndex = ObjectUtils.findIndexInList(this.visibleOptions[currentIndex], this.value);\n                }\n\n                moveItemInArray(this.visibleOptions, event.previousIndex, event.currentIndex);\n            }\n\n            moveItemInArray(this.value, previousIndex, currentIndex);\n            this.onReorder.emit([event.item.data]);\n        }\n    }\n\n    onItemKeydown(event: KeyboardEvent, item, index: Number) {\n        let listItem = <HTMLLIElement> event.currentTarget;\n\n        switch(event.which) {\n            //down\n            case 40:\n                var nextItem = this.findNextItem(listItem);\n                if (nextItem) {\n                    nextItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //up\n            case 38:\n                var prevItem = this.findPrevItem(listItem);\n                if (prevItem) {\n                    prevItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //enter\n            case 13:\n                this.onItemClick(event, item, index);\n                event.preventDefault();\n            break;\n        }\n    }\n\n    findNextItem(item) {\n        let nextItem = item.nextElementSibling;\n\n        if (nextItem)\n            return !DomHandler.hasClass(nextItem, 'p-orderlist-item') || DomHandler.isHidden(nextItem) ? this.findNextItem(nextItem) : nextItem;\n        else\n            return null;\n    }\n\n    findPrevItem(item) {\n        let prevItem = item.previousElementSibling;\n\n        if (prevItem)\n            return !DomHandler.hasClass(prevItem, 'p-orderlist-item') || DomHandler.isHidden(prevItem) ? this.findPrevItem(prevItem) : prevItem;\n        else\n            return null;\n    }\n\n    createStyle() {\n        if (!this.styleElement) {\n            this.el.nativeElement.children[0].setAttribute(this.id, '');\n            this.styleElement = document.createElement('style');\n            this.styleElement.type = 'text/css';\n            document.head.appendChild(this.styleElement);\n\n            let innerHTML = `\n                @media screen and (max-width: ${this.breakpoint}) {\n                    .p-orderlist[${this.id}] {\n                        flex-direction: column;\n                    }\n\n                    .p-orderlist[${this.id}] .p-orderlist-controls {\n                        padding: var(--content-padding);\n                        flex-direction: row;\n                    }\n\n                    .p-orderlist[${this.id}] .p-orderlist-controls .p-button {\n                        margin-right: var(--inline-spacing);\n                        margin-bottom: 0;\n                    }\n\n                    .p-orderlist[${this.id}] .p-orderlist-controls .p-button:last-child {\n                        margin-right: 0;\n                    }\n                }\n            `;\n\n            this.styleElement.innerHTML = innerHTML;\n        }\n    }\n\n    destroyStyle() {\n        if (this.styleElement) {\n            document.head.removeChild(this.styleElement);\n            this.styleElement = null;``\n        }\n    }\n\n    ngOnDestroy() {\n        this.destroyStyle();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule,SharedModule,RippleModule,DragDropModule],\n    exports: [OrderList,SharedModule,DragDropModule],\n    declarations: [OrderList]\n})\nexport class OrderListModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-organizationchart.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-organizationchart.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-organizationchart.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,321 @@
+import * as i0 from '@angular/core';
+import { forwardRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Input, EventEmitter, Output, ContentChildren, NgModule } from '@angular/core';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { Subject } from 'rxjs';
+
+class OrganizationChartNode {
+    constructor(chart, cd) {
+        this.cd = cd;
+        this.chart = chart;
+        this.subscription = this.chart.selectionSource$.subscribe(() => {
+            this.cd.markForCheck();
+        });
+    }
+    get leaf() {
+        return this.node.leaf == false ? false : !(this.node.children && this.node.children.length);
+    }
+    get colspan() {
+        return (this.node.children && this.node.children.length) ? this.node.children.length * 2 : null;
+    }
+    onNodeClick(event, node) {
+        this.chart.onNodeClick(event, node);
+    }
+    toggleNode(event, node) {
+        node.expanded = !node.expanded;
+        if (node.expanded)
+            this.chart.onNodeExpand.emit({ originalEvent: event, node: this.node });
+        else
+            this.chart.onNodeCollapse.emit({ originalEvent: event, node: this.node });
+        event.preventDefault();
+    }
+    isSelected() {
+        return this.chart.isSelected(this.node);
+    }
+    ngOnDestroy() {
+        this.subscription.unsubscribe();
+    }
+}
+OrganizationChartNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrganizationChartNode, deps: [{ token: forwardRef(() => OrganizationChart) }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+OrganizationChartNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: OrganizationChartNode, selector: "[pOrganizationChartNode]", inputs: { node: "node", root: "root", first: "first", last: "last" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <tbody *ngIf="node">
+            <tr>
+                <td [attr.colspan]="colspan">
+                    <div [class]="node.styleClass" [ngClass]="{'p-organizationchart-node-content': true, 'p-organizationchart-selectable-node': chart.selectionMode && node.selectable !== false,'p-highlight':isSelected()}"
+                        (click)="onNodeClick($event,node)">
+                        <div *ngIf="!chart.getTemplateForNode(node)">{{node.label}}</div>
+                        <div *ngIf="chart.getTemplateForNode(node)">
+                            <ng-container *ngTemplateOutlet="chart.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
+                        </div>
+                        <a *ngIf="!leaf" tabindex="0" class="p-node-toggler" (click)="toggleNode($event, node)" (keydown.enter)="toggleNode($event, node)">
+                            <i class="p-node-toggler-icon pi" [ngClass]="{'pi-chevron-down': node.expanded, 'pi-chevron-up': !node.expanded}"></i>
+                        </a>
+                    </div>
+                </td>
+            </tr>
+            <tr [ngClass]="!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'" class="p-organizationchart-lines" [@childState]="'in'">
+                <td [attr.colspan]="colspan">
+                    <div class="p-organizationchart-line-down"></div>
+                </td>
+            </tr>
+            <tr [ngClass]="!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'" class="p-organizationchart-lines" [@childState]="'in'">
+                <ng-container *ngIf="node.children && node.children.length === 1">
+                    <td [attr.colspan]="colspan">
+                        <div class="p-organizationchart-line-down"></div>
+                    </td>
+                </ng-container>
+                <ng-container *ngIf="node.children && node.children.length > 1">
+                    <ng-template ngFor let-child [ngForOf]="node.children" let-first="first" let-last="last">
+                        <td class="p-organizationchart-line-left" [ngClass]="{'p-organizationchart-line-top':!first}">&nbsp;</td>
+                        <td class="p-organizationchart-line-right" [ngClass]="{'p-organizationchart-line-top':!last}">&nbsp;</td>
+                    </ng-template>
+                </ng-container>
+            </tr>
+            <tr [ngClass]="!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'" class="p-organizationchart-nodes" [@childState]="'in'">
+                <td *ngFor="let child of node.children" colspan="2">
+                    <table class="p-organizationchart-table" pOrganizationChartNode [node]="child"></table>
+                </td>
+            </tr>
+        </tbody>
+    `, isInline: true, styles: [".p-organizationchart-table{border-spacing:0;border-collapse:separate;margin:0 auto}.p-organizationchart-table>tbody>tr>td{text-align:center;vertical-align:top;padding:0 .75rem}.p-organizationchart-node-content{display:inline-block;position:relative}.p-organizationchart-node-content .p-node-toggler{position:absolute;bottom:-.75rem;margin-left:-.75rem;z-index:2;left:50%;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;width:1.5rem;height:1.5rem}.p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{position:relative;top:.25rem}.p-organizationchart-line-down{margin:0 auto;height:20px;width:1px}.p-organizationchart-line-right,.p-organizationchart-line-left{border-radius:0}.p-organizationchart-selectable-node{cursor:pointer}.p-organizationchart .p-organizationchart-node-hidden{display:none}.p-organizationchart-preservespace .p-organizationchart-node-hidden{visibility:hidden;display:inherit}\n"], components: [{ type: OrganizationChartNode, selector: "[pOrganizationChartNode]", inputs: ["node", "root", "first", "last"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [
+        trigger('childState', [
+            state('in', style({ opacity: 1 })),
+            transition('void => *', [
+                style({ opacity: 0 }),
+                animate(150)
+            ]),
+            transition('* => void', [
+                animate(150, style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrganizationChartNode, decorators: [{
+            type: Component,
+            args: [{ selector: '[pOrganizationChartNode]', template: `
+        <tbody *ngIf="node">
+            <tr>
+                <td [attr.colspan]="colspan">
+                    <div [class]="node.styleClass" [ngClass]="{'p-organizationchart-node-content': true, 'p-organizationchart-selectable-node': chart.selectionMode && node.selectable !== false,'p-highlight':isSelected()}"
+                        (click)="onNodeClick($event,node)">
+                        <div *ngIf="!chart.getTemplateForNode(node)">{{node.label}}</div>
+                        <div *ngIf="chart.getTemplateForNode(node)">
+                            <ng-container *ngTemplateOutlet="chart.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
+                        </div>
+                        <a *ngIf="!leaf" tabindex="0" class="p-node-toggler" (click)="toggleNode($event, node)" (keydown.enter)="toggleNode($event, node)">
+                            <i class="p-node-toggler-icon pi" [ngClass]="{'pi-chevron-down': node.expanded, 'pi-chevron-up': !node.expanded}"></i>
+                        </a>
+                    </div>
+                </td>
+            </tr>
+            <tr [ngClass]="!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'" class="p-organizationchart-lines" [@childState]="'in'">
+                <td [attr.colspan]="colspan">
+                    <div class="p-organizationchart-line-down"></div>
+                </td>
+            </tr>
+            <tr [ngClass]="!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'" class="p-organizationchart-lines" [@childState]="'in'">
+                <ng-container *ngIf="node.children && node.children.length === 1">
+                    <td [attr.colspan]="colspan">
+                        <div class="p-organizationchart-line-down"></div>
+                    </td>
+                </ng-container>
+                <ng-container *ngIf="node.children && node.children.length > 1">
+                    <ng-template ngFor let-child [ngForOf]="node.children" let-first="first" let-last="last">
+                        <td class="p-organizationchart-line-left" [ngClass]="{'p-organizationchart-line-top':!first}">&nbsp;</td>
+                        <td class="p-organizationchart-line-right" [ngClass]="{'p-organizationchart-line-top':!last}">&nbsp;</td>
+                    </ng-template>
+                </ng-container>
+            </tr>
+            <tr [ngClass]="!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'" class="p-organizationchart-nodes" [@childState]="'in'">
+                <td *ngFor="let child of node.children" colspan="2">
+                    <table class="p-organizationchart-table" pOrganizationChartNode [node]="child"></table>
+                </td>
+            </tr>
+        </tbody>
+    `, animations: [
+                        trigger('childState', [
+                            state('in', style({ opacity: 1 })),
+                            transition('void => *', [
+                                style({ opacity: 0 }),
+                                animate(150)
+                            ]),
+                            transition('* => void', [
+                                animate(150, style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-organizationchart-table{border-spacing:0;border-collapse:separate;margin:0 auto}.p-organizationchart-table>tbody>tr>td{text-align:center;vertical-align:top;padding:0 .75rem}.p-organizationchart-node-content{display:inline-block;position:relative}.p-organizationchart-node-content .p-node-toggler{position:absolute;bottom:-.75rem;margin-left:-.75rem;z-index:2;left:50%;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;width:1.5rem;height:1.5rem}.p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{position:relative;top:.25rem}.p-organizationchart-line-down{margin:0 auto;height:20px;width:1px}.p-organizationchart-line-right,.p-organizationchart-line-left{border-radius:0}.p-organizationchart-selectable-node{cursor:pointer}.p-organizationchart .p-organizationchart-node-hidden{display:none}.p-organizationchart-preservespace .p-organizationchart-node-hidden{visibility:hidden;display:inherit}\n"] }]
+        }], ctorParameters: function () { return [{ type: undefined, decorators: [{
+                    type: Inject,
+                    args: [forwardRef(() => OrganizationChart)]
+                }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { node: [{
+                type: Input
+            }], root: [{
+                type: Input
+            }], first: [{
+                type: Input
+            }], last: [{
+                type: Input
+            }] } });
+class OrganizationChart {
+    constructor(el, cd) {
+        this.el = el;
+        this.cd = cd;
+        this.preserveSpace = true;
+        this.selectionChange = new EventEmitter();
+        this.onNodeSelect = new EventEmitter();
+        this.onNodeUnselect = new EventEmitter();
+        this.onNodeExpand = new EventEmitter();
+        this.onNodeCollapse = new EventEmitter();
+        this.selectionSource = new Subject();
+        this.selectionSource$ = this.selectionSource.asObservable();
+    }
+    get selection() {
+        return this._selection;
+    }
+    set selection(val) {
+        this._selection = val;
+        if (this.initialized)
+            this.selectionSource.next(null);
+    }
+    get root() {
+        return this.value && this.value.length ? this.value[0] : null;
+    }
+    ngAfterContentInit() {
+        if (this.templates.length) {
+            this.templateMap = {};
+        }
+        this.templates.forEach((item) => {
+            this.templateMap[item.getType()] = item.template;
+        });
+        this.initialized = true;
+    }
+    getTemplateForNode(node) {
+        if (this.templateMap)
+            return node.type ? this.templateMap[node.type] : this.templateMap['default'];
+        else
+            return null;
+    }
+    onNodeClick(event, node) {
+        let eventTarget = event.target;
+        if (eventTarget.className && (eventTarget.className.indexOf('p-node-toggler') !== -1 || eventTarget.className.indexOf('p-node-toggler-icon') !== -1)) {
+            return;
+        }
+        else if (this.selectionMode) {
+            if (node.selectable === false) {
+                return;
+            }
+            let index = this.findIndexInSelection(node);
+            let selected = (index >= 0);
+            if (this.selectionMode === 'single') {
+                if (selected) {
+                    this.selection = null;
+                    this.onNodeUnselect.emit({ originalEvent: event, node: node });
+                }
+                else {
+                    this.selection = node;
+                    this.onNodeSelect.emit({ originalEvent: event, node: node });
+                }
+            }
+            else if (this.selectionMode === 'multiple') {
+                if (selected) {
+                    this.selection = this.selection.filter((val, i) => i != index);
+                    this.onNodeUnselect.emit({ originalEvent: event, node: node });
+                }
+                else {
+                    this.selection = [...this.selection || [], node];
+                    this.onNodeSelect.emit({ originalEvent: event, node: node });
+                }
+            }
+            this.selectionChange.emit(this.selection);
+            this.selectionSource.next(null);
+        }
+    }
+    findIndexInSelection(node) {
+        let index = -1;
+        if (this.selectionMode && this.selection) {
+            if (this.selectionMode === 'single') {
+                index = (this.selection == node) ? 0 : -1;
+            }
+            else if (this.selectionMode === 'multiple') {
+                for (let i = 0; i < this.selection.length; i++) {
+                    if (this.selection[i] == node) {
+                        index = i;
+                        break;
+                    }
+                }
+            }
+        }
+        return index;
+    }
+    isSelected(node) {
+        return this.findIndexInSelection(node) != -1;
+    }
+}
+OrganizationChart.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrganizationChart, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+OrganizationChart.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: OrganizationChart, selector: "p-organizationChart", inputs: { value: "value", style: "style", styleClass: "styleClass", selectionMode: "selectionMode", preserveSpace: "preserveSpace", selection: "selection" }, outputs: { selectionChange: "selectionChange", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onNodeExpand: "onNodeExpand", onNodeCollapse: "onNodeCollapse" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [ngStyle]="style" [class]="styleClass" [ngClass]="{'p-organizationchart p-component': true, 'p-organizationchart-preservespace': preserveSpace}">
+            <table class="p-organizationchart-table" pOrganizationChartNode [node]="root" *ngIf="root"></table>
+        </div>
+    `, isInline: true, components: [{ type: OrganizationChartNode, selector: "[pOrganizationChartNode]", inputs: ["node", "root", "first", "last"] }], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrganizationChart, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-organizationChart',
+                    template: `
+        <div [ngStyle]="style" [class]="styleClass" [ngClass]="{'p-organizationchart p-component': true, 'p-organizationchart-preservespace': preserveSpace}">
+            <table class="p-organizationchart-table" pOrganizationChartNode [node]="root" *ngIf="root"></table>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { value: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], selectionMode: [{
+                type: Input
+            }], preserveSpace: [{
+                type: Input
+            }], selection: [{
+                type: Input
+            }], selectionChange: [{
+                type: Output
+            }], onNodeSelect: [{
+                type: Output
+            }], onNodeUnselect: [{
+                type: Output
+            }], onNodeExpand: [{
+                type: Output
+            }], onNodeCollapse: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class OrganizationChartModule {
+}
+OrganizationChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrganizationChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+OrganizationChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrganizationChartModule, declarations: [OrganizationChart, OrganizationChartNode], imports: [CommonModule], exports: [OrganizationChart, SharedModule] });
+OrganizationChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrganizationChartModule, imports: [[CommonModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OrganizationChartModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [OrganizationChart, SharedModule],
+                    declarations: [OrganizationChart, OrganizationChartNode]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { OrganizationChart, OrganizationChartModule, OrganizationChartNode };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-organizationchart.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-organizationchart.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-organizationchart.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-organizationchart.mjs","sources":["../../src/app/components/organizationchart/organizationchart.ts","../../src/app/components/organizationchart/primeng-organizationchart.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,Input,Output,AfterContentInit,EventEmitter,TemplateRef,\n        Inject,forwardRef,ContentChildren,QueryList,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, OnDestroy} from '@angular/core';\nimport {trigger,state,style,transition,animate} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {SharedModule} from 'primeng/api';\nimport {TreeNode} from 'primeng/api';\nimport {PrimeTemplate} from 'primeng/api';\nimport { Subject, Subscription } from 'rxjs';\n\n@Component({\n    selector: '[pOrganizationChartNode]',\n    template: `\n        <tbody *ngIf=\"node\">\n            <tr>\n                <td [attr.colspan]=\"colspan\">\n                    <div [class]=\"node.styleClass\" [ngClass]=\"{'p-organizationchart-node-content': true, 'p-organizationchart-selectable-node': chart.selectionMode && node.selectable !== false,'p-highlight':isSelected()}\"\n                        (click)=\"onNodeClick($event,node)\">\n                        <div *ngIf=\"!chart.getTemplateForNode(node)\">{{node.label}}</div>\n                        <div *ngIf=\"chart.getTemplateForNode(node)\">\n                            <ng-container *ngTemplateOutlet=\"chart.getTemplateForNode(node); context: {$implicit: node}\"></ng-container>\n                        </div>\n                        <a *ngIf=\"!leaf\" tabindex=\"0\" class=\"p-node-toggler\" (click)=\"toggleNode($event, node)\" (keydown.enter)=\"toggleNode($event, node)\">\n                            <i class=\"p-node-toggler-icon pi\" [ngClass]=\"{'pi-chevron-down': node.expanded, 'pi-chevron-up': !node.expanded}\"></i>\n                        </a>\n                    </div>\n                </td>\n            </tr>\n            <tr [ngClass]=\"!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'\" class=\"p-organizationchart-lines\" [@childState]=\"'in'\">\n                <td [attr.colspan]=\"colspan\">\n                    <div class=\"p-organizationchart-line-down\"></div>\n                </td>\n            </tr>\n            <tr [ngClass]=\"!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'\" class=\"p-organizationchart-lines\" [@childState]=\"'in'\">\n                <ng-container *ngIf=\"node.children && node.children.length === 1\">\n                    <td [attr.colspan]=\"colspan\">\n                        <div class=\"p-organizationchart-line-down\"></div>\n                    </td>\n                </ng-container>\n                <ng-container *ngIf=\"node.children && node.children.length > 1\">\n                    <ng-template ngFor let-child [ngForOf]=\"node.children\" let-first=\"first\" let-last=\"last\">\n                        <td class=\"p-organizationchart-line-left\" [ngClass]=\"{'p-organizationchart-line-top':!first}\">&nbsp;</td>\n                        <td class=\"p-organizationchart-line-right\" [ngClass]=\"{'p-organizationchart-line-top':!last}\">&nbsp;</td>\n                    </ng-template>\n                </ng-container>\n            </tr>\n            <tr [ngClass]=\"!leaf&&node.expanded ? 'p-organizationchart-node-visible' : 'p-organizationchart-node-hidden'\" class=\"p-organizationchart-nodes\" [@childState]=\"'in'\">\n                <td *ngFor=\"let child of node.children\" colspan=\"2\">\n                    <table class=\"p-organizationchart-table\" pOrganizationChartNode [node]=\"child\"></table>\n                </td>\n            </tr>\n        </tbody>\n    `,\n    animations: [\n        trigger('childState', [\n            state('in', style({opacity: 1})),\n           transition('void => *', [\n             style({opacity: 0}),\n             animate(150)\n           ]),\n           transition('* => void', [\n             animate(150, style({opacity:0}))\n           ])\n        ])\n    ],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styleUrls: ['./organizationchart.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class OrganizationChartNode implements OnDestroy{\n\n    @Input() node: TreeNode;\n\n    @Input() root: boolean;\n\n    @Input() first: boolean;\n\n    @Input() last: boolean;\n\n    chart: OrganizationChart;\n\n    subscription: Subscription;\n\n    constructor(@Inject(forwardRef(() => OrganizationChart)) chart, public cd: ChangeDetectorRef) {\n        this.chart = chart as OrganizationChart;\n        this.subscription = this.chart.selectionSource$.subscribe(() =>{\n            this.cd.markForCheck();\n        })\n    }\n\n    get leaf(): boolean {\n        return this.node.leaf == false ? false : !(this.node.children&&this.node.children.length);\n    }\n\n    get colspan() {\n        return (this.node.children && this.node.children.length) ? this.node.children.length * 2: null;\n    }\n\n    onNodeClick(event: Event, node: TreeNode) {\n        this.chart.onNodeClick(event, node)\n    }\n\n    toggleNode(event: Event, node: TreeNode) {\n        node.expanded = !node.expanded;\n        if (node.expanded)\n            this.chart.onNodeExpand.emit({originalEvent: event, node: this.node});\n        else\n            this.chart.onNodeCollapse.emit({originalEvent: event, node: this.node});\n\n        event.preventDefault();\n    }\n\n    isSelected() {\n        return this.chart.isSelected(this.node);\n    }\n\n    ngOnDestroy() {\n        this.subscription.unsubscribe();\n    }\n}\n\n@Component({\n    selector: 'p-organizationChart',\n    template: `\n        <div [ngStyle]=\"style\" [class]=\"styleClass\" [ngClass]=\"{'p-organizationchart p-component': true, 'p-organizationchart-preservespace': preserveSpace}\">\n            <table class=\"p-organizationchart-table\" pOrganizationChartNode [node]=\"root\" *ngIf=\"root\"></table>\n        </div>\n    `,\n   changeDetection: ChangeDetectionStrategy.OnPush,\n   host: {\n    'class': 'p-element'\n}\n})\nexport class OrganizationChart implements AfterContentInit {\n\n    @Input() value: TreeNode[];\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() selectionMode: string;\n\n    @Input() preserveSpace: boolean = true;\n\n    @Input()  get selection(): any {\n        return this._selection;\n    }\n\n    set selection(val:any) {\n        this._selection = val;\n\n        if (this.initialized)\n            this.selectionSource.next(null);\n    }\n\n    @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeUnselect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeExpand: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeCollapse: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    public templateMap: any;\n\n    private selectionSource = new Subject<any>();\n\n    _selection: any;\n\n    initialized: boolean;\n\n    selectionSource$ = this.selectionSource.asObservable();\n\n    constructor(public el: ElementRef, public cd:ChangeDetectorRef) {}\n\n    get root(): TreeNode {\n        return this.value && this.value.length ? this.value[0] : null;\n    }\n\n    ngAfterContentInit() {\n        if (this.templates.length) {\n            this.templateMap = {};\n        }\n\n        this.templates.forEach((item) => {\n            this.templateMap[item.getType()] = item.template;\n        });\n\n        this.initialized = true;\n    }\n\n    getTemplateForNode(node: TreeNode): TemplateRef<any> {\n        if (this.templateMap)\n            return node.type ? this.templateMap[node.type] : this.templateMap['default'];\n        else\n            return null;\n    }\n\n    onNodeClick(event: Event, node: TreeNode) {\n        let eventTarget = (<Element> event.target);\n\n        if (eventTarget.className && (eventTarget.className.indexOf('p-node-toggler') !== -1 || eventTarget.className.indexOf('p-node-toggler-icon') !== -1)) {\n            return;\n        }\n        else if (this.selectionMode) {\n            if (node.selectable === false) {\n                return;\n            }\n\n            let index = this.findIndexInSelection(node);\n            let selected = (index >= 0);\n\n            if (this.selectionMode === 'single') {\n                if (selected) {\n                    this.selection = null;\n                    this.onNodeUnselect.emit({originalEvent: event, node: node});\n                }\n                else {\n                    this.selection = node;\n                    this.onNodeSelect.emit({originalEvent: event, node: node});\n                }\n            }\n            else if (this.selectionMode === 'multiple') {\n                if (selected) {\n                    this.selection = this.selection.filter((val,i) => i!=index);\n                    this.onNodeUnselect.emit({originalEvent: event, node: node});\n                }\n                else {\n                    this.selection = [...this.selection||[],node];\n                    this.onNodeSelect.emit({originalEvent: event, node: node});\n                }\n            }\n\n            this.selectionChange.emit(this.selection);\n            this.selectionSource.next(null);\n        }\n    }\n\n    findIndexInSelection(node: TreeNode) {\n        let index: number = -1;\n\n        if (this.selectionMode && this.selection) {\n            if (this.selectionMode === 'single') {\n                index = (this.selection == node) ? 0 : - 1;\n            }\n            else if (this.selectionMode === 'multiple') {\n                for(let i = 0; i  < this.selection.length; i++) {\n                    if (this.selection[i] == node) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n\n        return index;\n    }\n\n    isSelected(node: TreeNode) {\n        return this.findIndexInSelection(node) != -1;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [OrganizationChart,SharedModule],\n    declarations: [OrganizationChart,OrganizationChartNode]\n})\nexport class OrganizationChartModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-overlaypanel.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-overlaypanel.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-overlaypanel.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,356 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ContentChildren, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+import { ZIndexUtils } from 'primeng/utils';
+
+class OverlayPanel {
+    constructor(el, renderer, cd, zone, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.zone = zone;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.dismissable = true;
+        this.appendTo = 'body';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.focusOnShow = true;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.overlayVisible = false;
+        this.render = false;
+        this.selfClick = false;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+            this.cd.markForCheck();
+        });
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener && this.dismissable) {
+            this.zone.runOutsideAngular(() => {
+                let documentEvent = DomHandler.isIOS() ? 'touchstart' : 'click';
+                const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+                this.documentClickListener = this.renderer.listen(documentTarget, documentEvent, (event) => {
+                    if (!this.container.contains(event.target) && this.target !== event.target && !this.target.contains(event.target) && !this.selfClick) {
+                        this.zone.run(() => {
+                            this.hide();
+                        });
+                    }
+                    this.selfClick = false;
+                    this.cd.markForCheck();
+                });
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+            this.selfClick = false;
+        }
+    }
+    toggle(event, target) {
+        if (this.overlayVisible) {
+            if (this.hasTargetChanged(event, target)) {
+                this.destroyCallback = () => {
+                    this.show(null, (target || event.currentTarget || event.target));
+                };
+            }
+            this.hide();
+        }
+        else {
+            this.show(event, target);
+        }
+    }
+    show(event, target) {
+        this.target = target || event.currentTarget || event.target;
+        this.overlayVisible = true;
+        this.render = true;
+        this.cd.markForCheck();
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+        this.selfClick = true;
+    }
+    onContentClick() {
+        this.selfClick = true;
+    }
+    hasTargetChanged(event, target) {
+        return this.target != null && this.target !== (target || event.currentTarget || event.target);
+    }
+    appendContainer() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.container);
+            else
+                DomHandler.appendChild(this.container, this.appendTo);
+        }
+    }
+    restoreAppend() {
+        if (this.container && this.appendTo) {
+            this.el.nativeElement.appendChild(this.container);
+        }
+    }
+    align() {
+        if (this.autoZIndex) {
+            ZIndexUtils.set('overlay', this.container, this.baseZIndex + this.config.zIndex.overlay);
+        }
+        DomHandler.absolutePosition(this.container, this.target);
+        const containerOffset = DomHandler.getOffset(this.container);
+        const targetOffset = DomHandler.getOffset(this.target);
+        let arrowLeft = 0;
+        if (containerOffset.left < targetOffset.left) {
+            arrowLeft = targetOffset.left - containerOffset.left;
+        }
+        this.container.style.setProperty('--overlayArrowLeft', `${arrowLeft}px`);
+        if (containerOffset.top < targetOffset.top) {
+            DomHandler.addClass(this.container, 'p-overlaypanel-flipped');
+        }
+    }
+    onAnimationStart(event) {
+        if (event.toState === 'open') {
+            this.container = event.element;
+            this.onShow.emit(null);
+            this.appendContainer();
+            this.align();
+            this.bindDocumentClickListener();
+            this.bindDocumentResizeListener();
+            this.bindScrollListener();
+            if (this.focusOnShow) {
+                this.focus();
+            }
+            this.overlayEventListener = (e) => {
+                if (this.container && this.container.contains(e.target)) {
+                    this.selfClick = true;
+                }
+            };
+            this.overlaySubscription = this.overlayService.clickObservable.subscribe(this.overlayEventListener);
+        }
+    }
+    onAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                if (this.destroyCallback) {
+                    this.destroyCallback();
+                    this.destroyCallback = null;
+                }
+                if (this.overlaySubscription) {
+                    this.overlaySubscription.unsubscribe();
+                }
+                break;
+            case 'close':
+                if (this.autoZIndex) {
+                    ZIndexUtils.clear(this.container);
+                }
+                if (this.overlaySubscription) {
+                    this.overlaySubscription.unsubscribe();
+                }
+                this.onContainerDestroy();
+                this.onHide.emit({});
+                this.render = false;
+                break;
+        }
+    }
+    focus() {
+        let focusable = DomHandler.findSingle(this.container, '[autofocus]');
+        if (focusable) {
+            this.zone.runOutsideAngular(() => {
+                setTimeout(() => focusable.focus(), 5);
+            });
+        }
+    }
+    hide() {
+        this.overlayVisible = false;
+        this.cd.markForCheck();
+    }
+    onCloseClick(event) {
+        this.hide();
+        event.preventDefault();
+    }
+    onWindowResize(event) {
+        this.hide();
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    onContainerDestroy() {
+        this.target = null;
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+    }
+    ngOnDestroy() {
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        if (this.container && this.autoZIndex) {
+            ZIndexUtils.clear(this.container);
+        }
+        this.target = null;
+        this.destroyCallback = null;
+        if (this.container) {
+            this.restoreAppend();
+            this.onContainerDestroy();
+        }
+        if (this.overlaySubscription) {
+            this.overlaySubscription.unsubscribe();
+        }
+    }
+}
+OverlayPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayPanel, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.PrimeNGConfig }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+OverlayPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: OverlayPanel, selector: "p-overlayPanel", inputs: { dismissable: "dismissable", showCloseIcon: "showCloseIcon", style: "style", styleClass: "styleClass", appendTo: "appendTo", autoZIndex: "autoZIndex", ariaCloseLabel: "ariaCloseLabel", baseZIndex: "baseZIndex", focusOnShow: "focusOnShow", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div *ngIf="render" [ngClass]="'p-overlaypanel p-component'" [ngStyle]="style" [class]="styleClass" (click)="onOverlayClick($event)"
+            [@animation]="{value: (overlayVisible ? 'open': 'close'), params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+                (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)">
+            <div class="p-overlaypanel-content" (click)="onContentClick()" (mousedown)="onContentClick()">
+                <ng-content></ng-content>
+                <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+            </div>
+            <button *ngIf="showCloseIcon" type="button" class="p-overlaypanel-close p-link" (click)="onCloseClick($event)" (keydown.enter)="hide()" [attr.aria-label]="ariaCloseLabel" pRipple>
+                <span class="p-overlaypanel-close-icon pi pi-times"></span>
+            </button>
+        </div>
+    `, isInline: true, styles: [".p-overlaypanel{position:absolute;margin-top:10px;top:0;left:0}.p-overlaypanel-flipped{margin-top:0;margin-bottom:10px}.p-overlaypanel-close{display:flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-overlaypanel:after,.p-overlaypanel:before{bottom:100%;left:calc(0 + 1.25rem);left:calc(var(--overlayArrowLeft, 0) + 1.25rem);content:\" \";height:0;width:0;position:absolute;pointer-events:none}.p-overlaypanel:after{border-width:8px;margin-left:-8px}.p-overlaypanel:before{border-width:10px;margin-left:-10px}.p-overlaypanel-shifted:after,.p-overlaypanel-shifted:before{left:auto;right:1.25em;margin-left:auto}.p-overlaypanel-flipped:after,.p-overlaypanel-flipped:before{bottom:auto;top:100%}.p-overlaypanel.p-overlaypanel-flipped:after,.p-overlaypanel.p-overlaypanel-flipped:before{border-bottom-color:transparent}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.Ripple, selector: "[pRipple]" }], animations: [
+        trigger('animation', [
+            state('void', style({
+                transform: 'scaleY(0.8)',
+                opacity: 0
+            })),
+            state('close', style({
+                opacity: 0
+            })),
+            state('open', style({
+                transform: 'translateY(0)',
+                opacity: 1
+            })),
+            transition('void => open', animate('{{showTransitionParams}}')),
+            transition('open => close', animate('{{hideTransitionParams}}')),
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayPanel, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-overlayPanel', template: `
+        <div *ngIf="render" [ngClass]="'p-overlaypanel p-component'" [ngStyle]="style" [class]="styleClass" (click)="onOverlayClick($event)"
+            [@animation]="{value: (overlayVisible ? 'open': 'close'), params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+                (@animation.start)="onAnimationStart($event)" (@animation.done)="onAnimationEnd($event)">
+            <div class="p-overlaypanel-content" (click)="onContentClick()" (mousedown)="onContentClick()">
+                <ng-content></ng-content>
+                <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+            </div>
+            <button *ngIf="showCloseIcon" type="button" class="p-overlaypanel-close p-link" (click)="onCloseClick($event)" (keydown.enter)="hide()" [attr.aria-label]="ariaCloseLabel" pRipple>
+                <span class="p-overlaypanel-close-icon pi pi-times"></span>
+            </button>
+        </div>
+    `, animations: [
+                        trigger('animation', [
+                            state('void', style({
+                                transform: 'scaleY(0.8)',
+                                opacity: 0
+                            })),
+                            state('close', style({
+                                opacity: 0
+                            })),
+                            state('open', style({
+                                transform: 'translateY(0)',
+                                opacity: 1
+                            })),
+                            transition('void => open', animate('{{showTransitionParams}}')),
+                            transition('open => close', animate('{{hideTransitionParams}}')),
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-overlaypanel{position:absolute;margin-top:10px;top:0;left:0}.p-overlaypanel-flipped{margin-top:0;margin-bottom:10px}.p-overlaypanel-close{display:flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-overlaypanel:after,.p-overlaypanel:before{bottom:100%;left:calc(0 + 1.25rem);left:calc(var(--overlayArrowLeft, 0) + 1.25rem);content:\" \";height:0;width:0;position:absolute;pointer-events:none}.p-overlaypanel:after{border-width:8px;margin-left:-8px}.p-overlaypanel:before{border-width:10px;margin-left:-10px}.p-overlaypanel-shifted:after,.p-overlaypanel-shifted:before{left:auto;right:1.25em;margin-left:auto}.p-overlaypanel-flipped:after,.p-overlaypanel-flipped:before{bottom:auto;top:100%}.p-overlaypanel.p-overlaypanel-flipped:after,.p-overlaypanel.p-overlaypanel-flipped:before{border-bottom-color:transparent}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.PrimeNGConfig }, { type: i1.OverlayService }]; }, propDecorators: { dismissable: [{
+                type: Input
+            }], showCloseIcon: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], ariaCloseLabel: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], focusOnShow: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class OverlayPanelModule {
+}
+OverlayPanelModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+OverlayPanelModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayPanelModule, declarations: [OverlayPanel], imports: [CommonModule, RippleModule, SharedModule], exports: [OverlayPanel, SharedModule] });
+OverlayPanelModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayPanelModule, imports: [[CommonModule, RippleModule, SharedModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: OverlayPanelModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule, SharedModule],
+                    exports: [OverlayPanel, SharedModule],
+                    declarations: [OverlayPanel]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { OverlayPanel, OverlayPanelModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-overlaypanel.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-overlaypanel.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-overlaypanel.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-overlaypanel.mjs","sources":["../../src/app/components/overlaypanel/overlaypanel.ts","../../src/app/components/overlaypanel/primeng-overlaypanel.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,OnDestroy,EventEmitter,Renderer2,ElementRef,ChangeDetectorRef,NgZone,\n        ContentChildren,TemplateRef,AfterContentInit,QueryList,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {SharedModule,PrimeTemplate, PrimeNGConfig, OverlayService} from 'primeng/api';\nimport {RippleModule} from 'primeng/ripple';\nimport {trigger,state,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {ZIndexUtils} from 'primeng/utils';\nimport { Subscription } from 'rxjs';\n\n@Component({\n    selector: 'p-overlayPanel',\n    template: `\n        <div *ngIf=\"render\" [ngClass]=\"'p-overlaypanel p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\" (click)=\"onOverlayClick($event)\"\n            [@animation]=\"{value: (overlayVisible ? 'open': 'close'), params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\"\n                (@animation.start)=\"onAnimationStart($event)\" (@animation.done)=\"onAnimationEnd($event)\">\n            <div class=\"p-overlaypanel-content\" (click)=\"onContentClick()\" (mousedown)=\"onContentClick()\">\n                <ng-content></ng-content>\n                <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n            </div>\n            <button *ngIf=\"showCloseIcon\" type=\"button\" class=\"p-overlaypanel-close p-link\" (click)=\"onCloseClick($event)\" (keydown.enter)=\"hide()\" [attr.aria-label]=\"ariaCloseLabel\" pRipple>\n                <span class=\"p-overlaypanel-close-icon pi pi-times\"></span>\n            </button>\n        </div>\n    `,\n    animations: [\n        trigger('animation', [\n            state('void', style({\n                transform: 'scaleY(0.8)',\n                opacity: 0\n            })),\n            state('close', style({\n                opacity: 0\n            })),\n            state('open', style({\n                transform: 'translateY(0)',\n                opacity: 1\n            })),\n            transition('void => open', animate('{{showTransitionParams}}')),\n            transition('open => close', animate('{{hideTransitionParams}}')),\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./overlaypanel.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class OverlayPanel implements AfterContentInit, OnDestroy {\n\n    @Input() dismissable: boolean = true;\n\n    @Input() showCloseIcon: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() appendTo: any = 'body';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() ariaCloseLabel: string;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() focusOnShow: boolean = true;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    container: HTMLDivElement;\n\n    overlayVisible: boolean = false;\n\n    render: boolean = false;\n\n    selfClick: boolean = false;\n\n    documentClickListener: any;\n\n    target: any;\n\n    willHide: boolean;\n\n    scrollHandler: any;\n\n    documentResizeListener: any;\n\n    contentTemplate: TemplateRef<any>;\n\n    destroyCallback: Function;\n\n    overlayEventListener;\n\n    overlaySubscription: Subscription;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, private zone: NgZone, public config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n\n            this.cd.markForCheck();\n        });\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener && this.dismissable) {\n            this.zone.runOutsideAngular(() => {\n                let documentEvent = DomHandler.isIOS() ? 'touchstart' : 'click';\n                const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n                this.documentClickListener = this.renderer.listen(documentTarget, documentEvent, (event) => {\n                    if (!this.container.contains(event.target) && this.target !== event.target && !this.target.contains(event.target) && !this.selfClick) {\n                        this.zone.run(() => {\n                            this.hide();\n                        });\n                    }\n\n                    this.selfClick = false;\n                    this.cd.markForCheck();\n                });\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n            this.selfClick = false;\n        }\n    }\n\n    toggle(event, target?) {\n        if (this.overlayVisible) {\n            if (this.hasTargetChanged(event, target)) {\n                this.destroyCallback = () => {\n                    this.show(null, (target||event.currentTarget||event.target));\n                };\n            }\n\n            this.hide();\n        }\n        else {\n            this.show(event, target);\n        }\n    }\n\n    show(event, target?) {\n        this.target = target||event.currentTarget||event.target;\n        this.overlayVisible = true;\n        this.render = true;\n        this.cd.markForCheck();\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n\n        this.selfClick = true;\n    }\n\n    onContentClick() {\n        this.selfClick = true;\n    }\n\n    hasTargetChanged(event, target) {\n        return this.target != null && this.target !== (target||event.currentTarget||event.target);\n    }\n\n    appendContainer() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.container);\n            else\n                DomHandler.appendChild(this.container, this.appendTo);\n        }\n    }\n\n    restoreAppend() {\n        if (this.container && this.appendTo) {\n            this.el.nativeElement.appendChild(this.container);\n        }\n    }\n\n    align() {\n        if (this.autoZIndex) {\n            ZIndexUtils.set('overlay', this.container, this.baseZIndex + this.config.zIndex.overlay);\n        }\n\n        DomHandler.absolutePosition(this.container, this.target);\n\n        const containerOffset = DomHandler.getOffset(this.container);\n        const targetOffset = DomHandler.getOffset(this.target);\n        let arrowLeft = 0;\n\n        if (containerOffset.left < targetOffset.left) {\n            arrowLeft = targetOffset.left - containerOffset.left;\n        }\n        this.container.style.setProperty('--overlayArrowLeft', `${arrowLeft}px`);\n\n        if (containerOffset.top < targetOffset.top) {\n            DomHandler.addClass(this.container, 'p-overlaypanel-flipped');\n        }\n    }\n\n    onAnimationStart(event: AnimationEvent) {\n        if (event.toState === 'open') {\n            this.container = event.element;\n            this.onShow.emit(null);\n            this.appendContainer();\n            this.align();\n            this.bindDocumentClickListener();\n            this.bindDocumentResizeListener();\n            this.bindScrollListener();\n\n            if (this.focusOnShow) {\n                this.focus();\n            }\n\n            this.overlayEventListener = (e) => {\n                if (this.container && this.container.contains(e.target)) {\n                    this.selfClick = true;\n                }\n            }\n\n            this.overlaySubscription = this.overlayService.clickObservable.subscribe(this.overlayEventListener);\n        }\n    }\n\n    onAnimationEnd(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'void':\n                if (this.destroyCallback) {\n                    this.destroyCallback();\n                    this.destroyCallback = null;\n                }\n\n                if (this.overlaySubscription) {\n                    this.overlaySubscription.unsubscribe();\n                }\n            break;\n\n            case 'close':\n                if (this.autoZIndex) {\n                    ZIndexUtils.clear(this.container);\n                }\n\n                if (this.overlaySubscription) {\n                    this.overlaySubscription.unsubscribe();\n                }\n\n                this.onContainerDestroy();\n                this.onHide.emit({});\n                this.render = false;\n            break;\n        }\n    }\n\n    focus() {\n        let focusable = DomHandler.findSingle(this.container, '[autofocus]');\n        if (focusable) {\n            this.zone.runOutsideAngular(() => {\n                setTimeout(() => focusable.focus(), 5);\n            });\n        }\n    }\n\n    hide() {\n        this.overlayVisible = false;\n        this.cd.markForCheck();\n    }\n\n    onCloseClick(event) {\n        this.hide();\n        event.preventDefault();\n    }\n\n    onWindowResize(event) {\n        this.hide();\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    onContainerDestroy() {\n        this.target = null;\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n    }\n\n    ngOnDestroy() {\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.container && this.autoZIndex) {\n            ZIndexUtils.clear(this.container);\n        }\n\n        this.target = null;\n        this.destroyCallback = null;\n        if (this.container) {\n            this.restoreAppend();\n            this.onContainerDestroy();\n        }\n\n        if (this.overlaySubscription) {\n            this.overlaySubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RippleModule, SharedModule],\n    exports: [OverlayPanel, SharedModule],\n    declarations: [OverlayPanel]\n})\nexport class OverlayPanelModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-paginator.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-paginator.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-paginator.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,337 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i3 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i5 from '@angular/forms';
+import { FormsModule } from '@angular/forms';
+import * as i1 from 'primeng/dropdown';
+import { DropdownModule } from 'primeng/dropdown';
+import * as i4 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i6 from 'primeng/api';
+import { SharedModule } from 'primeng/api';
+import * as i2 from 'primeng/inputnumber';
+import { InputNumberModule } from 'primeng/inputnumber';
+
+class Paginator {
+    constructor(cd) {
+        this.cd = cd;
+        this.pageLinkSize = 5;
+        this.onPageChange = new EventEmitter();
+        this.alwaysShow = true;
+        this.dropdownScrollHeight = '200px';
+        this.currentPageReportTemplate = '{currentPage} of {totalPages}';
+        this.showFirstLastIcon = true;
+        this.totalRecords = 0;
+        this.rows = 0;
+        this.showPageLinks = true;
+        this._first = 0;
+        this._page = 0;
+    }
+    ngOnInit() {
+        this.updatePaginatorState();
+    }
+    ngOnChanges(simpleChange) {
+        if (simpleChange.totalRecords) {
+            this.updatePageLinks();
+            this.updatePaginatorState();
+            this.updateFirst();
+            this.updateRowsPerPageOptions();
+        }
+        if (simpleChange.first) {
+            this._first = simpleChange.first.currentValue;
+            this.updatePageLinks();
+            this.updatePaginatorState();
+        }
+        if (simpleChange.rows) {
+            this.updatePageLinks();
+            this.updatePaginatorState();
+        }
+        if (simpleChange.rowsPerPageOptions) {
+            this.updateRowsPerPageOptions();
+        }
+    }
+    get first() {
+        return this._first;
+    }
+    set first(val) {
+        this._first = val;
+    }
+    updateRowsPerPageOptions() {
+        if (this.rowsPerPageOptions) {
+            this.rowsPerPageItems = [];
+            for (let opt of this.rowsPerPageOptions) {
+                if (typeof opt == 'object' && opt['showAll']) {
+                    this.rowsPerPageItems.unshift({ label: opt['showAll'], value: this.totalRecords });
+                }
+                else {
+                    this.rowsPerPageItems.push({ label: String(opt), value: opt });
+                }
+            }
+        }
+    }
+    isFirstPage() {
+        return this.getPage() === 0;
+    }
+    isLastPage() {
+        return this.getPage() === this.getPageCount() - 1;
+    }
+    getPageCount() {
+        return Math.ceil(this.totalRecords / this.rows);
+    }
+    calculatePageLinkBoundaries() {
+        let numberOfPages = this.getPageCount(), visiblePages = Math.min(this.pageLinkSize, numberOfPages);
+        //calculate range, keep current in middle if necessary
+        let start = Math.max(0, Math.ceil(this.getPage() - ((visiblePages) / 2))), end = Math.min(numberOfPages - 1, start + visiblePages - 1);
+        //check when approaching to last page
+        var delta = this.pageLinkSize - (end - start + 1);
+        start = Math.max(0, start - delta);
+        return [start, end];
+    }
+    updatePageLinks() {
+        this.pageLinks = [];
+        let boundaries = this.calculatePageLinkBoundaries(), start = boundaries[0], end = boundaries[1];
+        for (let i = start; i <= end; i++) {
+            this.pageLinks.push(i + 1);
+        }
+        if (this.showJumpToPageDropdown) {
+            this.pageItems = [];
+            for (let i = 0; i < this.getPageCount(); i++) {
+                this.pageItems.push({ label: String(i + 1), value: i });
+            }
+        }
+    }
+    changePage(p) {
+        var pc = this.getPageCount();
+        if (p >= 0 && p < pc) {
+            this._first = this.rows * p;
+            var state = {
+                page: p,
+                first: this.first,
+                rows: this.rows,
+                pageCount: pc
+            };
+            this.updatePageLinks();
+            this.onPageChange.emit(state);
+            this.updatePaginatorState();
+        }
+    }
+    updateFirst() {
+        const page = this.getPage();
+        if (page > 0 && this.totalRecords && (this.first >= this.totalRecords)) {
+            Promise.resolve(null).then(() => this.changePage(page - 1));
+        }
+    }
+    getPage() {
+        return Math.floor(this.first / this.rows);
+    }
+    changePageToFirst(event) {
+        if (!this.isFirstPage()) {
+            this.changePage(0);
+        }
+        event.preventDefault();
+    }
+    changePageToPrev(event) {
+        this.changePage(this.getPage() - 1);
+        event.preventDefault();
+    }
+    changePageToNext(event) {
+        this.changePage(this.getPage() + 1);
+        event.preventDefault();
+    }
+    changePageToLast(event) {
+        if (!this.isLastPage()) {
+            this.changePage(this.getPageCount() - 1);
+        }
+        event.preventDefault();
+    }
+    onPageLinkClick(event, page) {
+        this.changePage(page);
+        event.preventDefault();
+    }
+    onRppChange(event) {
+        this.changePage(this.getPage());
+    }
+    onPageDropdownChange(event) {
+        this.changePage(event.value);
+    }
+    updatePaginatorState() {
+        this.paginatorState = {
+            page: this.getPage(),
+            pageCount: this.getPageCount(),
+            rows: this.rows,
+            first: this.first,
+            totalRecords: this.totalRecords
+        };
+    }
+    empty() {
+        return this.getPageCount() === 0;
+    }
+    currentPage() {
+        return this.getPageCount() > 0 ? this.getPage() + 1 : 0;
+    }
+    get currentPageReport() {
+        return this.currentPageReportTemplate
+            .replace("{currentPage}", String(this.currentPage()))
+            .replace("{totalPages}", String(this.getPageCount()))
+            .replace("{first}", String((this.totalRecords > 0) ? this._first + 1 : 0))
+            .replace("{last}", String(Math.min(this._first + this.rows, this.totalRecords)))
+            .replace("{rows}", String(this.rows))
+            .replace("{totalRecords}", String(this.totalRecords));
+    }
+}
+Paginator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Paginator, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Paginator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Paginator, selector: "p-paginator", inputs: { pageLinkSize: "pageLinkSize", style: "style", styleClass: "styleClass", alwaysShow: "alwaysShow", templateLeft: "templateLeft", templateRight: "templateRight", dropdownAppendTo: "dropdownAppendTo", dropdownScrollHeight: "dropdownScrollHeight", currentPageReportTemplate: "currentPageReportTemplate", showCurrentPageReport: "showCurrentPageReport", showFirstLastIcon: "showFirstLastIcon", totalRecords: "totalRecords", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", showJumpToPageDropdown: "showJumpToPageDropdown", showJumpToPageInput: "showJumpToPageInput", showPageLinks: "showPageLinks", dropdownItemTemplate: "dropdownItemTemplate", first: "first" }, outputs: { onPageChange: "onPageChange" }, host: { classAttribute: "p-element" }, usesOnChanges: true, ngImport: i0, template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-paginator p-component'" *ngIf="alwaysShow ? true : (pageLinks && pageLinks.length > 1)">
+            <div class="p-paginator-left-content" *ngIf="templateLeft">
+                <ng-container *ngTemplateOutlet="templateLeft; context: {$implicit: paginatorState}"></ng-container>
+            </div>
+            <span class="p-paginator-current" *ngIf="showCurrentPageReport">{{currentPageReport}}</span>
+            <button *ngIf="showFirstLastIcon" type="button" [disabled]="isFirstPage() || empty()" (click)="changePageToFirst($event)" pRipple
+                    class="p-paginator-first p-paginator-element p-link" [ngClass]="{'p-disabled':isFirstPage() || empty()}">
+                <span class="p-paginator-icon pi pi-angle-double-left"></span>
+            </button>
+            <button type="button" [disabled]="isFirstPage() || empty()" (click)="changePageToPrev($event)" pRipple
+                    class="p-paginator-prev p-paginator-element p-link" [ngClass]="{'p-disabled':isFirstPage() || empty()}">
+                <span class="p-paginator-icon pi pi-angle-left"></span>
+            </button>
+            <span class="p-paginator-pages" *ngIf="showPageLinks">
+                <button type="button" *ngFor="let pageLink of pageLinks" class="p-paginator-page p-paginator-element p-link" [ngClass]="{'p-highlight': (pageLink-1 == getPage())}"
+                    (click)="onPageLinkClick($event, pageLink - 1)" pRipple>{{pageLink}}</button>
+            </span>
+            <p-dropdown [options]="pageItems" [ngModel]="getPage()" *ngIf="showJumpToPageDropdown" [disabled]="empty()" styleClass="p-paginator-page-options"
+                (onChange)="onPageDropdownChange($event)" [appendTo]="dropdownAppendTo" [scrollHeight]="dropdownScrollHeight">
+                <ng-template pTemplate="selectedItem">{{currentPageReport}}</ng-template>
+            </p-dropdown>
+            <button type="button" [disabled]="isLastPage() || empty()" (click)="changePageToNext($event)" pRipple
+                    class="p-paginator-next p-paginator-element p-link" [ngClass]="{'p-disabled':isLastPage() || empty()}">
+                <span class="p-paginator-icon pi pi-angle-right"></span>
+            </button>
+            <button *ngIf="showFirstLastIcon" type="button" [disabled]="isLastPage() || empty()" (click)="changePageToLast($event)" pRipple
+                    class="p-paginator-last p-paginator-element p-link" [ngClass]="{'p-disabled':isLastPage() || empty()}">
+                <span class="p-paginator-icon pi pi-angle-double-right"></span>
+            </button>
+            <p-inputNumber *ngIf="showJumpToPageInput" [ngModel]="currentPage()" class="p-paginator-page-input" [disabled]="empty()" (ngModelChange)="changePage($event - 1)"></p-inputNumber>
+            <p-dropdown [options]="rowsPerPageItems" [(ngModel)]="rows" *ngIf="rowsPerPageOptions" styleClass="p-paginator-rpp-options" [disabled]="empty()"
+                (onChange)="onRppChange($event)" [appendTo]="dropdownAppendTo" [scrollHeight]="dropdownScrollHeight">
+                <ng-container *ngIf="dropdownItemTemplate">
+                    <ng-template let-item pTemplate="item">
+                        <ng-container *ngTemplateOutlet="dropdownItemTemplate; context: {$implicit: item}">
+                        </ng-container>
+                    </ng-template>
+                </ng-container>
+            </p-dropdown>
+            <div class="p-paginator-right-content" *ngIf="templateRight">
+                <ng-container *ngTemplateOutlet="templateRight; context: {$implicit: paginatorState}"></ng-container>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-paginator{display:flex;align-items:center;justify-content:center;flex-wrap:wrap}.p-paginator-left-content{margin-right:auto}.p-paginator-right-content{margin-left:auto}.p-paginator-page,.p-paginator-next,.p-paginator-last,.p-paginator-first,.p-paginator-prev,.p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;position:relative}.p-paginator-element:focus{z-index:1;position:relative}\n"], components: [{ type: i1.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "virtualScroll", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear"] }, { type: i2.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.Ripple, selector: "[pRipple]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Paginator, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-paginator', template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-paginator p-component'" *ngIf="alwaysShow ? true : (pageLinks && pageLinks.length > 1)">
+            <div class="p-paginator-left-content" *ngIf="templateLeft">
+                <ng-container *ngTemplateOutlet="templateLeft; context: {$implicit: paginatorState}"></ng-container>
+            </div>
+            <span class="p-paginator-current" *ngIf="showCurrentPageReport">{{currentPageReport}}</span>
+            <button *ngIf="showFirstLastIcon" type="button" [disabled]="isFirstPage() || empty()" (click)="changePageToFirst($event)" pRipple
+                    class="p-paginator-first p-paginator-element p-link" [ngClass]="{'p-disabled':isFirstPage() || empty()}">
+                <span class="p-paginator-icon pi pi-angle-double-left"></span>
+            </button>
+            <button type="button" [disabled]="isFirstPage() || empty()" (click)="changePageToPrev($event)" pRipple
+                    class="p-paginator-prev p-paginator-element p-link" [ngClass]="{'p-disabled':isFirstPage() || empty()}">
+                <span class="p-paginator-icon pi pi-angle-left"></span>
+            </button>
+            <span class="p-paginator-pages" *ngIf="showPageLinks">
+                <button type="button" *ngFor="let pageLink of pageLinks" class="p-paginator-page p-paginator-element p-link" [ngClass]="{'p-highlight': (pageLink-1 == getPage())}"
+                    (click)="onPageLinkClick($event, pageLink - 1)" pRipple>{{pageLink}}</button>
+            </span>
+            <p-dropdown [options]="pageItems" [ngModel]="getPage()" *ngIf="showJumpToPageDropdown" [disabled]="empty()" styleClass="p-paginator-page-options"
+                (onChange)="onPageDropdownChange($event)" [appendTo]="dropdownAppendTo" [scrollHeight]="dropdownScrollHeight">
+                <ng-template pTemplate="selectedItem">{{currentPageReport}}</ng-template>
+            </p-dropdown>
+            <button type="button" [disabled]="isLastPage() || empty()" (click)="changePageToNext($event)" pRipple
+                    class="p-paginator-next p-paginator-element p-link" [ngClass]="{'p-disabled':isLastPage() || empty()}">
+                <span class="p-paginator-icon pi pi-angle-right"></span>
+            </button>
+            <button *ngIf="showFirstLastIcon" type="button" [disabled]="isLastPage() || empty()" (click)="changePageToLast($event)" pRipple
+                    class="p-paginator-last p-paginator-element p-link" [ngClass]="{'p-disabled':isLastPage() || empty()}">
+                <span class="p-paginator-icon pi pi-angle-double-right"></span>
+            </button>
+            <p-inputNumber *ngIf="showJumpToPageInput" [ngModel]="currentPage()" class="p-paginator-page-input" [disabled]="empty()" (ngModelChange)="changePage($event - 1)"></p-inputNumber>
+            <p-dropdown [options]="rowsPerPageItems" [(ngModel)]="rows" *ngIf="rowsPerPageOptions" styleClass="p-paginator-rpp-options" [disabled]="empty()"
+                (onChange)="onRppChange($event)" [appendTo]="dropdownAppendTo" [scrollHeight]="dropdownScrollHeight">
+                <ng-container *ngIf="dropdownItemTemplate">
+                    <ng-template let-item pTemplate="item">
+                        <ng-container *ngTemplateOutlet="dropdownItemTemplate; context: {$implicit: item}">
+                        </ng-container>
+                    </ng-template>
+                </ng-container>
+            </p-dropdown>
+            <div class="p-paginator-right-content" *ngIf="templateRight">
+                <ng-container *ngTemplateOutlet="templateRight; context: {$implicit: paginatorState}"></ng-container>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-paginator{display:flex;align-items:center;justify-content:center;flex-wrap:wrap}.p-paginator-left-content{margin-right:auto}.p-paginator-right-content{margin-left:auto}.p-paginator-page,.p-paginator-next,.p-paginator-last,.p-paginator-first,.p-paginator-prev,.p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;position:relative}.p-paginator-element:focus{z-index:1;position:relative}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { pageLinkSize: [{
+                type: Input
+            }], onPageChange: [{
+                type: Output
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], alwaysShow: [{
+                type: Input
+            }], templateLeft: [{
+                type: Input
+            }], templateRight: [{
+                type: Input
+            }], dropdownAppendTo: [{
+                type: Input
+            }], dropdownScrollHeight: [{
+                type: Input
+            }], currentPageReportTemplate: [{
+                type: Input
+            }], showCurrentPageReport: [{
+                type: Input
+            }], showFirstLastIcon: [{
+                type: Input
+            }], totalRecords: [{
+                type: Input
+            }], rows: [{
+                type: Input
+            }], rowsPerPageOptions: [{
+                type: Input
+            }], showJumpToPageDropdown: [{
+                type: Input
+            }], showJumpToPageInput: [{
+                type: Input
+            }], showPageLinks: [{
+                type: Input
+            }], dropdownItemTemplate: [{
+                type: Input
+            }], first: [{
+                type: Input
+            }] } });
+class PaginatorModule {
+}
+PaginatorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PaginatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+PaginatorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PaginatorModule, declarations: [Paginator], imports: [CommonModule, DropdownModule, InputNumberModule, FormsModule, SharedModule, RippleModule], exports: [Paginator, DropdownModule, InputNumberModule, FormsModule, SharedModule] });
+PaginatorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PaginatorModule, imports: [[CommonModule, DropdownModule, InputNumberModule, FormsModule, SharedModule, RippleModule], DropdownModule, InputNumberModule, FormsModule, SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PaginatorModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, DropdownModule, InputNumberModule, FormsModule, SharedModule, RippleModule],
+                    exports: [Paginator, DropdownModule, InputNumberModule, FormsModule, SharedModule],
+                    declarations: [Paginator]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Paginator, PaginatorModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-paginator.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-paginator.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-paginator.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-paginator.mjs","sources":["../../src/app/components/paginator/paginator.ts","../../src/app/components/paginator/primeng-paginator.ts"],"sourcesContent":["import {NgModule,Component,OnInit,Input,Output,ChangeDetectorRef,EventEmitter,TemplateRef,OnChanges,SimpleChanges,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {DropdownModule} from 'primeng/dropdown';\nimport {SelectItem} from 'primeng/api';\nimport {RippleModule} from 'primeng/ripple';\nimport {SharedModule} from 'primeng/api';\nimport {InputNumberModule} from 'primeng/inputnumber';\n\n@Component({\n    selector: 'p-paginator',\n    template: `\n        <div [class]=\"styleClass\" [ngStyle]=\"style\" [ngClass]=\"'p-paginator p-component'\" *ngIf=\"alwaysShow ? true : (pageLinks && pageLinks.length > 1)\">\n            <div class=\"p-paginator-left-content\" *ngIf=\"templateLeft\">\n                <ng-container *ngTemplateOutlet=\"templateLeft; context: {$implicit: paginatorState}\"></ng-container>\n            </div>\n            <span class=\"p-paginator-current\" *ngIf=\"showCurrentPageReport\">{{currentPageReport}}</span>\n            <button *ngIf=\"showFirstLastIcon\" type=\"button\" [disabled]=\"isFirstPage() || empty()\" (click)=\"changePageToFirst($event)\" pRipple\n                    class=\"p-paginator-first p-paginator-element p-link\" [ngClass]=\"{'p-disabled':isFirstPage() || empty()}\">\n                <span class=\"p-paginator-icon pi pi-angle-double-left\"></span>\n            </button>\n            <button type=\"button\" [disabled]=\"isFirstPage() || empty()\" (click)=\"changePageToPrev($event)\" pRipple\n                    class=\"p-paginator-prev p-paginator-element p-link\" [ngClass]=\"{'p-disabled':isFirstPage() || empty()}\">\n                <span class=\"p-paginator-icon pi pi-angle-left\"></span>\n            </button>\n            <span class=\"p-paginator-pages\" *ngIf=\"showPageLinks\">\n                <button type=\"button\" *ngFor=\"let pageLink of pageLinks\" class=\"p-paginator-page p-paginator-element p-link\" [ngClass]=\"{'p-highlight': (pageLink-1 == getPage())}\"\n                    (click)=\"onPageLinkClick($event, pageLink - 1)\" pRipple>{{pageLink}}</button>\n            </span>\n            <p-dropdown [options]=\"pageItems\" [ngModel]=\"getPage()\" *ngIf=\"showJumpToPageDropdown\" [disabled]=\"empty()\" styleClass=\"p-paginator-page-options\"\n                (onChange)=\"onPageDropdownChange($event)\" [appendTo]=\"dropdownAppendTo\" [scrollHeight]=\"dropdownScrollHeight\">\n                <ng-template pTemplate=\"selectedItem\">{{currentPageReport}}</ng-template>\n            </p-dropdown>\n            <button type=\"button\" [disabled]=\"isLastPage() || empty()\" (click)=\"changePageToNext($event)\" pRipple\n                    class=\"p-paginator-next p-paginator-element p-link\" [ngClass]=\"{'p-disabled':isLastPage() || empty()}\">\n                <span class=\"p-paginator-icon pi pi-angle-right\"></span>\n            </button>\n            <button *ngIf=\"showFirstLastIcon\" type=\"button\" [disabled]=\"isLastPage() || empty()\" (click)=\"changePageToLast($event)\" pRipple\n                    class=\"p-paginator-last p-paginator-element p-link\" [ngClass]=\"{'p-disabled':isLastPage() || empty()}\">\n                <span class=\"p-paginator-icon pi pi-angle-double-right\"></span>\n            </button>\n            <p-inputNumber *ngIf=\"showJumpToPageInput\" [ngModel]=\"currentPage()\" class=\"p-paginator-page-input\" [disabled]=\"empty()\" (ngModelChange)=\"changePage($event - 1)\"></p-inputNumber>\n            <p-dropdown [options]=\"rowsPerPageItems\" [(ngModel)]=\"rows\" *ngIf=\"rowsPerPageOptions\" styleClass=\"p-paginator-rpp-options\" [disabled]=\"empty()\"\n                (onChange)=\"onRppChange($event)\" [appendTo]=\"dropdownAppendTo\" [scrollHeight]=\"dropdownScrollHeight\">\n                <ng-container *ngIf=\"dropdownItemTemplate\">\n                    <ng-template let-item pTemplate=\"item\">\n                        <ng-container *ngTemplateOutlet=\"dropdownItemTemplate; context: {$implicit: item}\">\n                        </ng-container>\n                    </ng-template>\n                </ng-container>\n            </p-dropdown>\n            <div class=\"p-paginator-right-content\" *ngIf=\"templateRight\">\n                <ng-container *ngTemplateOutlet=\"templateRight; context: {$implicit: paginatorState}\"></ng-container>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./paginator.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Paginator implements OnInit, OnChanges {\n\n    @Input() pageLinkSize: number = 5;\n\n    @Output() onPageChange: EventEmitter<any> = new EventEmitter();\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() alwaysShow: boolean = true;\n\n    @Input() templateLeft: TemplateRef<any>;\n\n    @Input() templateRight: TemplateRef<any>;\n\n    @Input() dropdownAppendTo: any;\n\n    @Input() dropdownScrollHeight: string = '200px';\n\n    @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n    @Input() showCurrentPageReport: boolean;\n\n    @Input() showFirstLastIcon: boolean = true;\n\n    @Input() totalRecords: number = 0;\n\n    @Input() rows: number = 0;\n\n    @Input() rowsPerPageOptions: any[];\n\n    @Input() showJumpToPageDropdown: boolean;\n\n    @Input() showJumpToPageInput: boolean;\n\n    @Input() showPageLinks: boolean = true;\n\n    @Input() dropdownItemTemplate: TemplateRef<any>;\n\n    pageLinks: number[];\n\n    pageItems: SelectItem[];\n\n    rowsPerPageItems: SelectItem[];\n\n    paginatorState: any;\n\n    _first: number = 0;\n\n    _page: number = 0;\n\n    constructor(private cd: ChangeDetectorRef) {}\n\n    ngOnInit() {\n        this.updatePaginatorState();\n    }\n\n    ngOnChanges(simpleChange: SimpleChanges) {\n        if (simpleChange.totalRecords) {\n            this.updatePageLinks();\n            this.updatePaginatorState();\n            this.updateFirst();\n            this.updateRowsPerPageOptions();\n        }\n\n        if (simpleChange.first) {\n            this._first = simpleChange.first.currentValue;\n            this.updatePageLinks();\n            this.updatePaginatorState();\n        }\n\n        if (simpleChange.rows) {\n            this.updatePageLinks();\n            this.updatePaginatorState();\n        }\n\n        if (simpleChange.rowsPerPageOptions) {\n            this.updateRowsPerPageOptions();\n        }\n    }\n\n    @Input() get first(): number {\n        return this._first;\n    }\n    set first(val:number) {\n        this._first = val;\n    }\n\n    updateRowsPerPageOptions() {\n        if (this.rowsPerPageOptions) {\n            this.rowsPerPageItems = [];\n            for (let opt of this.rowsPerPageOptions) {\n                if (typeof opt == 'object' && opt['showAll']) {\n                    this.rowsPerPageItems.unshift({label: opt['showAll'], value: this.totalRecords});\n                }\n                else {\n                    this.rowsPerPageItems.push({label: String(opt), value: opt});\n                }\n            }\n        }\n    }\n\n    isFirstPage() {\n        return this.getPage() === 0;\n    }\n\n    isLastPage() {\n        return this.getPage() === this.getPageCount() - 1;\n    }\n\n    getPageCount() {\n        return Math.ceil(this.totalRecords/this.rows);\n    }\n\n    calculatePageLinkBoundaries() {\n        let numberOfPages = this.getPageCount(),\n        visiblePages = Math.min(this.pageLinkSize, numberOfPages);\n\n        //calculate range, keep current in middle if necessary\n        let start = Math.max(0, Math.ceil(this.getPage() - ((visiblePages) / 2))),\n        end = Math.min(numberOfPages - 1, start + visiblePages - 1);\n\n        //check when approaching to last page\n        var delta = this.pageLinkSize - (end - start + 1);\n        start = Math.max(0, start - delta);\n\n        return [start, end];\n    }\n\n    updatePageLinks() {\n        this.pageLinks = [];\n        let boundaries = this.calculatePageLinkBoundaries(),\n        start = boundaries[0],\n        end = boundaries[1];\n\n        for(let i = start; i <= end; i++) {\n            this.pageLinks.push(i + 1);\n        }\n\n        if (this.showJumpToPageDropdown) {\n            this.pageItems = [];\n            for (let i = 0; i < this.getPageCount(); i++) {\n                this.pageItems.push({label: String(i + 1), value: i});\n            }\n        }\n    }\n\n    changePage(p :number) {\n        var pc = this.getPageCount();\n\n        if (p >= 0 && p < pc) {\n            this._first = this.rows * p;\n            var state = {\n                page: p,\n                first: this.first,\n                rows: this.rows,\n                pageCount: pc\n            };\n            this.updatePageLinks();\n\n            this.onPageChange.emit(state);\n            this.updatePaginatorState();\n        }\n    }\n\n    updateFirst() {\n        const page = this.getPage();\n        if (page > 0 && this.totalRecords && (this.first >= this.totalRecords)) {\n            Promise.resolve(null).then(() => this.changePage(page - 1));\n        }\n    }\n\n    getPage(): number {\n        return Math.floor(this.first / this.rows);\n    }\n\n    changePageToFirst(event) {\n      if (!this.isFirstPage()){\n          this.changePage(0);\n      }\n\n      event.preventDefault();\n    }\n\n    changePageToPrev(event) {\n        this.changePage(this.getPage() - 1);\n        event.preventDefault();\n    }\n\n    changePageToNext(event) {\n        this.changePage(this.getPage()  + 1);\n        event.preventDefault();\n    }\n\n    changePageToLast(event) {\n      if (!this.isLastPage()){\n          this.changePage(this.getPageCount() - 1);\n      }\n\n      event.preventDefault();\n    }\n\n    onPageLinkClick(event, page) {\n        this.changePage(page);\n        event.preventDefault();\n    }\n\n    onRppChange(event) {\n        this.changePage(this.getPage());\n    }\n\n    onPageDropdownChange(event) {\n        this.changePage(event.value);\n    }\n\n    updatePaginatorState() {\n        this.paginatorState = {\n            page: this.getPage(),\n            pageCount: this.getPageCount(),\n            rows: this.rows,\n            first: this.first,\n            totalRecords: this.totalRecords\n        }\n    }\n\n    empty() {\n        return this.getPageCount() === 0;\n    }\n\n    currentPage() {\n        return this.getPageCount() > 0 ? this.getPage() + 1 : 0;\n    }\n\n    get currentPageReport() {\n        return this.currentPageReportTemplate\n                .replace(\"{currentPage}\", String(this.currentPage()))\n                .replace(\"{totalPages}\", String(this.getPageCount()))\n                .replace(\"{first}\", String((this.totalRecords > 0) ? this._first + 1 : 0))\n                .replace(\"{last}\", String(Math.min(this._first + this.rows, this.totalRecords)))\n                .replace(\"{rows}\", String(this.rows))\n                .replace(\"{totalRecords}\", String(this.totalRecords));\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,DropdownModule,InputNumberModule,FormsModule,SharedModule,RippleModule],\n    exports: [Paginator,DropdownModule,InputNumberModule,FormsModule,SharedModule],\n    declarations: [Paginator]\n})\nexport class PaginatorModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;MA+Da,SAAS;IAoDlB,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QAlDhC,iBAAY,GAAW,CAAC,CAAC;QAExB,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAMtD,eAAU,GAAY,IAAI,CAAC;QAQ3B,yBAAoB,GAAW,OAAO,CAAC;QAEvC,8BAAyB,GAAW,+BAA+B,CAAC;QAIpE,sBAAiB,GAAY,IAAI,CAAC;QAElC,iBAAY,GAAW,CAAC,CAAC;QAEzB,SAAI,GAAW,CAAC,CAAC;QAQjB,kBAAa,GAAY,IAAI,CAAC;QAYvC,WAAM,GAAW,CAAC,CAAC;QAEnB,UAAK,GAAW,CAAC,CAAC;KAE2B;IAE7C,QAAQ;QACJ,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAED,WAAW,CAAC,YAA2B;QACnC,IAAI,YAAY,CAAC,YAAY,EAAE;YAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACnC;QAED,IAAI,YAAY,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;YAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC/B;QAED,IAAI,YAAY,CAAC,IAAI,EAAE;YACnB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC/B;QAED,IAAI,YAAY,CAAC,kBAAkB,EAAE;YACjC,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACnC;KACJ;IAED,IAAa,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,KAAK,CAAC,GAAU;QAChB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;KACrB;IAED,wBAAwB;QACpB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACrC,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,EAAE;oBAC1C,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAC,CAAC,CAAC;iBACpF;qBACI;oBACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;iBAChE;aACJ;SACJ;KACJ;IAED,WAAW;QACP,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KAC/B;IAED,UAAU;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;KACrD;IAED,YAAY;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjD;IAED,2BAA2B;QACvB,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,EACvC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;;QAG1D,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,EACzE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;;QAG5D,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QAClD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;QAEnC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACvB;IAED,eAAe;QACX,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,UAAU,GAAG,IAAI,CAAC,2BAA2B,EAAE,EACnD,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,EACrB,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEpB,KAAI,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;aACzD;SACJ;KACJ;IAED,UAAU,CAAC,CAAS;QAChB,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5B,IAAI,KAAK,GAAG;gBACR,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,EAAE;aAChB,CAAC;YACF,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC/B;KACJ;IAED,WAAW;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;YACpE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/D;KACJ;IAED,OAAO;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7C;IAED,iBAAiB,CAAC,KAAK;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAC;YACpB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACtB;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,gBAAgB,CAAC,KAAK;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACpC,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,KAAK;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAI,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,KAAK;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAC;YACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;SAC5C;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,eAAe,CAAC,KAAK,EAAE,IAAI;QACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,WAAW,CAAC,KAAK;QACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;KACnC;IAED,oBAAoB,CAAC,KAAK;QACtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAChC;IAED,oBAAoB;QAChB,IAAI,CAAC,cAAc,GAAG;YAClB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;YACpB,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAA;KACJ;IAED,KAAK;QACD,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;KACpC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3D;IAED,IAAI,iBAAiB;QACjB,OAAO,IAAI,CAAC,yBAAyB;aAC5B,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;aACpD,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;aACpD,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aACzE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;aAC/E,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACpC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;KACjE;;sGAlPQ,SAAS;0FAAT,SAAS,4zBApDR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4CT;2FAQQ,SAAS;kBAtDrB,SAAS;+BACI,aAAa,YACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4CT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;wGAIQ,YAAY;sBAApB,KAAK;gBAEI,YAAY;sBAArB,MAAM;gBAEE,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,YAAY;sBAApB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,gBAAgB;sBAAxB,KAAK;gBAEG,oBAAoB;sBAA5B,KAAK;gBAEG,yBAAyB;sBAAjC,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEG,iBAAiB;sBAAzB,KAAK;gBAEG,YAAY;sBAApB,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,kBAAkB;sBAA1B,KAAK;gBAEG,sBAAsB;sBAA9B,KAAK;gBAEG,mBAAmB;sBAA3B,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,oBAAoB;sBAA5B,KAAK;gBA4CO,KAAK;sBAAjB,KAAK;;MAwKG,eAAe;;4GAAf,eAAe;6GAAf,eAAe,iBA1Pf,SAAS,aAsPR,YAAY,EAAC,cAAc,EAAC,iBAAiB,EAAC,WAAW,EAAC,YAAY,EAAC,YAAY,aAtPpF,SAAS,EAuPE,cAAc,EAAC,iBAAiB,EAAC,WAAW,EAAC,YAAY;6GAGpE,eAAe,YAJf,CAAC,YAAY,EAAC,cAAc,EAAC,iBAAiB,EAAC,WAAW,EAAC,YAAY,EAAC,YAAY,CAAC,EAC1E,cAAc,EAAC,iBAAiB,EAAC,WAAW,EAAC,YAAY;2FAGpE,eAAe;kBAL3B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAC,cAAc,EAAC,iBAAiB,EAAC,WAAW,EAAC,YAAY,EAAC,YAAY,CAAC;oBAC9F,OAAO,EAAE,CAAC,SAAS,EAAC,cAAc,EAAC,iBAAiB,EAAC,WAAW,EAAC,YAAY,CAAC;oBAC9E,YAAY,EAAE,CAAC,SAAS,CAAC;iBAC5B;;;ACxTD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-panel.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-panel.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-panel.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,230 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ContentChild, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { Footer, PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+
+let idx = 0;
+class Panel {
+    constructor(el) {
+        this.el = el;
+        this.collapsed = false;
+        this.expandIcon = 'pi pi-plus';
+        this.collapseIcon = 'pi pi-minus';
+        this.showHeader = true;
+        this.toggler = "icon";
+        this.collapsedChange = new EventEmitter();
+        this.onBeforeToggle = new EventEmitter();
+        this.onAfterToggle = new EventEmitter();
+        this.transitionOptions = '400ms cubic-bezier(0.86, 0, 0.07, 1)';
+        this.id = `p-panel-${idx++}`;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                case 'icons':
+                    this.iconTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    onHeaderClick(event) {
+        if (this.toggler === 'header') {
+            this.toggle(event);
+        }
+    }
+    onIconClick(event) {
+        if (this.toggler === 'icon') {
+            this.toggle(event);
+        }
+    }
+    toggle(event) {
+        if (this.animating) {
+            return false;
+        }
+        this.animating = true;
+        this.onBeforeToggle.emit({ originalEvent: event, collapsed: this.collapsed });
+        if (this.toggleable) {
+            if (this.collapsed)
+                this.expand(event);
+            else
+                this.collapse(event);
+        }
+        event.preventDefault();
+    }
+    expand(event) {
+        this.collapsed = false;
+        this.collapsedChange.emit(this.collapsed);
+    }
+    collapse(event) {
+        this.collapsed = true;
+        this.collapsedChange.emit(this.collapsed);
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    onToggleDone(event) {
+        this.animating = false;
+        this.onAfterToggle.emit({ originalEvent: event, collapsed: this.collapsed });
+    }
+}
+Panel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Panel, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+Panel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Panel, selector: "p-panel", inputs: { toggleable: "toggleable", header: "header", collapsed: "collapsed", style: "style", styleClass: "styleClass", expandIcon: "expandIcon", collapseIcon: "collapseIcon", showHeader: "showHeader", toggler: "toggler", transitionOptions: "transitionOptions" }, outputs: { collapsedChange: "collapsedChange", onBeforeToggle: "onBeforeToggle", onAfterToggle: "onAfterToggle" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "footerFacet", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [attr.id]="id" [ngClass]="{'p-panel p-component': true, 'p-panel-toggleable': toggleable}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-panel-header" *ngIf="showHeader" (click)="onHeaderClick($event)" [attr.id]="id + '-titlebar'">
+                <span class="p-panel-title" *ngIf="header" [attr.id]="id + '_header'">{{header}}</span>
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <div class="p-panel-icons">
+                    <ng-template *ngTemplateOutlet="iconTemplate"></ng-template>
+                    <button *ngIf="toggleable" type="button" [attr.id]="id + '-label'" class="p-panel-header-icon p-panel-toggler p-link" pRipple
+                        (click)="onIconClick($event)" (keydown.enter)="onIconClick($event)" [attr.aria-controls]="id + '-content'" role="tab" [attr.aria-expanded]="!collapsed">
+                        <span [class]="collapsed ? expandIcon : collapseIcon"></span>
+                    </button>
+                </div>
+            </div>
+            <div [attr.id]="id + '-content'" class="p-toggleable-content" [@panelContent]="collapsed ? {value: 'hidden', params: {transitionParams: animating ? transitionOptions : '0ms', height: '0', opacity:'0'}} : {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*', opacity: '1'}}" (@panelContent.done)="onToggleDone($event)"
+                role="region" [attr.aria-hidden]="collapsed" [attr.aria-labelledby]="id  + '-titlebar'">
+                <div class="p-panel-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+
+                <div class="p-panel-footer" *ngIf="footerFacet || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-panel-header{display:flex;justify-content:space-between;align-items:center}.p-panel-title{line-height:1}.p-panel-header-icon{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.Ripple, selector: "[pRipple]" }], animations: [
+        trigger('panelContent', [
+            state('hidden', style({
+                height: '0',
+                overflow: 'hidden'
+            })),
+            state('void', style({
+                height: '{{height}}'
+            }), { params: { height: '0' } }),
+            state('visible', style({
+                height: '*'
+            })),
+            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+            transition('void => hidden', animate('{{transitionParams}}')),
+            transition('void => visible', animate('{{transitionParams}}'))
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Panel, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-panel', template: `
+        <div [attr.id]="id" [ngClass]="{'p-panel p-component': true, 'p-panel-toggleable': toggleable}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-panel-header" *ngIf="showHeader" (click)="onHeaderClick($event)" [attr.id]="id + '-titlebar'">
+                <span class="p-panel-title" *ngIf="header" [attr.id]="id + '_header'">{{header}}</span>
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <div class="p-panel-icons">
+                    <ng-template *ngTemplateOutlet="iconTemplate"></ng-template>
+                    <button *ngIf="toggleable" type="button" [attr.id]="id + '-label'" class="p-panel-header-icon p-panel-toggler p-link" pRipple
+                        (click)="onIconClick($event)" (keydown.enter)="onIconClick($event)" [attr.aria-controls]="id + '-content'" role="tab" [attr.aria-expanded]="!collapsed">
+                        <span [class]="collapsed ? expandIcon : collapseIcon"></span>
+                    </button>
+                </div>
+            </div>
+            <div [attr.id]="id + '-content'" class="p-toggleable-content" [@panelContent]="collapsed ? {value: 'hidden', params: {transitionParams: animating ? transitionOptions : '0ms', height: '0', opacity:'0'}} : {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*', opacity: '1'}}" (@panelContent.done)="onToggleDone($event)"
+                role="region" [attr.aria-hidden]="collapsed" [attr.aria-labelledby]="id  + '-titlebar'">
+                <div class="p-panel-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+
+                <div class="p-panel-footer" *ngIf="footerFacet || footerTemplate">
+                    <ng-content select="p-footer"></ng-content>
+                    <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+                </div>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('panelContent', [
+                            state('hidden', style({
+                                height: '0',
+                                overflow: 'hidden'
+                            })),
+                            state('void', style({
+                                height: '{{height}}'
+                            }), { params: { height: '0' } }),
+                            state('visible', style({
+                                height: '*'
+                            })),
+                            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+                            transition('void => hidden', animate('{{transitionParams}}')),
+                            transition('void => visible', animate('{{transitionParams}}'))
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-panel-header{display:flex;justify-content:space-between;align-items:center}.p-panel-title{line-height:1}.p-panel-header-icon{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { toggleable: [{
+                type: Input
+            }], header: [{
+                type: Input
+            }], collapsed: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], expandIcon: [{
+                type: Input
+            }], collapseIcon: [{
+                type: Input
+            }], showHeader: [{
+                type: Input
+            }], toggler: [{
+                type: Input
+            }], collapsedChange: [{
+                type: Output
+            }], onBeforeToggle: [{
+                type: Output
+            }], onAfterToggle: [{
+                type: Output
+            }], transitionOptions: [{
+                type: Input
+            }], footerFacet: [{
+                type: ContentChild,
+                args: [Footer]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class PanelModule {
+}
+PanelModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+PanelModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelModule, declarations: [Panel], imports: [CommonModule, SharedModule, RippleModule], exports: [Panel, SharedModule] });
+PanelModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelModule, imports: [[CommonModule, SharedModule, RippleModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, RippleModule],
+                    exports: [Panel, SharedModule],
+                    declarations: [Panel]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Panel, PanelModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-panel.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-panel.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-panel.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-panel.mjs","sources":["../../src/app/components/panel/panel.ts","../../src/app/components/panel/primeng-panel.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,EventEmitter,ElementRef,ContentChild,ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, QueryList, TemplateRef, AfterContentInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SharedModule,Footer, PrimeTemplate} from 'primeng/api';\nimport {BlockableUI} from 'primeng/api';\nimport {RippleModule} from 'primeng/ripple';\nimport {trigger,state,style,transition,animate} from '@angular/animations';\n\nlet idx: number = 0;\n\n@Component({\n    selector: 'p-panel',\n    template: `\n        <div [attr.id]=\"id\" [ngClass]=\"{'p-panel p-component': true, 'p-panel-toggleable': toggleable}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-panel-header\" *ngIf=\"showHeader\" (click)=\"onHeaderClick($event)\" [attr.id]=\"id + '-titlebar'\">\n                <span class=\"p-panel-title\" *ngIf=\"header\" [attr.id]=\"id + '_header'\">{{header}}</span>\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                <div class=\"p-panel-icons\">\n                    <ng-template *ngTemplateOutlet=\"iconTemplate\"></ng-template>\n                    <button *ngIf=\"toggleable\" type=\"button\" [attr.id]=\"id + '-label'\" class=\"p-panel-header-icon p-panel-toggler p-link\" pRipple\n                        (click)=\"onIconClick($event)\" (keydown.enter)=\"onIconClick($event)\" [attr.aria-controls]=\"id + '-content'\" role=\"tab\" [attr.aria-expanded]=\"!collapsed\">\n                        <span [class]=\"collapsed ? expandIcon : collapseIcon\"></span>\n                    </button>\n                </div>\n            </div>\n            <div [attr.id]=\"id + '-content'\" class=\"p-toggleable-content\" [@panelContent]=\"collapsed ? {value: 'hidden', params: {transitionParams: animating ? transitionOptions : '0ms', height: '0', opacity:'0'}} : {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*', opacity: '1'}}\" (@panelContent.done)=\"onToggleDone($event)\"\n                role=\"region\" [attr.aria-hidden]=\"collapsed\" [attr.aria-labelledby]=\"id  + '-titlebar'\">\n                <div class=\"p-panel-content\">\n                    <ng-content></ng-content>\n                    <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                </div>\n\n                <div class=\"p-panel-footer\" *ngIf=\"footerFacet || footerTemplate\">\n                    <ng-content select=\"p-footer\"></ng-content>\n                    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n                </div>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('panelContent', [\n            state('hidden', style({\n                height: '0',\n                overflow: 'hidden'\n            })),\n            state('void', style({\n                height: '{{height}}'\n            }), {params: {height: '0'}}),\n            state('visible', style({\n                height: '*'\n            })),\n            transition('visible <=> hidden', [style({ overflow: 'hidden'}), animate('{{transitionParams}}')]),\n            transition('void => hidden', animate('{{transitionParams}}')),\n            transition('void => visible', animate('{{transitionParams}}'))\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./panel.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Panel implements AfterContentInit,BlockableUI {\n\n    @Input() toggleable: boolean;\n\n    @Input() header: string;\n\n    @Input() collapsed: boolean = false;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() expandIcon: string = 'pi pi-plus';\n\n    @Input() collapseIcon: string = 'pi pi-minus';\n\n    @Input() showHeader: boolean = true;\n\n    @Input() toggler: string = \"icon\";\n\n    @Output() collapsedChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBeforeToggle: EventEmitter<any> = new EventEmitter();\n\n    @Output() onAfterToggle: EventEmitter<any> = new EventEmitter();\n\n    @Input() transitionOptions: string = '400ms cubic-bezier(0.86, 0, 0.07, 1)';\n\n    @ContentChild(Footer) footerFacet;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    public iconTemplate: TemplateRef<any>;\n\n    animating: boolean;\n\n    headerTemplate: TemplateRef<any>;\n\n    contentTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    id: string = `p-panel-${idx++}`;\n\n    constructor(private el: ElementRef) { }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                case 'icons':\n                    this.iconTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    onHeaderClick(event: Event) {\n        if (this.toggler === 'header') {\n            this.toggle(event);\n        }\n    }\n\n    onIconClick(event: Event) {\n        if (this.toggler === 'icon') {\n            this.toggle(event);\n        }\n    }\n\n    toggle(event: Event) {\n        if (this.animating) {\n            return false;\n        }\n\n        this.animating = true;\n        this.onBeforeToggle.emit({originalEvent: event, collapsed: this.collapsed});\n\n        if (this.toggleable) {\n            if (this.collapsed)\n                this.expand(event);\n            else\n                this.collapse(event);\n        }\n\n        event.preventDefault();\n    }\n\n    expand(event) {\n        this.collapsed = false;\n        this.collapsedChange.emit(this.collapsed);\n    }\n\n    collapse(event) {\n        this.collapsed = true;\n        this.collapsedChange.emit(this.collapsed);\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    onToggleDone(event: Event) {\n        this.animating = false;\n        this.onAfterToggle.emit({originalEvent: event, collapsed: this.collapsed});\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,SharedModule,RippleModule],\n    exports: [Panel,SharedModule],\n    declarations: [Panel]\n})\nexport class PanelModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-panelmenu.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-panelmenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-panelmenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,313 @@
+import * as i0 from '@angular/core';
+import { Component, ViewEncapsulation, Input, ChangeDetectionStrategy, NgModule } from '@angular/core';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import * as i2 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+import { DomHandler } from 'primeng/dom';
+
+class BasePanelMenuItem {
+    constructor(ref) {
+        this.ref = ref;
+    }
+    handleClick(event, item) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        item.expanded = !item.expanded;
+        this.ref.detectChanges();
+        if (!item.url) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+    }
+}
+class PanelMenuSub extends BasePanelMenuItem {
+    constructor(ref) {
+        super(ref);
+    }
+    onItemKeyDown(event) {
+        let listItem = event.currentTarget;
+        switch (event.code) {
+            case 'Space':
+            case 'Enter':
+                if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {
+                    listItem.click();
+                }
+                event.preventDefault();
+                break;
+            default:
+                break;
+        }
+    }
+}
+PanelMenuSub.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelMenuSub, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+PanelMenuSub.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: PanelMenuSub, selector: "p-panelMenuSub", inputs: { item: "item", expanded: "expanded", parentExpanded: "parentExpanded", transitionOptions: "transitionOptions", root: "root" }, host: { classAttribute: "p-element" }, usesInheritance: true, ngImport: i0, template: `
+        <ul [ngClass]="{'p-submenu-list': true, 'p-panelmenu-root-submenu': root}" [@submenu]="expanded ? {value: 'visible', params: {transitionParams: transitionOptions, height: '*'}} : {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}}" role="tree">
+            <ng-template ngFor let-child [ngForOf]="item.items">
+                <li *ngIf="child.separator" class="p-menu-separator" role="separator">
+                <li *ngIf="!child.separator" class="p-menuitem" [ngClass]="child.styleClass" [class.p-hidden]="child.visible === false" [ngStyle]="child.style" pTooltip [tooltipOptions]="child.tooltipOptions">
+                    <a *ngIf="!child.routerLink" (keydown)="onItemKeyDown($event)" [attr.href]="child.url" class="p-menuitem-link" [attr.tabindex]="!item.expanded || !parentExpanded ? null : child.disabled ? null : '0'" [attr.id]="child.id"
+                        [ngClass]="{'p-disabled':child.disabled}" role="treeitem" [attr.aria-expanded]="child.expanded"
+                        (click)="handleClick($event,child)" [attr.target]="child.target" [attr.title]="child.title">
+                        <span class="p-panelmenu-icon pi pi-fw" [ngClass]="{'pi-angle-right':!child.expanded,'pi-angle-down':child.expanded}" *ngIf="child.items"></span>
+                        <span class="p-menuitem-icon" [ngClass]="child.icon" *ngIf="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlLabel">{{child.label}}</span>
+                        <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                    </a>
+                    <a *ngIf="child.routerLink" (keydown)="onItemKeyDown($event)"  [routerLink]="child.routerLink" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link"
+                        [ngClass]="{'p-disabled':child.disabled}" [attr.tabindex]="!item.expanded || !parentExpanded ? null : child.disabled ? null : '0'" [attr.id]="child.id" role="treeitem" [attr.aria-expanded]="child.expanded"
+                        (click)="handleClick($event,child)" [attr.target]="child.target" [attr.title]="child.title"
+                        [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state">
+                        <span class="p-panelmenu-icon pi pi-fw" [ngClass]="{'pi-angle-right':!child.expanded,'pi-angle-down':child.expanded}" *ngIf="child.items"></span>
+                        <span class="p-menuitem-icon" [ngClass]="child.icon" *ngIf="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                    </a>
+                    <p-panelMenuSub [item]="child" [parentExpanded]="expanded && parentExpanded" [expanded]="child.expanded" [transitionOptions]="transitionOptions" *ngIf="child.items"></p-panelMenuSub>
+                </li>
+            </ng-template>
+        </ul>
+    `, isInline: true, components: [{ type: PanelMenuSub, selector: "p-panelMenuSub", inputs: ["item", "expanded", "parentExpanded", "transitionOptions", "root"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], animations: [
+        trigger('submenu', [
+            state('hidden', style({
+                height: '0',
+                overflow: 'hidden'
+            })),
+            state('visible', style({
+                height: '*'
+            })),
+            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+            transition('void => *', animate(0))
+        ])
+    ], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelMenuSub, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-panelMenuSub',
+                    template: `
+        <ul [ngClass]="{'p-submenu-list': true, 'p-panelmenu-root-submenu': root}" [@submenu]="expanded ? {value: 'visible', params: {transitionParams: transitionOptions, height: '*'}} : {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}}" role="tree">
+            <ng-template ngFor let-child [ngForOf]="item.items">
+                <li *ngIf="child.separator" class="p-menu-separator" role="separator">
+                <li *ngIf="!child.separator" class="p-menuitem" [ngClass]="child.styleClass" [class.p-hidden]="child.visible === false" [ngStyle]="child.style" pTooltip [tooltipOptions]="child.tooltipOptions">
+                    <a *ngIf="!child.routerLink" (keydown)="onItemKeyDown($event)" [attr.href]="child.url" class="p-menuitem-link" [attr.tabindex]="!item.expanded || !parentExpanded ? null : child.disabled ? null : '0'" [attr.id]="child.id"
+                        [ngClass]="{'p-disabled':child.disabled}" role="treeitem" [attr.aria-expanded]="child.expanded"
+                        (click)="handleClick($event,child)" [attr.target]="child.target" [attr.title]="child.title">
+                        <span class="p-panelmenu-icon pi pi-fw" [ngClass]="{'pi-angle-right':!child.expanded,'pi-angle-down':child.expanded}" *ngIf="child.items"></span>
+                        <span class="p-menuitem-icon" [ngClass]="child.icon" *ngIf="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlLabel">{{child.label}}</span>
+                        <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                    </a>
+                    <a *ngIf="child.routerLink" (keydown)="onItemKeyDown($event)"  [routerLink]="child.routerLink" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link"
+                        [ngClass]="{'p-disabled':child.disabled}" [attr.tabindex]="!item.expanded || !parentExpanded ? null : child.disabled ? null : '0'" [attr.id]="child.id" role="treeitem" [attr.aria-expanded]="child.expanded"
+                        (click)="handleClick($event,child)" [attr.target]="child.target" [attr.title]="child.title"
+                        [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state">
+                        <span class="p-panelmenu-icon pi pi-fw" [ngClass]="{'pi-angle-right':!child.expanded,'pi-angle-down':child.expanded}" *ngIf="child.items"></span>
+                        <span class="p-menuitem-icon" [ngClass]="child.icon" *ngIf="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                    </a>
+                    <p-panelMenuSub [item]="child" [parentExpanded]="expanded && parentExpanded" [expanded]="child.expanded" [transitionOptions]="transitionOptions" *ngIf="child.items"></p-panelMenuSub>
+                </li>
+            </ng-template>
+        </ul>
+    `,
+                    animations: [
+                        trigger('submenu', [
+                            state('hidden', style({
+                                height: '0',
+                                overflow: 'hidden'
+                            })),
+                            state('visible', style({
+                                height: '*'
+                            })),
+                            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+                            transition('void => *', animate(0))
+                        ])
+                    ],
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{
+                type: Input
+            }], expanded: [{
+                type: Input
+            }], parentExpanded: [{
+                type: Input
+            }], transitionOptions: [{
+                type: Input
+            }], root: [{
+                type: Input
+            }] } });
+class PanelMenu extends BasePanelMenuItem {
+    constructor(ref) {
+        super(ref);
+        this.multiple = true;
+        this.transitionOptions = '400ms cubic-bezier(0.86, 0, 0.07, 1)';
+    }
+    collapseAll() {
+        for (let item of this.model) {
+            if (item.expanded) {
+                item.expanded = false;
+            }
+        }
+    }
+    handleClick(event, item) {
+        if (!this.multiple) {
+            for (let modelItem of this.model) {
+                if (item !== modelItem && modelItem.expanded) {
+                    modelItem.expanded = false;
+                }
+            }
+        }
+        this.animating = true;
+        super.handleClick(event, item);
+    }
+    onToggleDone() {
+        this.animating = false;
+    }
+    onItemKeyDown(event) {
+        let listItem = event.currentTarget;
+        switch (event.code) {
+            case 'Space':
+            case 'Enter':
+                if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {
+                    listItem.click();
+                }
+                event.preventDefault();
+                break;
+            default:
+                break;
+        }
+    }
+}
+PanelMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelMenu, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+PanelMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: PanelMenu, selector: "p-panelMenu", inputs: { model: "model", style: "style", styleClass: "styleClass", multiple: "multiple", transitionOptions: "transitionOptions" }, host: { classAttribute: "p-element" }, usesInheritance: true, ngImport: i0, template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-panelmenu p-component'">
+            <ng-container *ngFor="let item of model;let f=first;let l=last;">
+                <div class="p-panelmenu-panel" [ngClass]="{'p-hidden': item.visible === false}">
+                    <div [ngClass]="{'p-component p-panelmenu-header':true, 'p-highlight':item.expanded,'p-disabled':item.disabled}" [class]="item.styleClass" [ngStyle]="item.style" pTooltip [tooltipOptions]="item.tooltipOptions">
+                        <a *ngIf="!item.routerLink" [attr.href]="item.url" (click)="handleClick($event,item)" (keydown)="onItemKeyDown($event)" [attr.tabindex]="item.disabled ? null : '0'" [attr.id]="item.id"
+                           [attr.target]="item.target" [attr.title]="item.title" class="p-panelmenu-header-link" [attr.aria-expanded]="item.expanded" [attr.id]="item.id + '_header'" [attr.aria-controls]="item.id +'_content'">
+                            <span *ngIf="item.items" class="p-panelmenu-icon pi" [ngClass]="{'pi-chevron-right':!item.expanded,'pi-chevron-down':item.expanded}"></span>
+                            <span class="p-menuitem-icon" [ngClass]="item.icon" *ngIf="item.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+                            <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                        </a>
+                        <a *ngIf="item.routerLink" [routerLink]="item.routerLink" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}"
+                           (click)="handleClick($event,item)" (keydown)="onItemKeyDown($event)" [attr.target]="item.target" [attr.title]="item.title" class="p-panelmenu-header-link" [attr.id]="item.id" [attr.tabindex]="item.disabled ? null : '0'"
+                           [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                            <span *ngIf="item.items" class="p-panelmenu-icon pi" [ngClass]="{'pi-chevron-right':!item.expanded,'pi-chevron-down':item.expanded}"></span>
+                            <span class="p-menuitem-icon" [ngClass]="item.icon" *ngIf="item.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+                            <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                        </a>
+                    </div>
+                    <div *ngIf="item.items" class="p-toggleable-content" [@rootItem]="item.expanded ? {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*'}} : {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}}"  (@rootItem.done)="onToggleDone()">
+                        <div class="p-panelmenu-content" role="region" [attr.id]="item.id +'_content' " [attr.aria-labelledby]="item.id +'_header'">
+                            <p-panelMenuSub [item]="item" [parentExpanded]="item.expanded" [expanded]="true" [transitionOptions]="transitionOptions" [root]="true"></p-panelMenuSub>
+                        </div>
+                    </div>
+                </div>
+            </ng-container>
+        </div>
+    `, isInline: true, styles: [".p-panelmenu .p-panelmenu-header-link{display:flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;position:relative;text-decoration:none}.p-panelmenu .p-panelmenu-header-link:focus{z-index:1}.p-panelmenu .p-submenu-list{margin:0;padding:0;list-style:none}.p-panelmenu .p-menuitem-link{display:flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;text-decoration:none}.p-panelmenu .p-menuitem-text{line-height:1}\n"], components: [{ type: PanelMenuSub, selector: "p-panelMenuSub", inputs: ["item", "expanded", "parentExpanded", "transitionOptions", "root"] }], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], animations: [
+        trigger('rootItem', [
+            state('hidden', style({
+                height: '0',
+                overflow: 'hidden'
+            })),
+            state('visible', style({
+                height: '*'
+            })),
+            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+            transition('void => *', animate(0))
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelMenu, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-panelMenu', template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-panelmenu p-component'">
+            <ng-container *ngFor="let item of model;let f=first;let l=last;">
+                <div class="p-panelmenu-panel" [ngClass]="{'p-hidden': item.visible === false}">
+                    <div [ngClass]="{'p-component p-panelmenu-header':true, 'p-highlight':item.expanded,'p-disabled':item.disabled}" [class]="item.styleClass" [ngStyle]="item.style" pTooltip [tooltipOptions]="item.tooltipOptions">
+                        <a *ngIf="!item.routerLink" [attr.href]="item.url" (click)="handleClick($event,item)" (keydown)="onItemKeyDown($event)" [attr.tabindex]="item.disabled ? null : '0'" [attr.id]="item.id"
+                           [attr.target]="item.target" [attr.title]="item.title" class="p-panelmenu-header-link" [attr.aria-expanded]="item.expanded" [attr.id]="item.id + '_header'" [attr.aria-controls]="item.id +'_content'">
+                            <span *ngIf="item.items" class="p-panelmenu-icon pi" [ngClass]="{'pi-chevron-right':!item.expanded,'pi-chevron-down':item.expanded}"></span>
+                            <span class="p-menuitem-icon" [ngClass]="item.icon" *ngIf="item.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+                            <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                        </a>
+                        <a *ngIf="item.routerLink" [routerLink]="item.routerLink" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}"
+                           (click)="handleClick($event,item)" (keydown)="onItemKeyDown($event)" [attr.target]="item.target" [attr.title]="item.title" class="p-panelmenu-header-link" [attr.id]="item.id" [attr.tabindex]="item.disabled ? null : '0'"
+                           [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                            <span *ngIf="item.items" class="p-panelmenu-icon pi" [ngClass]="{'pi-chevron-right':!item.expanded,'pi-chevron-down':item.expanded}"></span>
+                            <span class="p-menuitem-icon" [ngClass]="item.icon" *ngIf="item.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+                            <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                        </a>
+                    </div>
+                    <div *ngIf="item.items" class="p-toggleable-content" [@rootItem]="item.expanded ? {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*'}} : {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}}"  (@rootItem.done)="onToggleDone()">
+                        <div class="p-panelmenu-content" role="region" [attr.id]="item.id +'_content' " [attr.aria-labelledby]="item.id +'_header'">
+                            <p-panelMenuSub [item]="item" [parentExpanded]="item.expanded" [expanded]="true" [transitionOptions]="transitionOptions" [root]="true"></p-panelMenuSub>
+                        </div>
+                    </div>
+                </div>
+            </ng-container>
+        </div>
+    `, animations: [
+                        trigger('rootItem', [
+                            state('hidden', style({
+                                height: '0',
+                                overflow: 'hidden'
+                            })),
+                            state('visible', style({
+                                height: '*'
+                            })),
+                            transition('visible <=> hidden', [style({ overflow: 'hidden' }), animate('{{transitionParams}}')]),
+                            transition('void => *', animate(0))
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-panelmenu .p-panelmenu-header-link{display:flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;position:relative;text-decoration:none}.p-panelmenu .p-panelmenu-header-link:focus{z-index:1}.p-panelmenu .p-submenu-list{margin:0;padding:0;list-style:none}.p-panelmenu .p-menuitem-link{display:flex;align-items:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;text-decoration:none}.p-panelmenu .p-menuitem-text{line-height:1}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], multiple: [{
+                type: Input
+            }], transitionOptions: [{
+                type: Input
+            }] } });
+class PanelMenuModule {
+}
+PanelMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+PanelMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelMenuModule, declarations: [PanelMenu, PanelMenuSub], imports: [CommonModule, RouterModule, TooltipModule], exports: [PanelMenu, RouterModule, TooltipModule] });
+PanelMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelMenuModule, imports: [[CommonModule, RouterModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PanelMenuModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, TooltipModule],
+                    exports: [PanelMenu, RouterModule, TooltipModule],
+                    declarations: [PanelMenu, PanelMenuSub]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { BasePanelMenuItem, PanelMenu, PanelMenuModule, PanelMenuSub };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-panelmenu.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-panelmenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-panelmenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-panelmenu.mjs","sources":["../../src/app/components/panelmenu/panelmenu.ts","../../src/app/components/panelmenu/primeng-panelmenu.ts"],"sourcesContent":["import {NgModule,Component,Input,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {trigger,state,style,transition,animate} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {MenuItem} from 'primeng/api';\nimport {RouterModule} from '@angular/router';\nimport {TooltipModule} from 'primeng/tooltip';\nimport {DomHandler} from 'primeng/dom';\n\nexport class BasePanelMenuItem {\n\n    constructor(private ref: ChangeDetectorRef) {}\n\n    handleClick(event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        item.expanded = !item.expanded;\n        this.ref.detectChanges();\n\n        if (!item.url) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    }\n}\n\n@Component({\n    selector: 'p-panelMenuSub',\n    template: `\n        <ul [ngClass]=\"{'p-submenu-list': true, 'p-panelmenu-root-submenu': root}\" [@submenu]=\"expanded ? {value: 'visible', params: {transitionParams: transitionOptions, height: '*'}} : {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}}\" role=\"tree\">\n            <ng-template ngFor let-child [ngForOf]=\"item.items\">\n                <li *ngIf=\"child.separator\" class=\"p-menu-separator\" role=\"separator\">\n                <li *ngIf=\"!child.separator\" class=\"p-menuitem\" [ngClass]=\"child.styleClass\" [class.p-hidden]=\"child.visible === false\" [ngStyle]=\"child.style\" pTooltip [tooltipOptions]=\"child.tooltipOptions\">\n                    <a *ngIf=\"!child.routerLink\" (keydown)=\"onItemKeyDown($event)\" [attr.href]=\"child.url\" class=\"p-menuitem-link\" [attr.tabindex]=\"!item.expanded || !parentExpanded ? null : child.disabled ? null : '0'\" [attr.id]=\"child.id\"\n                        [ngClass]=\"{'p-disabled':child.disabled}\" role=\"treeitem\" [attr.aria-expanded]=\"child.expanded\"\n                        (click)=\"handleClick($event,child)\" [attr.target]=\"child.target\" [attr.title]=\"child.title\">\n                        <span class=\"p-panelmenu-icon pi pi-fw\" [ngClass]=\"{'pi-angle-right':!child.expanded,'pi-angle-down':child.expanded}\" *ngIf=\"child.items\"></span>\n                        <span class=\"p-menuitem-icon\" [ngClass]=\"child.icon\" *ngIf=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlLabel\">{{child.label}}</span>\n                        <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                    </a>\n                    <a *ngIf=\"child.routerLink\" (keydown)=\"onItemKeyDown($event)\"  [routerLink]=\"child.routerLink\" [queryParams]=\"child.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" [routerLinkActiveOptions]=\"child.routerLinkActiveOptions||{exact:false}\" class=\"p-menuitem-link\"\n                        [ngClass]=\"{'p-disabled':child.disabled}\" [attr.tabindex]=\"!item.expanded || !parentExpanded ? null : child.disabled ? null : '0'\" [attr.id]=\"child.id\" role=\"treeitem\" [attr.aria-expanded]=\"child.expanded\"\n                        (click)=\"handleClick($event,child)\" [attr.target]=\"child.target\" [attr.title]=\"child.title\"\n                        [fragment]=\"child.fragment\" [queryParamsHandling]=\"child.queryParamsHandling\" [preserveFragment]=\"child.preserveFragment\" [skipLocationChange]=\"child.skipLocationChange\" [replaceUrl]=\"child.replaceUrl\" [state]=\"child.state\">\n                        <span class=\"p-panelmenu-icon pi pi-fw\" [ngClass]=\"{'pi-angle-right':!child.expanded,'pi-angle-down':child.expanded}\" *ngIf=\"child.items\"></span>\n                        <span class=\"p-menuitem-icon\" [ngClass]=\"child.icon\" *ngIf=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlRouteLabel\">{{child.label}}</span>\n                        <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                    </a>\n                    <p-panelMenuSub [item]=\"child\" [parentExpanded]=\"expanded && parentExpanded\" [expanded]=\"child.expanded\" [transitionOptions]=\"transitionOptions\" *ngIf=\"child.items\"></p-panelMenuSub>\n                </li>\n            </ng-template>\n        </ul>\n    `,\n    animations: [\n        trigger('submenu', [\n            state('hidden', style({\n                height: '0',\n                overflow: 'hidden'\n            })),\n            state('visible', style({\n                height: '*'\n            })),\n            transition('visible <=> hidden', [style({overflow: 'hidden'}), animate('{{transitionParams}}')]),\n            transition('void => *', animate(0))\n        ])\n    ],\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class PanelMenuSub extends BasePanelMenuItem {\n\n    @Input() item: MenuItem;\n\n    @Input() expanded: boolean;\n\n    @Input() parentExpanded: boolean;\n\n    @Input() transitionOptions: string;\n\n    @Input() root: boolean;\n\n    constructor(ref: ChangeDetectorRef) {\n        super(ref);\n    }\n\n\n\n    onItemKeyDown(event) {\n        let listItem = event.currentTarget;\n\n        switch (event.code) {\n            case 'Space':\n            case 'Enter':\n                if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {\n                    listItem.click();\n                }\n\n                event.preventDefault();\n            break;\n\n            default:\n            break;\n        }\n    }\n}\n\n@Component({\n    selector: 'p-panelMenu',\n    template: `\n        <div [class]=\"styleClass\" [ngStyle]=\"style\" [ngClass]=\"'p-panelmenu p-component'\">\n            <ng-container *ngFor=\"let item of model;let f=first;let l=last;\">\n                <div class=\"p-panelmenu-panel\" [ngClass]=\"{'p-hidden': item.visible === false}\">\n                    <div [ngClass]=\"{'p-component p-panelmenu-header':true, 'p-highlight':item.expanded,'p-disabled':item.disabled}\" [class]=\"item.styleClass\" [ngStyle]=\"item.style\" pTooltip [tooltipOptions]=\"item.tooltipOptions\">\n                        <a *ngIf=\"!item.routerLink\" [attr.href]=\"item.url\" (click)=\"handleClick($event,item)\" (keydown)=\"onItemKeyDown($event)\" [attr.tabindex]=\"item.disabled ? null : '0'\" [attr.id]=\"item.id\"\n                           [attr.target]=\"item.target\" [attr.title]=\"item.title\" class=\"p-panelmenu-header-link\" [attr.aria-expanded]=\"item.expanded\" [attr.id]=\"item.id + '_header'\" [attr.aria-controls]=\"item.id +'_content'\">\n                            <span *ngIf=\"item.items\" class=\"p-panelmenu-icon pi\" [ngClass]=\"{'pi-chevron-right':!item.expanded,'pi-chevron-down':item.expanded}\"></span>\n                            <span class=\"p-menuitem-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon\"></span>\n                            <span class=\"p-menuitem-text\" *ngIf=\"item.escape !== false; else htmlLabel\">{{item.label}}</span>\n                            <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n                        </a>\n                        <a *ngIf=\"item.routerLink\" [routerLink]=\"item.routerLink\" [queryParams]=\"item.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{exact:false}\"\n                           (click)=\"handleClick($event,item)\" (keydown)=\"onItemKeyDown($event)\" [attr.target]=\"item.target\" [attr.title]=\"item.title\" class=\"p-panelmenu-header-link\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled ? null : '0'\"\n                           [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\" [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\">\n                            <span *ngIf=\"item.items\" class=\"p-panelmenu-icon pi\" [ngClass]=\"{'pi-chevron-right':!item.expanded,'pi-chevron-down':item.expanded}\"></span>\n                            <span class=\"p-menuitem-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon\"></span>\n                            <span class=\"p-menuitem-text\" *ngIf=\"item.escape !== false; else htmlRouteLabel\">{{item.label}}</span>\n                            <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n                        </a>\n                    </div>\n                    <div *ngIf=\"item.items\" class=\"p-toggleable-content\" [@rootItem]=\"item.expanded ? {value: 'visible', params: {transitionParams: animating ? transitionOptions : '0ms', height: '*'}} : {value: 'hidden', params: {transitionParams: transitionOptions, height: '0'}}\"  (@rootItem.done)=\"onToggleDone()\">\n                        <div class=\"p-panelmenu-content\" role=\"region\" [attr.id]=\"item.id +'_content' \" [attr.aria-labelledby]=\"item.id +'_header'\">\n                            <p-panelMenuSub [item]=\"item\" [parentExpanded]=\"item.expanded\" [expanded]=\"true\" [transitionOptions]=\"transitionOptions\" [root]=\"true\"></p-panelMenuSub>\n                        </div>\n                    </div>\n                </div>\n            </ng-container>\n        </div>\n    `,\n    animations: [\n        trigger('rootItem', [\n            state('hidden', style({\n                height: '0',\n                overflow: 'hidden'\n            })),\n            state('visible', style({\n                height: '*'\n            })),\n            transition('visible <=> hidden', [style({overflow: 'hidden'}), animate('{{transitionParams}}')]),\n            transition('void => *', animate(0))\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./panelmenu.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class PanelMenu extends BasePanelMenuItem {\n\n    @Input() model: MenuItem[];\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() multiple: boolean = true;\n\n    @Input() transitionOptions: string = '400ms cubic-bezier(0.86, 0, 0.07, 1)';\n\n    public animating: boolean;\n\n    constructor(ref: ChangeDetectorRef) {\n        super(ref);\n    }\n\n    collapseAll() {\n    \tfor(let item of this.model) {\n    \t\tif (item.expanded) {\n    \t\t\titem.expanded = false;\n    \t\t}\n    \t}\n    }\n\n    handleClick(event, item) {\n    \tif (!this.multiple) {\n            for(let modelItem of this.model) {\n        \t\tif (item !== modelItem && modelItem.expanded) {\n        \t\t\tmodelItem.expanded = false;\n        \t\t}\n        \t}\n    \t}\n\n        this.animating = true;\n        super.handleClick(event, item);\n    }\n\n    onToggleDone() {\n        this.animating = false;\n    }\n\n    onItemKeyDown(event) {\n        let listItem = event.currentTarget;\n\n        switch (event.code) {\n            case 'Space':\n            case 'Enter':\n                if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {\n                    listItem.click();\n                }\n\n                event.preventDefault();\n            break;\n\n            default:\n            break;\n        }\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,TooltipModule],\n    exports: [PanelMenu,RouterModule,TooltipModule],\n    declarations: [PanelMenu,PanelMenuSub]\n})\nexport class PanelMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-password.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-password.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-password.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,638 @@
+import * as i0 from '@angular/core';
+import { Directive, Input, HostListener, forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, Output, ContentChildren, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { trigger, transition, style, animate } from '@angular/animations';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import * as i1 from 'primeng/api';
+import { TranslationKeys, PrimeTemplate, SharedModule } from 'primeng/api';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i3 from 'primeng/inputtext';
+import { InputTextModule } from 'primeng/inputtext';
+
+class PasswordDirective {
+    constructor(el, zone) {
+        this.el = el;
+        this.zone = zone;
+        this.promptLabel = 'Enter a password';
+        this.weakLabel = 'Weak';
+        this.mediumLabel = 'Medium';
+        this.strongLabel = 'Strong';
+        this.feedback = true;
+    }
+    set showPassword(show) {
+        this.el.nativeElement.type = show ? 'text' : 'password';
+    }
+    ngDoCheck() {
+        this.updateFilledState();
+    }
+    onInput(e) {
+        this.updateFilledState();
+    }
+    updateFilledState() {
+        this.filled = this.el.nativeElement.value && this.el.nativeElement.value.length;
+    }
+    createPanel() {
+        this.panel = document.createElement('div');
+        this.panel.className = 'p-password-panel p-component p-password-panel-overlay p-connected-overlay';
+        this.meter = document.createElement('div');
+        this.meter.className = 'p-password-meter';
+        this.info = document.createElement('div');
+        this.info.className = 'p-password-info';
+        this.info.textContent = this.promptLabel;
+        this.panel.appendChild(this.meter);
+        this.panel.appendChild(this.info);
+        this.panel.style.minWidth = DomHandler.getOuterWidth(this.el.nativeElement) + 'px';
+        document.body.appendChild(this.panel);
+    }
+    showOverlay() {
+        if (this.feedback) {
+            if (!this.panel) {
+                this.createPanel();
+            }
+            this.panel.style.zIndex = String(++DomHandler.zindex);
+            this.panel.style.display = 'block';
+            this.zone.runOutsideAngular(() => {
+                setTimeout(() => {
+                    DomHandler.addClass(this.panel, 'p-connected-overlay-visible');
+                    this.bindScrollListener();
+                    this.bindDocumentResizeListener();
+                }, 1);
+            });
+            DomHandler.absolutePosition(this.panel, this.el.nativeElement);
+        }
+    }
+    hideOverlay() {
+        if (this.feedback && this.panel) {
+            DomHandler.addClass(this.panel, 'p-connected-overlay-hidden');
+            DomHandler.removeClass(this.panel, 'p-connected-overlay-visible');
+            this.unbindScrollListener();
+            this.unbindDocumentResizeListener();
+            this.zone.runOutsideAngular(() => {
+                setTimeout(() => {
+                    this.ngOnDestroy();
+                }, 150);
+            });
+        }
+    }
+    onFocus() {
+        this.showOverlay();
+    }
+    onBlur() {
+        this.hideOverlay();
+    }
+    onKeyup(e) {
+        if (this.feedback) {
+            let value = e.target.value, label = null, meterPos = null;
+            if (value.length === 0) {
+                label = this.promptLabel;
+                meterPos = '0px 0px';
+            }
+            else {
+                var score = this.testStrength(value);
+                if (score < 30) {
+                    label = this.weakLabel;
+                    meterPos = '0px -10px';
+                }
+                else if (score >= 30 && score < 80) {
+                    label = this.mediumLabel;
+                    meterPos = '0px -20px';
+                }
+                else if (score >= 80) {
+                    label = this.strongLabel;
+                    meterPos = '0px -30px';
+                }
+            }
+            if (!this.panel || !DomHandler.hasClass(this.panel, 'p-connected-overlay-visible')) {
+                this.showOverlay();
+            }
+            this.meter.style.backgroundPosition = meterPos;
+            this.info.textContent = label;
+        }
+    }
+    testStrength(str) {
+        let grade = 0;
+        let val;
+        val = str.match('[0-9]');
+        grade += this.normalize(val ? val.length : 1 / 4, 1) * 25;
+        val = str.match('[a-zA-Z]');
+        grade += this.normalize(val ? val.length : 1 / 2, 3) * 10;
+        val = str.match('[!@#$%^&*?_~.,;=]');
+        grade += this.normalize(val ? val.length : 1 / 6, 1) * 35;
+        val = str.match('[A-Z]');
+        grade += this.normalize(val ? val.length : 1 / 6, 1) * 30;
+        grade *= str.length / 8;
+        return grade > 100 ? 100 : grade;
+    }
+    normalize(x, y) {
+        let diff = x - y;
+        if (diff <= 0)
+            return x / y;
+        else
+            return 1 + 0.5 * (x / (x + y / 4));
+    }
+    get disabled() {
+        return this.el.nativeElement.disabled;
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.el.nativeElement, () => {
+                if (DomHandler.hasClass(this.panel, 'p-connected-overlay-visible')) {
+                    this.hideOverlay();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    onWindowResize() {
+        this.hideOverlay();
+    }
+    ngOnDestroy() {
+        if (this.panel) {
+            if (this.scrollHandler) {
+                this.scrollHandler.destroy();
+                this.scrollHandler = null;
+            }
+            this.unbindDocumentResizeListener();
+            document.body.removeChild(this.panel);
+            this.panel = null;
+            this.meter = null;
+            this.info = null;
+        }
+    }
+}
+PasswordDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PasswordDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+PasswordDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: PasswordDirective, selector: "[pPassword]", inputs: { promptLabel: "promptLabel", weakLabel: "weakLabel", mediumLabel: "mediumLabel", strongLabel: "strongLabel", feedback: "feedback", showPassword: "showPassword" }, host: { listeners: { "input": "onInput($event)", "focus": "onFocus()", "blur": "onBlur()", "keyup": "onKeyup($event)" }, properties: { "class.p-filled": "filled" }, classAttribute: "p-inputtext p-component p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PasswordDirective, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pPassword]',
+                    host: {
+                        'class': 'p-inputtext p-component p-element',
+                        '[class.p-filled]': 'filled'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { promptLabel: [{
+                type: Input
+            }], weakLabel: [{
+                type: Input
+            }], mediumLabel: [{
+                type: Input
+            }], strongLabel: [{
+                type: Input
+            }], feedback: [{
+                type: Input
+            }], showPassword: [{
+                type: Input
+            }], onInput: [{
+                type: HostListener,
+                args: ['input', ['$event']]
+            }], onFocus: [{
+                type: HostListener,
+                args: ['focus']
+            }], onBlur: [{
+                type: HostListener,
+                args: ['blur']
+            }], onKeyup: [{
+                type: HostListener,
+                args: ['keyup', ['$event']]
+            }] } });
+const Password_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Password),
+    multi: true
+};
+class Password {
+    constructor(cd, config, el, overlayService) {
+        this.cd = cd;
+        this.config = config;
+        this.el = el;
+        this.overlayService = overlayService;
+        this.mediumRegex = '^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})';
+        this.strongRegex = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})';
+        this.feedback = true;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.overlayVisible = false;
+        this.focused = false;
+        this.unmasked = false;
+        this.value = null;
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngOnInit() {
+        this.infoText = this.promptText();
+        this.mediumCheckRegExp = new RegExp(this.mediumRegex);
+        this.strongCheckRegExp = new RegExp(this.strongRegex);
+        this.translationSubscription = this.config.translationObserver.subscribe(() => {
+            this.updateUI(this.value || "");
+        });
+    }
+    onAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.overlay = event.element;
+                ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);
+                this.appendContainer();
+                this.alignOverlay();
+                this.bindScrollListener();
+                this.bindResizeListener();
+                break;
+            case 'void':
+                this.unbindScrollListener();
+                this.unbindResizeListener();
+                this.overlay = null;
+                break;
+        }
+    }
+    onAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                ZIndexUtils.clear(event.element);
+                break;
+        }
+    }
+    appendContainer() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.overlay);
+            else
+                document.getElementById(this.appendTo).appendChild(this.overlay);
+        }
+    }
+    alignOverlay() {
+        if (this.appendTo) {
+            this.overlay.style.minWidth = DomHandler.getOuterWidth(this.input.nativeElement) + 'px';
+            DomHandler.absolutePosition(this.overlay, this.input.nativeElement);
+        }
+        else {
+            DomHandler.relativePosition(this.overlay, this.input.nativeElement);
+        }
+    }
+    onInput(event) {
+        this.value = event.target.value;
+        this.onModelChange(this.value);
+        this.onModelTouched();
+    }
+    onInputFocus(event) {
+        this.focused = true;
+        if (this.feedback) {
+            this.overlayVisible = true;
+        }
+        this.onFocus.emit(event);
+    }
+    onInputBlur(event) {
+        this.focused = false;
+        if (this.feedback) {
+            this.overlayVisible = false;
+        }
+        this.onBlur.emit(event);
+    }
+    onKeyUp(event) {
+        if (this.feedback) {
+            let value = event.target.value;
+            this.updateUI(value);
+            if (!this.overlayVisible) {
+                this.overlayVisible = true;
+            }
+        }
+    }
+    updateUI(value) {
+        let label = null;
+        let meter = null;
+        switch (this.testStrength(value)) {
+            case 1:
+                label = this.weakText();
+                meter = {
+                    strength: 'weak',
+                    width: '33.33%'
+                };
+                break;
+            case 2:
+                label = this.mediumText();
+                meter = {
+                    strength: 'medium',
+                    width: '66.66%'
+                };
+                break;
+            case 3:
+                label = this.strongText();
+                meter = {
+                    strength: 'strong',
+                    width: '100%'
+                };
+                break;
+            default:
+                label = this.promptText();
+                meter = null;
+                break;
+        }
+        this.meter = meter;
+        this.infoText = label;
+    }
+    onMaskToggle() {
+        this.unmasked = !this.unmasked;
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+    }
+    testStrength(str) {
+        let level = 0;
+        if (this.strongCheckRegExp.test(str))
+            level = 3;
+        else if (this.mediumCheckRegExp.test(str))
+            level = 2;
+        else if (str.length)
+            level = 1;
+        return level;
+    }
+    writeValue(value) {
+        if (value === undefined)
+            this.value = null;
+        else
+            this.value = value;
+        if (this.feedback)
+            this.updateUI(this.value || "");
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.input.nativeElement, () => {
+                if (this.overlayVisible) {
+                    this.overlayVisible = false;
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    bindResizeListener() {
+        if (!this.resizeListener) {
+            this.resizeListener = () => {
+                if (this.overlayVisible) {
+                    this.overlayVisible = false;
+                }
+            };
+            window.addEventListener('resize', this.resizeListener);
+        }
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    unbindResizeListener() {
+        if (this.resizeListener) {
+            window.removeEventListener('resize', this.resizeListener);
+            this.resizeListener = null;
+        }
+    }
+    unbindOutsideClickListener() {
+        if (this.outsideClickListener) {
+            document.removeEventListener('click', this.outsideClickListener);
+            this.outsideClickListener = null;
+        }
+    }
+    containerClass() {
+        return { 'p-password p-component p-inputwrapper': true,
+            'p-input-icon-right': this.toggleMask
+        };
+    }
+    inputFieldClass() {
+        return { 'p-password-input': true,
+            'p-disabled': this.disabled
+        };
+    }
+    toggleIconClass() {
+        return this.unmasked ? 'pi pi-eye-slash' : 'pi pi-eye';
+    }
+    strengthClass() {
+        return `p-password-strength ${this.meter ? this.meter.strength : ''}`;
+    }
+    filled() {
+        return (this.value != null && this.value.toString().length > 0);
+    }
+    promptText() {
+        return this.promptLabel || this.getTranslation(TranslationKeys.PASSWORD_PROMPT);
+    }
+    weakText() {
+        return this.weakLabel || this.getTranslation(TranslationKeys.WEAK);
+    }
+    mediumText() {
+        return this.mediumLabel || this.getTranslation(TranslationKeys.MEDIUM);
+    }
+    strongText() {
+        return this.strongLabel || this.getTranslation(TranslationKeys.STRONG);
+    }
+    restoreAppend() {
+        if (this.overlay && this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.removeChild(this.overlay);
+            else
+                document.getElementById(this.appendTo).removeChild(this.overlay);
+        }
+    }
+    inputType() {
+        return this.unmasked ? 'text' : 'password';
+    }
+    getTranslation(option) {
+        return this.config.getTranslation(option);
+    }
+    ngOnDestroy() {
+        if (this.overlay) {
+            ZIndexUtils.clear(this.overlay);
+            this.overlay = null;
+        }
+        this.restoreAppend();
+        this.unbindResizeListener();
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        if (this.translationSubscription) {
+            this.translationSubscription.unsubscribe();
+        }
+    }
+}
+Password.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Password, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }, { token: i0.ElementRef }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+Password.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Password, selector: "p-password", inputs: { disabled: "disabled", promptLabel: "promptLabel", mediumRegex: "mediumRegex", strongRegex: "strongRegex", weakLabel: "weakLabel", mediumLabel: "mediumLabel", strongLabel: "strongLabel", inputId: "inputId", feedback: "feedback", appendTo: "appendTo", toggleMask: "toggleMask", inputStyleClass: "inputStyleClass", styleClass: "styleClass", style: "style", inputStyle: "inputStyle", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", placeholder: "placeholder" }, outputs: { onFocus: "onFocus", onBlur: "onBlur" }, host: { properties: { "class.p-inputwrapper-filled": "filled()", "class.p-inputwrapper-focus": "focused" }, classAttribute: "p-element p-inputwrapper" }, providers: [Password_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="containerClass()" [ngStyle]="style" [class]="styleClass">
+            <input #input [attr.id]="inputId" pInputText [ngClass]="inputFieldClass()" [ngStyle]="inputStyle" [class]="inputStyleClass" [attr.type]="inputType()" [attr.placeholder]="placeholder" [value]="value" (input)="onInput($event)" (focus)="onInputFocus($event)"
+                (blur)="onInputBlur($event)" (keyup)="onKeyUp($event)" />
+            <i *ngIf="toggleMask" [ngClass]="toggleIconClass()" (click)="onMaskToggle()"></i>
+            <div #overlay *ngIf="overlayVisible" [ngClass]="'p-password-panel p-component'" (click)="onOverlayClick($event)"
+                [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onAnimationStart($event)" (@overlayAnimation.done)="onAnimationEnd($event)">
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <ng-container *ngIf="contentTemplate; else content">
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </ng-container>
+                <ng-template #content>
+                    <div class="p-password-meter">
+                        <div [ngClass]="strengthClass()" [ngStyle]="{'width': meter ? meter.width : ''}"></div>
+                    </div>
+                    <div className="p-password-info">{{infoText}}</div>
+                </ng-template>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-password{position:relative;display:inline-flex}.p-password-panel{position:absolute;top:0;left:0}.p-password .p-password-panel{min-width:100%}.p-password-meter{height:10px}.p-password-strength{height:100%;width:0%;transition:width 1s ease-in-out}.p-fluid .p-password{display:flex}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.InputText, selector: "[pInputText]" }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Password, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-password', template: `
+        <div [ngClass]="containerClass()" [ngStyle]="style" [class]="styleClass">
+            <input #input [attr.id]="inputId" pInputText [ngClass]="inputFieldClass()" [ngStyle]="inputStyle" [class]="inputStyleClass" [attr.type]="inputType()" [attr.placeholder]="placeholder" [value]="value" (input)="onInput($event)" (focus)="onInputFocus($event)"
+                (blur)="onInputBlur($event)" (keyup)="onKeyUp($event)" />
+            <i *ngIf="toggleMask" [ngClass]="toggleIconClass()" (click)="onMaskToggle()"></i>
+            <div #overlay *ngIf="overlayVisible" [ngClass]="'p-password-panel p-component'" (click)="onOverlayClick($event)"
+                [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onAnimationStart($event)" (@overlayAnimation.done)="onAnimationEnd($event)">
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+                <ng-container *ngIf="contentTemplate; else content">
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </ng-container>
+                <ng-template #content>
+                    <div class="p-password-meter">
+                        <div [ngClass]="strengthClass()" [ngStyle]="{'width': meter ? meter.width : ''}"></div>
+                    </div>
+                    <div className="p-password-info">{{infoText}}</div>
+                </ng-template>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': 'filled()',
+                        '[class.p-inputwrapper-focus]': 'focused'
+                    }, providers: [Password_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".p-password{position:relative;display:inline-flex}.p-password-panel{position:absolute;top:0;left:0}.p-password .p-password-panel{min-width:100%}.p-password-meter{height:10px}.p-password-strength{height:100%;width:0%;transition:width 1s ease-in-out}.p-fluid .p-password{display:flex}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }, { type: i0.ElementRef }, { type: i1.OverlayService }]; }, propDecorators: { disabled: [{
+                type: Input
+            }], promptLabel: [{
+                type: Input
+            }], mediumRegex: [{
+                type: Input
+            }], strongRegex: [{
+                type: Input
+            }], weakLabel: [{
+                type: Input
+            }], mediumLabel: [{
+                type: Input
+            }], strongLabel: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], feedback: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], toggleMask: [{
+                type: Input
+            }], inputStyleClass: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], inputStyle: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], input: [{
+                type: ViewChild,
+                args: ['input']
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class PasswordModule {
+}
+PasswordModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PasswordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+PasswordModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PasswordModule, declarations: [PasswordDirective, Password], imports: [CommonModule, InputTextModule], exports: [PasswordDirective, Password, SharedModule] });
+PasswordModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PasswordModule, imports: [[CommonModule, InputTextModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PasswordModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, InputTextModule],
+                    exports: [PasswordDirective, Password, SharedModule],
+                    declarations: [PasswordDirective, Password]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Password, PasswordDirective, PasswordModule, Password_VALUE_ACCESSOR };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-password.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-password.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-password.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-password.mjs","sources":["../../src/app/components/password/password.ts","../../src/app/components/password/primeng-password.ts"],"sourcesContent":["import {NgModule,Directive,ElementRef,HostListener,Input,OnDestroy,DoCheck,NgZone, OnInit, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, QueryList, TemplateRef, Component, AfterContentInit, ViewChild, ChangeDetectorRef, forwardRef, Output, EventEmitter} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {animate, style, transition, trigger} from '@angular/animations';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {OverlayService, PrimeNGConfig, PrimeTemplate, TranslationKeys, SharedModule} from 'primeng/api';\nimport {ZIndexUtils} from 'primeng/utils';\nimport {InputTextModule} from 'primeng/inputtext';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n    selector: '[pPassword]',\n    host: {\n        'class': 'p-inputtext p-component p-element',\n        '[class.p-filled]': 'filled'\n    }\n})\nexport class PasswordDirective implements OnDestroy,DoCheck {\n\n    @Input() promptLabel: string = 'Enter a password';\n\n    @Input() weakLabel: string = 'Weak';\n\n    @Input() mediumLabel: string = 'Medium';\n\n    @Input() strongLabel: string = 'Strong';\n\n    @Input() feedback: boolean = true;\n\n    @Input() set showPassword(show: boolean) {\n        this.el.nativeElement.type = show ? 'text' : 'password';\n    }\n\n    panel: HTMLDivElement;\n\n    meter: any;\n\n    info: any;\n\n    filled: boolean;\n\n    scrollHandler: any;\n\n    documentResizeListener: any;\n\n    constructor(public el: ElementRef, public zone: NgZone) {}\n\n    ngDoCheck() {\n        this.updateFilledState();\n    }\n\n    @HostListener('input', ['$event'])\n    onInput(e) {\n        this.updateFilledState();\n    }\n\n    updateFilledState() {\n        this.filled = this.el.nativeElement.value && this.el.nativeElement.value.length;\n    }\n\n    createPanel() {\n        this.panel = document.createElement('div');\n        this.panel.className = 'p-password-panel p-component p-password-panel-overlay p-connected-overlay';\n        this.meter = document.createElement('div');\n        this.meter.className = 'p-password-meter';\n        this.info = document.createElement('div');\n        this.info.className = 'p-password-info';\n        this.info.textContent = this.promptLabel;\n        this.panel.appendChild(this.meter);\n        this.panel.appendChild(this.info);\n        this.panel.style.minWidth = DomHandler.getOuterWidth(this.el.nativeElement) + 'px';\n        document.body.appendChild(this.panel);\n    }\n\n    showOverlay() {\n        if (this.feedback) {\n            if (!this.panel) {\n                this.createPanel();\n            }\n\n            this.panel.style.zIndex = String(++DomHandler.zindex);\n            this.panel.style.display = 'block';\n            this.zone.runOutsideAngular(() => {\n\n                setTimeout(() => {\n                    DomHandler.addClass(this.panel, 'p-connected-overlay-visible');\n                    this.bindScrollListener();\n                    this.bindDocumentResizeListener();\n                }, 1);\n            });\n            DomHandler.absolutePosition(this.panel, this.el.nativeElement);\n        }\n    }\n\n    hideOverlay() {\n        if (this.feedback && this.panel) {\n            DomHandler.addClass(this.panel, 'p-connected-overlay-hidden');\n            DomHandler.removeClass(this.panel, 'p-connected-overlay-visible');\n            this.unbindScrollListener();\n            this.unbindDocumentResizeListener();\n\n            this.zone.runOutsideAngular(() => {\n                setTimeout(() => {\n                    this.ngOnDestroy();\n                }, 150);\n            });\n        }\n    }\n\n    @HostListener('focus')\n    onFocus() {\n        this.showOverlay();\n    }\n\n    @HostListener('blur')\n    onBlur() {\n        this.hideOverlay();\n    }\n\n    @HostListener('keyup', ['$event'])\n    onKeyup(e) {\n        if (this.feedback) {\n            let value = e.target.value,\n            label = null,\n            meterPos = null;\n\n            if (value.length === 0) {\n                label = this.promptLabel;\n                meterPos = '0px 0px';\n            }\n            else {\n                var score = this.testStrength(value);\n\n                if (score < 30) {\n                    label = this.weakLabel;\n                    meterPos = '0px -10px';\n                }\n                else if (score >= 30 && score < 80) {\n                    label = this.mediumLabel;\n                    meterPos = '0px -20px';\n                }\n                else if (score >= 80) {\n                    label = this.strongLabel;\n                    meterPos = '0px -30px';\n                }\n            }\n\n            if (!this.panel || !DomHandler.hasClass(this.panel, 'p-connected-overlay-visible')) {\n                this.showOverlay();\n            }\n\n            this.meter.style.backgroundPosition = meterPos;\n            this.info.textContent = label;\n        }\n    }\n\n    testStrength(str: string) {\n        let grade: number = 0;\n        let val: RegExpMatchArray;\n\n        val = str.match('[0-9]');\n        grade += this.normalize(val ? val.length : 1/4, 1) * 25;\n\n        val = str.match('[a-zA-Z]');\n        grade += this.normalize(val ? val.length : 1/2, 3) * 10;\n\n        val = str.match('[!@#$%^&*?_~.,;=]');\n        grade += this.normalize(val ? val.length : 1/6, 1) * 35;\n\n        val = str.match('[A-Z]');\n        grade += this.normalize(val ? val.length : 1/6, 1) * 30;\n\n        grade *= str.length / 8;\n\n        return grade > 100 ? 100 : grade;\n    }\n\n    normalize(x, y) {\n        let diff = x - y;\n\n        if (diff <= 0)\n            return x / y;\n        else\n            return 1 + 0.5 * (x / (x + y/4));\n    }\n\n    get disabled(): boolean {\n        return this.el.nativeElement.disabled;\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.el.nativeElement, () => {\n                if (DomHandler.hasClass(this.panel, 'p-connected-overlay-visible')) {\n                    this.hideOverlay();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    onWindowResize() {\n        this.hideOverlay();\n    }\n\n    ngOnDestroy() {\n        if (this.panel) {\n            if (this.scrollHandler) {\n                this.scrollHandler.destroy();\n                this.scrollHandler = null;\n            }\n\n            this.unbindDocumentResizeListener();\n\n            document.body.removeChild(this.panel);\n            this.panel = null;\n            this.meter = null;\n            this.info = null;\n        }\n    }\n}\n\n\nexport const Password_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Password),\n    multi: true\n};\n@Component({\n    selector: 'p-password',\n    template: `\n        <div [ngClass]=\"containerClass()\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <input #input [attr.id]=\"inputId\" pInputText [ngClass]=\"inputFieldClass()\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [attr.type]=\"inputType()\" [attr.placeholder]=\"placeholder\" [value]=\"value\" (input)=\"onInput($event)\" (focus)=\"onInputFocus($event)\"\n                (blur)=\"onInputBlur($event)\" (keyup)=\"onKeyUp($event)\" />\n            <i *ngIf=\"toggleMask\" [ngClass]=\"toggleIconClass()\" (click)=\"onMaskToggle()\"></i>\n            <div #overlay *ngIf=\"overlayVisible\" [ngClass]=\"'p-password-panel p-component'\" (click)=\"onOverlayClick($event)\"\n                [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onAnimationStart($event)\" (@overlayAnimation.done)=\"onAnimationEnd($event)\">\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                <ng-container *ngIf=\"contentTemplate; else content\">\n                    <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                </ng-container>\n                <ng-template #content>\n                    <div class=\"p-password-meter\">\n                        <div [ngClass]=\"strengthClass()\" [ngStyle]=\"{'width': meter ? meter.width : ''}\"></div>\n                    </div>\n                    <div className=\"p-password-info\">{{infoText}}</div>\n                </ng-template>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled()',\n        '[class.p-inputwrapper-focus]': 'focused'\n    },\n    providers: [Password_VALUE_ACCESSOR],\n    styleUrls: ['./password.css'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None\n})\nexport class Password implements AfterContentInit,OnInit {\n\n    @Input() disabled: boolean;\n\n    @Input() promptLabel: string;\n\n    @Input() mediumRegex: string = '^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})';\n\n    @Input() strongRegex: string = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})';\n\n    @Input() weakLabel: string;\n\n    @Input() mediumLabel: string;\n\n    @Input() strongLabel: string;\n\n    @Input() inputId: string;\n\n    @Input() feedback: boolean = true;\n\n    @Input() appendTo: any;\n\n    @Input() toggleMask: boolean;\n\n    @Input() inputStyleClass: string;\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() inputStyle: any;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Input() placeholder: string;\n\n    @ViewChild('input') input: ElementRef;\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    contentTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    overlayVisible: boolean = false;\n\n    meter: any;\n\n    infoText: string;\n\n    focused: boolean = false;\n\n    unmasked: boolean = false;\n\n    mediumCheckRegExp: any;\n\n    strongCheckRegExp: any;\n\n    resizeListener: any;\n\n    outsideClickListener: any;\n\n    scrollHandler: any;\n\n    overlay: any;\n\n    value: string = null;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    translationSubscription: Subscription;\n\n    constructor(private cd: ChangeDetectorRef, private config: PrimeNGConfig, public el: ElementRef, public overlayService: OverlayService) {}\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngOnInit() {\n        this.infoText = this.promptText();\n        this.mediumCheckRegExp = new RegExp(this.mediumRegex);\n        this.strongCheckRegExp = new RegExp(this.strongRegex);\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.updateUI(this.value || \"\");\n        });\n    }\n\n    onAnimationStart(event) {\n        switch(event.toState) {\n            case 'visible':\n                this.overlay = event.element;\n                ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);\n                this.appendContainer();\n                this.alignOverlay();\n                this.bindScrollListener();\n                this.bindResizeListener();\n            break;\n\n            case 'void':\n                this.unbindScrollListener();\n                this.unbindResizeListener();\n                this.overlay = null;\n            break;\n        }\n    }\n\n    onAnimationEnd(event) {\n        switch(event.toState) {\n            case 'void':\n                ZIndexUtils.clear(event.element);\n            break;\n        }\n    }\n\n    appendContainer() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                document.getElementById(this.appendTo).appendChild(this.overlay);\n        }\n    }\n\n    alignOverlay() {\n        if (this.appendTo) {\n            this.overlay.style.minWidth = DomHandler.getOuterWidth(this.input.nativeElement) + 'px';\n            DomHandler.absolutePosition(this.overlay, this.input.nativeElement);\n        }\n        else {\n            DomHandler.relativePosition(this.overlay, this.input.nativeElement);\n        }\n    }\n\n    onInput(event)  {\n        this.value = event.target.value;\n        this.onModelChange(this.value);\n        this.onModelTouched();\n    }\n\n    onInputFocus(event: Event) {\n        this.focused = true;\n        if (this.feedback) {\n            this.overlayVisible = true;\n        }\n\n        this.onFocus.emit(event);\n    }\n\n    onInputBlur(event: Event) {\n        this.focused = false;\n        if (this.feedback) {\n            this.overlayVisible = false;\n        }\n\n        this.onBlur.emit(event);\n    }\n\n    onKeyUp(event) {\n        if (this.feedback) {\n            let value = event.target.value;\n            this.updateUI(value);\n\n            if (!this.overlayVisible) {\n                this.overlayVisible = true;\n            }\n        }\n    }\n\n    updateUI(value) {\n        let label = null;\n        let meter = null;\n\n        switch (this.testStrength(value)) {\n            case 1:\n                label = this.weakText();\n                meter = {\n                    strength: 'weak',\n                    width: '33.33%'\n                };\n                break;\n\n            case 2:\n                label = this.mediumText();\n                meter = {\n                    strength: 'medium',\n                    width: '66.66%'\n                };\n                break;\n\n            case 3:\n                label = this.strongText();\n                meter = {\n                    strength: 'strong',\n                    width: '100%'\n                };\n                break;\n\n            default:\n                label = this.promptText();\n                meter = null;\n                break;\n        }\n\n        this.meter = meter;\n        this.infoText = label;\n    }\n\n    onMaskToggle() {\n        this.unmasked = !this.unmasked;\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    testStrength(str) {\n        let level = 0;\n\n        if (this.strongCheckRegExp.test(str))\n            level = 3;\n        else if (this.mediumCheckRegExp.test(str))\n            level = 2;\n        else if (str.length)\n            level = 1;\n\n        return level;\n    }\n\n    writeValue(value: any) : void {\n        if (value === undefined)\n            this.value = null;\n        else\n            this.value = value;\n\n        if (this.feedback)\n            this.updateUI(this.value || \"\");\n\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.input.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.overlayVisible = false;\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    bindResizeListener() {\n        if (!this.resizeListener) {\n            this.resizeListener = () => {\n                if (this.overlayVisible) {\n                    this.overlayVisible = false;\n                }\n            };\n            window.addEventListener('resize', this.resizeListener);\n        }\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    unbindResizeListener() {\n        if (this.resizeListener) {\n            window.removeEventListener('resize', this.resizeListener);\n            this.resizeListener = null;\n        }\n    }\n\n    unbindOutsideClickListener() {\n        if (this.outsideClickListener) {\n            document.removeEventListener('click', this.outsideClickListener);\n            this.outsideClickListener = null;\n        }\n    }\n\n    containerClass() {\n        return {'p-password p-component p-inputwrapper': true,\n            'p-input-icon-right': this.toggleMask\n        };\n    }\n\n    inputFieldClass() {\n        return {'p-password-input' : true,\n                'p-disabled': this.disabled\n        };\n    }\n\n    toggleIconClass() {\n        return this.unmasked ? 'pi pi-eye-slash' : 'pi pi-eye';\n    }\n\n    strengthClass() {\n        return `p-password-strength ${this.meter ? this.meter.strength : ''}`;\n    }\n\n    filled() {\n        return (this.value != null && this.value.toString().length > 0)\n    }\n\n    promptText() {\n        return this.promptLabel || this.getTranslation(TranslationKeys.PASSWORD_PROMPT);\n    }\n\n    weakText() {\n        return this.weakLabel || this.getTranslation(TranslationKeys.WEAK);\n    }\n\n    mediumText() {\n        return this.mediumLabel || this.getTranslation(TranslationKeys.MEDIUM);\n    }\n\n    strongText() {\n        return this.strongLabel || this.getTranslation(TranslationKeys.STRONG);\n    }\n\n    restoreAppend() {\n        if (this.overlay && this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.removeChild(this.overlay);\n            else\n                document.getElementById(this.appendTo).removeChild(this.overlay);\n        }\n    }\n\n    inputType() {\n        return this.unmasked ? 'text' : 'password';\n    }\n\n    getTranslation(option: string) {\n        return this.config.getTranslation(option);\n    }\n\n    ngOnDestroy() {\n        if (this.overlay) {\n            ZIndexUtils.clear(this.overlay);\n            this.overlay = null;\n        }\n\n        this.restoreAppend();\n        this.unbindResizeListener();\n\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule, InputTextModule],\n    exports: [PasswordDirective, Password, SharedModule],\n    declarations: [PasswordDirective, Password]\n})\nexport class PasswordModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-picklist.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-picklist.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-picklist.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,815 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i3 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i4 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { DomHandler } from 'primeng/dom';
+import * as i5 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i2 from '@angular/cdk/drag-drop';
+import { transferArrayItem, moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
+import { UniqueComponentId, ObjectUtils } from 'primeng/utils';
+
+class PickList {
+    constructor(el, cd, filterService) {
+        this.el = el;
+        this.cd = cd;
+        this.filterService = filterService;
+        this.trackBy = (index, item) => item;
+        this.showSourceFilter = true;
+        this.showTargetFilter = true;
+        this.metaKeySelection = true;
+        this.dragdrop = false;
+        this.showSourceControls = true;
+        this.showTargetControls = true;
+        this.disabled = false;
+        this.filterMatchMode = "contains";
+        this.breakpoint = "960px";
+        this.onMoveToSource = new EventEmitter();
+        this.onMoveAllToSource = new EventEmitter();
+        this.onMoveAllToTarget = new EventEmitter();
+        this.onMoveToTarget = new EventEmitter();
+        this.onSourceReorder = new EventEmitter();
+        this.onTargetReorder = new EventEmitter();
+        this.onSourceSelect = new EventEmitter();
+        this.onTargetSelect = new EventEmitter();
+        this.onSourceFilter = new EventEmitter();
+        this.onTargetFilter = new EventEmitter();
+        this.selectedItemsSource = [];
+        this.selectedItemsTarget = [];
+        this.id = UniqueComponentId();
+        this.SOURCE_LIST = -1;
+        this.TARGET_LIST = 1;
+    }
+    ngOnInit() {
+        if (this.responsive) {
+            this.createStyle();
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                case 'sourceHeader':
+                    this.sourceHeaderTemplate = item.template;
+                    break;
+                case 'targetHeader':
+                    this.targetHeaderTemplate = item.template;
+                    break;
+                case 'emptymessagesource':
+                    this.emptyMessageSourceTemplate = item.template;
+                    break;
+                case 'emptyfiltermessagesource':
+                    this.emptyFilterMessageSourceTemplate = item.template;
+                    break;
+                case 'emptymessagetarget':
+                    this.emptyMessageTargetTemplate = item.template;
+                    break;
+                case 'emptyfiltermessagetarget':
+                    this.emptyFilterMessageTargetTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngAfterViewChecked() {
+        if (this.movedUp || this.movedDown) {
+            let listItems = DomHandler.find(this.reorderedListElement, 'li.p-highlight');
+            let listItem;
+            if (this.movedUp)
+                listItem = listItems[0];
+            else
+                listItem = listItems[listItems.length - 1];
+            DomHandler.scrollInView(this.reorderedListElement, listItem);
+            this.movedUp = false;
+            this.movedDown = false;
+            this.reorderedListElement = null;
+        }
+    }
+    onItemClick(event, item, selectedItems, callback) {
+        if (this.disabled) {
+            return;
+        }
+        let index = this.findIndexInSelection(item, selectedItems);
+        let selected = (index != -1);
+        let metaSelection = this.itemTouched ? false : this.metaKeySelection;
+        if (metaSelection) {
+            let metaKey = (event.metaKey || event.ctrlKey || event.shiftKey);
+            if (selected && metaKey) {
+                selectedItems.splice(index, 1);
+            }
+            else {
+                if (!metaKey) {
+                    selectedItems.length = 0;
+                }
+                selectedItems.push(item);
+            }
+        }
+        else {
+            if (selected)
+                selectedItems.splice(index, 1);
+            else
+                selectedItems.push(item);
+        }
+        callback.emit({ originalEvent: event, items: selectedItems });
+        this.itemTouched = false;
+    }
+    onSourceItemDblClick() {
+        if (this.disabled) {
+            return;
+        }
+        this.moveRight();
+    }
+    onTargetItemDblClick() {
+        if (this.disabled) {
+            return;
+        }
+        this.moveLeft();
+    }
+    onFilter(event, data, listType) {
+        let query = event.target.value.trim().toLocaleLowerCase(this.filterLocale);
+        if (listType === this.SOURCE_LIST)
+            this.filterValueSource = query;
+        else if (listType === this.TARGET_LIST)
+            this.filterValueTarget = query;
+        this.filter(data, listType);
+    }
+    filter(data, listType) {
+        let searchFields = this.filterBy.split(',');
+        if (listType === this.SOURCE_LIST) {
+            this.visibleOptionsSource = this.filterService.filter(data, searchFields, this.filterValueSource, this.filterMatchMode, this.filterLocale);
+            this.onSourceFilter.emit({ query: this.filterValueSource, value: this.visibleOptionsSource });
+        }
+        else if (listType === this.TARGET_LIST) {
+            this.visibleOptionsTarget = this.filterService.filter(data, searchFields, this.filterValueTarget, this.filterMatchMode, this.filterLocale);
+            this.onTargetFilter.emit({ query: this.filterValueTarget, value: this.visibleOptionsTarget });
+        }
+    }
+    isItemVisible(item, listType) {
+        if (listType == this.SOURCE_LIST)
+            return this.isVisibleInList(this.visibleOptionsSource, item, this.filterValueSource);
+        else
+            return this.isVisibleInList(this.visibleOptionsTarget, item, this.filterValueTarget);
+    }
+    isEmpty(listType) {
+        if (listType == this.SOURCE_LIST)
+            return this.filterValueSource ? (!this.visibleOptionsSource || this.visibleOptionsSource.length === 0) : (!this.source || this.source.length === 0);
+        else
+            return this.filterValueTarget ? (!this.visibleOptionsTarget || this.visibleOptionsTarget.length === 0) : (!this.target || this.target.length === 0);
+    }
+    isVisibleInList(data, item, filterValue) {
+        if (filterValue && filterValue.trim().length) {
+            for (let i = 0; i < data.length; i++) {
+                if (item == data[i]) {
+                    return true;
+                }
+            }
+        }
+        else {
+            return true;
+        }
+    }
+    onItemTouchEnd() {
+        if (this.disabled) {
+            return;
+        }
+        this.itemTouched = true;
+    }
+    sortByIndexInList(items, list) {
+        return items.sort((item1, item2) => ObjectUtils.findIndexInList(item1, list) - ObjectUtils.findIndexInList(item2, list));
+    }
+    moveUp(listElement, list, selectedItems, callback, listType) {
+        if (selectedItems && selectedItems.length) {
+            selectedItems = this.sortByIndexInList(selectedItems, list);
+            for (let i = 0; i < selectedItems.length; i++) {
+                let selectedItem = selectedItems[i];
+                let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, list);
+                if (selectedItemIndex != 0) {
+                    let movedItem = list[selectedItemIndex];
+                    let temp = list[selectedItemIndex - 1];
+                    list[selectedItemIndex - 1] = movedItem;
+                    list[selectedItemIndex] = temp;
+                }
+                else {
+                    break;
+                }
+            }
+            if (this.dragdrop && ((this.filterValueSource && listType === this.SOURCE_LIST) || (this.filterValueTarget && listType === this.TARGET_LIST)))
+                this.filter(list, listType);
+            this.movedUp = true;
+            this.reorderedListElement = listElement;
+            callback.emit({ items: selectedItems });
+        }
+    }
+    moveTop(listElement, list, selectedItems, callback, listType) {
+        if (selectedItems && selectedItems.length) {
+            selectedItems = this.sortByIndexInList(selectedItems, list);
+            for (let i = 0; i < selectedItems.length; i++) {
+                let selectedItem = selectedItems[i];
+                let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, list);
+                if (selectedItemIndex != 0) {
+                    let movedItem = list.splice(selectedItemIndex, 1)[0];
+                    list.unshift(movedItem);
+                }
+                else {
+                    break;
+                }
+            }
+            if (this.dragdrop && ((this.filterValueSource && listType === this.SOURCE_LIST) || (this.filterValueTarget && listType === this.TARGET_LIST)))
+                this.filter(list, listType);
+            listElement.scrollTop = 0;
+            callback.emit({ items: selectedItems });
+        }
+    }
+    moveDown(listElement, list, selectedItems, callback, listType) {
+        if (selectedItems && selectedItems.length) {
+            selectedItems = this.sortByIndexInList(selectedItems, list);
+            for (let i = selectedItems.length - 1; i >= 0; i--) {
+                let selectedItem = selectedItems[i];
+                let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, list);
+                if (selectedItemIndex != (list.length - 1)) {
+                    let movedItem = list[selectedItemIndex];
+                    let temp = list[selectedItemIndex + 1];
+                    list[selectedItemIndex + 1] = movedItem;
+                    list[selectedItemIndex] = temp;
+                }
+                else {
+                    break;
+                }
+            }
+            if (this.dragdrop && ((this.filterValueSource && listType === this.SOURCE_LIST) || (this.filterValueTarget && listType === this.TARGET_LIST)))
+                this.filter(list, listType);
+            this.movedDown = true;
+            this.reorderedListElement = listElement;
+            callback.emit({ items: selectedItems });
+        }
+    }
+    moveBottom(listElement, list, selectedItems, callback, listType) {
+        if (selectedItems && selectedItems.length) {
+            selectedItems = this.sortByIndexInList(selectedItems, list);
+            for (let i = selectedItems.length - 1; i >= 0; i--) {
+                let selectedItem = selectedItems[i];
+                let selectedItemIndex = ObjectUtils.findIndexInList(selectedItem, list);
+                if (selectedItemIndex != (list.length - 1)) {
+                    let movedItem = list.splice(selectedItemIndex, 1)[0];
+                    list.push(movedItem);
+                }
+                else {
+                    break;
+                }
+            }
+            if (this.dragdrop && ((this.filterValueSource && listType === this.SOURCE_LIST) || (this.filterValueTarget && listType === this.TARGET_LIST)))
+                this.filter(list, listType);
+            listElement.scrollTop = listElement.scrollHeight;
+            callback.emit({ items: selectedItems });
+        }
+    }
+    moveRight() {
+        if (this.selectedItemsSource && this.selectedItemsSource.length) {
+            for (let i = 0; i < this.selectedItemsSource.length; i++) {
+                let selectedItem = this.selectedItemsSource[i];
+                if (ObjectUtils.findIndexInList(selectedItem, this.target) == -1) {
+                    this.target.push(this.source.splice(ObjectUtils.findIndexInList(selectedItem, this.source), 1)[0]);
+                    if (this.visibleOptionsSource)
+                        this.visibleOptionsSource.splice(ObjectUtils.findIndexInList(selectedItem, this.visibleOptionsSource), 1);
+                }
+            }
+            this.onMoveToTarget.emit({
+                items: this.selectedItemsSource
+            });
+            this.selectedItemsSource = [];
+            if (this.filterValueTarget) {
+                this.filter(this.target, this.TARGET_LIST);
+            }
+        }
+    }
+    moveAllRight() {
+        if (this.source) {
+            let movedItems = [];
+            for (let i = 0; i < this.source.length; i++) {
+                if (this.isItemVisible(this.source[i], this.SOURCE_LIST)) {
+                    let removedItem = this.source.splice(i, 1)[0];
+                    this.target.push(removedItem);
+                    movedItems.push(removedItem);
+                    i--;
+                }
+            }
+            this.onMoveAllToTarget.emit({
+                items: movedItems
+            });
+            this.selectedItemsSource = [];
+            if (this.filterValueTarget) {
+                this.filter(this.target, this.TARGET_LIST);
+            }
+            this.visibleOptionsSource = [];
+        }
+    }
+    moveLeft() {
+        if (this.selectedItemsTarget && this.selectedItemsTarget.length) {
+            for (let i = 0; i < this.selectedItemsTarget.length; i++) {
+                let selectedItem = this.selectedItemsTarget[i];
+                if (ObjectUtils.findIndexInList(selectedItem, this.source) == -1) {
+                    this.source.push(this.target.splice(ObjectUtils.findIndexInList(selectedItem, this.target), 1)[0]);
+                    if (this.visibleOptionsTarget)
+                        this.visibleOptionsTarget.splice(ObjectUtils.findIndexInList(selectedItem, this.visibleOptionsTarget), 1)[0];
+                }
+            }
+            this.onMoveToSource.emit({
+                items: this.selectedItemsTarget
+            });
+            this.selectedItemsTarget = [];
+            if (this.filterValueSource) {
+                this.filter(this.source, this.SOURCE_LIST);
+            }
+        }
+    }
+    moveAllLeft() {
+        if (this.target) {
+            let movedItems = [];
+            for (let i = 0; i < this.target.length; i++) {
+                if (this.isItemVisible(this.target[i], this.TARGET_LIST)) {
+                    let removedItem = this.target.splice(i, 1)[0];
+                    this.source.push(removedItem);
+                    movedItems.push(removedItem);
+                    i--;
+                }
+            }
+            this.onMoveAllToSource.emit({
+                items: movedItems
+            });
+            this.selectedItemsTarget = [];
+            if (this.filterValueSource) {
+                this.filter(this.source, this.SOURCE_LIST);
+            }
+            this.visibleOptionsTarget = [];
+        }
+    }
+    isSelected(item, selectedItems) {
+        return this.findIndexInSelection(item, selectedItems) != -1;
+    }
+    findIndexInSelection(item, selectedItems) {
+        return ObjectUtils.findIndexInList(item, selectedItems);
+    }
+    onDrop(event, listType) {
+        let isTransfer = event.previousContainer !== event.container;
+        let dropIndexes = this.getDropIndexes(event.previousIndex, event.currentIndex, listType, isTransfer, event.item.data);
+        if (listType === this.SOURCE_LIST) {
+            if (isTransfer) {
+                transferArrayItem(event.previousContainer.data, event.container.data, dropIndexes.previousIndex, dropIndexes.currentIndex);
+                if (this.visibleOptionsTarget)
+                    this.visibleOptionsTarget.splice(event.previousIndex, 1);
+                this.onMoveToSource.emit({ items: [event.item.data] });
+            }
+            else {
+                moveItemInArray(event.container.data, dropIndexes.previousIndex, dropIndexes.currentIndex);
+                this.onSourceReorder.emit({ items: [event.item.data] });
+            }
+            if (this.filterValueSource) {
+                this.filter(this.source, this.SOURCE_LIST);
+            }
+        }
+        else {
+            if (isTransfer) {
+                transferArrayItem(event.previousContainer.data, event.container.data, dropIndexes.previousIndex, dropIndexes.currentIndex);
+                if (this.visibleOptionsSource)
+                    this.visibleOptionsSource.splice(event.previousIndex, 1);
+                this.onMoveToTarget.emit({ items: [event.item.data] });
+            }
+            else {
+                moveItemInArray(event.container.data, dropIndexes.previousIndex, dropIndexes.currentIndex);
+                this.onTargetReorder.emit({ items: [event.item.data] });
+            }
+            if (this.filterValueTarget) {
+                this.filter(this.target, this.TARGET_LIST);
+            }
+        }
+    }
+    getDropIndexes(fromIndex, toIndex, droppedList, isTransfer, data) {
+        let previousIndex, currentIndex;
+        if (droppedList === this.SOURCE_LIST) {
+            previousIndex = isTransfer ? this.filterValueTarget ? ObjectUtils.findIndexInList(data, this.target) : fromIndex : this.filterValueSource ? ObjectUtils.findIndexInList(data, this.source) : fromIndex;
+            currentIndex = this.filterValueSource ? this.findFilteredCurrentIndex(this.visibleOptionsSource, toIndex, this.source) : toIndex;
+        }
+        else {
+            previousIndex = isTransfer ? this.filterValueSource ? ObjectUtils.findIndexInList(data, this.source) : fromIndex : this.filterValueTarget ? ObjectUtils.findIndexInList(data, this.target) : fromIndex;
+            currentIndex = this.filterValueTarget ? this.findFilteredCurrentIndex(this.visibleOptionsTarget, toIndex, this.target) : toIndex;
+        }
+        return { previousIndex, currentIndex };
+    }
+    findFilteredCurrentIndex(visibleOptions, index, options) {
+        if (visibleOptions.length === index) {
+            let toIndex = ObjectUtils.findIndexInList(visibleOptions[index - 1], options);
+            return toIndex + 1;
+        }
+        else {
+            return ObjectUtils.findIndexInList(visibleOptions[index], options);
+        }
+    }
+    resetFilter() {
+        this.visibleOptionsSource = null;
+        this.filterValueSource = null;
+        this.visibleOptionsTarget = null;
+        this.filterValueTarget = null;
+        this.sourceFilterViewChild.nativeElement.value = '';
+        this.targetFilterViewChild.nativeElement.value = '';
+    }
+    onItemKeydown(event, item, selectedItems, callback) {
+        let listItem = event.currentTarget;
+        switch (event.which) {
+            //down
+            case 40:
+                var nextItem = this.findNextItem(listItem);
+                if (nextItem) {
+                    nextItem.focus();
+                }
+                event.preventDefault();
+                break;
+            //up
+            case 38:
+                var prevItem = this.findPrevItem(listItem);
+                if (prevItem) {
+                    prevItem.focus();
+                }
+                event.preventDefault();
+                break;
+            //enter
+            case 13:
+                this.onItemClick(event, item, selectedItems, callback);
+                event.preventDefault();
+                break;
+        }
+    }
+    findNextItem(item) {
+        let nextItem = item.nextElementSibling;
+        if (nextItem)
+            return !DomHandler.hasClass(nextItem, 'p-picklist-item') || DomHandler.isHidden(nextItem) ? this.findNextItem(nextItem) : nextItem;
+        else
+            return null;
+    }
+    findPrevItem(item) {
+        let prevItem = item.previousElementSibling;
+        if (prevItem)
+            return !DomHandler.hasClass(prevItem, 'p-picklist-item') || DomHandler.isHidden(prevItem) ? this.findPrevItem(prevItem) : prevItem;
+        else
+            return null;
+    }
+    createStyle() {
+        if (!this.styleElement) {
+            this.el.nativeElement.children[0].setAttribute(this.id, '');
+            this.styleElement = document.createElement('style');
+            this.styleElement.type = 'text/css';
+            document.head.appendChild(this.styleElement);
+            let innerHTML = `
+            @media screen and (max-width: ${this.breakpoint}) {
+                .p-picklist[${this.id}] {
+                    flex-direction: column;
+                }
+
+                .p-picklist[${this.id}] .p-picklist-buttons {
+                    padding: var(--content-padding);
+                    flex-direction: row;
+                }
+
+                .p-picklist[${this.id}] .p-picklist-buttons .p-button {
+                    margin-right: var(--inline-spacing);
+                    margin-bottom: 0;
+                }
+
+                .p-picklist[${this.id}] .p-picklist-buttons .p-button:last-child {
+                    margin-right: 0;
+                }
+
+                .p-picklist[${this.id}] .pi-angle-right:before {
+                    content: "\\e930"
+                }
+
+                .p-picklist[${this.id}] .pi-angle-double-right:before {
+                    content: "\\e92c"
+                }
+
+                .p-picklist[${this.id}] .pi-angle-left:before {
+                    content: "\\e933"
+                }
+
+                .p-picklist[${this.id}] .pi-angle-double-left:before {
+                    content: "\\e92f"
+                }
+            }
+            `;
+            this.styleElement.innerHTML = innerHTML;
+        }
+    }
+    destroyStyle() {
+        if (this.styleElement) {
+            document.head.removeChild(this.styleElement);
+            this.styleElement = null;
+            ``;
+        }
+    }
+    ngOnDestroy() {
+        this.destroyStyle();
+    }
+}
+PickList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickList, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FilterService }], target: i0.ɵɵFactoryTarget.Component });
+PickList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: PickList, selector: "p-pickList", inputs: { source: "source", target: "target", sourceHeader: "sourceHeader", rightButtonAriaLabel: "rightButtonAriaLabel", leftButtonAriaLabel: "leftButtonAriaLabel", allRightButtonAriaLabel: "allRightButtonAriaLabel", allLeftButtonAriaLabel: "allLeftButtonAriaLabel", upButtonAriaLabel: "upButtonAriaLabel", downButtonAriaLabel: "downButtonAriaLabel", topButtonAriaLabel: "topButtonAriaLabel", bottomButtonAriaLabel: "bottomButtonAriaLabel", targetHeader: "targetHeader", responsive: "responsive", filterBy: "filterBy", filterLocale: "filterLocale", trackBy: "trackBy", sourceTrackBy: "sourceTrackBy", targetTrackBy: "targetTrackBy", showSourceFilter: "showSourceFilter", showTargetFilter: "showTargetFilter", metaKeySelection: "metaKeySelection", dragdrop: "dragdrop", style: "style", styleClass: "styleClass", sourceStyle: "sourceStyle", targetStyle: "targetStyle", showSourceControls: "showSourceControls", showTargetControls: "showTargetControls", sourceFilterPlaceholder: "sourceFilterPlaceholder", targetFilterPlaceholder: "targetFilterPlaceholder", disabled: "disabled", ariaSourceFilterLabel: "ariaSourceFilterLabel", ariaTargetFilterLabel: "ariaTargetFilterLabel", filterMatchMode: "filterMatchMode", breakpoint: "breakpoint" }, outputs: { onMoveToSource: "onMoveToSource", onMoveAllToSource: "onMoveAllToSource", onMoveAllToTarget: "onMoveAllToTarget", onMoveToTarget: "onMoveToTarget", onSourceReorder: "onSourceReorder", onTargetReorder: "onTargetReorder", onSourceSelect: "onSourceSelect", onTargetSelect: "onTargetSelect", onSourceFilter: "onSourceFilter", onTargetFilter: "onTargetFilter" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "listViewSourceChild", first: true, predicate: ["sourcelist"], descendants: true }, { propertyName: "listViewTargetChild", first: true, predicate: ["targetlist"], descendants: true }, { propertyName: "sourceFilterViewChild", first: true, predicate: ["sourceFilter"], descendants: true }, { propertyName: "targetFilterViewChild", first: true, predicate: ["targetFilter"], descendants: true }], ngImport: i0, template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-picklist p-component'" cdkDropListGroup>
+            <div class="p-picklist-buttons p-picklist-source-controls" *ngIf="showSourceControls">
+                <button type="button" [attr.aria-label]="upButtonAriaLabel" pButton pRipple icon="pi pi-angle-up" [disabled]="disabled" (click)="moveUp(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)"></button>
+                <button type="button" [attr.aria-label]="topButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-up" [disabled]="disabled" (click)="moveTop(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)"></button>
+                <button type="button" [attr.aria-label]="downButtonAriaLabel" pButton pRipple icon="pi pi-angle-down" [disabled]="disabled" (click)="moveDown(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)"></button>
+                <button type="button" [attr.aria-label]="bottomButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-down" [disabled]="disabled" (click)="moveBottom(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)"></button>
+            </div>
+            <div class="p-picklist-list-wrapper p-picklist-source-wrapper">
+                <div class="p-picklist-header" *ngIf="sourceHeader || sourceHeaderTemplate">
+                    <div class="p-picklist-title" *ngIf="!sourceHeaderTemplate">{{sourceHeader}}</div>
+                    <ng-container *ngTemplateOutlet="sourceHeaderTemplate"></ng-container>
+                </div>
+                <div class="p-picklist-filter-container" *ngIf="filterBy && showSourceFilter !== false">
+                    <div class="p-picklist-filter">
+                        <input #sourceFilter type="text" role="textbox" (keyup)="onFilter($event,source,SOURCE_LIST)" class="p-picklist-filter-input p-inputtext p-component" [disabled]="disabled" [attr.placeholder]="sourceFilterPlaceholder" [attr.aria-label]="ariaSourceFilterLabel">
+                        <span class="p-picklist-filter-icon pi pi-search"></span>
+                    </div>
+                </div>
+
+                <ul #sourcelist class="p-picklist-list p-picklist-source" cdkDropList [cdkDropListData]="source" (cdkDropListDropped)="onDrop($event, SOURCE_LIST)"
+                    [ngStyle]="sourceStyle" role="listbox" aria-multiselectable="multiple">
+                    <ng-template ngFor let-item [ngForOf]="source" [ngForTrackBy]="sourceTrackBy || trackBy" let-i="index" let-l="last">
+                        <li [ngClass]="{'p-picklist-item':true,'p-highlight':isSelected(item,selectedItemsSource),'p-disabled': disabled}" pRipple cdkDrag [cdkDragData]="item" [cdkDragDisabled]="!dragdrop"
+                            (click)="onItemClick($event,item,selectedItemsSource,onSourceSelect)" (dblclick)="onSourceItemDblClick()" (touchend)="onItemTouchEnd()" (keydown)="onItemKeydown($event,item,selectedItemsSource,onSourceSelect)"
+                            *ngIf="isItemVisible(item, SOURCE_LIST)" tabindex="0" role="option" [attr.aria-selected]="isSelected(item, selectedItemsSource)">
+                            <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                        </li>
+                    </ng-template>
+                    <ng-container *ngIf="isEmpty(SOURCE_LIST) && (emptyMessageSourceTemplate || emptyFilterMessageSourceTemplate)">
+                        <li class="p-picklist-empty-message" *ngIf="!filterValueSource || !emptyFilterMessageSourceTemplate">
+                            <ng-container *ngTemplateOutlet="emptyMessageSourceTemplate"></ng-container>
+                        </li>
+                        <li class="p-picklist-empty-message" *ngIf="filterValueSource">
+                            <ng-container *ngTemplateOutlet="emptyFilterMessageSourceTemplate"></ng-container>
+                        </li>
+                    </ng-container>
+                </ul>
+            </div>
+            <div class="p-picklist-buttons p-picklist-transfer-buttons">
+                <button type="button" [attr.aria-label]="rightButtonAriaLabel" pButton pRipple icon="pi pi-angle-right" [disabled]="disabled" (click)="moveRight()"></button>
+                <button type="button" [attr.aria-label]="allRightButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-right" [disabled]="disabled" (click)="moveAllRight()"></button>
+                <button type="button" [attr.aria-label]="leftButtonAriaLabel" pButton pRipple icon="pi pi-angle-left" [disabled]="disabled" (click)="moveLeft()"></button>
+                <button type="button" [attr.aria-label]="allLeftButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-left" [disabled]="disabled" (click)="moveAllLeft()"></button>
+            </div>
+            <div class="p-picklist-list-wrapper p-picklist-target-wrapper">
+                <div class="p-picklist-header" *ngIf="targetHeader || targetHeaderTemplate">
+                    <div class="p-picklist-title" *ngIf="!targetHeaderTemplate">{{targetHeader}}</div>
+                    <ng-container *ngTemplateOutlet="targetHeaderTemplate"></ng-container>
+                </div>
+                <div class="p-picklist-filter-container" *ngIf="filterBy && showTargetFilter !== false">
+                    <div class="p-picklist-filter">
+                        <input #targetFilter type="text" role="textbox" (keyup)="onFilter($event,target,TARGET_LIST)" class="p-picklist-filter-input p-inputtext p-component" [disabled]="disabled" [attr.placeholder]="targetFilterPlaceholder" [attr.aria-label]="ariaTargetFilterLabel">
+                        <span class="p-picklist-filter-icon pi pi-search"></span>
+                    </div>
+                </div>
+                <ul #targetlist class="p-picklist-list p-picklist-target" cdkDropList [cdkDropListData]="target" (cdkDropListDropped)="onDrop($event, TARGET_LIST)"
+                    [ngStyle]="targetStyle" role="listbox" aria-multiselectable="multiple">
+                    <ng-template ngFor let-item [ngForOf]="target" [ngForTrackBy]="targetTrackBy || trackBy" let-i="index" let-l="last">
+                        <li [ngClass]="{'p-picklist-item':true,'p-highlight':isSelected(item,selectedItemsTarget), 'p-disabled': disabled}" pRipple cdkDrag [cdkDragData]="item" [cdkDragDisabled]="!dragdrop"
+                            (click)="onItemClick($event,item,selectedItemsTarget,onTargetSelect)" (dblclick)="onTargetItemDblClick()" (touchend)="onItemTouchEnd()" (keydown)="onItemKeydown($event,item,selectedItemsTarget,onTargetSelect)"
+                            *ngIf="isItemVisible(item, TARGET_LIST)" tabindex="0" role="option" [attr.aria-selected]="isSelected(item, selectedItemsTarget)">
+                            <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                        </li>
+                    </ng-template>
+                    <ng-container *ngIf="isEmpty(TARGET_LIST) && (emptyMessageTargetTemplate || emptyFilterMessageTargetTemplate)">
+                        <li class="p-picklist-empty-message" *ngIf="!filterValueTarget || !emptyFilterMessageTargetTemplate">
+                            <ng-container *ngTemplateOutlet="emptyMessageTargetTemplate"></ng-container>
+                        </li>
+                        <li class="p-picklist-empty-message" *ngIf="filterValueTarget">
+                            <ng-container *ngTemplateOutlet="emptyFilterMessageTargetTemplate"></ng-container>
+                        </li>
+                    </ng-container>
+                </ul>
+            </div>
+            <div class="p-picklist-buttons p-picklist-target-controls" *ngIf="showTargetControls">
+                <button type="button" [attr.aria-label]="upButtonAriaLabel" pButton pRipple icon="pi pi-angle-up" [disabled]="disabled" (click)="moveUp(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)"></button>
+                <button type="button" [attr.aria-label]="topButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-up" [disabled]="disabled" (click)="moveTop(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)"></button>
+                <button type="button" [attr.aria-label]="downButtonAriaLabel" pButton pRipple icon="pi pi-angle-down" [disabled]="disabled" (click)="moveDown(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)"></button>
+                <button type="button" [attr.aria-label]="bottomButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-down" [disabled]="disabled" (click)="moveBottom(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)"></button>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-picklist{display:flex}.p-picklist-buttons{display:flex;flex-direction:column;justify-content:center}.p-picklist-list-wrapper{flex:1 1 50%}.p-picklist-list{list-style-type:none;margin:0;padding:0;overflow:auto;min-height:12rem}.p-picklist-item{display:block;cursor:pointer;overflow:hidden;position:relative}.p-picklist-item:not(.cdk-drag-disabled){cursor:move}.p-picklist-item.cdk-drag-placeholder{opacity:0}.p-picklist-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.p-picklist-filter{position:relative}.p-picklist-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-picklist-filter-input{width:100%}.p-picklist-list.cdk-drop-list-dragging .p-picklist-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], directives: [{ type: i2.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i5.Ripple, selector: "[pRipple]" }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickList, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-pickList', template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="'p-picklist p-component'" cdkDropListGroup>
+            <div class="p-picklist-buttons p-picklist-source-controls" *ngIf="showSourceControls">
+                <button type="button" [attr.aria-label]="upButtonAriaLabel" pButton pRipple icon="pi pi-angle-up" [disabled]="disabled" (click)="moveUp(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)"></button>
+                <button type="button" [attr.aria-label]="topButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-up" [disabled]="disabled" (click)="moveTop(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)"></button>
+                <button type="button" [attr.aria-label]="downButtonAriaLabel" pButton pRipple icon="pi pi-angle-down" [disabled]="disabled" (click)="moveDown(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)"></button>
+                <button type="button" [attr.aria-label]="bottomButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-down" [disabled]="disabled" (click)="moveBottom(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)"></button>
+            </div>
+            <div class="p-picklist-list-wrapper p-picklist-source-wrapper">
+                <div class="p-picklist-header" *ngIf="sourceHeader || sourceHeaderTemplate">
+                    <div class="p-picklist-title" *ngIf="!sourceHeaderTemplate">{{sourceHeader}}</div>
+                    <ng-container *ngTemplateOutlet="sourceHeaderTemplate"></ng-container>
+                </div>
+                <div class="p-picklist-filter-container" *ngIf="filterBy && showSourceFilter !== false">
+                    <div class="p-picklist-filter">
+                        <input #sourceFilter type="text" role="textbox" (keyup)="onFilter($event,source,SOURCE_LIST)" class="p-picklist-filter-input p-inputtext p-component" [disabled]="disabled" [attr.placeholder]="sourceFilterPlaceholder" [attr.aria-label]="ariaSourceFilterLabel">
+                        <span class="p-picklist-filter-icon pi pi-search"></span>
+                    </div>
+                </div>
+
+                <ul #sourcelist class="p-picklist-list p-picklist-source" cdkDropList [cdkDropListData]="source" (cdkDropListDropped)="onDrop($event, SOURCE_LIST)"
+                    [ngStyle]="sourceStyle" role="listbox" aria-multiselectable="multiple">
+                    <ng-template ngFor let-item [ngForOf]="source" [ngForTrackBy]="sourceTrackBy || trackBy" let-i="index" let-l="last">
+                        <li [ngClass]="{'p-picklist-item':true,'p-highlight':isSelected(item,selectedItemsSource),'p-disabled': disabled}" pRipple cdkDrag [cdkDragData]="item" [cdkDragDisabled]="!dragdrop"
+                            (click)="onItemClick($event,item,selectedItemsSource,onSourceSelect)" (dblclick)="onSourceItemDblClick()" (touchend)="onItemTouchEnd()" (keydown)="onItemKeydown($event,item,selectedItemsSource,onSourceSelect)"
+                            *ngIf="isItemVisible(item, SOURCE_LIST)" tabindex="0" role="option" [attr.aria-selected]="isSelected(item, selectedItemsSource)">
+                            <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                        </li>
+                    </ng-template>
+                    <ng-container *ngIf="isEmpty(SOURCE_LIST) && (emptyMessageSourceTemplate || emptyFilterMessageSourceTemplate)">
+                        <li class="p-picklist-empty-message" *ngIf="!filterValueSource || !emptyFilterMessageSourceTemplate">
+                            <ng-container *ngTemplateOutlet="emptyMessageSourceTemplate"></ng-container>
+                        </li>
+                        <li class="p-picklist-empty-message" *ngIf="filterValueSource">
+                            <ng-container *ngTemplateOutlet="emptyFilterMessageSourceTemplate"></ng-container>
+                        </li>
+                    </ng-container>
+                </ul>
+            </div>
+            <div class="p-picklist-buttons p-picklist-transfer-buttons">
+                <button type="button" [attr.aria-label]="rightButtonAriaLabel" pButton pRipple icon="pi pi-angle-right" [disabled]="disabled" (click)="moveRight()"></button>
+                <button type="button" [attr.aria-label]="allRightButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-right" [disabled]="disabled" (click)="moveAllRight()"></button>
+                <button type="button" [attr.aria-label]="leftButtonAriaLabel" pButton pRipple icon="pi pi-angle-left" [disabled]="disabled" (click)="moveLeft()"></button>
+                <button type="button" [attr.aria-label]="allLeftButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-left" [disabled]="disabled" (click)="moveAllLeft()"></button>
+            </div>
+            <div class="p-picklist-list-wrapper p-picklist-target-wrapper">
+                <div class="p-picklist-header" *ngIf="targetHeader || targetHeaderTemplate">
+                    <div class="p-picklist-title" *ngIf="!targetHeaderTemplate">{{targetHeader}}</div>
+                    <ng-container *ngTemplateOutlet="targetHeaderTemplate"></ng-container>
+                </div>
+                <div class="p-picklist-filter-container" *ngIf="filterBy && showTargetFilter !== false">
+                    <div class="p-picklist-filter">
+                        <input #targetFilter type="text" role="textbox" (keyup)="onFilter($event,target,TARGET_LIST)" class="p-picklist-filter-input p-inputtext p-component" [disabled]="disabled" [attr.placeholder]="targetFilterPlaceholder" [attr.aria-label]="ariaTargetFilterLabel">
+                        <span class="p-picklist-filter-icon pi pi-search"></span>
+                    </div>
+                </div>
+                <ul #targetlist class="p-picklist-list p-picklist-target" cdkDropList [cdkDropListData]="target" (cdkDropListDropped)="onDrop($event, TARGET_LIST)"
+                    [ngStyle]="targetStyle" role="listbox" aria-multiselectable="multiple">
+                    <ng-template ngFor let-item [ngForOf]="target" [ngForTrackBy]="targetTrackBy || trackBy" let-i="index" let-l="last">
+                        <li [ngClass]="{'p-picklist-item':true,'p-highlight':isSelected(item,selectedItemsTarget), 'p-disabled': disabled}" pRipple cdkDrag [cdkDragData]="item" [cdkDragDisabled]="!dragdrop"
+                            (click)="onItemClick($event,item,selectedItemsTarget,onTargetSelect)" (dblclick)="onTargetItemDblClick()" (touchend)="onItemTouchEnd()" (keydown)="onItemKeydown($event,item,selectedItemsTarget,onTargetSelect)"
+                            *ngIf="isItemVisible(item, TARGET_LIST)" tabindex="0" role="option" [attr.aria-selected]="isSelected(item, selectedItemsTarget)">
+                            <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                        </li>
+                    </ng-template>
+                    <ng-container *ngIf="isEmpty(TARGET_LIST) && (emptyMessageTargetTemplate || emptyFilterMessageTargetTemplate)">
+                        <li class="p-picklist-empty-message" *ngIf="!filterValueTarget || !emptyFilterMessageTargetTemplate">
+                            <ng-container *ngTemplateOutlet="emptyMessageTargetTemplate"></ng-container>
+                        </li>
+                        <li class="p-picklist-empty-message" *ngIf="filterValueTarget">
+                            <ng-container *ngTemplateOutlet="emptyFilterMessageTargetTemplate"></ng-container>
+                        </li>
+                    </ng-container>
+                </ul>
+            </div>
+            <div class="p-picklist-buttons p-picklist-target-controls" *ngIf="showTargetControls">
+                <button type="button" [attr.aria-label]="upButtonAriaLabel" pButton pRipple icon="pi pi-angle-up" [disabled]="disabled" (click)="moveUp(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)"></button>
+                <button type="button" [attr.aria-label]="topButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-up" [disabled]="disabled" (click)="moveTop(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)"></button>
+                <button type="button" [attr.aria-label]="downButtonAriaLabel" pButton pRipple icon="pi pi-angle-down" [disabled]="disabled" (click)="moveDown(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)"></button>
+                <button type="button" [attr.aria-label]="bottomButtonAriaLabel" pButton pRipple icon="pi pi-angle-double-down" [disabled]="disabled" (click)="moveBottom(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)"></button>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-picklist{display:flex}.p-picklist-buttons{display:flex;flex-direction:column;justify-content:center}.p-picklist-list-wrapper{flex:1 1 50%}.p-picklist-list{list-style-type:none;margin:0;padding:0;overflow:auto;min-height:12rem}.p-picklist-item{display:block;cursor:pointer;overflow:hidden;position:relative}.p-picklist-item:not(.cdk-drag-disabled){cursor:move}.p-picklist-item.cdk-drag-placeholder{opacity:0}.p-picklist-item.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.p-picklist-filter{position:relative}.p-picklist-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-picklist-filter-input{width:100%}.p-picklist-list.cdk-drop-list-dragging .p-picklist-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FilterService }]; }, propDecorators: { source: [{
+                type: Input
+            }], target: [{
+                type: Input
+            }], sourceHeader: [{
+                type: Input
+            }], rightButtonAriaLabel: [{
+                type: Input
+            }], leftButtonAriaLabel: [{
+                type: Input
+            }], allRightButtonAriaLabel: [{
+                type: Input
+            }], allLeftButtonAriaLabel: [{
+                type: Input
+            }], upButtonAriaLabel: [{
+                type: Input
+            }], downButtonAriaLabel: [{
+                type: Input
+            }], topButtonAriaLabel: [{
+                type: Input
+            }], bottomButtonAriaLabel: [{
+                type: Input
+            }], targetHeader: [{
+                type: Input
+            }], responsive: [{
+                type: Input
+            }], filterBy: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], trackBy: [{
+                type: Input
+            }], sourceTrackBy: [{
+                type: Input
+            }], targetTrackBy: [{
+                type: Input
+            }], showSourceFilter: [{
+                type: Input
+            }], showTargetFilter: [{
+                type: Input
+            }], metaKeySelection: [{
+                type: Input
+            }], dragdrop: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], sourceStyle: [{
+                type: Input
+            }], targetStyle: [{
+                type: Input
+            }], showSourceControls: [{
+                type: Input
+            }], showTargetControls: [{
+                type: Input
+            }], sourceFilterPlaceholder: [{
+                type: Input
+            }], targetFilterPlaceholder: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], ariaSourceFilterLabel: [{
+                type: Input
+            }], ariaTargetFilterLabel: [{
+                type: Input
+            }], filterMatchMode: [{
+                type: Input
+            }], breakpoint: [{
+                type: Input
+            }], onMoveToSource: [{
+                type: Output
+            }], onMoveAllToSource: [{
+                type: Output
+            }], onMoveAllToTarget: [{
+                type: Output
+            }], onMoveToTarget: [{
+                type: Output
+            }], onSourceReorder: [{
+                type: Output
+            }], onTargetReorder: [{
+                type: Output
+            }], onSourceSelect: [{
+                type: Output
+            }], onTargetSelect: [{
+                type: Output
+            }], onSourceFilter: [{
+                type: Output
+            }], onTargetFilter: [{
+                type: Output
+            }], listViewSourceChild: [{
+                type: ViewChild,
+                args: ['sourcelist']
+            }], listViewTargetChild: [{
+                type: ViewChild,
+                args: ['targetlist']
+            }], sourceFilterViewChild: [{
+                type: ViewChild,
+                args: ['sourceFilter']
+            }], targetFilterViewChild: [{
+                type: ViewChild,
+                args: ['targetFilter']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class PickListModule {
+}
+PickListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+PickListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickListModule, declarations: [PickList], imports: [CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule], exports: [PickList, SharedModule, DragDropModule] });
+PickListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickListModule, imports: [[CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule], SharedModule, DragDropModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickListModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ButtonModule, SharedModule, RippleModule, DragDropModule],
+                    exports: [PickList, SharedModule, DragDropModule],
+                    declarations: [PickList]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { PickList, PickListModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-picklist.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-picklist.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-picklist.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-picklist.mjs","sources":["../../src/app/components/picklist/picklist.ts","../../src/app/components/picklist/primeng-picklist.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, AfterContentInit, AfterViewChecked, Input, Output, ContentChildren, QueryList, TemplateRef, EventEmitter, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ButtonModule} from 'primeng/button';\nimport {SharedModule,PrimeTemplate,FilterService} from 'primeng/api';\nimport {DomHandler} from 'primeng/dom';\nimport {RippleModule} from 'primeng/ripple';\nimport {CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem} from '@angular/cdk/drag-drop';\nimport {ObjectUtils, UniqueComponentId} from 'primeng/utils';\n\n@Component({\n    selector: 'p-pickList',\n    template: `\n        <div [class]=\"styleClass\" [ngStyle]=\"style\" [ngClass]=\"'p-picklist p-component'\" cdkDropListGroup>\n            <div class=\"p-picklist-buttons p-picklist-source-controls\" *ngIf=\"showSourceControls\">\n                <button type=\"button\" [attr.aria-label]=\"upButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-up\" [disabled]=\"disabled\" (click)=\"moveUp(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)\"></button>\n                <button type=\"button\" [attr.aria-label]=\"topButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-double-up\" [disabled]=\"disabled\" (click)=\"moveTop(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)\"></button>\n                <button type=\"button\" [attr.aria-label]=\"downButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-down\" [disabled]=\"disabled\" (click)=\"moveDown(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)\"></button>\n                <button type=\"button\" [attr.aria-label]=\"bottomButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-double-down\" [disabled]=\"disabled\" (click)=\"moveBottom(sourcelist,source,selectedItemsSource,onSourceReorder,SOURCE_LIST)\"></button>\n            </div>\n            <div class=\"p-picklist-list-wrapper p-picklist-source-wrapper\">\n                <div class=\"p-picklist-header\" *ngIf=\"sourceHeader || sourceHeaderTemplate\">\n                    <div class=\"p-picklist-title\" *ngIf=\"!sourceHeaderTemplate\">{{sourceHeader}}</div>\n                    <ng-container *ngTemplateOutlet=\"sourceHeaderTemplate\"></ng-container>\n                </div>\n                <div class=\"p-picklist-filter-container\" *ngIf=\"filterBy && showSourceFilter !== false\">\n                    <div class=\"p-picklist-filter\">\n                        <input #sourceFilter type=\"text\" role=\"textbox\" (keyup)=\"onFilter($event,source,SOURCE_LIST)\" class=\"p-picklist-filter-input p-inputtext p-component\" [disabled]=\"disabled\" [attr.placeholder]=\"sourceFilterPlaceholder\" [attr.aria-label]=\"ariaSourceFilterLabel\">\n                        <span class=\"p-picklist-filter-icon pi pi-search\"></span>\n                    </div>\n                </div>\n\n                <ul #sourcelist class=\"p-picklist-list p-picklist-source\" cdkDropList [cdkDropListData]=\"source\" (cdkDropListDropped)=\"onDrop($event, SOURCE_LIST)\"\n                    [ngStyle]=\"sourceStyle\" role=\"listbox\" aria-multiselectable=\"multiple\">\n                    <ng-template ngFor let-item [ngForOf]=\"source\" [ngForTrackBy]=\"sourceTrackBy || trackBy\" let-i=\"index\" let-l=\"last\">\n                        <li [ngClass]=\"{'p-picklist-item':true,'p-highlight':isSelected(item,selectedItemsSource),'p-disabled': disabled}\" pRipple cdkDrag [cdkDragData]=\"item\" [cdkDragDisabled]=\"!dragdrop\"\n                            (click)=\"onItemClick($event,item,selectedItemsSource,onSourceSelect)\" (dblclick)=\"onSourceItemDblClick()\" (touchend)=\"onItemTouchEnd()\" (keydown)=\"onItemKeydown($event,item,selectedItemsSource,onSourceSelect)\"\n                            *ngIf=\"isItemVisible(item, SOURCE_LIST)\" tabindex=\"0\" role=\"option\" [attr.aria-selected]=\"isSelected(item, selectedItemsSource)\">\n                            <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, index: i}\"></ng-container>\n                        </li>\n                    </ng-template>\n                    <ng-container *ngIf=\"isEmpty(SOURCE_LIST) && (emptyMessageSourceTemplate || emptyFilterMessageSourceTemplate)\">\n                        <li class=\"p-picklist-empty-message\" *ngIf=\"!filterValueSource || !emptyFilterMessageSourceTemplate\">\n                            <ng-container *ngTemplateOutlet=\"emptyMessageSourceTemplate\"></ng-container>\n                        </li>\n                        <li class=\"p-picklist-empty-message\" *ngIf=\"filterValueSource\">\n                            <ng-container *ngTemplateOutlet=\"emptyFilterMessageSourceTemplate\"></ng-container>\n                        </li>\n                    </ng-container>\n                </ul>\n            </div>\n            <div class=\"p-picklist-buttons p-picklist-transfer-buttons\">\n                <button type=\"button\" [attr.aria-label]=\"rightButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-right\" [disabled]=\"disabled\" (click)=\"moveRight()\"></button>\n                <button type=\"button\" [attr.aria-label]=\"allRightButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-double-right\" [disabled]=\"disabled\" (click)=\"moveAllRight()\"></button>\n                <button type=\"button\" [attr.aria-label]=\"leftButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-left\" [disabled]=\"disabled\" (click)=\"moveLeft()\"></button>\n                <button type=\"button\" [attr.aria-label]=\"allLeftButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-double-left\" [disabled]=\"disabled\" (click)=\"moveAllLeft()\"></button>\n            </div>\n            <div class=\"p-picklist-list-wrapper p-picklist-target-wrapper\">\n                <div class=\"p-picklist-header\" *ngIf=\"targetHeader || targetHeaderTemplate\">\n                    <div class=\"p-picklist-title\" *ngIf=\"!targetHeaderTemplate\">{{targetHeader}}</div>\n                    <ng-container *ngTemplateOutlet=\"targetHeaderTemplate\"></ng-container>\n                </div>\n                <div class=\"p-picklist-filter-container\" *ngIf=\"filterBy && showTargetFilter !== false\">\n                    <div class=\"p-picklist-filter\">\n                        <input #targetFilter type=\"text\" role=\"textbox\" (keyup)=\"onFilter($event,target,TARGET_LIST)\" class=\"p-picklist-filter-input p-inputtext p-component\" [disabled]=\"disabled\" [attr.placeholder]=\"targetFilterPlaceholder\" [attr.aria-label]=\"ariaTargetFilterLabel\">\n                        <span class=\"p-picklist-filter-icon pi pi-search\"></span>\n                    </div>\n                </div>\n                <ul #targetlist class=\"p-picklist-list p-picklist-target\" cdkDropList [cdkDropListData]=\"target\" (cdkDropListDropped)=\"onDrop($event, TARGET_LIST)\"\n                    [ngStyle]=\"targetStyle\" role=\"listbox\" aria-multiselectable=\"multiple\">\n                    <ng-template ngFor let-item [ngForOf]=\"target\" [ngForTrackBy]=\"targetTrackBy || trackBy\" let-i=\"index\" let-l=\"last\">\n                        <li [ngClass]=\"{'p-picklist-item':true,'p-highlight':isSelected(item,selectedItemsTarget), 'p-disabled': disabled}\" pRipple cdkDrag [cdkDragData]=\"item\" [cdkDragDisabled]=\"!dragdrop\"\n                            (click)=\"onItemClick($event,item,selectedItemsTarget,onTargetSelect)\" (dblclick)=\"onTargetItemDblClick()\" (touchend)=\"onItemTouchEnd()\" (keydown)=\"onItemKeydown($event,item,selectedItemsTarget,onTargetSelect)\"\n                            *ngIf=\"isItemVisible(item, TARGET_LIST)\" tabindex=\"0\" role=\"option\" [attr.aria-selected]=\"isSelected(item, selectedItemsTarget)\">\n                            <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, index: i}\"></ng-container>\n                        </li>\n                    </ng-template>\n                    <ng-container *ngIf=\"isEmpty(TARGET_LIST) && (emptyMessageTargetTemplate || emptyFilterMessageTargetTemplate)\">\n                        <li class=\"p-picklist-empty-message\" *ngIf=\"!filterValueTarget || !emptyFilterMessageTargetTemplate\">\n                            <ng-container *ngTemplateOutlet=\"emptyMessageTargetTemplate\"></ng-container>\n                        </li>\n                        <li class=\"p-picklist-empty-message\" *ngIf=\"filterValueTarget\">\n                            <ng-container *ngTemplateOutlet=\"emptyFilterMessageTargetTemplate\"></ng-container>\n                        </li>\n                    </ng-container>\n                </ul>\n            </div>\n            <div class=\"p-picklist-buttons p-picklist-target-controls\" *ngIf=\"showTargetControls\">\n                <button type=\"button\" [attr.aria-label]=\"upButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-up\" [disabled]=\"disabled\" (click)=\"moveUp(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)\"></button>\n                <button type=\"button\" [attr.aria-label]=\"topButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-double-up\" [disabled]=\"disabled\" (click)=\"moveTop(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)\"></button>\n                <button type=\"button\" [attr.aria-label]=\"downButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-down\" [disabled]=\"disabled\" (click)=\"moveDown(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)\"></button>\n                <button type=\"button\" [attr.aria-label]=\"bottomButtonAriaLabel\" pButton pRipple icon=\"pi pi-angle-double-down\" [disabled]=\"disabled\" (click)=\"moveBottom(targetlist,target,selectedItemsTarget,onTargetReorder,TARGET_LIST)\"></button>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./picklist.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class PickList implements AfterViewChecked,AfterContentInit {\n\n    @Input() source: any[];\n\n    @Input() target: any[];\n\n    @Input() sourceHeader: string;\n\n    @Input() rightButtonAriaLabel: string;\n\n    @Input() leftButtonAriaLabel: string;\n\n    @Input() allRightButtonAriaLabel: string;\n\n    @Input() allLeftButtonAriaLabel: string;\n\n    @Input() upButtonAriaLabel: string;\n\n    @Input() downButtonAriaLabel: string;\n\n    @Input() topButtonAriaLabel: string;\n\n    @Input() bottomButtonAriaLabel: string;\n\n    @Input() targetHeader: string;\n\n    @Input() responsive: boolean;\n\n    @Input() filterBy: string;\n\n    @Input() filterLocale: string;\n\n    @Input() trackBy: Function = (index: number, item: any) => item;\n\n    @Input() sourceTrackBy: Function;\n\n    @Input() targetTrackBy: Function;\n\n    @Input() showSourceFilter: boolean = true;\n\n    @Input() showTargetFilter: boolean = true;\n\n    @Input() metaKeySelection: boolean = true;\n\n    @Input() dragdrop: boolean = false;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() sourceStyle: any;\n\n    @Input() targetStyle: any;\n\n    @Input() showSourceControls: boolean = true;\n\n    @Input() showTargetControls: boolean = true;\n\n    @Input() sourceFilterPlaceholder: string;\n\n    @Input() targetFilterPlaceholder: string;\n\n    @Input() disabled: boolean = false;\n\n    @Input() ariaSourceFilterLabel: string;\n\n    @Input() ariaTargetFilterLabel: string;\n\n    @Input() filterMatchMode: string = \"contains\";\n\n    @Input() breakpoint: string = \"960px\";\n\n    @Output() onMoveToSource: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMoveAllToSource: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMoveAllToTarget: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMoveToTarget: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSourceReorder: EventEmitter<any> = new EventEmitter();\n\n    @Output() onTargetReorder: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSourceSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onTargetSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSourceFilter: EventEmitter<any> = new EventEmitter();\n\n    @Output() onTargetFilter: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('sourcelist') listViewSourceChild: ElementRef;\n\n    @ViewChild('targetlist') listViewTargetChild: ElementRef;\n\n    @ViewChild('sourceFilter') sourceFilterViewChild: ElementRef;\n\n    @ViewChild('targetFilter') targetFilterViewChild: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    public itemTemplate: TemplateRef<any>;\n\n    public visibleOptionsSource: any[];\n\n    public visibleOptionsTarget: any[];\n\n    selectedItemsSource: any[] = [];\n\n    selectedItemsTarget: any[] = [];\n\n    reorderedListElement: any;\n\n    movedUp: boolean;\n\n    movedDown: boolean;\n\n    itemTouched: boolean;\n\n    styleElement: any;\n\n    id: string = UniqueComponentId();\n\n    filterValueSource: string;\n\n    filterValueTarget: string;\n\n    fromListType: number;\n\n    emptyMessageSourceTemplate: TemplateRef<any>;\n\n    emptyFilterMessageSourceTemplate: TemplateRef<any>;\n\n    emptyMessageTargetTemplate: TemplateRef<any>;\n\n    emptyFilterMessageTargetTemplate: TemplateRef<any>;\n\n    sourceHeaderTemplate: TemplateRef<any>;\n\n    targetHeaderTemplate: TemplateRef<any>;\n\n    readonly SOURCE_LIST = -1;\n\n    readonly TARGET_LIST = 1;\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef, public filterService: FilterService) {}\n\n\n    ngOnInit() {\n        if (this.responsive) {\n            this.createStyle();\n        }\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'sourceHeader':\n                    this.sourceHeaderTemplate = item.template;\n                break;\n\n                case 'targetHeader':\n                    this.targetHeaderTemplate = item.template;\n                break;\n\n                case 'emptymessagesource':\n                    this.emptyMessageSourceTemplate = item.template;\n                break;\n\n                case 'emptyfiltermessagesource':\n                    this.emptyFilterMessageSourceTemplate = item.template;\n                break;\n\n                case 'emptymessagetarget':\n                    this.emptyMessageTargetTemplate = item.template;\n                break;\n\n                case 'emptyfiltermessagetarget':\n                    this.emptyFilterMessageTargetTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngAfterViewChecked() {\n        if (this.movedUp||this.movedDown) {\n            let listItems = DomHandler.find(this.reorderedListElement, 'li.p-highlight');\n            let listItem;\n\n            if (this.movedUp)\n                listItem = listItems[0];\n            else\n                listItem = listItems[listItems.length - 1];\n\n            DomHandler.scrollInView(this.reorderedListElement, listItem);\n            this.movedUp = false;\n            this.movedDown = false;\n            this.reorderedListElement = null;\n        }\n    }\n\n    onItemClick(event, item: any, selectedItems: any[], callback: EventEmitter<any>) {\n        if (this.disabled) {\n            return;\n        }\n\n        let index = this.findIndexInSelection(item,selectedItems);\n        let selected = (index != -1);\n        let metaSelection = this.itemTouched ? false : this.metaKeySelection;\n\n        if (metaSelection) {\n            let metaKey = (event.metaKey||event.ctrlKey||event.shiftKey);\n\n            if (selected && metaKey) {\n                selectedItems.splice(index, 1);\n            }\n            else {\n                if (!metaKey) {\n                    selectedItems.length = 0;\n                }\n                selectedItems.push(item);\n            }\n        }\n        else {\n            if (selected)\n                selectedItems.splice(index, 1);\n            else\n                selectedItems.push(item);\n        }\n\n        callback.emit({originalEvent: event, items: selectedItems});\n\n        this.itemTouched = false;\n    }\n\n    onSourceItemDblClick() {\n        if (this.disabled) {\n            return;\n        }\n\n        this.moveRight();\n    }\n\n    onTargetItemDblClick() {\n        if (this.disabled) {\n            return;\n        }\n\n        this.moveLeft();\n    }\n\n    onFilter(event: KeyboardEvent, data: any[], listType: number) {\n        let query = ((<HTMLInputElement> event.target).value.trim() as any).toLocaleLowerCase(this.filterLocale);\n        if (listType === this.SOURCE_LIST)\n            this.filterValueSource = query;\n        else if (listType === this.TARGET_LIST)\n            this.filterValueTarget = query;\n\n        this.filter(data, listType);\n    }\n\n    filter(data: any[], listType: number) {\n        let searchFields = this.filterBy.split(',');\n\n        if (listType === this.SOURCE_LIST) {\n            this.visibleOptionsSource = this.filterService.filter(data, searchFields, this.filterValueSource, this.filterMatchMode, this.filterLocale);\n            this.onSourceFilter.emit({query: this.filterValueSource, value: this.visibleOptionsSource});\n        }\n        else if (listType === this.TARGET_LIST) {\n            this.visibleOptionsTarget = this.filterService.filter(data, searchFields, this.filterValueTarget, this.filterMatchMode, this.filterLocale);\n            this.onTargetFilter.emit({query: this.filterValueTarget, value: this.visibleOptionsTarget});\n        }\n    }\n\n    isItemVisible(item: any, listType: number): boolean {\n        if (listType == this.SOURCE_LIST)\n            return this.isVisibleInList(this.visibleOptionsSource, item, this.filterValueSource);\n        else\n            return this.isVisibleInList(this.visibleOptionsTarget, item, this.filterValueTarget);\n    }\n\n    isEmpty(listType: number) {\n        if (listType == this.SOURCE_LIST)\n            return this.filterValueSource ? (!this.visibleOptionsSource || this.visibleOptionsSource.length === 0) : (!this.source || this.source.length === 0);\n        else\n            return this.filterValueTarget ? (!this.visibleOptionsTarget || this.visibleOptionsTarget.length === 0) : (!this.target || this.target.length === 0);\n    }\n\n\n    isVisibleInList(data: any[], item: any, filterValue: string): boolean {\n        if (filterValue && filterValue.trim().length) {\n            for(let i = 0; i < data.length; i++) {\n                if (item == data[i]) {\n                    return true;\n                }\n            }\n        }\n        else {\n            return true;\n        }\n    }\n\n    onItemTouchEnd() {\n        if (this.disabled) {\n            return;\n        }\n\n        this.itemTouched = true;\n    }\n\n    private sortByIndexInList(items: any[], list: any) {\n        return items.sort((item1, item2) =>\n            ObjectUtils.findIndexInList(item1, list) - ObjectUtils.findIndexInList(item2, list));\n    }\n\n    moveUp(listElement, list, selectedItems, callback, listType) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for(let i = 0; i < selectedItems.length; i++) {\n                let selectedItem = selectedItems[i];\n                let selectedItemIndex: number = ObjectUtils.findIndexInList(selectedItem, list);\n\n                if (selectedItemIndex != 0) {\n                    let movedItem = list[selectedItemIndex];\n                    let temp = list[selectedItemIndex-1];\n                    list[selectedItemIndex-1] = movedItem;\n                    list[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n\n            if (this.dragdrop && ((this.filterValueSource && listType === this.SOURCE_LIST) || (this.filterValueTarget && listType === this.TARGET_LIST)))\n                this.filter(list, listType);\n\n            this.movedUp = true;\n            this.reorderedListElement = listElement;\n            callback.emit({items: selectedItems});\n        }\n    }\n\n    moveTop(listElement, list, selectedItems, callback, listType) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for(let i = 0; i < selectedItems.length; i++) {\n                let selectedItem = selectedItems[i];\n                let selectedItemIndex: number = ObjectUtils.findIndexInList(selectedItem, list);\n\n                if (selectedItemIndex != 0) {\n                    let movedItem = list.splice(selectedItemIndex,1)[0];\n                    list.unshift(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n\n            if (this.dragdrop && ((this.filterValueSource && listType === this.SOURCE_LIST) || (this.filterValueTarget && listType === this.TARGET_LIST)))\n                this.filter(list, listType);\n\n            listElement.scrollTop = 0;\n            callback.emit({items: selectedItems});\n        }\n    }\n\n    moveDown(listElement, list, selectedItems, callback, listType) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for(let i = selectedItems.length - 1; i >= 0; i--) {\n                let selectedItem = selectedItems[i];\n                let selectedItemIndex: number = ObjectUtils.findIndexInList(selectedItem, list);\n\n                if (selectedItemIndex != (list.length - 1)) {\n                    let movedItem = list[selectedItemIndex];\n                    let temp = list[selectedItemIndex+1];\n                    list[selectedItemIndex+1] = movedItem;\n                    list[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n\n            if (this.dragdrop && ((this.filterValueSource && listType === this.SOURCE_LIST) || (this.filterValueTarget && listType === this.TARGET_LIST)))\n                this.filter(list, listType);\n\n            this.movedDown = true;\n            this.reorderedListElement = listElement;\n            callback.emit({items: selectedItems});\n        }\n    }\n\n    moveBottom(listElement, list, selectedItems, callback, listType) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for(let i = selectedItems.length - 1; i >= 0; i--) {\n                let selectedItem = selectedItems[i];\n                let selectedItemIndex: number = ObjectUtils.findIndexInList(selectedItem, list);\n\n                if (selectedItemIndex != (list.length - 1)) {\n                    let movedItem = list.splice(selectedItemIndex,1)[0];\n                    list.push(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n\n            if (this.dragdrop && ((this.filterValueSource && listType === this.SOURCE_LIST) || (this.filterValueTarget && listType === this.TARGET_LIST)))\n                this.filter(list, listType);\n\n            listElement.scrollTop = listElement.scrollHeight;\n            callback.emit({items: selectedItems});\n        }\n    }\n\n    moveRight() {\n        if (this.selectedItemsSource && this.selectedItemsSource.length) {\n            for(let i = 0; i < this.selectedItemsSource.length; i++) {\n                let selectedItem = this.selectedItemsSource[i];\n                if (ObjectUtils.findIndexInList(selectedItem, this.target) == -1) {\n                    this.target.push(this.source.splice(ObjectUtils.findIndexInList(selectedItem, this.source),1)[0]);\n\n                    if (this.visibleOptionsSource)\n                        this.visibleOptionsSource.splice(ObjectUtils.findIndexInList(selectedItem, this.visibleOptionsSource),1);\n                }\n            }\n            this.onMoveToTarget.emit({\n                items: this.selectedItemsSource\n            });\n            this.selectedItemsSource = [];\n\n            if (this.filterValueTarget) {\n                this.filter(this.target, this.TARGET_LIST);\n            }\n        }\n    }\n\n    moveAllRight() {\n        if (this.source) {\n            let movedItems = [];\n\n            for(let i = 0; i < this.source.length; i++) {\n                if (this.isItemVisible(this.source[i], this.SOURCE_LIST)) {\n                    let removedItem = this.source.splice(i, 1)[0];\n                    this.target.push(removedItem);\n                    movedItems.push(removedItem);\n                    i--;\n                }\n            }\n\n            this.onMoveAllToTarget.emit({\n                items: movedItems\n            });\n\n            this.selectedItemsSource = [];\n\n            if (this.filterValueTarget) {\n                this.filter(this.target, this.TARGET_LIST);\n            }\n\n            this.visibleOptionsSource = [];\n        }\n    }\n\n    moveLeft() {\n        if (this.selectedItemsTarget && this.selectedItemsTarget.length) {\n            for(let i = 0; i < this.selectedItemsTarget.length; i++) {\n                let selectedItem = this.selectedItemsTarget[i];\n                if (ObjectUtils.findIndexInList(selectedItem, this.source) == -1) {\n                    this.source.push(this.target.splice(ObjectUtils.findIndexInList(selectedItem, this.target),1)[0]);\n\n                    if (this.visibleOptionsTarget)\n                        this.visibleOptionsTarget.splice(ObjectUtils.findIndexInList(selectedItem, this.visibleOptionsTarget),1)[0]\n                }\n            }\n            this.onMoveToSource.emit({\n                items: this.selectedItemsTarget\n            });\n\n            this.selectedItemsTarget = [];\n\n            if (this.filterValueSource) {\n                this.filter(this.source, this.SOURCE_LIST);\n            }\n        }\n    }\n\n    moveAllLeft() {\n        if (this.target) {\n            let movedItems = [];\n\n            for(let i = 0; i < this.target.length; i++) {\n                if (this.isItemVisible(this.target[i], this.TARGET_LIST)) {\n                    let removedItem = this.target.splice(i, 1)[0];\n                    this.source.push(removedItem);\n                    movedItems.push(removedItem);\n                    i--;\n                }\n            }\n\n            this.onMoveAllToSource.emit({\n                items: movedItems\n            });\n\n            this.selectedItemsTarget = [];\n\n            if (this.filterValueSource) {\n                this.filter(this.source, this.SOURCE_LIST);\n            }\n\n            this.visibleOptionsTarget = [];\n        }\n    }\n\n    isSelected(item: any, selectedItems: any[]) {\n        return this.findIndexInSelection(item, selectedItems) != -1;\n    }\n\n    findIndexInSelection(item: any, selectedItems: any[]): number {\n        return ObjectUtils.findIndexInList(item, selectedItems);\n    }\n\n    onDrop(event: CdkDragDrop<string[]>, listType: number) {\n        let isTransfer = event.previousContainer !== event.container;\n        let dropIndexes = this.getDropIndexes(event.previousIndex, event.currentIndex, listType, isTransfer, event.item.data);\n\n        if (listType === this.SOURCE_LIST) {\n            if (isTransfer) {\n                transferArrayItem(event.previousContainer.data, event.container.data, dropIndexes.previousIndex, dropIndexes.currentIndex);\n\n                if (this.visibleOptionsTarget)\n                    this.visibleOptionsTarget.splice(event.previousIndex, 1);\n\n                this.onMoveToSource.emit({items: [event.item.data]});\n            }\n            else {\n                moveItemInArray(event.container.data, dropIndexes.previousIndex, dropIndexes.currentIndex);\n                this.onSourceReorder.emit({items: [event.item.data]});\n            }\n\n            if (this.filterValueSource) {\n                this.filter(this.source, this.SOURCE_LIST);\n            }\n        }\n        else {\n            if (isTransfer) {\n                transferArrayItem(event.previousContainer.data, event.container.data, dropIndexes.previousIndex, dropIndexes.currentIndex);\n\n                if (this.visibleOptionsSource)\n                    this.visibleOptionsSource.splice(event.previousIndex, 1);\n\n                this.onMoveToTarget.emit({items: [event.item.data]});\n            }\n            else {\n                moveItemInArray(event.container.data, dropIndexes.previousIndex, dropIndexes.currentIndex);\n                this.onTargetReorder.emit({items: [event.item.data]});\n            }\n\n            if (this.filterValueTarget) {\n                this.filter(this.target, this.TARGET_LIST);\n            }\n        }\n    }\n\n    getDropIndexes(fromIndex, toIndex, droppedList, isTransfer, data) {\n        let previousIndex, currentIndex;\n\n        if (droppedList === this.SOURCE_LIST) {\n            previousIndex = isTransfer ? this.filterValueTarget ? ObjectUtils.findIndexInList(data, this.target) : fromIndex : this.filterValueSource ? ObjectUtils.findIndexInList(data, this.source) : fromIndex;\n            currentIndex = this.filterValueSource ? this.findFilteredCurrentIndex(this.visibleOptionsSource, toIndex, this.source) : toIndex;\n        }\n        else {\n            previousIndex = isTransfer ? this.filterValueSource ? ObjectUtils.findIndexInList(data, this.source) : fromIndex : this.filterValueTarget ? ObjectUtils.findIndexInList(data, this.target) : fromIndex;\n            currentIndex = this.filterValueTarget ? this.findFilteredCurrentIndex(this.visibleOptionsTarget, toIndex, this.target) : toIndex;\n        }\n\n        return {previousIndex, currentIndex};\n    }\n\n    findFilteredCurrentIndex(visibleOptions, index, options) {\n        if (visibleOptions.length === index) {\n            let toIndex = ObjectUtils.findIndexInList(visibleOptions[index-1], options);\n\n            return toIndex + 1;\n        }\n        else {\n            return ObjectUtils.findIndexInList(visibleOptions[index], options);\n        }\n    }\n\n    resetFilter() {\n        this.visibleOptionsSource = null;\n        this.filterValueSource = null;\n        this.visibleOptionsTarget = null;\n        this.filterValueTarget = null;\n\n        (<HTMLInputElement> this.sourceFilterViewChild.nativeElement).value = '';\n        (<HTMLInputElement> this.targetFilterViewChild.nativeElement).value = '';\n    }\n\n    onItemKeydown(event: KeyboardEvent, item: any, selectedItems: any[], callback: EventEmitter<any>) {\n        let listItem = <HTMLLIElement> event.currentTarget;\n\n        switch(event.which) {\n            //down\n            case 40:\n                var nextItem = this.findNextItem(listItem);\n                if (nextItem) {\n                    nextItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //up\n            case 38:\n                var prevItem = this.findPrevItem(listItem);\n                if (prevItem) {\n                    prevItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //enter\n            case 13:\n                this.onItemClick(event, item, selectedItems, callback);\n                event.preventDefault();\n            break;\n        }\n    }\n\n    findNextItem(item) {\n        let nextItem = item.nextElementSibling;\n\n        if (nextItem)\n            return !DomHandler.hasClass(nextItem, 'p-picklist-item') || DomHandler.isHidden(nextItem) ? this.findNextItem(nextItem) : nextItem;\n        else\n            return null;\n    }\n\n    findPrevItem(item) {\n        let prevItem = item.previousElementSibling;\n\n        if (prevItem)\n            return !DomHandler.hasClass(prevItem, 'p-picklist-item') || DomHandler.isHidden(prevItem) ? this.findPrevItem(prevItem) : prevItem;\n        else\n            return null;\n    }\n\n    createStyle() {\n        if (!this.styleElement) {\n            this.el.nativeElement.children[0].setAttribute(this.id, '');\n            this.styleElement = document.createElement('style');\n            this.styleElement.type = 'text/css';\n            document.head.appendChild(this.styleElement);\n\n            let innerHTML = `\n            @media screen and (max-width: ${this.breakpoint}) {\n                .p-picklist[${this.id}] {\n                    flex-direction: column;\n                }\n\n                .p-picklist[${this.id}] .p-picklist-buttons {\n                    padding: var(--content-padding);\n                    flex-direction: row;\n                }\n\n                .p-picklist[${this.id}] .p-picklist-buttons .p-button {\n                    margin-right: var(--inline-spacing);\n                    margin-bottom: 0;\n                }\n\n                .p-picklist[${this.id}] .p-picklist-buttons .p-button:last-child {\n                    margin-right: 0;\n                }\n\n                .p-picklist[${this.id}] .pi-angle-right:before {\n                    content: \"\\\\e930\"\n                }\n\n                .p-picklist[${this.id}] .pi-angle-double-right:before {\n                    content: \"\\\\e92c\"\n                }\n\n                .p-picklist[${this.id}] .pi-angle-left:before {\n                    content: \"\\\\e933\"\n                }\n\n                .p-picklist[${this.id}] .pi-angle-double-left:before {\n                    content: \"\\\\e92f\"\n                }\n            }\n            `;\n\n            this.styleElement.innerHTML = innerHTML;\n        }\n    }\n\n    destroyStyle() {\n        if (this.styleElement) {\n            document.head.removeChild(this.styleElement);\n            this.styleElement = null;``\n        }\n    }\n\n    ngOnDestroy() {\n        this.destroyStyle();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule,SharedModule,RippleModule,DragDropModule],\n    exports: [PickList,SharedModule,DragDropModule],\n    declarations: [PickList]\n})\nexport class PickListModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-progressbar.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-progressbar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-progressbar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,69 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class ProgressBar {
+    constructor() {
+        this.showValue = true;
+        this.unit = '%';
+        this.mode = 'determinate';
+    }
+}
+ProgressBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
+ProgressBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ProgressBar, selector: "p-progressBar", inputs: { value: "value", showValue: "showValue", style: "style", styleClass: "styleClass", unit: "unit", mode: "mode" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [class]="styleClass" [ngStyle]="style" role="progressbar" aria-valuemin="0" [attr.aria-valuenow]="value" aria-valuemax="100"
+            [ngClass]="{'p-progressbar p-component': true, 'p-progressbar-determinate': (mode === 'determinate'), 'p-progressbar-indeterminate': (mode === 'indeterminate')}">
+            <div *ngIf="mode === 'determinate'" class="p-progressbar-value p-progressbar-value-animate" [style.width]="value + '%'" style="display:block"></div>
+            <div *ngIf="mode === 'determinate' && showValue" class="p-progressbar-label" [style.display]="value != null ? 'block' : 'none'">{{value}}{{unit}}</div>
+            <div *ngIf="mode === 'indeterminate'" class="p-progressbar-indeterminate-container">
+                <div class="p-progressbar-value p-progressbar-value-animate"></div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-progressbar{position:relative;overflow:hidden}.p-progressbar-determinate .p-progressbar-value{height:100%;width:0%;position:absolute;display:none;border:0 none}.p-progressbar-determinate .p-progressbar-value-animate{transition:width 1s ease-in-out}.p-progressbar-determinate .p-progressbar-label{text-align:center;height:100%;width:100%;position:absolute;font-weight:bold}.p-progressbar-indeterminate .p-progressbar-value:before{content:\"\";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;animation:p-progressbar-indeterminate-anim 2.1s cubic-bezier(.65,.815,.735,.395) infinite}.p-progressbar-indeterminate .p-progressbar-value:after{content:\"\";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;animation:p-progressbar-indeterminate-anim-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;animation-delay:1.15s}@keyframes p-progressbar-indeterminate-anim{0%{left:-35%;right:100%}60%{left:100%;right:-90%}to{left:100%;right:-90%}}@keyframes p-progressbar-indeterminate-anim-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressBar, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-progressBar', template: `
+        <div [class]="styleClass" [ngStyle]="style" role="progressbar" aria-valuemin="0" [attr.aria-valuenow]="value" aria-valuemax="100"
+            [ngClass]="{'p-progressbar p-component': true, 'p-progressbar-determinate': (mode === 'determinate'), 'p-progressbar-indeterminate': (mode === 'indeterminate')}">
+            <div *ngIf="mode === 'determinate'" class="p-progressbar-value p-progressbar-value-animate" [style.width]="value + '%'" style="display:block"></div>
+            <div *ngIf="mode === 'determinate' && showValue" class="p-progressbar-label" [style.display]="value != null ? 'block' : 'none'">{{value}}{{unit}}</div>
+            <div *ngIf="mode === 'indeterminate'" class="p-progressbar-indeterminate-container">
+                <div class="p-progressbar-value p-progressbar-value-animate"></div>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-progressbar{position:relative;overflow:hidden}.p-progressbar-determinate .p-progressbar-value{height:100%;width:0%;position:absolute;display:none;border:0 none}.p-progressbar-determinate .p-progressbar-value-animate{transition:width 1s ease-in-out}.p-progressbar-determinate .p-progressbar-label{text-align:center;height:100%;width:100%;position:absolute;font-weight:bold}.p-progressbar-indeterminate .p-progressbar-value:before{content:\"\";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;animation:p-progressbar-indeterminate-anim 2.1s cubic-bezier(.65,.815,.735,.395) infinite}.p-progressbar-indeterminate .p-progressbar-value:after{content:\"\";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;animation:p-progressbar-indeterminate-anim-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;animation-delay:1.15s}@keyframes p-progressbar-indeterminate-anim{0%{left:-35%;right:100%}60%{left:100%;right:-90%}to{left:100%;right:-90%}}@keyframes p-progressbar-indeterminate-anim-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}\n"] }]
+        }], propDecorators: { value: [{
+                type: Input
+            }], showValue: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], unit: [{
+                type: Input
+            }], mode: [{
+                type: Input
+            }] } });
+class ProgressBarModule {
+}
+ProgressBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ProgressBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressBarModule, declarations: [ProgressBar], imports: [CommonModule], exports: [ProgressBar] });
+ProgressBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressBarModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressBarModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [ProgressBar],
+                    declarations: [ProgressBar]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ProgressBar, ProgressBarModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-progressbar.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-progressbar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-progressbar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-progressbar.mjs","sources":["../../src/app/components/progressbar/progressbar.ts","../../src/app/components/progressbar/primeng-progressbar.ts"],"sourcesContent":["import {NgModule,Component,Input,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\n@Component({\n    selector: 'p-progressBar',\n    template: `\n        <div [class]=\"styleClass\" [ngStyle]=\"style\" role=\"progressbar\" aria-valuemin=\"0\" [attr.aria-valuenow]=\"value\" aria-valuemax=\"100\"\n            [ngClass]=\"{'p-progressbar p-component': true, 'p-progressbar-determinate': (mode === 'determinate'), 'p-progressbar-indeterminate': (mode === 'indeterminate')}\">\n            <div *ngIf=\"mode === 'determinate'\" class=\"p-progressbar-value p-progressbar-value-animate\" [style.width]=\"value + '%'\" style=\"display:block\"></div>\n            <div *ngIf=\"mode === 'determinate' && showValue\" class=\"p-progressbar-label\" [style.display]=\"value != null ? 'block' : 'none'\">{{value}}{{unit}}</div>\n            <div *ngIf=\"mode === 'indeterminate'\" class=\"p-progressbar-indeterminate-container\">\n                <div class=\"p-progressbar-value p-progressbar-value-animate\"></div>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./progressbar.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ProgressBar {\n\n    @Input() value: any;\n\n    @Input() showValue: boolean = true;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() unit: string = '%';\n\n    @Input() mode: string = 'determinate';\n\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [ProgressBar],\n    declarations: [ProgressBar]\n})\nexport class ProgressBarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAsBa,WAAW;IAnBxB;QAuBa,cAAS,GAAY,IAAI,CAAC;QAM1B,SAAI,GAAW,GAAG,CAAC;QAEnB,SAAI,GAAW,aAAa,CAAC;KAEzC;;wGAdY,WAAW;4FAAX,WAAW,sNAjBV;;;;;;;;;KAST;2FAQQ,WAAW;kBAnBvB,SAAS;+BACI,eAAe,YACf;;;;;;;;;KAST,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,KAAK;sBAAb,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,IAAI;sBAAZ,KAAK;;MASG,iBAAiB;;8GAAjB,iBAAiB;+GAAjB,iBAAiB,iBArBjB,WAAW,aAiBV,YAAY,aAjBb,WAAW;+GAqBX,iBAAiB,YAJjB,CAAC,YAAY,CAAC;2FAId,iBAAiB;kBAL7B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,WAAW,CAAC;oBACtB,YAAY,EAAE,CAAC,WAAW,CAAC;iBAC9B;;;AC1CD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-progressspinner.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-progressspinner.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-progressspinner.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,61 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class ProgressSpinner {
+    constructor() {
+        this.strokeWidth = "2";
+        this.fill = "none";
+        this.animationDuration = "2s";
+    }
+}
+ProgressSpinner.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
+ProgressSpinner.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ProgressSpinner, selector: "p-progressSpinner", inputs: { style: "style", styleClass: "styleClass", strokeWidth: "strokeWidth", fill: "fill", animationDuration: "animationDuration" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div class="p-progress-spinner" [ngStyle]="style" [ngClass]="styleClass"  role="alert" aria-busy="true">
+            <svg class="p-progress-spinner-svg" viewBox="25 25 50 50" [style.animation-duration]="animationDuration">
+                <circle class="p-progress-spinner-circle" cx="50" cy="50" r="20" [attr.fill]="fill" [attr.stroke-width]="strokeWidth" stroke-miterlimit="10"/>
+            </svg>
+        </div>
+    `, isInline: true, styles: [".p-progress-spinner{position:relative;margin:0 auto;width:100px;height:100px;display:inline-block}.p-progress-spinner:before{content:\"\";display:block;padding-top:100%}.p-progress-spinner-svg{animation:p-progress-spinner-rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;bottom:0;left:0;right:0;margin:auto}.p-progress-spinner-circle{stroke-dasharray:89,200;stroke-dashoffset:0;stroke:#d62d20;animation:p-progress-spinner-dash 1.5s ease-in-out infinite,p-progress-spinner-color 6s ease-in-out infinite;stroke-linecap:round}@keyframes p-progress-spinner-rotate{to{transform:rotate(360deg)}}@keyframes p-progress-spinner-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes p-progress-spinner-color{to,0%{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressSpinner, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-progressSpinner', template: `
+        <div class="p-progress-spinner" [ngStyle]="style" [ngClass]="styleClass"  role="alert" aria-busy="true">
+            <svg class="p-progress-spinner-svg" viewBox="25 25 50 50" [style.animation-duration]="animationDuration">
+                <circle class="p-progress-spinner-circle" cx="50" cy="50" r="20" [attr.fill]="fill" [attr.stroke-width]="strokeWidth" stroke-miterlimit="10"/>
+            </svg>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-progress-spinner{position:relative;margin:0 auto;width:100px;height:100px;display:inline-block}.p-progress-spinner:before{content:\"\";display:block;padding-top:100%}.p-progress-spinner-svg{animation:p-progress-spinner-rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;bottom:0;left:0;right:0;margin:auto}.p-progress-spinner-circle{stroke-dasharray:89,200;stroke-dashoffset:0;stroke:#d62d20;animation:p-progress-spinner-dash 1.5s ease-in-out infinite,p-progress-spinner-color 6s ease-in-out infinite;stroke-linecap:round}@keyframes p-progress-spinner-rotate{to{transform:rotate(360deg)}}@keyframes p-progress-spinner-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes p-progress-spinner-color{to,0%{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}\n"] }]
+        }], propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], strokeWidth: [{
+                type: Input
+            }], fill: [{
+                type: Input
+            }], animationDuration: [{
+                type: Input
+            }] } });
+class ProgressSpinnerModule {
+}
+ProgressSpinnerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressSpinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ProgressSpinnerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressSpinnerModule, declarations: [ProgressSpinner], imports: [CommonModule], exports: [ProgressSpinner] });
+ProgressSpinnerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressSpinnerModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ProgressSpinnerModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [ProgressSpinner],
+                    declarations: [ProgressSpinner]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ProgressSpinner, ProgressSpinnerModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-progressspinner.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-progressspinner.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-progressspinner.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-progressspinner.mjs","sources":["../../src/app/components/progressspinner/progressspinner.ts","../../src/app/components/progressspinner/primeng-progressspinner.ts"],"sourcesContent":["import {NgModule,Component,Input,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\n@Component({\n    selector: 'p-progressSpinner',\n    template: `\n        <div class=\"p-progress-spinner\" [ngStyle]=\"style\" [ngClass]=\"styleClass\"  role=\"alert\" aria-busy=\"true\">\n            <svg class=\"p-progress-spinner-svg\" viewBox=\"25 25 50 50\" [style.animation-duration]=\"animationDuration\">\n                <circle class=\"p-progress-spinner-circle\" cx=\"50\" cy=\"50\" r=\"20\" [attr.fill]=\"fill\" [attr.stroke-width]=\"strokeWidth\" stroke-miterlimit=\"10\"/>\n            </svg>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./progressspinner.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ProgressSpinner {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() strokeWidth: string = \"2\";\n\n    @Input() fill: string = \"none\";\n\n    @Input() animationDuration: string = \"2s\";\n\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [ProgressSpinner],\n    declarations: [ProgressSpinner]\n})\nexport class ProgressSpinnerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAmBa,eAAe;IAhB5B;QAsBa,gBAAW,GAAW,GAAG,CAAC;QAE1B,SAAI,GAAW,MAAM,CAAC;QAEtB,sBAAiB,GAAW,IAAI,CAAC;KAE7C;;4GAZY,eAAe;gGAAf,eAAe,wOAdd;;;;;;KAMT;2FAQQ,eAAe;kBAhB3B,SAAS;+BACI,mBAAmB,YACnB;;;;;;KAMT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,iBAAiB;sBAAzB,KAAK;;MASG,qBAAqB;;kHAArB,qBAAqB;mHAArB,qBAAqB,iBAnBrB,eAAe,aAed,YAAY,aAfb,eAAe;mHAmBf,qBAAqB,YAJrB,CAAC,YAAY,CAAC;2FAId,qBAAqB;kBALjC,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,YAAY,EAAE,CAAC,eAAe,CAAC;iBAClC;;;ACrCD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-radiobutton.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-radiobutton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-radiobutton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,222 @@
+import * as i0 from '@angular/core';
+import { forwardRef, Injectable, EventEmitter, Component, ChangeDetectionStrategy, Input, Output, ViewChild, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
+
+const RADIO_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => RadioButton),
+    multi: true
+};
+class RadioControlRegistry {
+    constructor() {
+        this.accessors = [];
+    }
+    add(control, accessor) {
+        this.accessors.push([control, accessor]);
+    }
+    remove(accessor) {
+        this.accessors = this.accessors.filter((c) => {
+            return c[1] !== accessor;
+        });
+    }
+    select(accessor) {
+        this.accessors.forEach((c) => {
+            if (this.isSameGroup(c, accessor) && c[1] !== accessor) {
+                c[1].writeValue(accessor.value);
+            }
+        });
+    }
+    isSameGroup(controlPair, accessor) {
+        if (!controlPair[0].control) {
+            return false;
+        }
+        return controlPair[0].control.root === accessor.control.control.root && controlPair[1].name === accessor.name;
+    }
+}
+RadioControlRegistry.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioControlRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+RadioControlRegistry.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioControlRegistry, providedIn: 'root' });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioControlRegistry, decorators: [{
+            type: Injectable,
+            args: [{
+                    providedIn: 'root',
+                }]
+        }] });
+class RadioButton {
+    constructor(cd, injector, registry) {
+        this.cd = cd;
+        this.injector = injector;
+        this.registry = registry;
+        this.onClick = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    ngOnInit() {
+        this.control = this.injector.get(NgControl);
+        this.checkName();
+        this.registry.add(this.control, this);
+    }
+    handleClick(event, radioButton, focus) {
+        event.preventDefault();
+        if (this.disabled) {
+            return;
+        }
+        this.select(event);
+        if (focus) {
+            radioButton.focus();
+        }
+    }
+    select(event) {
+        if (!this.disabled) {
+            this.inputViewChild.nativeElement.checked = true;
+            this.checked = true;
+            this.onModelChange(this.value);
+            this.registry.select(this);
+            this.onClick.emit(event);
+        }
+    }
+    writeValue(value) {
+        this.checked = (value == this.value);
+        if (this.inputViewChild && this.inputViewChild.nativeElement) {
+            this.inputViewChild.nativeElement.checked = this.checked;
+        }
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    onInputFocus(event) {
+        this.focused = true;
+        this.onFocus.emit(event);
+    }
+    onInputBlur(event) {
+        this.focused = false;
+        this.onModelTouched();
+        this.onBlur.emit(event);
+    }
+    onChange(event) {
+        this.select(event);
+    }
+    focus() {
+        this.inputViewChild.nativeElement.focus();
+    }
+    ngOnDestroy() {
+        this.registry.remove(this);
+    }
+    checkName() {
+        if (this.name && this.formControlName && this.name !== this.formControlName) {
+            this.throwNameError();
+        }
+        if (!this.name && this.formControlName) {
+            this.name = this.formControlName;
+        }
+    }
+    throwNameError() {
+        throw new Error(`
+          If you define both a name and a formControlName attribute on your radio button, their values
+          must match. Ex: <p-radioButton formControlName="food" name="food"></p-radioButton>
+        `);
+    }
+}
+RadioButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioButton, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: RadioControlRegistry }], target: i0.ɵɵFactoryTarget.Component });
+RadioButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: RadioButton, selector: "p-radioButton", inputs: { value: "value", formControlName: "formControlName", name: "name", disabled: "disabled", label: "label", tabindex: "tabindex", inputId: "inputId", ariaLabelledBy: "ariaLabelledBy", ariaLabel: "ariaLabel", style: "style", styleClass: "styleClass", labelStyleClass: "labelStyleClass" }, outputs: { onClick: "onClick", onFocus: "onFocus", onBlur: "onBlur" }, host: { classAttribute: "p-element" }, providers: [RADIO_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputViewChild", first: true, predicate: ["rb"], descendants: true }], ngImport: i0, template: `
+        <div [ngStyle]="style" [ngClass]="{'p-radiobutton p-component':true,'p-radiobutton-checked': checked, 'p-radiobutton-disabled': disabled, 'p-radiobutton-focused': focused}" [class]="styleClass">
+            <div class="p-hidden-accessible">
+                <input #rb type="radio" [attr.id]="inputId" [attr.name]="name" [attr.value]="value" [attr.tabindex]="tabindex" [attr.aria-checked]="checked" [attr.aria-label]="ariaLabel"
+                    [attr.aria-labelledby]="ariaLabelledBy" [checked]="checked" (change)="onChange($event)" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" [disabled]="disabled">
+            </div>
+            <div (click)="handleClick($event, rb, true)" [ngClass]="{'p-radiobutton-box':true, 'p-highlight': checked, 'p-disabled': disabled, 'p-focus': focused}">
+                <span class="p-radiobutton-icon"></span>
+            </div>
+        </div>
+        <label (click)="select($event)" [class]="labelStyleClass"
+            [ngClass]="{'p-radiobutton-label':true, 'p-radiobutton-label-active':rb.checked, 'p-disabled':disabled, 'p-radiobutton-label-focus':focused}"
+            *ngIf="label" [attr.for]="inputId">{{label}}</label>
+    `, isInline: true, directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioButton, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-radioButton',
+                    template: `
+        <div [ngStyle]="style" [ngClass]="{'p-radiobutton p-component':true,'p-radiobutton-checked': checked, 'p-radiobutton-disabled': disabled, 'p-radiobutton-focused': focused}" [class]="styleClass">
+            <div class="p-hidden-accessible">
+                <input #rb type="radio" [attr.id]="inputId" [attr.name]="name" [attr.value]="value" [attr.tabindex]="tabindex" [attr.aria-checked]="checked" [attr.aria-label]="ariaLabel"
+                    [attr.aria-labelledby]="ariaLabelledBy" [checked]="checked" (change)="onChange($event)" (focus)="onInputFocus($event)" (blur)="onInputBlur($event)" [disabled]="disabled">
+            </div>
+            <div (click)="handleClick($event, rb, true)" [ngClass]="{'p-radiobutton-box':true, 'p-highlight': checked, 'p-disabled': disabled, 'p-focus': focused}">
+                <span class="p-radiobutton-icon"></span>
+            </div>
+        </div>
+        <label (click)="select($event)" [class]="labelStyleClass"
+            [ngClass]="{'p-radiobutton-label':true, 'p-radiobutton-label-active':rb.checked, 'p-disabled':disabled, 'p-radiobutton-label-focus':focused}"
+            *ngIf="label" [attr.for]="inputId">{{label}}</label>
+    `,
+                    providers: [RADIO_VALUE_ACCESSOR],
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: RadioControlRegistry }]; }, propDecorators: { value: [{
+                type: Input
+            }], formControlName: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], label: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], labelStyleClass: [{
+                type: Input
+            }], onClick: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], inputViewChild: [{
+                type: ViewChild,
+                args: ['rb']
+            }] } });
+class RadioButtonModule {
+}
+RadioButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+RadioButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioButtonModule, declarations: [RadioButton], imports: [CommonModule], exports: [RadioButton] });
+RadioButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioButtonModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RadioButtonModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [RadioButton],
+                    declarations: [RadioButton]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { RADIO_VALUE_ACCESSOR, RadioButton, RadioButtonModule, RadioControlRegistry };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-radiobutton.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-radiobutton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-radiobutton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-radiobutton.mjs","sources":["../../src/app/components/radiobutton/radiobutton.ts","../../src/app/components/radiobutton/primeng-radiobutton.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,ElementRef,EventEmitter,forwardRef,ViewChild,ChangeDetectorRef,ChangeDetectionStrategy, Injectable, Injector, OnInit, OnDestroy} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor, NgControl} from '@angular/forms';\n\nexport const RADIO_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => RadioButton),\n    multi: true\n};\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class RadioControlRegistry {\n    private accessors: any[] = [];\n\n    add(control: NgControl, accessor: RadioButton) {\n        this.accessors.push([control, accessor]);\n    }\n\n    remove(accessor: RadioButton) {\n        this.accessors = this.accessors.filter((c) => {\n            return c[1] !== accessor;\n        })\n    }\n\n    select(accessor: RadioButton) {\n        this.accessors.forEach((c) => {\n            if (this.isSameGroup(c, accessor) && c[1] !== accessor) {\n                c[1].writeValue(accessor.value);\n            }\n        });\n    }\n\n    private isSameGroup(controlPair: [NgControl, RadioButton], accessor: RadioButton): boolean {\n        if (!controlPair[0].control) {\n            return false;\n        }\n\n        return controlPair[0].control.root === accessor.control.control.root && controlPair[1].name === accessor.name;\n    }\n}\n\n@Component({\n    selector: 'p-radioButton',\n    template: `\n        <div [ngStyle]=\"style\" [ngClass]=\"{'p-radiobutton p-component':true,'p-radiobutton-checked': checked, 'p-radiobutton-disabled': disabled, 'p-radiobutton-focused': focused}\" [class]=\"styleClass\">\n            <div class=\"p-hidden-accessible\">\n                <input #rb type=\"radio\" [attr.id]=\"inputId\" [attr.name]=\"name\" [attr.value]=\"value\" [attr.tabindex]=\"tabindex\" [attr.aria-checked]=\"checked\" [attr.aria-label]=\"ariaLabel\"\n                    [attr.aria-labelledby]=\"ariaLabelledBy\" [checked]=\"checked\" (change)=\"onChange($event)\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\" [disabled]=\"disabled\">\n            </div>\n            <div (click)=\"handleClick($event, rb, true)\" [ngClass]=\"{'p-radiobutton-box':true, 'p-highlight': checked, 'p-disabled': disabled, 'p-focus': focused}\">\n                <span class=\"p-radiobutton-icon\"></span>\n            </div>\n        </div>\n        <label (click)=\"select($event)\" [class]=\"labelStyleClass\"\n            [ngClass]=\"{'p-radiobutton-label':true, 'p-radiobutton-label-active':rb.checked, 'p-disabled':disabled, 'p-radiobutton-label-focus':focused}\"\n            *ngIf=\"label\" [attr.for]=\"inputId\">{{label}}</label>\n    `,\n    providers: [RADIO_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class RadioButton implements ControlValueAccessor, OnInit, OnDestroy {\n\n    @Input() value: any;\n\n    @Input() formControlName: string;\n\n    @Input() name: string;\n\n    @Input() disabled: boolean;\n\n    @Input() label: string;\n\n    @Input() tabindex: number;\n\n    @Input() inputId: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() ariaLabel: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() labelStyleClass: string;\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('rb') inputViewChild: ElementRef;\n\n    public onModelChange: Function = () => {};\n\n    public onModelTouched: Function = () => {};\n\n    public checked: boolean;\n\n    public focused: boolean;\n\n    control: NgControl;\n\n    constructor(public cd: ChangeDetectorRef, private injector: Injector, private registry: RadioControlRegistry) {}\n\n    ngOnInit() {\n        this.control = this.injector.get(NgControl);\n        this.checkName();\n        this.registry.add(this.control, this);\n    }\n\n    handleClick(event, radioButton, focus) {\n        event.preventDefault();\n\n        if (this.disabled) {\n            return;\n        }\n\n        this.select(event);\n\n        if (focus) {\n            radioButton.focus();\n        }\n    }\n\n    select(event) {\n        if (!this.disabled) {\n            this.inputViewChild.nativeElement.checked = true;\n            this.checked = true;\n            this.onModelChange(this.value);\n            this.registry.select(this);\n            this.onClick.emit(event);\n        }\n    }\n\n    writeValue(value: any) : void {\n        this.checked = (value == this.value);\n\n        if (this.inputViewChild && this.inputViewChild.nativeElement) {\n            this.inputViewChild.nativeElement.checked = this.checked;\n        }\n\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    onInputFocus(event) {\n        this.focused = true;\n        this.onFocus.emit(event);\n    }\n\n    onInputBlur(event) {\n        this.focused = false;\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    }\n\n    onChange(event) {\n        this.select(event);\n    }\n\n    focus() {\n        this.inputViewChild.nativeElement.focus();\n    }\n\n    ngOnDestroy() {\n        this.registry.remove(this);\n    }\n\n    private checkName() {\n        if (this.name && this.formControlName && this.name !== this.formControlName) {\n            this.throwNameError();\n        }\n        if (!this.name && this.formControlName) {\n            this.name = this.formControlName;\n        }\n    }\n\n    private throwNameError() {\n        throw new Error(`\n          If you define both a name and a formControlName attribute on your radio button, their values\n          must match. Ex: <p-radioButton formControlName=\"food\" name=\"food\"></p-radioButton>\n        `);\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [RadioButton],\n    declarations: [RadioButton]\n})\nexport class RadioButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-rating.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-rating.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-rating.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,131 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const RATING_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Rating),
+    multi: true
+};
+class Rating {
+    constructor(cd) {
+        this.cd = cd;
+        this.stars = 5;
+        this.cancel = true;
+        this.iconOnClass = 'pi pi-star-fill';
+        this.iconOffClass = 'pi pi-star';
+        this.iconCancelClass = 'pi pi-ban';
+        this.onRate = new EventEmitter();
+        this.onCancel = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    ngOnInit() {
+        this.starsArray = [];
+        for (let i = 0; i < this.stars; i++) {
+            this.starsArray[i] = i;
+        }
+    }
+    rate(event, i) {
+        if (!this.readonly && !this.disabled) {
+            this.value = (i + 1);
+            this.onModelChange(this.value);
+            this.onModelTouched();
+            this.onRate.emit({
+                originalEvent: event,
+                value: (i + 1)
+            });
+        }
+        event.preventDefault();
+    }
+    clear(event) {
+        if (!this.readonly && !this.disabled) {
+            this.value = null;
+            this.onModelChange(this.value);
+            this.onModelTouched();
+            this.onCancel.emit(event);
+        }
+        event.preventDefault();
+    }
+    writeValue(value) {
+        this.value = value;
+        this.cd.detectChanges();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+}
+Rating.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Rating, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Rating.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Rating, selector: "p-rating", inputs: { disabled: "disabled", readonly: "readonly", stars: "stars", cancel: "cancel", iconOnClass: "iconOnClass", iconOnStyle: "iconOnStyle", iconOffClass: "iconOffClass", iconOffStyle: "iconOffStyle", iconCancelClass: "iconCancelClass", iconCancelStyle: "iconCancelStyle" }, outputs: { onRate: "onRate", onCancel: "onCancel" }, host: { classAttribute: "p-element" }, providers: [RATING_VALUE_ACCESSOR], ngImport: i0, template: `
+        <div class="p-rating" [ngClass]="{'p-readonly': readonly, 'p-disabled': disabled}">
+            <span [attr.tabindex]="(disabled || readonly) ? null : '0'" *ngIf="cancel" (click)="clear($event)" (keydown.enter)="clear($event)" class="p-rating-icon p-rating-cancel" [ngClass]="iconCancelClass" [ngStyle]="iconCancelStyle"></span>
+            <span *ngFor="let star of starsArray;let i=index" class="p-rating-icon" [attr.tabindex]="(disabled || readonly) ? null : '0'"  (click)="rate($event,i)" (keydown.enter)="rate($event,i)"
+                [ngClass]="(!value || i >= value) ? iconOffClass : iconOnClass"
+                [ngStyle]="(!value || i >= value) ? iconOffStyle : iconOnStyle"></span>
+        </div>
+    `, isInline: true, styles: [".p-rating-icon{cursor:pointer}.p-rating.p-rating-readonly .p-rating-icon{cursor:default}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Rating, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-rating', template: `
+        <div class="p-rating" [ngClass]="{'p-readonly': readonly, 'p-disabled': disabled}">
+            <span [attr.tabindex]="(disabled || readonly) ? null : '0'" *ngIf="cancel" (click)="clear($event)" (keydown.enter)="clear($event)" class="p-rating-icon p-rating-cancel" [ngClass]="iconCancelClass" [ngStyle]="iconCancelStyle"></span>
+            <span *ngFor="let star of starsArray;let i=index" class="p-rating-icon" [attr.tabindex]="(disabled || readonly) ? null : '0'"  (click)="rate($event,i)" (keydown.enter)="rate($event,i)"
+                [ngClass]="(!value || i >= value) ? iconOffClass : iconOnClass"
+                [ngStyle]="(!value || i >= value) ? iconOffStyle : iconOnStyle"></span>
+        </div>
+    `, providers: [RATING_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-rating-icon{cursor:pointer}.p-rating.p-rating-readonly .p-rating-icon{cursor:default}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], stars: [{
+                type: Input
+            }], cancel: [{
+                type: Input
+            }], iconOnClass: [{
+                type: Input
+            }], iconOnStyle: [{
+                type: Input
+            }], iconOffClass: [{
+                type: Input
+            }], iconOffStyle: [{
+                type: Input
+            }], iconCancelClass: [{
+                type: Input
+            }], iconCancelStyle: [{
+                type: Input
+            }], onRate: [{
+                type: Output
+            }], onCancel: [{
+                type: Output
+            }] } });
+class RatingModule {
+}
+RatingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RatingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+RatingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RatingModule, declarations: [Rating], imports: [CommonModule], exports: [Rating] });
+RatingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RatingModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RatingModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Rating],
+                    declarations: [Rating]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { RATING_VALUE_ACCESSOR, Rating, RatingModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-rating.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-rating.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-rating.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-rating.mjs","sources":["../../src/app/components/rating/rating.ts","../../src/app/components/rating/primeng-rating.ts"],"sourcesContent":["import {NgModule,Component,OnInit,Input,Output,EventEmitter,forwardRef,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const RATING_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => Rating),\n  multi: true\n};\n\n@Component({\n    selector: 'p-rating',\n    template: `\n        <div class=\"p-rating\" [ngClass]=\"{'p-readonly': readonly, 'p-disabled': disabled}\">\n            <span [attr.tabindex]=\"(disabled || readonly) ? null : '0'\" *ngIf=\"cancel\" (click)=\"clear($event)\" (keydown.enter)=\"clear($event)\" class=\"p-rating-icon p-rating-cancel\" [ngClass]=\"iconCancelClass\" [ngStyle]=\"iconCancelStyle\"></span>\n            <span *ngFor=\"let star of starsArray;let i=index\" class=\"p-rating-icon\" [attr.tabindex]=\"(disabled || readonly) ? null : '0'\"  (click)=\"rate($event,i)\" (keydown.enter)=\"rate($event,i)\"\n                [ngClass]=\"(!value || i >= value) ? iconOffClass : iconOnClass\"\n                [ngStyle]=\"(!value || i >= value) ? iconOffStyle : iconOnStyle\"></span>\n        </div>\n    `,\n    providers: [RATING_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./rating.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Rating implements OnInit,ControlValueAccessor {\n\n    @Input() disabled: boolean;\n\n    @Input() readonly: boolean;\n\n    @Input() stars: number = 5;\n\n    @Input() cancel: boolean = true;\n\n    @Input() iconOnClass: string = 'pi pi-star-fill';\n\n    @Input() iconOnStyle: any;\n\n    @Input() iconOffClass: string = 'pi pi-star';\n\n    @Input() iconOffStyle: any;\n\n    @Input() iconCancelClass: string = 'pi pi-ban';\n\n    @Input() iconCancelStyle: any;\n\n    @Output() onRate: EventEmitter<any> = new EventEmitter();\n\n    @Output() onCancel: EventEmitter<any> = new EventEmitter();\n\n    constructor(private cd: ChangeDetectorRef) {}\n\n    value: number;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    public starsArray: number[];\n\n    ngOnInit() {\n        this.starsArray = [];\n        for(let i = 0; i < this.stars; i++) {\n            this.starsArray[i] = i;\n        }\n    }\n\n    rate(event, i: number): void {\n        if (!this.readonly&&!this.disabled) {\n            this.value = (i + 1);\n            this.onModelChange(this.value);\n            this.onModelTouched();\n            this.onRate.emit({\n                originalEvent: event,\n                value: (i+1)\n            });\n        }\n        event.preventDefault();\n    }\n\n    clear(event): void {\n        if (!this.readonly&&!this.disabled) {\n            this.value = null;\n            this.onModelChange(this.value);\n            this.onModelTouched();\n            this.onCancel.emit(event);\n        }\n        event.preventDefault();\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.cd.detectChanges();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Rating],\n    declarations: [Rating]\n})\nexport class RatingModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-ripple.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-ripple.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-ripple.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,109 @@
+import * as i0 from '@angular/core';
+import { Directive, Optional, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import * as i1 from 'primeng/api';
+
+class Ripple {
+    constructor(el, zone, config) {
+        this.el = el;
+        this.zone = zone;
+        this.config = config;
+    }
+    ngAfterViewInit() {
+        if (this.config && this.config.ripple) {
+            this.zone.runOutsideAngular(() => {
+                this.create();
+                this.mouseDownListener = this.onMouseDown.bind(this);
+                this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);
+            });
+        }
+    }
+    onMouseDown(event) {
+        let ink = this.getInk();
+        if (!ink || getComputedStyle(ink, null).display === 'none') {
+            return;
+        }
+        DomHandler.removeClass(ink, 'p-ink-active');
+        if (!DomHandler.getHeight(ink) && !DomHandler.getWidth(ink)) {
+            let d = Math.max(DomHandler.getOuterWidth(this.el.nativeElement), DomHandler.getOuterHeight(this.el.nativeElement));
+            ink.style.height = d + 'px';
+            ink.style.width = d + 'px';
+        }
+        let offset = DomHandler.getOffset(this.el.nativeElement);
+        let x = event.pageX - offset.left + document.body.scrollTop - DomHandler.getWidth(ink) / 2;
+        let y = event.pageY - offset.top + document.body.scrollLeft - DomHandler.getHeight(ink) / 2;
+        ink.style.top = y + 'px';
+        ink.style.left = x + 'px';
+        DomHandler.addClass(ink, 'p-ink-active');
+    }
+    getInk() {
+        for (let i = 0; i < this.el.nativeElement.children.length; i++) {
+            if (this.el.nativeElement.children[i].className.indexOf('p-ink') !== -1) {
+                return this.el.nativeElement.children[i];
+            }
+        }
+        return null;
+    }
+    resetInk() {
+        let ink = this.getInk();
+        if (ink) {
+            DomHandler.removeClass(ink, 'p-ink-active');
+        }
+    }
+    onAnimationEnd(event) {
+        DomHandler.removeClass(event.currentTarget, 'p-ink-active');
+    }
+    create() {
+        let ink = document.createElement('span');
+        ink.className = 'p-ink';
+        this.el.nativeElement.appendChild(ink);
+        this.animationListener = this.onAnimationEnd.bind(this);
+        ink.addEventListener('animationend', this.animationListener);
+    }
+    remove() {
+        let ink = this.getInk();
+        if (ink) {
+            this.el.nativeElement.removeEventListener('mousedown', this.mouseDownListener);
+            ink.removeEventListener('animationend', this.animationListener);
+            DomHandler.removeElement(ink);
+        }
+    }
+    ngOnDestroy() {
+        if (this.config && this.config.ripple) {
+            this.remove();
+        }
+    }
+}
+Ripple.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Ripple, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.PrimeNGConfig, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
+Ripple.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: Ripple, selector: "[pRipple]", host: { classAttribute: "p-ripple p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Ripple, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pRipple]',
+                    host: {
+                        'class': 'p-ripple p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.PrimeNGConfig, decorators: [{
+                    type: Optional
+                }] }]; } });
+class RippleModule {
+}
+RippleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RippleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+RippleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RippleModule, declarations: [Ripple], imports: [CommonModule], exports: [Ripple] });
+RippleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RippleModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RippleModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Ripple],
+                    declarations: [Ripple]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Ripple, RippleModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-ripple.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-ripple.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-ripple.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-ripple.mjs","sources":["../../src/app/components/ripple/ripple.ts","../../src/app/components/ripple/primeng-ripple.ts"],"sourcesContent":["import { NgModule, Directive, AfterViewInit, ElementRef, NgZone, OnDestroy, Optional } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler } from 'primeng/dom';\nimport { PrimeNGConfig } from 'primeng/api';\n\n@Directive({\n    selector: '[pRipple]',\n    host: {\n        'class': 'p-ripple p-element'\n    }\n})\nexport class Ripple implements AfterViewInit, OnDestroy {\n\n    constructor(public el: ElementRef, public zone: NgZone, @Optional() public config: PrimeNGConfig) { }\n\n    animationListener: any;\n\n    mouseDownListener: any;\n\n    ngAfterViewInit() {\n        if (this.config && this.config.ripple) {\n            this.zone.runOutsideAngular(() => {\n                this.create();\n\n                this.mouseDownListener = this.onMouseDown.bind(this);\n                this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n            });\n        }\n    }\n\n    onMouseDown(event: MouseEvent) {\n        let ink = this.getInk();\n        if (!ink || getComputedStyle(ink, null).display === 'none') {\n            return;\n        }\n\n        DomHandler.removeClass(ink, 'p-ink-active');\n        if (!DomHandler.getHeight(ink) && !DomHandler.getWidth(ink)) {\n            let d = Math.max(DomHandler.getOuterWidth(this.el.nativeElement), DomHandler.getOuterHeight(this.el.nativeElement));\n            ink.style.height = d + 'px';\n            ink.style.width = d + 'px';\n        }\n\n        let offset = DomHandler.getOffset(this.el.nativeElement);\n        let x = event.pageX - offset.left + document.body.scrollTop - DomHandler.getWidth(ink) / 2;\n        let y = event.pageY - offset.top + document.body.scrollLeft - DomHandler.getHeight(ink) / 2;\n\n        ink.style.top = y + 'px';\n        ink.style.left = x + 'px';\n        DomHandler.addClass(ink, 'p-ink-active');\n    }\n\n    getInk() {\n        for (let i = 0; i < this.el.nativeElement.children.length; i++) {\n            if (this.el.nativeElement.children[i].className.indexOf('p-ink') !== -1) {\n                return this.el.nativeElement.children[i];\n            }\n        }\n        return null;\n    }\n\n    resetInk() {\n        let ink = this.getInk();\n        if (ink) {\n            DomHandler.removeClass(ink, 'p-ink-active');\n        }\n    }\n\n    onAnimationEnd(event) {\n        DomHandler.removeClass(event.currentTarget, 'p-ink-active');\n    }\n\n    create() {\n        let ink = document.createElement('span');\n        ink.className = 'p-ink';\n        this.el.nativeElement.appendChild(ink);\n\n        this.animationListener = this.onAnimationEnd.bind(this);\n        ink.addEventListener('animationend', this.animationListener);\n    }\n\n    remove() {\n        let ink = this.getInk();\n        if (ink) {\n            this.el.nativeElement.removeEventListener('mousedown', this.mouseDownListener);\n            ink.removeEventListener('animationend', this.animationListener);\n            DomHandler.removeElement(ink);\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.config && this.config.ripple) {\n            this.remove();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Ripple],\n    declarations: [Ripple]\n})\nexport class RippleModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-scrollpanel.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-scrollpanel.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-scrollpanel.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,237 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import { PrimeTemplate } from 'primeng/api';
+
+class ScrollPanel {
+    constructor(el, zone, cd) {
+        this.el = el;
+        this.zone = zone;
+        this.cd = cd;
+        this.timeoutFrame = (fn) => setTimeout(fn, 0);
+    }
+    ngAfterViewInit() {
+        this.zone.runOutsideAngular(() => {
+            this.moveBar();
+            this.moveBar = this.moveBar.bind(this);
+            this.onXBarMouseDown = this.onXBarMouseDown.bind(this);
+            this.onYBarMouseDown = this.onYBarMouseDown.bind(this);
+            this.onDocumentMouseMove = this.onDocumentMouseMove.bind(this);
+            this.onDocumentMouseUp = this.onDocumentMouseUp.bind(this);
+            window.addEventListener('resize', this.moveBar);
+            this.contentViewChild.nativeElement.addEventListener('scroll', this.moveBar);
+            this.contentViewChild.nativeElement.addEventListener('mouseenter', this.moveBar);
+            this.xBarViewChild.nativeElement.addEventListener('mousedown', this.onXBarMouseDown);
+            this.yBarViewChild.nativeElement.addEventListener('mousedown', this.onYBarMouseDown);
+            this.calculateContainerHeight();
+            this.initialized = true;
+        });
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    calculateContainerHeight() {
+        let container = this.containerViewChild.nativeElement;
+        let content = this.contentViewChild.nativeElement;
+        let xBar = this.xBarViewChild.nativeElement;
+        let containerStyles = getComputedStyle(container), xBarStyles = getComputedStyle(xBar), pureContainerHeight = DomHandler.getHeight(container) - parseInt(xBarStyles['height'], 10);
+        if (containerStyles['max-height'] != "none" && pureContainerHeight == 0) {
+            if (content.offsetHeight + parseInt(xBarStyles['height'], 10) > parseInt(containerStyles['max-height'], 10)) {
+                container.style.height = containerStyles['max-height'];
+            }
+            else {
+                container.style.height = content.offsetHeight + parseFloat(containerStyles.paddingTop) + parseFloat(containerStyles.paddingBottom) + parseFloat(containerStyles.borderTopWidth) + parseFloat(containerStyles.borderBottomWidth) + "px";
+            }
+        }
+    }
+    moveBar() {
+        let container = this.containerViewChild.nativeElement;
+        let content = this.contentViewChild.nativeElement;
+        /* horizontal scroll */
+        let xBar = this.xBarViewChild.nativeElement;
+        let totalWidth = content.scrollWidth;
+        let ownWidth = content.clientWidth;
+        let bottom = (container.clientHeight - xBar.clientHeight) * -1;
+        this.scrollXRatio = ownWidth / totalWidth;
+        /* vertical scroll */
+        let yBar = this.yBarViewChild.nativeElement;
+        let totalHeight = content.scrollHeight;
+        let ownHeight = content.clientHeight;
+        let right = (container.clientWidth - yBar.clientWidth) * -1;
+        this.scrollYRatio = ownHeight / totalHeight;
+        this.requestAnimationFrame(() => {
+            if (this.scrollXRatio >= 1) {
+                DomHandler.addClass(xBar, 'p-scrollpanel-hidden');
+            }
+            else {
+                DomHandler.removeClass(xBar, 'p-scrollpanel-hidden');
+                const xBarWidth = Math.max(this.scrollXRatio * 100, 10);
+                const xBarLeft = content.scrollLeft * (100 - xBarWidth) / (totalWidth - ownWidth);
+                xBar.style.cssText = 'width:' + xBarWidth + '%; left:' + xBarLeft + '%;bottom:' + bottom + 'px;';
+            }
+            if (this.scrollYRatio >= 1) {
+                DomHandler.addClass(yBar, 'p-scrollpanel-hidden');
+            }
+            else {
+                DomHandler.removeClass(yBar, 'p-scrollpanel-hidden');
+                const yBarHeight = Math.max(this.scrollYRatio * 100, 10);
+                const yBarTop = content.scrollTop * (100 - yBarHeight) / (totalHeight - ownHeight);
+                yBar.style.cssText = 'height:' + yBarHeight + '%; top: calc(' + yBarTop + '% - ' + xBar.clientHeight + 'px);right:' + right + 'px;';
+            }
+        });
+        this.cd.markForCheck();
+    }
+    onYBarMouseDown(e) {
+        this.isYBarClicked = true;
+        this.lastPageY = e.pageY;
+        DomHandler.addClass(this.yBarViewChild.nativeElement, 'p-scrollpanel-grabbed');
+        DomHandler.addClass(document.body, 'p-scrollpanel-grabbed');
+        document.addEventListener('mousemove', this.onDocumentMouseMove);
+        document.addEventListener('mouseup', this.onDocumentMouseUp);
+        e.preventDefault();
+    }
+    onXBarMouseDown(e) {
+        this.isXBarClicked = true;
+        this.lastPageX = e.pageX;
+        DomHandler.addClass(this.xBarViewChild.nativeElement, 'p-scrollpanel-grabbed');
+        DomHandler.addClass(document.body, 'p-scrollpanel-grabbed');
+        document.addEventListener('mousemove', this.onDocumentMouseMove);
+        document.addEventListener('mouseup', this.onDocumentMouseUp);
+        e.preventDefault();
+    }
+    onDocumentMouseMove(e) {
+        if (this.isXBarClicked) {
+            this.onMouseMoveForXBar(e);
+        }
+        else if (this.isYBarClicked) {
+            this.onMouseMoveForYBar(e);
+        }
+        else {
+            this.onMouseMoveForXBar(e);
+            this.onMouseMoveForYBar(e);
+        }
+    }
+    onMouseMoveForXBar(e) {
+        let deltaX = e.pageX - this.lastPageX;
+        this.lastPageX = e.pageX;
+        this.requestAnimationFrame(() => {
+            this.contentViewChild.nativeElement.scrollLeft += deltaX / this.scrollXRatio;
+        });
+    }
+    onMouseMoveForYBar(e) {
+        let deltaY = e.pageY - this.lastPageY;
+        this.lastPageY = e.pageY;
+        this.requestAnimationFrame(() => {
+            this.contentViewChild.nativeElement.scrollTop += deltaY / this.scrollYRatio;
+        });
+    }
+    scrollTop(scrollTop) {
+        let scrollableHeight = this.contentViewChild.nativeElement.scrollHeight - this.contentViewChild.nativeElement.clientHeight;
+        scrollTop = scrollTop > scrollableHeight ? scrollableHeight : scrollTop > 0 ? scrollTop : 0;
+        this.contentViewChild.nativeElement.scrollTop = scrollTop;
+    }
+    onDocumentMouseUp(e) {
+        DomHandler.removeClass(this.yBarViewChild.nativeElement, 'p-scrollpanel-grabbed');
+        DomHandler.removeClass(this.xBarViewChild.nativeElement, 'p-scrollpanel-grabbed');
+        DomHandler.removeClass(document.body, 'p-scrollpanel-grabbed');
+        document.removeEventListener('mousemove', this.onDocumentMouseMove);
+        document.removeEventListener('mouseup', this.onDocumentMouseUp);
+        this.isXBarClicked = false;
+        this.isYBarClicked = false;
+    }
+    requestAnimationFrame(f) {
+        let frame = window.requestAnimationFrame || this.timeoutFrame;
+        frame(f);
+    }
+    ngOnDestroy() {
+        if (this.initialized) {
+            window.removeEventListener('resize', this.moveBar);
+            this.contentViewChild.nativeElement.removeEventListener('scroll', this.moveBar);
+            this.contentViewChild.nativeElement.removeEventListener('mouseenter', this.moveBar);
+            this.xBarViewChild.nativeElement.removeEventListener('mousedown', this.onXBarMouseDown);
+            this.yBarViewChild.nativeElement.removeEventListener('mousedown', this.onYBarMouseDown);
+        }
+    }
+    refresh() {
+        this.moveBar();
+    }
+}
+ScrollPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollPanel, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+ScrollPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ScrollPanel, selector: "p-scrollPanel", inputs: { style: "style", styleClass: "styleClass" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "contentViewChild", first: true, predicate: ["content"], descendants: true }, { propertyName: "xBarViewChild", first: true, predicate: ["xBar"], descendants: true }, { propertyName: "yBarViewChild", first: true, predicate: ["yBar"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="'p-scrollpanel p-component'" [ngStyle]="style" [class]="styleClass">
+            <div class="p-scrollpanel-wrapper">
+                <div #content class="p-scrollpanel-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+            </div>
+            <div #xBar class="p-scrollpanel-bar p-scrollpanel-bar-x"></div>
+            <div #yBar class="p-scrollpanel-bar p-scrollpanel-bar-y"></div>
+        </div>
+    `, isInline: true, styles: [".p-scrollpanel-wrapper{overflow:hidden;width:100%;height:100%;position:relative;z-index:1;float:left}.p-scrollpanel-content{height:calc(100% + 18px);width:calc(100% + 18px);padding:0 18px 18px 0;position:relative;overflow:auto;box-sizing:border-box}.p-scrollpanel-bar{position:relative;background:#c1c1c1;border-radius:3px;z-index:2;cursor:pointer;opacity:0;transition:opacity .25s linear}.p-scrollpanel-bar-y{width:9px;top:0}.p-scrollpanel-bar-x{height:9px;bottom:0}.p-scrollpanel-hidden{visibility:hidden}.p-scrollpanel:hover .p-scrollpanel-bar,.p-scrollpanel:active .p-scrollpanel-bar{opacity:1}.p-scrollpanel-grabbed{-webkit-user-select:none;-ms-user-select:none;user-select:none}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollPanel, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-scrollPanel', template: `
+        <div #container [ngClass]="'p-scrollpanel p-component'" [ngStyle]="style" [class]="styleClass">
+            <div class="p-scrollpanel-wrapper">
+                <div #content class="p-scrollpanel-content">
+                    <ng-content></ng-content>
+                    <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+                </div>
+            </div>
+            <div #xBar class="p-scrollpanel-bar p-scrollpanel-bar-x"></div>
+            <div #yBar class="p-scrollpanel-bar p-scrollpanel-bar-y"></div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-scrollpanel-wrapper{overflow:hidden;width:100%;height:100%;position:relative;z-index:1;float:left}.p-scrollpanel-content{height:calc(100% + 18px);width:calc(100% + 18px);padding:0 18px 18px 0;position:relative;overflow:auto;box-sizing:border-box}.p-scrollpanel-bar{position:relative;background:#c1c1c1;border-radius:3px;z-index:2;cursor:pointer;opacity:0;transition:opacity .25s linear}.p-scrollpanel-bar-y{width:9px;top:0}.p-scrollpanel-bar-x{height:9px;bottom:0}.p-scrollpanel-hidden{visibility:hidden}.p-scrollpanel:hover .p-scrollpanel-bar,.p-scrollpanel:active .p-scrollpanel-bar{opacity:1}.p-scrollpanel-grabbed{-webkit-user-select:none;-ms-user-select:none;user-select:none}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], contentViewChild: [{
+                type: ViewChild,
+                args: ['content']
+            }], xBarViewChild: [{
+                type: ViewChild,
+                args: ['xBar']
+            }], yBarViewChild: [{
+                type: ViewChild,
+                args: ['yBar']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class ScrollPanelModule {
+}
+ScrollPanelModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ScrollPanelModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollPanelModule, declarations: [ScrollPanel], imports: [CommonModule], exports: [ScrollPanel] });
+ScrollPanelModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollPanelModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollPanelModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [ScrollPanel],
+                    declarations: [ScrollPanel]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ScrollPanel, ScrollPanelModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-scrollpanel.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-scrollpanel.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-scrollpanel.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-scrollpanel.mjs","sources":["../../src/app/components/scrollpanel/scrollpanel.ts","../../src/app/components/scrollpanel/primeng-scrollpanel.ts"],"sourcesContent":["import { NgModule, Component, Input, AfterViewInit, OnDestroy, ElementRef, NgZone, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, AfterContentInit, ContentChildren, QueryList, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler } from 'primeng/dom';\nimport { PrimeTemplate } from 'primeng/api';\n\n@Component({\n    selector: 'p-scrollPanel',\n    template: `\n        <div #container [ngClass]=\"'p-scrollpanel p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-scrollpanel-wrapper\">\n                <div #content class=\"p-scrollpanel-content\">\n                    <ng-content></ng-content>\n                    <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n                </div>\n            </div>\n            <div #xBar class=\"p-scrollpanel-bar p-scrollpanel-bar-x\"></div>\n            <div #yBar class=\"p-scrollpanel-bar p-scrollpanel-bar-y\"></div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./scrollpanel.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ScrollPanel implements AfterViewInit, AfterContentInit, OnDestroy {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    constructor(public el: ElementRef, public zone: NgZone, public cd: ChangeDetectorRef) {}\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @ViewChild('content') contentViewChild: ElementRef;\n\n    @ViewChild('xBar') xBarViewChild: ElementRef;\n\n    @ViewChild('yBar') yBarViewChild: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    scrollYRatio: number;\n\n    scrollXRatio: number;\n\n    timeoutFrame: any = (fn) => setTimeout(fn, 0);\n\n    initialized: boolean;\n\n    lastPageY: number;\n\n    lastPageX: number;\n\n    isXBarClicked: boolean;\n\n    isYBarClicked: boolean;\n\n    contentTemplate: TemplateRef<any>;\n\n    ngAfterViewInit() {\n        this.zone.runOutsideAngular(() => {\n            this.moveBar();\n            this.moveBar = this.moveBar.bind(this);\n            this.onXBarMouseDown = this.onXBarMouseDown.bind(this);\n            this.onYBarMouseDown = this.onYBarMouseDown.bind(this);\n            this.onDocumentMouseMove = this.onDocumentMouseMove.bind(this);\n            this.onDocumentMouseUp = this.onDocumentMouseUp.bind(this);\n\n            window.addEventListener('resize', this.moveBar);\n            this.contentViewChild.nativeElement.addEventListener('scroll', this.moveBar);\n            this.contentViewChild.nativeElement.addEventListener('mouseenter', this.moveBar);\n            this.xBarViewChild.nativeElement.addEventListener('mousedown', this.onXBarMouseDown);\n            this.yBarViewChild.nativeElement.addEventListener('mousedown', this.onYBarMouseDown);\n\n            this.calculateContainerHeight();\n\n            this.initialized = true;\n        });\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    calculateContainerHeight() {\n        let container = this.containerViewChild.nativeElement;\n        let content = this.contentViewChild.nativeElement;\n        let xBar = this.xBarViewChild.nativeElement;\n\n        let containerStyles = getComputedStyle(container),\n        xBarStyles = getComputedStyle(xBar),\n        pureContainerHeight = DomHandler.getHeight(container) - parseInt(xBarStyles['height'], 10);\n\n        if (containerStyles['max-height'] != \"none\" && pureContainerHeight == 0) {\n            if (content.offsetHeight + parseInt(xBarStyles['height'], 10) > parseInt(containerStyles['max-height'], 10)) {\n                container.style.height = containerStyles['max-height'];\n            }\n            else {\n                container.style.height = content.offsetHeight + parseFloat(containerStyles.paddingTop) + parseFloat(containerStyles.paddingBottom) + parseFloat(containerStyles.borderTopWidth) + parseFloat(containerStyles.borderBottomWidth) + \"px\";\n            }\n        }\n    }\n\n    moveBar() {\n        let container = this.containerViewChild.nativeElement;\n        let content = this.contentViewChild.nativeElement;\n\n        /* horizontal scroll */\n        let xBar = this.xBarViewChild.nativeElement;\n        let totalWidth = content.scrollWidth;\n        let ownWidth = content.clientWidth;\n        let bottom = (container.clientHeight - xBar.clientHeight) * -1;\n\n        this.scrollXRatio = ownWidth / totalWidth;\n\n        /* vertical scroll */\n        let yBar = this.yBarViewChild.nativeElement;\n        let totalHeight = content.scrollHeight;\n        let ownHeight = content.clientHeight;\n        let right = (container.clientWidth - yBar.clientWidth) * -1;\n\n        this.scrollYRatio = ownHeight / totalHeight;\n\n        this.requestAnimationFrame(() => {\n            if (this.scrollXRatio >= 1) {\n                DomHandler.addClass(xBar, 'p-scrollpanel-hidden');\n            }\n            else {\n                DomHandler.removeClass(xBar, 'p-scrollpanel-hidden');\n                const xBarWidth = Math.max(this.scrollXRatio * 100, 10);\n                const xBarLeft = content.scrollLeft * (100 - xBarWidth) / (totalWidth - ownWidth);\n                xBar.style.cssText = 'width:' + xBarWidth + '%; left:' + xBarLeft + '%;bottom:' + bottom + 'px;';\n            }\n\n            if (this.scrollYRatio >= 1) {\n                DomHandler.addClass(yBar, 'p-scrollpanel-hidden');\n            }\n            else {\n                DomHandler.removeClass(yBar, 'p-scrollpanel-hidden');\n                const yBarHeight = Math.max(this.scrollYRatio * 100, 10);\n                const yBarTop = content.scrollTop * (100 - yBarHeight) / (totalHeight - ownHeight);\n                yBar.style.cssText = 'height:' + yBarHeight + '%; top: calc(' + yBarTop + '% - ' + xBar.clientHeight + 'px);right:' + right + 'px;';\n            }\n        });\n        this.cd.markForCheck();\n    }\n\n    onYBarMouseDown(e: MouseEvent) {\n        this.isYBarClicked = true;\n        this.lastPageY = e.pageY;\n        DomHandler.addClass(this.yBarViewChild.nativeElement, 'p-scrollpanel-grabbed');\n\n        DomHandler.addClass(document.body, 'p-scrollpanel-grabbed');\n\n        document.addEventListener('mousemove', this.onDocumentMouseMove);\n        document.addEventListener('mouseup', this.onDocumentMouseUp);\n        e.preventDefault();\n    }\n\n    onXBarMouseDown(e: MouseEvent) {\n        this.isXBarClicked = true;\n        this.lastPageX = e.pageX;\n        DomHandler.addClass(this.xBarViewChild.nativeElement, 'p-scrollpanel-grabbed');\n\n        DomHandler.addClass(document.body, 'p-scrollpanel-grabbed');\n\n        document.addEventListener('mousemove', this.onDocumentMouseMove);\n        document.addEventListener('mouseup', this.onDocumentMouseUp);\n        e.preventDefault();\n    }\n\n    onDocumentMouseMove(e: MouseEvent) {\n        if (this.isXBarClicked) {\n            this.onMouseMoveForXBar(e);\n        }\n        else if (this.isYBarClicked) {\n            this.onMouseMoveForYBar(e);\n        }\n        else {\n            this.onMouseMoveForXBar(e);\n            this.onMouseMoveForYBar(e);\n        }\n\n    }\n\n    onMouseMoveForXBar(e: MouseEvent) {\n        let deltaX = e.pageX - this.lastPageX;\n        this.lastPageX = e.pageX;\n\n        this.requestAnimationFrame(() => {\n            this.contentViewChild.nativeElement.scrollLeft += deltaX / this.scrollXRatio;\n        });\n    }\n\n    onMouseMoveForYBar(e: MouseEvent) {\n        let deltaY = e.pageY - this.lastPageY;\n        this.lastPageY = e.pageY;\n\n        this.requestAnimationFrame(() => {\n            this.contentViewChild.nativeElement.scrollTop += deltaY / this.scrollYRatio;\n        });\n    }\n\n    scrollTop(scrollTop: number) {\n        let scrollableHeight = this.contentViewChild.nativeElement.scrollHeight - this.contentViewChild.nativeElement.clientHeight;\n        scrollTop = scrollTop > scrollableHeight ? scrollableHeight : scrollTop > 0 ? scrollTop : 0;\n        this.contentViewChild.nativeElement.scrollTop = scrollTop;\n    }\n\n    onDocumentMouseUp(e: Event) {\n        DomHandler.removeClass(this.yBarViewChild.nativeElement, 'p-scrollpanel-grabbed');\n        DomHandler.removeClass(this.xBarViewChild.nativeElement, 'p-scrollpanel-grabbed');\n        DomHandler.removeClass(document.body, 'p-scrollpanel-grabbed');\n\n        document.removeEventListener('mousemove', this.onDocumentMouseMove);\n        document.removeEventListener('mouseup', this.onDocumentMouseUp);\n        this.isXBarClicked = false;\n        this.isYBarClicked = false;\n    }\n\n    requestAnimationFrame(f: Function) {\n        let frame = window.requestAnimationFrame || this.timeoutFrame;\n        frame(f);\n    }\n\n    ngOnDestroy() {\n        if (this.initialized) {\n            window.removeEventListener('resize', this.moveBar);\n            this.contentViewChild.nativeElement.removeEventListener('scroll', this.moveBar);\n            this.contentViewChild.nativeElement.removeEventListener('mouseenter', this.moveBar);\n            this.xBarViewChild.nativeElement.removeEventListener('mousedown', this.onXBarMouseDown);\n            this.yBarViewChild.nativeElement.removeEventListener('mousedown', this.onYBarMouseDown);\n        }\n    }\n\n    refresh() {\n        this.moveBar();\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [ScrollPanel],\n    declarations: [ScrollPanel]\n})\nexport class ScrollPanelModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-scrolltop.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-scrolltop.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-scrolltop.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,176 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { trigger, state, style, transition, animate } from '@angular/animations';
+import { DomHandler } from 'primeng/dom';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i1 from 'primeng/api';
+
+class ScrollTop {
+    constructor(el, cd, config) {
+        this.el = el;
+        this.cd = cd;
+        this.config = config;
+        this.target = "window";
+        this.threshold = 400;
+        this.icon = "pi pi-chevron-up";
+        this.behavior = "smooth";
+        this.showTransitionOptions = '.15s';
+        this.hideTransitionOptions = '.15s';
+        this.visible = false;
+    }
+    ngOnInit() {
+        if (this.target === 'window')
+            this.bindDocumentScrollListener();
+        else if (this.target === 'parent')
+            this.bindParentScrollListener();
+    }
+    onClick() {
+        let scrollElement = this.target === 'window' ? window : this.el.nativeElement.parentElement;
+        scrollElement.scroll({
+            top: 0,
+            behavior: this.behavior
+        });
+    }
+    onEnter(event) {
+        switch (event.toState) {
+            case 'open':
+                this.overlay = event.element;
+                ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);
+                break;
+            case 'void':
+                this.overlay = null;
+                break;
+        }
+    }
+    onLeave(event) {
+        switch (event.toState) {
+            case 'void':
+                ZIndexUtils.clear(event.element);
+                break;
+        }
+    }
+    checkVisibility(scrollY) {
+        if (scrollY > this.threshold)
+            this.visible = true;
+        else
+            this.visible = false;
+        this.cd.markForCheck();
+    }
+    bindParentScrollListener() {
+        this.scrollListener = () => {
+            this.checkVisibility(this.el.nativeElement.parentElement.scrollTop);
+        };
+        this.el.nativeElement.parentElement.addEventListener('scroll', this.scrollListener);
+    }
+    bindDocumentScrollListener() {
+        this.scrollListener = () => {
+            this.checkVisibility(DomHandler.getWindowScrollTop());
+        };
+        window.addEventListener('scroll', this.scrollListener);
+    }
+    unbindParentScrollListener() {
+        if (this.scrollListener) {
+            this.el.nativeElement.parentElement.removeEventListener('scroll', this.scrollListener);
+            this.scrollListener = null;
+        }
+    }
+    unbindDocumentScrollListener() {
+        if (this.scrollListener) {
+            window.removeEventListener('scroll', this.scrollListener);
+            this.scrollListener = null;
+        }
+    }
+    containerClass() {
+        return {
+            'p-scrolltop p-link p-component': true,
+            'p-scrolltop-sticky': this.target !== 'window'
+        };
+    }
+    ngOnDestroy() {
+        if (this.target === 'window')
+            this.unbindDocumentScrollListener();
+        else if (this.target === 'parent')
+            this.unbindParentScrollListener();
+        if (this.overlay) {
+            ZIndexUtils.clear(this.overlay);
+            this.overlay = null;
+        }
+    }
+}
+ScrollTop.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollTop, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+ScrollTop.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ScrollTop, selector: "p-scrollTop", inputs: { styleClass: "styleClass", style: "style", target: "target", threshold: "threshold", icon: "icon", behavior: "behavior", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <button  *ngIf="visible" [@animation]="{value: 'open', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@animation.start)="onEnter($event)" (@animation.done)="onLeave($event)"
+            [ngClass]="containerClass()" (click)="onClick()" [class]="styleClass" [ngStyle]="style" type="button">
+            <span [class]="icon" [ngClass]="'p-scrolltop-icon'"></span>
+        </button>
+    `, isInline: true, styles: [".p-scrolltop{position:fixed;bottom:20px;right:20px;display:flex;align-items:center;justify-content:center}.p-scrolltop-sticky{position:sticky}.p-scrolltop-sticky.p-link{margin-left:auto}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], animations: [
+        trigger('animation', [
+            state('void', style({
+                opacity: 0
+            })),
+            state('open', style({
+                opacity: 1
+            })),
+            transition('void => open', animate('{{showTransitionParams}}')),
+            transition('open => void', animate('{{hideTransitionParams}}')),
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollTop, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-scrollTop', template: `
+        <button  *ngIf="visible" [@animation]="{value: 'open', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@animation.start)="onEnter($event)" (@animation.done)="onLeave($event)"
+            [ngClass]="containerClass()" (click)="onClick()" [class]="styleClass" [ngStyle]="style" type="button">
+            <span [class]="icon" [ngClass]="'p-scrolltop-icon'"></span>
+        </button>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [
+                        trigger('animation', [
+                            state('void', style({
+                                opacity: 0
+                            })),
+                            state('open', style({
+                                opacity: 1
+                            })),
+                            transition('void => open', animate('{{showTransitionParams}}')),
+                            transition('open => void', animate('{{hideTransitionParams}}')),
+                        ])
+                    ], host: {
+                        'class': 'p-element'
+                    }, styles: [".p-scrolltop{position:fixed;bottom:20px;right:20px;display:flex;align-items:center;justify-content:center}.p-scrolltop-sticky{position:sticky}.p-scrolltop-sticky.p-link{margin-left:auto}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }]; }, propDecorators: { styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], target: [{
+                type: Input
+            }], threshold: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], behavior: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }] } });
+class ScrollTopModule {
+}
+ScrollTopModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollTopModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ScrollTopModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollTopModule, declarations: [ScrollTop], imports: [CommonModule], exports: [ScrollTop] });
+ScrollTopModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollTopModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ScrollTopModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [ScrollTop],
+                    declarations: [ScrollTop]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ScrollTop, ScrollTopModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-scrolltop.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-scrolltop.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-scrolltop.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-scrolltop.mjs","sources":["../../src/app/components/scrolltop/scrolltop.ts","../../src/app/components/scrolltop/primeng-scrolltop.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, OnInit, OnDestroy, ElementRef, ChangeDetectorRef} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { animate, state, style, transition, trigger, AnimationEvent } from '@angular/animations';\nimport { DomHandler } from 'primeng/dom';\nimport { ZIndexUtils } from 'primeng/utils'\nimport { PrimeNGConfig } from 'primeng/api';\n\n@Component({\n    selector: 'p-scrollTop',\n    template: `\n        <button  *ngIf=\"visible\" [@animation]=\"{value: 'open', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@animation.start)=\"onEnter($event)\" (@animation.done)=\"onLeave($event)\"\n            [ngClass]=\"containerClass()\" (click)=\"onClick()\" [class]=\"styleClass\" [ngStyle]=\"style\" type=\"button\">\n            <span [class]=\"icon\" [ngClass]=\"'p-scrolltop-icon'\"></span>\n        </button>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./scrolltop.css'],\n    animations: [\n        trigger('animation', [\n            state('void', style({\n                opacity: 0\n            })),\n            state('open', style({\n                opacity: 1\n            })),\n            transition('void => open', animate('{{showTransitionParams}}')),\n            transition('open => void', animate('{{hideTransitionParams}}')),\n        ])\n    ],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ScrollTop implements OnInit, OnDestroy {\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() target: string = \"window\";\n\n    @Input() threshold: number = 400;\n\n    @Input() icon: string = \"pi pi-chevron-up\";\n\n    @Input() behavior: string = \"smooth\";\n\n    @Input() showTransitionOptions: string = '.15s';\n\n    @Input() hideTransitionOptions: string = '.15s';\n\n    scrollListener: any;\n\n    visible: boolean = false;\n\n    overlay: any;\n\n    constructor(public el: ElementRef, private cd: ChangeDetectorRef, public config: PrimeNGConfig) { }\n\n    ngOnInit() {\n        if (this.target === 'window')\n            this.bindDocumentScrollListener();\n        else if (this.target === 'parent')\n            this.bindParentScrollListener();\n    }\n\n    onClick() {\n        let scrollElement = this.target === 'window' ? window : this.el.nativeElement.parentElement;\n         scrollElement.scroll({\n            top: 0,\n            behavior: this.behavior\n        });\n    }\n\n    onEnter(event: AnimationEvent) {\n\n        switch(event.toState) {\n            case 'open':\n                this.overlay = event.element;\n                ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);\n            break;\n            case 'void':\n                this.overlay = null;\n            break;\n        }\n    }\n\n    onLeave(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                ZIndexUtils.clear(event.element);\n            break;\n        }\n    }\n\n    checkVisibility(scrollY) {\n        if (scrollY > this.threshold)\n            this.visible = true;\n        else\n            this.visible = false;\n\n        this.cd.markForCheck();\n    }\n\n    bindParentScrollListener() {\n        this.scrollListener = () => {\n\n            this.checkVisibility(this.el.nativeElement.parentElement.scrollTop);\n        };\n\n        this.el.nativeElement.parentElement.addEventListener('scroll', this.scrollListener);\n    }\n\n    bindDocumentScrollListener() {\n        this.scrollListener = () => {\n            this.checkVisibility(DomHandler.getWindowScrollTop());\n        };\n\n        window.addEventListener('scroll', this.scrollListener);\n    }\n\n    unbindParentScrollListener() {\n        if (this.scrollListener) {\n            this.el.nativeElement.parentElement.removeEventListener('scroll', this.scrollListener);\n            this.scrollListener = null;\n        }\n    }\n\n    unbindDocumentScrollListener() {\n        if (this.scrollListener) {\n            window.removeEventListener('scroll', this.scrollListener);\n            this.scrollListener = null;\n        }\n    }\n\n    containerClass() {\n        return {\n            'p-scrolltop p-link p-component': true,\n            'p-scrolltop-sticky': this.target !== 'window'\n        };\n    }\n\n    ngOnDestroy() {\n        if (this.target === 'window')\n            this.unbindDocumentScrollListener();\n        else if (this.target === 'parent')\n            this.unbindParentScrollListener();\n\n        if (this.overlay) {\n            ZIndexUtils.clear(this.overlay);\n            this.overlay = null;\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [ScrollTop],\n    declarations: [ScrollTop]\n})\nexport class ScrollTopModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-selectbutton.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-selectbutton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-selectbutton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,185 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, TemplateRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ContentChild, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { ObjectUtils } from 'primeng/utils';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const SELECTBUTTON_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => SelectButton),
+    multi: true
+};
+class SelectButton {
+    constructor(cd) {
+        this.cd = cd;
+        this.tabindex = 0;
+        this.onOptionClick = new EventEmitter();
+        this.onChange = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    getOptionLabel(option) {
+        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);
+    }
+    getOptionValue(option) {
+        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);
+    }
+    isOptionDisabled(option) {
+        return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);
+    }
+    writeValue(value) {
+        this.value = value;
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    onItemClick(event, option, index) {
+        if (this.disabled || this.isOptionDisabled(option)) {
+            return;
+        }
+        if (this.multiple) {
+            if (this.isSelected(option))
+                this.removeOption(option);
+            else
+                this.value = [...(this.value || []), this.getOptionValue(option)];
+        }
+        else {
+            this.value = this.getOptionValue(option);
+        }
+        this.onOptionClick.emit({
+            originalEvent: event,
+            option: option,
+            index: index
+        });
+        this.onModelChange(this.value);
+        this.onChange.emit({
+            originalEvent: event,
+            value: this.value
+        });
+    }
+    onBlur() {
+        this.onModelTouched();
+    }
+    removeOption(option) {
+        this.value = this.value.filter(val => !ObjectUtils.equals(val, this.getOptionValue(option), this.dataKey));
+    }
+    isSelected(option) {
+        let selected = false;
+        let optionValue = this.getOptionValue(option);
+        if (this.multiple) {
+            if (this.value) {
+                for (let val of this.value) {
+                    if (ObjectUtils.equals(val, optionValue, this.dataKey)) {
+                        selected = true;
+                        break;
+                    }
+                }
+            }
+        }
+        else {
+            selected = ObjectUtils.equals(this.getOptionValue(option), this.value, this.dataKey);
+        }
+        return selected;
+    }
+}
+SelectButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectButton, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+SelectButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: SelectButton, selector: "p-selectButton", inputs: { options: "options", optionLabel: "optionLabel", optionValue: "optionValue", optionDisabled: "optionDisabled", tabindex: "tabindex", multiple: "multiple", style: "style", styleClass: "styleClass", ariaLabelledBy: "ariaLabelledBy", disabled: "disabled", dataKey: "dataKey" }, outputs: { onOptionClick: "onOptionClick", onChange: "onChange" }, host: { classAttribute: "p-element" }, providers: [SELECTBUTTON_VALUE_ACCESSOR], queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="'p-selectbutton p-buttonset p-component'" [ngStyle]="style" [class]="styleClass"  role="group">
+            <div *ngFor="let option of options; let i = index" #btn class="p-button p-component" [class]="option.styleClass" role="button" [attr.aria-pressed]="isSelected(option)"
+                [ngClass]="{'p-highlight':isSelected(option),
+                        'p-disabled': disabled || isOptionDisabled(option),
+                        'p-button-icon-only': (option.icon && !getOptionLabel(option))}"
+                (click)="onItemClick($event,option,i)" (keydown.enter)="onItemClick($event,option,i)"
+                [attr.title]="option.title" [attr.aria-label]="option.label" (blur)="onBlur()" [attr.tabindex]="disabled ? null : tabindex" [attr.aria-labelledby]="this.getOptionLabel(option)" pRipple>
+                <ng-container *ngIf="!itemTemplate else customcontent">
+                    <span [ngClass]="'p-button-icon p-button-icon-left'" [class]="option.icon" *ngIf="option.icon"></span>
+                    <span class="p-button-label">{{getOptionLabel(option)}}</span>
+                </ng-container>
+                <ng-template #customcontent>
+                    <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: option, index: i}"></ng-container>
+                </ng-template>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-button{margin:0;display:inline-flex;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center;overflow:hidden;position:relative}.p-button-label{flex:1 1 auto}.p-button-icon-right{order:1}.p-button:disabled{cursor:default}.p-button-icon-only{justify-content:center}.p-button-icon-only .p-button-label{visibility:hidden;width:0;flex:0 0 auto}.p-button-vertical{flex-direction:column}.p-button-icon-bottom{order:2}.p-buttonset .p-button{margin:0}.p-buttonset .p-button:not(:last-child){border-right:0 none}.p-buttonset .p-button:not(:first-of-type):not(:last-of-type){border-radius:0}.p-buttonset .p-button:first-of-type{border-top-right-radius:0;border-bottom-right-radius:0}.p-buttonset .p-button:last-of-type{border-top-left-radius:0;border-bottom-left-radius:0}.p-buttonset .p-button:focus{position:relative;z-index:1}.p-button-label{transition:all .2s}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.Ripple, selector: "[pRipple]" }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectButton, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-selectButton', template: `
+        <div [ngClass]="'p-selectbutton p-buttonset p-component'" [ngStyle]="style" [class]="styleClass"  role="group">
+            <div *ngFor="let option of options; let i = index" #btn class="p-button p-component" [class]="option.styleClass" role="button" [attr.aria-pressed]="isSelected(option)"
+                [ngClass]="{'p-highlight':isSelected(option),
+                        'p-disabled': disabled || isOptionDisabled(option),
+                        'p-button-icon-only': (option.icon && !getOptionLabel(option))}"
+                (click)="onItemClick($event,option,i)" (keydown.enter)="onItemClick($event,option,i)"
+                [attr.title]="option.title" [attr.aria-label]="option.label" (blur)="onBlur()" [attr.tabindex]="disabled ? null : tabindex" [attr.aria-labelledby]="this.getOptionLabel(option)" pRipple>
+                <ng-container *ngIf="!itemTemplate else customcontent">
+                    <span [ngClass]="'p-button-icon p-button-icon-left'" [class]="option.icon" *ngIf="option.icon"></span>
+                    <span class="p-button-label">{{getOptionLabel(option)}}</span>
+                </ng-container>
+                <ng-template #customcontent>
+                    <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: option, index: i}"></ng-container>
+                </ng-template>
+            </div>
+        </div>
+    `, providers: [SELECTBUTTON_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-button{margin:0;display:inline-flex;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center;overflow:hidden;position:relative}.p-button-label{flex:1 1 auto}.p-button-icon-right{order:1}.p-button:disabled{cursor:default}.p-button-icon-only{justify-content:center}.p-button-icon-only .p-button-label{visibility:hidden;width:0;flex:0 0 auto}.p-button-vertical{flex-direction:column}.p-button-icon-bottom{order:2}.p-buttonset .p-button{margin:0}.p-buttonset .p-button:not(:last-child){border-right:0 none}.p-buttonset .p-button:not(:first-of-type):not(:last-of-type){border-radius:0}.p-buttonset .p-button:first-of-type{border-top-right-radius:0;border-bottom-right-radius:0}.p-buttonset .p-button:last-of-type{border-top-left-radius:0;border-bottom-left-radius:0}.p-buttonset .p-button:focus{position:relative;z-index:1}.p-button-label{transition:all .2s}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { options: [{
+                type: Input
+            }], optionLabel: [{
+                type: Input
+            }], optionValue: [{
+                type: Input
+            }], optionDisabled: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], multiple: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], dataKey: [{
+                type: Input
+            }], onOptionClick: [{
+                type: Output
+            }], onChange: [{
+                type: Output
+            }], itemTemplate: [{
+                type: ContentChild,
+                args: [TemplateRef]
+            }] } });
+class SelectButtonModule {
+}
+SelectButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SelectButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectButtonModule, declarations: [SelectButton], imports: [CommonModule, RippleModule], exports: [SelectButton] });
+SelectButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectButtonModule, imports: [[CommonModule, RippleModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectButtonModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule],
+                    exports: [SelectButton],
+                    declarations: [SelectButton]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { SELECTBUTTON_VALUE_ACCESSOR, SelectButton, SelectButtonModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-selectbutton.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-selectbutton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-selectbutton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-selectbutton.mjs","sources":["../../src/app/components/selectbutton/selectbutton.ts","../../src/app/components/selectbutton/primeng-selectbutton.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,EventEmitter,forwardRef,ChangeDetectorRef,ContentChild,TemplateRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ObjectUtils} from 'primeng/utils';\nimport {RippleModule} from 'primeng/ripple';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const SELECTBUTTON_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => SelectButton),\n  multi: true\n};\n\n@Component({\n    selector: 'p-selectButton',\n    template: `\n        <div [ngClass]=\"'p-selectbutton p-buttonset p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\"  role=\"group\">\n            <div *ngFor=\"let option of options; let i = index\" #btn class=\"p-button p-component\" [class]=\"option.styleClass\" role=\"button\" [attr.aria-pressed]=\"isSelected(option)\"\n                [ngClass]=\"{'p-highlight':isSelected(option),\n                        'p-disabled': disabled || isOptionDisabled(option),\n                        'p-button-icon-only': (option.icon && !getOptionLabel(option))}\"\n                (click)=\"onItemClick($event,option,i)\" (keydown.enter)=\"onItemClick($event,option,i)\"\n                [attr.title]=\"option.title\" [attr.aria-label]=\"option.label\" (blur)=\"onBlur()\" [attr.tabindex]=\"disabled ? null : tabindex\" [attr.aria-labelledby]=\"this.getOptionLabel(option)\" pRipple>\n                <ng-container *ngIf=\"!itemTemplate else customcontent\">\n                    <span [ngClass]=\"'p-button-icon p-button-icon-left'\" [class]=\"option.icon\" *ngIf=\"option.icon\"></span>\n                    <span class=\"p-button-label\">{{getOptionLabel(option)}}</span>\n                </ng-container>\n                <ng-template #customcontent>\n                    <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: option, index: i}\"></ng-container>\n                </ng-template>\n            </div>\n        </div>\n    `,\n    providers: [SELECTBUTTON_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['../button/button.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class SelectButton implements ControlValueAccessor {\n\n    @Input() options: any[];\n\n    @Input() optionLabel: string;\n\n    @Input() optionValue: string;\n\n    @Input() optionDisabled: string;\n\n    @Input() tabindex: number = 0;\n\n    @Input() multiple: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() disabled: boolean;\n\n    @Input() dataKey: string\n\n    @Output() onOptionClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @ContentChild(TemplateRef) itemTemplate;\n\n    value: any;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    constructor(public cd: ChangeDetectorRef) {}\n\n    getOptionLabel(option: any) {\n        return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);\n    }\n\n    getOptionValue(option: any) {\n        return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel || option.value === undefined ? option : option.value);\n    }\n\n    isOptionDisabled(option: any) {\n        return this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    onItemClick(event, option: any, index: number) {\n        if (this.disabled || this.isOptionDisabled(option)) {\n            return;\n        }\n\n        if (this.multiple) {\n            if (this.isSelected(option))\n                this.removeOption(option);\n            else\n                this.value = [...(this.value||[]), this.getOptionValue(option)];\n        }\n        else {\n            this.value = this.getOptionValue(option);\n        }\n\n        this.onOptionClick.emit({\n            originalEvent: event,\n            option: option,\n            index: index\n        });\n\n        this.onModelChange(this.value);\n\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    }\n\n    onBlur() {\n        this.onModelTouched();\n    }\n\n    removeOption(option: any): void {\n        this.value = this.value.filter(val => !ObjectUtils.equals(val, this.getOptionValue(option), this.dataKey));\n    }\n\n    isSelected(option: any) {\n        let selected = false;\n        let optionValue = this.getOptionValue(option);\n\n        if (this.multiple) {\n            if (this.value) {\n                for (let val of this.value) {\n                    if (ObjectUtils.equals(val, optionValue, this.dataKey)) {\n                        selected = true;\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            selected = ObjectUtils.equals(this.getOptionValue(option), this.value, this.dataKey);\n        }\n\n        return selected;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RippleModule],\n    exports: [SelectButton],\n    declarations: [SelectButton]\n})\nexport class SelectButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;MAMa,2BAA2B,GAAQ;IAC9C,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;IAC3C,KAAK,EAAE,IAAI;EACX;MA8BW,YAAY;IAoCrB,YAAmB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QA1B/B,aAAQ,GAAW,CAAC,CAAC;QAcpB,kBAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEtD,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAM3D,kBAAa,GAAa,SAAQ,CAAC;QAEnC,mBAAc,GAAa,SAAQ,CAAC;KAEQ;IAE5C,cAAc,CAAC,MAAW;QACtB,OAAO,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;KAC1I;IAED,cAAc,CAAC,MAAW;QACtB,OAAO,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;KAC/J;IAED,gBAAgB,CAAC,MAAW;QACxB,OAAO,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,GAAG,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;KACtJ;IAED,UAAU,CAAC,KAAU;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,EAAY;QACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KAC3B;IAED,iBAAiB,CAAC,EAAY;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC5B;IAED,gBAAgB,CAAC,GAAY;QACzB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,WAAW,CAAC,KAAK,EAAE,MAAW,EAAE,KAAa;QACzC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAChD,OAAO;SACV;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;;gBAE1B,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,IAAE,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;SACvE;aACI;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;SAC5C;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACpB,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACf,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC,CAAC;KACN;IAED,MAAM;QACF,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;IAED,YAAY,CAAC,MAAW;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;KAC9G;IAED,UAAU,CAAC,MAAW;QAClB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;oBACxB,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;wBACpD,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM;qBACT;iBACJ;aACJ;SACJ;aACI;YACD,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SACxF;QAED,OAAO,QAAQ,CAAC;KACnB;;yGA5HQ,YAAY;6FAAZ,YAAY,+aARV,CAAC,2BAA2B,CAAC,oEAoC1B,WAAW,gDAtDf;;;;;;;;;;;;;;;;;KAiBT;2FASQ,YAAY;kBA5BxB,SAAS;+BACI,gBAAgB,YAChB;;;;;;;;;;;;;;;;;KAiBT,aACU,CAAC,2BAA2B,CAAC,mBACvB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;wGAIQ,OAAO;sBAAf,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEI,aAAa;sBAAtB,MAAM;gBAEG,QAAQ;sBAAjB,MAAM;gBAEoB,YAAY;sBAAtC,YAAY;uBAAC,WAAW;;MAwGhB,kBAAkB;;+GAAlB,kBAAkB;gHAAlB,kBAAkB,iBApIlB,YAAY,aAgIX,YAAY,EAAC,YAAY,aAhI1B,YAAY;gHAoIZ,kBAAkB,YAJlB,CAAC,YAAY,EAAC,YAAY,CAAC;2FAI3B,kBAAkB;kBAL9B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAC,YAAY,CAAC;oBACpC,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,YAAY,CAAC;iBAC/B;;;AC3KD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-sidebar.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-sidebar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-sidebar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,337 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, Output, NgModule } from '@angular/core';
+import { animation, style, animate, trigger, transition, useAnimation } from '@angular/animations';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { DomHandler } from 'primeng/dom';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate } from 'primeng/api';
+import { ZIndexUtils } from 'primeng/utils';
+
+const showAnimation = animation([
+    style({ transform: '{{transform}}', opacity: 0 }),
+    animate('{{transition}}')
+]);
+const hideAnimation = animation([
+    animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))
+]);
+class Sidebar {
+    constructor(el, renderer, cd, config) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.config = config;
+        this.blockScroll = false;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.modal = true;
+        this.dismissible = true;
+        this.showCloseIcon = true;
+        this.closeOnEscape = true;
+        this.transitionOptions = '150ms cubic-bezier(0, 0, 0.2, 1)';
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.visibleChange = new EventEmitter();
+        this._position = "left";
+        this._fullScreen = false;
+        this.transformOptions = "translate3d(-100%, 0px, 0px)";
+    }
+    ngAfterViewInit() {
+        this.initialized = true;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    get visible() {
+        return this._visible;
+    }
+    set visible(val) {
+        this._visible = val;
+    }
+    get position() {
+        return this._position;
+    }
+    ;
+    set position(value) {
+        this._position = value;
+        switch (value) {
+            case 'left':
+                this.transformOptions = "translate3d(-100%, 0px, 0px)";
+                break;
+            case 'right':
+                this.transformOptions = "translate3d(100%, 0px, 0px)";
+                break;
+            case 'bottom':
+                this.transformOptions = "translate3d(0px, 100%, 0px)";
+                break;
+            case 'top':
+                this.transformOptions = "translate3d(0px, -100%, 0px)";
+                break;
+        }
+    }
+    get fullScreen() {
+        return this._fullScreen;
+    }
+    set fullScreen(value) {
+        this._fullScreen = value;
+        if (value)
+            this.transformOptions = "none";
+    }
+    show() {
+        if (this.autoZIndex) {
+            ZIndexUtils.set('modal', this.container, this.baseZIndex || this.config.zIndex.modal);
+        }
+        if (this.modal) {
+            this.enableModality();
+        }
+        this.onShow.emit({});
+    }
+    hide() {
+        this.onHide.emit({});
+        if (this.modal) {
+            this.disableModality();
+        }
+    }
+    close(event) {
+        this.hide();
+        this.visibleChange.emit(false);
+        event.preventDefault();
+    }
+    enableModality() {
+        if (!this.mask) {
+            this.mask = document.createElement('div');
+            this.mask.style.zIndex = String(parseInt(this.container.style.zIndex) - 1);
+            DomHandler.addMultipleClasses(this.mask, 'p-component-overlay p-sidebar-mask p-component-overlay p-component-overlay-enter');
+            if (this.dismissible) {
+                this.maskClickListener = this.renderer.listen(this.mask, 'click', (event) => {
+                    if (this.dismissible) {
+                        this.close(event);
+                    }
+                });
+            }
+            document.body.appendChild(this.mask);
+            if (this.blockScroll) {
+                DomHandler.addClass(document.body, 'p-overflow-hidden');
+            }
+        }
+    }
+    disableModality() {
+        if (this.mask) {
+            DomHandler.addClass(this.mask, 'p-component-overlay-leave');
+            this.animationEndListener = this.destroyModal.bind(this);
+            this.mask.addEventListener('animationend', this.animationEndListener);
+        }
+    }
+    destroyModal() {
+        this.unbindMaskClickListener();
+        if (this.mask) {
+            document.body.removeChild(this.mask);
+        }
+        if (this.blockScroll) {
+            DomHandler.removeClass(document.body, 'p-overflow-hidden');
+        }
+        this.unbindAnimationEndListener();
+        this.mask = null;
+    }
+    onAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.container = event.element;
+                this.appendContainer();
+                this.show();
+                if (this.closeOnEscape) {
+                    this.bindDocumentEscapeListener();
+                }
+                break;
+        }
+    }
+    onAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                this.hide();
+                ZIndexUtils.clear(this.container);
+                this.unbindGlobalListeners();
+                break;
+        }
+    }
+    appendContainer() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.container);
+            else
+                DomHandler.appendChild(this.container, this.appendTo);
+        }
+    }
+    bindDocumentEscapeListener() {
+        const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+        this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
+            if (event.which == 27) {
+                if (parseInt(this.container.style.zIndex) === (DomHandler.zindex + this.baseZIndex)) {
+                    this.close(event);
+                }
+            }
+        });
+    }
+    unbindDocumentEscapeListener() {
+        if (this.documentEscapeListener) {
+            this.documentEscapeListener();
+            this.documentEscapeListener = null;
+        }
+    }
+    unbindMaskClickListener() {
+        if (this.maskClickListener) {
+            this.maskClickListener();
+            this.maskClickListener = null;
+        }
+    }
+    unbindGlobalListeners() {
+        this.unbindMaskClickListener();
+        this.unbindDocumentEscapeListener();
+    }
+    unbindAnimationEndListener() {
+        if (this.animationEndListener && this.mask) {
+            this.mask.removeEventListener('animationend', this.animationEndListener);
+            this.animationEndListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.initialized = false;
+        if (this.visible && this.modal) {
+            this.destroyModal();
+        }
+        if (this.appendTo && this.container) {
+            this.el.nativeElement.appendChild(this.container);
+        }
+        if (this.container && this.autoZIndex) {
+            ZIndexUtils.clear(this.container);
+        }
+        this.container = null;
+        this.unbindGlobalListeners();
+        this.unbindAnimationEndListener();
+    }
+}
+Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Sidebar, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Sidebar, selector: "p-sidebar", inputs: { appendTo: "appendTo", blockScroll: "blockScroll", style: "style", styleClass: "styleClass", ariaCloseLabel: "ariaCloseLabel", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", modal: "modal", dismissible: "dismissible", showCloseIcon: "showCloseIcon", closeOnEscape: "closeOnEscape", transitionOptions: "transitionOptions", visible: "visible", position: "position", fullScreen: "fullScreen" }, outputs: { onShow: "onShow", onHide: "onHide", visibleChange: "visibleChange" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div #container [ngClass]="{'p-sidebar':true, 'p-sidebar-active': visible,
+            'p-sidebar-left': (position === 'left' && !fullScreen), 'p-sidebar-right': (position === 'right' && !fullScreen),
+            'p-sidebar-top': (position === 'top' && !fullScreen), 'p-sidebar-bottom': (position === 'bottom' && !fullScreen),
+            'p-sidebar-full': fullScreen}"  *ngIf="visible" [@panelState]="{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}" (@panelState.start)="onAnimationStart($event)" (@panelState.done)="onAnimationEnd($event)" [ngStyle]="style" [class]="styleClass"  role="complementary" [attr.aria-modal]="modal">
+            <div class="p-sidebar-header">
+                <button type="button" class="p-sidebar-close p-sidebar-icon p-link" (click)="close($event)" (keydown.enter)="close($event)" [attr.aria-label]="ariaCloseLabel"  *ngIf="showCloseIcon" pRipple>
+                    <span class="p-sidebar-close-icon pi pi-times"></span>
+                </button>
+            </div>
+            <div class="p-sidebar-content">
+                <ng-content></ng-content>
+                <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-sidebar{position:fixed;transition:transform .3s;display:flex;flex-direction:column}.p-sidebar-content{position:relative;overflow-y:auto}.p-sidebar-header{display:flex;align-items:center;justify-content:flex-end}.p-sidebar-icon{display:flex;align-items:center;justify-content:center}.p-sidebar-left{top:0;left:0;width:20rem;height:100%}.p-sidebar-right{top:0;right:0;width:20rem;height:100%}.p-sidebar-top{top:0;left:0;width:100%;height:10rem}.p-sidebar-bottom{bottom:0;left:0;width:100%;height:10rem}.p-sidebar-full{width:100%;height:100%;top:0;left:0;transition:none}.p-sidebar-left.p-sidebar-sm,.p-sidebar-right.p-sidebar-sm{width:20rem}.p-sidebar-left.p-sidebar-md,.p-sidebar-right.p-sidebar-md{width:40rem}.p-sidebar-left.p-sidebar-lg,.p-sidebar-right.p-sidebar-lg{width:60rem}.p-sidebar-top.p-sidebar-sm,.p-sidebar-bottom.p-sidebar-sm{height:10rem}.p-sidebar-top.p-sidebar-md,.p-sidebar-bottom.p-sidebar-md{height:20rem}.p-sidebar-top.p-sidebar-lg,.p-sidebar-bottom.p-sidebar-lg{height:30rem}@media screen and (max-width: 64em){.p-sidebar-left.p-sidebar-lg,.p-sidebar-left.p-sidebar-md,.p-sidebar-right.p-sidebar-lg,.p-sidebar-right.p-sidebar-md{width:20rem}}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
+        trigger('panelState', [
+            transition('void => visible', [
+                useAnimation(showAnimation)
+            ]),
+            transition('visible => void', [
+                useAnimation(hideAnimation)
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Sidebar, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-sidebar', template: `
+        <div #container [ngClass]="{'p-sidebar':true, 'p-sidebar-active': visible,
+            'p-sidebar-left': (position === 'left' && !fullScreen), 'p-sidebar-right': (position === 'right' && !fullScreen),
+            'p-sidebar-top': (position === 'top' && !fullScreen), 'p-sidebar-bottom': (position === 'bottom' && !fullScreen),
+            'p-sidebar-full': fullScreen}"  *ngIf="visible" [@panelState]="{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}" (@panelState.start)="onAnimationStart($event)" (@panelState.done)="onAnimationEnd($event)" [ngStyle]="style" [class]="styleClass"  role="complementary" [attr.aria-modal]="modal">
+            <div class="p-sidebar-header">
+                <button type="button" class="p-sidebar-close p-sidebar-icon p-link" (click)="close($event)" (keydown.enter)="close($event)" [attr.aria-label]="ariaCloseLabel"  *ngIf="showCloseIcon" pRipple>
+                    <span class="p-sidebar-close-icon pi pi-times"></span>
+                </button>
+            </div>
+            <div class="p-sidebar-content">
+                <ng-content></ng-content>
+                <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('panelState', [
+                            transition('void => visible', [
+                                useAnimation(showAnimation)
+                            ]),
+                            transition('visible => void', [
+                                useAnimation(hideAnimation)
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-sidebar{position:fixed;transition:transform .3s;display:flex;flex-direction:column}.p-sidebar-content{position:relative;overflow-y:auto}.p-sidebar-header{display:flex;align-items:center;justify-content:flex-end}.p-sidebar-icon{display:flex;align-items:center;justify-content:center}.p-sidebar-left{top:0;left:0;width:20rem;height:100%}.p-sidebar-right{top:0;right:0;width:20rem;height:100%}.p-sidebar-top{top:0;left:0;width:100%;height:10rem}.p-sidebar-bottom{bottom:0;left:0;width:100%;height:10rem}.p-sidebar-full{width:100%;height:100%;top:0;left:0;transition:none}.p-sidebar-left.p-sidebar-sm,.p-sidebar-right.p-sidebar-sm{width:20rem}.p-sidebar-left.p-sidebar-md,.p-sidebar-right.p-sidebar-md{width:40rem}.p-sidebar-left.p-sidebar-lg,.p-sidebar-right.p-sidebar-lg{width:60rem}.p-sidebar-top.p-sidebar-sm,.p-sidebar-bottom.p-sidebar-sm{height:10rem}.p-sidebar-top.p-sidebar-md,.p-sidebar-bottom.p-sidebar-md{height:20rem}.p-sidebar-top.p-sidebar-lg,.p-sidebar-bottom.p-sidebar-lg{height:30rem}@media screen and (max-width: 64em){.p-sidebar-left.p-sidebar-lg,.p-sidebar-left.p-sidebar-md,.p-sidebar-right.p-sidebar-lg,.p-sidebar-right.p-sidebar-md{width:20rem}}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.PrimeNGConfig }]; }, propDecorators: { appendTo: [{
+                type: Input
+            }], blockScroll: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], ariaCloseLabel: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], modal: [{
+                type: Input
+            }], dismissible: [{
+                type: Input
+            }], showCloseIcon: [{
+                type: Input
+            }], closeOnEscape: [{
+                type: Input
+            }], transitionOptions: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], visibleChange: [{
+                type: Output
+            }], visible: [{
+                type: Input
+            }], position: [{
+                type: Input
+            }], fullScreen: [{
+                type: Input
+            }] } });
+class SidebarModule {
+}
+SidebarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SidebarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SidebarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SidebarModule, declarations: [Sidebar], imports: [CommonModule, RippleModule], exports: [Sidebar] });
+SidebarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SidebarModule, imports: [[CommonModule, RippleModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SidebarModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule],
+                    exports: [Sidebar],
+                    declarations: [Sidebar]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Sidebar, SidebarModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-sidebar.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-sidebar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-sidebar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-sidebar.mjs","sources":["../../src/app/components/sidebar/sidebar.ts","../../src/app/components/sidebar/primeng-sidebar.ts"],"sourcesContent":["import { NgModule, Component, AfterViewInit, OnDestroy, Input, Output, EventEmitter, ElementRef, Renderer2, ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, QueryList, AfterContentInit, TemplateRef, ChangeDetectorRef } from '@angular/core';\nimport { trigger, style, transition, animate, animation, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { RippleModule } from 'primeng/ripple';\nimport { DomHandler } from 'primeng/dom';\nimport { PrimeNGConfig, PrimeTemplate } from 'primeng/api';\nimport { ZIndexUtils } from 'primeng/utils';\n\nconst showAnimation = animation([\n    style({ transform: '{{transform}}', opacity: 0 }),\n    animate('{{transition}}')\n]);\n\nconst hideAnimation = animation([\n    animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))\n]);\n\n@Component({\n    selector: 'p-sidebar',\n    template: `\n        <div #container [ngClass]=\"{'p-sidebar':true, 'p-sidebar-active': visible,\n            'p-sidebar-left': (position === 'left' && !fullScreen), 'p-sidebar-right': (position === 'right' && !fullScreen),\n            'p-sidebar-top': (position === 'top' && !fullScreen), 'p-sidebar-bottom': (position === 'bottom' && !fullScreen),\n            'p-sidebar-full': fullScreen}\"  *ngIf=\"visible\" [@panelState]=\"{value: 'visible', params: {transform: transformOptions, transition: transitionOptions}}\" (@panelState.start)=\"onAnimationStart($event)\" (@panelState.done)=\"onAnimationEnd($event)\" [ngStyle]=\"style\" [class]=\"styleClass\"  role=\"complementary\" [attr.aria-modal]=\"modal\">\n            <div class=\"p-sidebar-header\">\n                <button type=\"button\" class=\"p-sidebar-close p-sidebar-icon p-link\" (click)=\"close($event)\" (keydown.enter)=\"close($event)\" [attr.aria-label]=\"ariaCloseLabel\"  *ngIf=\"showCloseIcon\" pRipple>\n                    <span class=\"p-sidebar-close-icon pi pi-times\"></span>\n                </button>\n            </div>\n            <div class=\"p-sidebar-content\">\n                <ng-content></ng-content>\n                <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('panelState', [\n            transition('void => visible', [\n                useAnimation(showAnimation)\n            ]),\n            transition('visible => void', [\n                useAnimation(hideAnimation)\n            ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./sidebar.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Sidebar implements AfterViewInit, AfterContentInit, OnDestroy {\n\n    @Input() appendTo: any;\n\n    @Input() blockScroll: boolean = false;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() ariaCloseLabel: string;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() modal: boolean = true;\n\n    @Input() dismissible: boolean = true;\n\n    @Input() showCloseIcon: boolean = true;\n\n    @Input() closeOnEscape: boolean = true;\n\n    @Input() transitionOptions: string = '150ms cubic-bezier(0, 0, 0.2, 1)';\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @Output() visibleChange: EventEmitter<any> = new EventEmitter();\n\n    initialized: boolean;\n\n    _visible: boolean;\n\n    _position: string = \"left\";\n\n    _fullScreen: boolean = false;\n\n    container: HTMLDivElement;\n\n    transformOptions: any = \"translate3d(-100%, 0px, 0px)\";\n\n    mask: HTMLDivElement;\n\n    maskClickListener: Function;\n\n    documentEscapeListener: Function;\n\n    animationEndListener: any;\n\n    contentTemplate: TemplateRef<any>;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public config: PrimeNGConfig) { }\n\n    ngAfterViewInit() {\n        this.initialized = true;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                    break;\n\n                default:\n                    this.contentTemplate = item.template;\n                    break;\n            }\n        });\n    }\n\n    @Input() get visible(): boolean {\n        return this._visible;\n    }\n\n    set visible(val: boolean) {\n        this._visible = val;\n    }\n\n    @Input() get position(): string {\n        return this._position;\n    };\n\n    set position(value: string) {\n        this._position = value;\n\n        switch (value) {\n            case 'left':\n                this.transformOptions = \"translate3d(-100%, 0px, 0px)\";\n                break;\n            case 'right':\n                this.transformOptions = \"translate3d(100%, 0px, 0px)\";\n                break;\n            case 'bottom':\n                this.transformOptions = \"translate3d(0px, 100%, 0px)\";\n                break;\n            case 'top':\n                this.transformOptions = \"translate3d(0px, -100%, 0px)\";\n                break;\n        }\n    }\n\n    @Input() get fullScreen(): boolean {\n        return this._fullScreen;\n    }\n\n    set fullScreen(value: boolean) {\n        this._fullScreen = value;\n\n        if (value)\n            this.transformOptions = \"none\";\n    }\n\n    show() {\n        if (this.autoZIndex) {\n            ZIndexUtils.set('modal', this.container, this.baseZIndex || this.config.zIndex.modal);\n        }\n\n        if (this.modal) {\n            this.enableModality();\n        }\n\n        this.onShow.emit({});\n    }\n\n    hide() {\n        this.onHide.emit({});\n\n        if (this.modal) {\n            this.disableModality();\n        }\n    }\n\n    close(event: Event) {\n        this.hide();\n        this.visibleChange.emit(false);\n        event.preventDefault();\n    }\n\n    enableModality() {\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = String(parseInt(this.container.style.zIndex) - 1);\n            DomHandler.addMultipleClasses(this.mask, 'p-component-overlay p-sidebar-mask p-component-overlay p-component-overlay-enter');\n\n            if (this.dismissible) {\n                this.maskClickListener = this.renderer.listen(this.mask, 'click', (event: any) => {\n                    if (this.dismissible) {\n                        this.close(event);\n                    }\n                });\n            }\n\n            document.body.appendChild(this.mask);\n            if (this.blockScroll) {\n                DomHandler.addClass(document.body, 'p-overflow-hidden');\n            }\n        }\n    }\n\n    disableModality() {\n        if (this.mask) {\n            DomHandler.addClass(this.mask, 'p-component-overlay-leave');\n            this.animationEndListener = this.destroyModal.bind(this);\n            this.mask.addEventListener('animationend', this.animationEndListener);\n        }\n    }\n\n    destroyModal() {\n        this.unbindMaskClickListener();\n\n        if (this.mask) {\n            document.body.removeChild(this.mask);\n        }\n\n        if (this.blockScroll) {\n            DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        }\n\n        this.unbindAnimationEndListener();\n        this.mask = null;\n    }\n\n    onAnimationStart(event) {\n        switch (event.toState) {\n            case 'visible':\n                this.container = event.element;\n                this.appendContainer();\n                this.show();\n\n                if (this.closeOnEscape) {\n                    this.bindDocumentEscapeListener();\n                }\n                break;\n        }\n    }\n\n    onAnimationEnd(event) {\n        switch (event.toState) {\n            case 'void':\n                this.hide();\n                ZIndexUtils.clear(this.container);\n                this.unbindGlobalListeners();\n            break;\n        }\n    }\n\n    appendContainer() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.container);\n            else\n                DomHandler.appendChild(this.container, this.appendTo);\n        }\n    }\n\n    bindDocumentEscapeListener() {\n        const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n        this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {\n            if (event.which == 27) {\n                if (parseInt(this.container.style.zIndex) === (DomHandler.zindex + this.baseZIndex)) {\n                    this.close(event);\n                }\n            }\n        });\n    }\n\n    unbindDocumentEscapeListener() {\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n    }\n\n    unbindMaskClickListener() {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n        }\n    }\n\n    unbindGlobalListeners() {\n        this.unbindMaskClickListener();\n        this.unbindDocumentEscapeListener();\n    }\n\n    unbindAnimationEndListener() {\n        if (this.animationEndListener && this.mask) {\n            this.mask.removeEventListener('animationend', this.animationEndListener);\n            this.animationEndListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.initialized = false;\n\n        if (this.visible && this.modal) {\n            this.destroyModal();\n        }\n\n        if (this.appendTo && this.container) {\n            this.el.nativeElement.appendChild(this.container);\n        }\n\n        if (this.container && this.autoZIndex) {\n            ZIndexUtils.clear(this.container);\n        }\n\n        this.container = null;\n        this.unbindGlobalListeners();\n        this.unbindAnimationEndListener();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule, RippleModule],\n    exports: [Sidebar],\n    declarations: [Sidebar]\n})\nexport class SidebarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-skeleton.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-skeleton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-skeleton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,77 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class Skeleton {
+    constructor() {
+        this.shape = "rectangle";
+        this.animation = "wave";
+        this.borderRadius = null;
+        this.size = null;
+        this.width = "100%";
+        this.height = "1rem";
+    }
+    containerClass() {
+        return {
+            'p-skeleton p-component': true,
+            'p-skeleton-circle': this.shape === 'circle',
+            'p-skeleton-none': this.animation === 'none'
+        };
+    }
+    containerStyle() {
+        if (this.size)
+            return { ...this.style, width: this.size, height: this.size, borderRadius: this.borderRadius };
+        else
+            return { ...this.style, width: this.width, height: this.height, borderRadius: this.borderRadius };
+    }
+}
+Skeleton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Skeleton, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Skeleton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Skeleton, selector: "p-skeleton", inputs: { styleClass: "styleClass", style: "style", shape: "shape", animation: "animation", borderRadius: "borderRadius", size: "size", width: "width", height: "height" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="containerStyle()">
+        </div>
+    `, isInline: true, styles: [".p-skeleton{position:relative;overflow:hidden}.p-skeleton:after{content:\"\";animation:p-skeleton-animation 1.2s infinite;height:100%;left:0;position:absolute;right:0;top:0;transform:translate(-100%);z-index:1}.p-skeleton.p-skeleton-circle{border-radius:50%}.p-skeleton-none:after{animation:none}@keyframes p-skeleton-animation{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Skeleton, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-skeleton', template: `
+        <div [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="containerStyle()">
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-skeleton{position:relative;overflow:hidden}.p-skeleton:after{content:\"\";animation:p-skeleton-animation 1.2s infinite;height:100%;left:0;position:absolute;right:0;top:0;transform:translate(-100%);z-index:1}.p-skeleton.p-skeleton-circle{border-radius:50%}.p-skeleton-none:after{animation:none}@keyframes p-skeleton-animation{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"] }]
+        }], propDecorators: { styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], shape: [{
+                type: Input
+            }], animation: [{
+                type: Input
+            }], borderRadius: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], width: [{
+                type: Input
+            }], height: [{
+                type: Input
+            }] } });
+class SkeletonModule {
+}
+SkeletonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SkeletonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SkeletonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SkeletonModule, declarations: [Skeleton], imports: [CommonModule], exports: [Skeleton] });
+SkeletonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SkeletonModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SkeletonModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Skeleton],
+                    declarations: [Skeleton]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Skeleton, SkeletonModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-skeleton.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-skeleton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-skeleton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-skeleton.mjs","sources":["../../src/app/components/skeleton/skeleton.ts","../../src/app/components/skeleton/primeng-skeleton.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'p-skeleton',\n    template: `\n        <div [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"containerStyle()\">\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./skeleton.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Skeleton {\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() shape: string = \"rectangle\";\n\n    @Input() animation: string = \"wave\";\n\n    @Input() borderRadius: string = null;\n\n    @Input() size: string = null;\n\n    @Input() width: string = \"100%\";\n\n    @Input() height: string = \"1rem\";\n\n    containerClass() {\n        return {\n            'p-skeleton p-component': true,\n            'p-skeleton-circle': this.shape === 'circle',\n            'p-skeleton-none': this.animation === 'none'\n        };\n    }\n\n    containerStyle() {\n        if (this.size)\n                return {...this.style, width: this.size, height: this.size, borderRadius: this.borderRadius};\n            else\n                return {...this.style, width: this.width, height: this.height, borderRadius: this.borderRadius};\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Skeleton],\n    declarations: [Skeleton]\n})\nexport class SkeletonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAgBa,QAAQ;IAbrB;QAmBa,UAAK,GAAW,WAAW,CAAC;QAE5B,cAAS,GAAW,MAAM,CAAC;QAE3B,iBAAY,GAAW,IAAI,CAAC;QAE5B,SAAI,GAAW,IAAI,CAAC;QAEpB,UAAK,GAAW,MAAM,CAAC;QAEvB,WAAM,GAAW,MAAM,CAAC;KAgBpC;IAdG,cAAc;QACV,OAAO;YACH,wBAAwB,EAAE,IAAI;YAC9B,mBAAmB,EAAE,IAAI,CAAC,KAAK,KAAK,QAAQ;YAC5C,iBAAiB,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM;SAC/C,CAAC;KACL;IAED,cAAc;QACV,IAAI,IAAI,CAAC,IAAI;YACL,OAAO,EAAC,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAC,CAAC;;YAE7F,OAAO,EAAC,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAC,CAAC;KAC3G;;qGA/BQ,QAAQ;yFAAR,QAAQ,qQAXP;;;KAGT;2FAQQ,QAAQ;kBAbpB,SAAS;+BACI,YAAY,YACZ;;;KAGT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,UAAU;sBAAlB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,YAAY;sBAApB,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,MAAM;sBAAd,KAAK;;MAuBG,cAAc;;2GAAd,cAAc;4GAAd,cAAc,iBAvCd,QAAQ,aAmCP,YAAY,aAnCb,QAAQ;4GAuCR,cAAc,YAJd,CAAC,YAAY,CAAC;2FAId,cAAc;kBAL1B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,QAAQ,CAAC;oBACnB,YAAY,EAAE,CAAC,QAAQ,CAAC;iBAC3B;;;ACtDD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-slidemenu.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-slidemenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-slidemenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,483 @@
+import * as i0 from '@angular/core';
+import { forwardRef, Component, ViewEncapsulation, Inject, Input, ViewChild, EventEmitter, ChangeDetectionStrategy, Output, NgModule } from '@angular/core';
+import { trigger, transition, style, animate } from '@angular/animations';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import * as i3 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i2 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+import * as i4 from 'primeng/api';
+
+class SlideMenuSub {
+    constructor(slideMenu) {
+        this.backLabel = 'Back';
+        this.easing = 'ease-out';
+        this.slideMenu = slideMenu;
+    }
+    itemClick(event, item, listitem) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (!item.url) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        if (item.items && !this.slideMenu.animating) {
+            this.slideMenu.left -= this.slideMenu.menuWidth;
+            this.activeItem = listitem;
+            this.slideMenu.animating = true;
+            setTimeout(() => this.slideMenu.animating = false, this.effectDuration);
+        }
+        if (!item.items && this.slideMenu.popup) {
+            this.slideMenu.hide();
+        }
+    }
+    focusNextList(listitem) {
+        if (!this.slideMenu.animating) {
+            let focusableElements = DomHandler.getFocusableElements(listitem);
+            if (focusableElements && focusableElements.length > 0) {
+                focusableElements[0].focus();
+            }
+            this.unbindTransitionEndListener();
+        }
+    }
+    onItemKeyDown(event) {
+        let listItem = event.currentTarget.parentElement;
+        switch (event.code) {
+            case 'Space':
+            case 'Enter':
+                if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {
+                    listItem.children[0].click();
+                    this.transitionEndListener = this.focusNextList.bind(this, listItem);
+                    this.sublistViewChild.nativeElement.addEventListener('transitionend', this.transitionEndListener);
+                }
+                event.preventDefault();
+                break;
+            default:
+                break;
+        }
+    }
+    unbindTransitionEndListener() {
+        if (this.transitionEndListener && this.sublistViewChild) {
+            this.sublistViewChild.nativeElement.removeEventListener('transitionend', this.transitionEndListener);
+            this.transitionEndListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.activeItem = null;
+        this.unbindTransitionEndListener();
+    }
+    get isActive() {
+        return -this.slideMenu.left == (this.index * this.menuWidth);
+    }
+}
+SlideMenuSub.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SlideMenuSub, deps: [{ token: forwardRef(() => SlideMenu) }], target: i0.ɵɵFactoryTarget.Component });
+SlideMenuSub.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: SlideMenuSub, selector: "p-slideMenuSub", inputs: { item: "item", root: "root", backLabel: "backLabel", menuWidth: "menuWidth", effectDuration: "effectDuration", easing: "easing", index: "index" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "sublistViewChild", first: true, predicate: ["sublist"], descendants: true }], ngImport: i0, template: `
+        <ul #sublist [ngClass]="{'p-slidemenu-rootlist':root, 'p-submenu-list':!root, 'p-active-submenu': isActive}"
+            [style.width.px]="menuWidth" [style.left.px]="root ? slideMenu.left : slideMenu.menuWidth"
+            [style.transitionProperty]="root ? 'left' : 'none'" [style.transitionDuration]="effectDuration + 'ms'" [style.transitionTimingFunction]="easing">
+            <ng-template ngFor let-child [ngForOf]="(root ? item : item.items)">
+                <li *ngIf="child.separator" class="p-menu-separator" [ngClass]="{'p-hidden': child.visible === false}">
+                <li *ngIf="!child.separator" #listitem [ngClass]="{'p-menuitem':true,'p-menuitem-active':listitem==activeItem,'p-hidden': child.visible === false}" pTooltip [tooltipOptions]="child.tooltipOptions"
+                    [class]="child.styleClass" [ngStyle]="child.style">
+                    <a *ngIf="!child.routerLink" (keydown)="onItemKeyDown($event)"  [attr.href]="child.url" class="p-menuitem-link" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id"
+                        [ngClass]="{'p-disabled':child.disabled}" [attr.tabindex]="child.disabled || !isActive ? null : '0'"
+                        (click)="itemClick($event, child, listitem)">
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-fw pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <a *ngIf="child.routerLink" (keydown)="onItemKeyDown($event)"  [routerLink]="child.routerLink" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'"
+                        [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}" [href]="child.url" class="p-menuitem-link"
+                        [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" [attr.tabindex]="child.disabled || !isActive ? null : '0'"
+                        [ngClass]="{'p-disabled':child.disabled}"
+                        (click)="itemClick($event, child, listitem)"
+                        [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state">
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-fw pi-caret-right" *ngIf="child.items"></span>
+                    </a>
+                    <p-slideMenuSub class="p-submenu" [item]="child" [index]="index + 1" [menuWidth]="menuWidth" *ngIf="child.items"></p-slideMenuSub>
+                </li>
+            </ng-template>
+        </ul>
+    `, isInline: true, components: [{ type: SlideMenuSub, selector: "p-slideMenuSub", inputs: ["item", "root", "backLabel", "menuWidth", "effectDuration", "easing", "index"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SlideMenuSub, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-slideMenuSub',
+                    template: `
+        <ul #sublist [ngClass]="{'p-slidemenu-rootlist':root, 'p-submenu-list':!root, 'p-active-submenu': isActive}"
+            [style.width.px]="menuWidth" [style.left.px]="root ? slideMenu.left : slideMenu.menuWidth"
+            [style.transitionProperty]="root ? 'left' : 'none'" [style.transitionDuration]="effectDuration + 'ms'" [style.transitionTimingFunction]="easing">
+            <ng-template ngFor let-child [ngForOf]="(root ? item : item.items)">
+                <li *ngIf="child.separator" class="p-menu-separator" [ngClass]="{'p-hidden': child.visible === false}">
+                <li *ngIf="!child.separator" #listitem [ngClass]="{'p-menuitem':true,'p-menuitem-active':listitem==activeItem,'p-hidden': child.visible === false}" pTooltip [tooltipOptions]="child.tooltipOptions"
+                    [class]="child.styleClass" [ngStyle]="child.style">
+                    <a *ngIf="!child.routerLink" (keydown)="onItemKeyDown($event)"  [attr.href]="child.url" class="p-menuitem-link" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id"
+                        [ngClass]="{'p-disabled':child.disabled}" [attr.tabindex]="child.disabled || !isActive ? null : '0'"
+                        (click)="itemClick($event, child, listitem)">
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-fw pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <a *ngIf="child.routerLink" (keydown)="onItemKeyDown($event)"  [routerLink]="child.routerLink" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'"
+                        [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}" [href]="child.url" class="p-menuitem-link"
+                        [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" [attr.tabindex]="child.disabled || !isActive ? null : '0'"
+                        [ngClass]="{'p-disabled':child.disabled}"
+                        (click)="itemClick($event, child, listitem)"
+                        [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state">
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-fw pi-caret-right" *ngIf="child.items"></span>
+                    </a>
+                    <p-slideMenuSub class="p-submenu" [item]="child" [index]="index + 1" [menuWidth]="menuWidth" *ngIf="child.items"></p-slideMenuSub>
+                </li>
+            </ng-template>
+        </ul>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: undefined, decorators: [{
+                    type: Inject,
+                    args: [forwardRef(() => SlideMenu)]
+                }] }]; }, propDecorators: { item: [{
+                type: Input
+            }], root: [{
+                type: Input
+            }], backLabel: [{
+                type: Input
+            }], menuWidth: [{
+                type: Input
+            }], effectDuration: [{
+                type: Input
+            }], easing: [{
+                type: Input
+            }], index: [{
+                type: Input
+            }], sublistViewChild: [{
+                type: ViewChild,
+                args: ['sublist']
+            }] } });
+class SlideMenu {
+    constructor(el, renderer, cd, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.menuWidth = 190;
+        this.viewportHeight = 180;
+        this.effectDuration = 250;
+        this.easing = 'ease-out';
+        this.backLabel = 'Back';
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.left = 0;
+        this.animating = false;
+    }
+    ngAfterViewChecked() {
+        if (!this.viewportUpdated && !this.popup && this.containerViewChild) {
+            this.updateViewPort();
+            this.viewportUpdated = true;
+        }
+    }
+    set container(element) {
+        this.containerViewChild = element;
+    }
+    set backward(element) {
+        this.backwardViewChild = element;
+    }
+    set slideMenuContent(element) {
+        this.slideMenuContentViewChild = element;
+    }
+    updateViewPort() {
+        this.slideMenuContentViewChild.nativeElement.style.height = this.viewportHeight - DomHandler.getHiddenElementOuterHeight(this.backwardViewChild.nativeElement) + 'px';
+    }
+    toggle(event) {
+        if (this.visible)
+            this.hide();
+        else
+            this.show(event);
+        this.preventDocumentDefault = true;
+    }
+    show(event) {
+        this.target = event.currentTarget;
+        this.visible = true;
+        this.preventDocumentDefault = true;
+        this.cd.markForCheck();
+    }
+    onOverlayClick(event) {
+        if (this.popup) {
+            this.overlayService.add({
+                originalEvent: event,
+                target: this.el.nativeElement
+            });
+        }
+        this.preventDocumentDefault = true;
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                if (this.popup) {
+                    this.updateViewPort();
+                    this.moveOnTop();
+                    this.onShow.emit({});
+                    this.appendOverlay();
+                    DomHandler.absolutePosition(this.containerViewChild.nativeElement, this.target);
+                    this.bindDocumentClickListener();
+                    this.bindDocumentResizeListener();
+                    this.bindScrollListener();
+                }
+                break;
+            case 'void':
+                this.onOverlayHide();
+                this.onHide.emit({});
+                break;
+        }
+    }
+    onOverlayAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                ZIndexUtils.clear(event.element);
+                break;
+        }
+    }
+    appendOverlay() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.containerViewChild.nativeElement);
+            else
+                DomHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);
+        }
+    }
+    restoreOverlayAppend() {
+        if (this.container && this.appendTo) {
+            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);
+        }
+    }
+    moveOnTop() {
+        if (this.autoZIndex) {
+            ZIndexUtils.set('menu', this.containerViewChild.nativeElement, this.baseZIndex + this.config.zIndex.menu);
+        }
+    }
+    hide() {
+        this.visible = false;
+        this.cd.markForCheck();
+    }
+    onWindowResize() {
+        this.hide();
+    }
+    goBack() {
+        this.left += this.menuWidth;
+    }
+    onBackwardKeydown(event) {
+        this.goBack();
+        if (!this.left) {
+            setTimeout(() => {
+                let focusableElements = DomHandler.getFocusableElements(this.el.nativeElement);
+                if (focusableElements && focusableElements.length > 0) {
+                    focusableElements[0].focus();
+                }
+            }, 1);
+        }
+        event.preventDefault();
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {
+                if (!this.preventDocumentDefault) {
+                    this.hide();
+                    this.cd.detectChanges();
+                }
+                this.preventDocumentDefault = false;
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {
+                if (this.visible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    onOverlayHide() {
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.preventDocumentDefault = false;
+        this.target = null;
+        this.left = 0;
+    }
+    ngOnDestroy() {
+        if (this.popup) {
+            if (this.scrollHandler) {
+                this.scrollHandler.destroy();
+                this.scrollHandler = null;
+            }
+            this.restoreOverlayAppend();
+            this.onOverlayHide();
+        }
+    }
+}
+SlideMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SlideMenu, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i4.PrimeNGConfig }, { token: i4.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+SlideMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: SlideMenu, selector: "p-slideMenu", inputs: { model: "model", popup: "popup", style: "style", styleClass: "styleClass", menuWidth: "menuWidth", viewportHeight: "viewportHeight", effectDuration: "effectDuration", easing: "easing", backLabel: "backLabel", appendTo: "appendTo", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "backward", first: true, predicate: ["backward"], descendants: true }, { propertyName: "slideMenuContent", first: true, predicate: ["slideMenuContent"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="{'p-slidemenu p-component':true, 'p-slidemenu-overlay':popup}"
+            [class]="styleClass" [ngStyle]="style" (click)="onOverlayClick($event)"
+            [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="popup !== true"
+            (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)" *ngIf="!popup || visible">
+            <div class="p-slidemenu-wrapper" [style.height]="left ? viewportHeight + 'px' : 'auto'" [style.width]="menuWidth + 'px'">
+                <div #slideMenuContent class="p-slidemenu-content">
+                    <p-slideMenuSub [item]="model" root="root" [index]="0" [menuWidth]="menuWidth" [effectDuration]="effectDuration" [easing]="easing"></p-slideMenuSub>
+                </div>
+                <a #backward (keydown.enter)="onBackwardKeydown($event)" (keydown.space)="onBackwardKeydown($event)" class="p-slidemenu-backward p-menuitem-link" tabindex="0" [style.display]="left ? 'block' : 'none'" (click)="goBack()">
+                    <span class="p-slidemenu-backward-icon pi pi-fw pi-caret-left"></span><span>{{backLabel}}</span>
+                </a>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-slidemenu{width:12.5rem}.p-slidemenu.p-slidemenu-overlay{position:absolute;top:0;left:0}.p-slidemenu ul{list-style:none;margin:0;padding:0}.p-slidemenu .p-slidemenu-rootlist{position:absolute;top:0}.p-slidemenu .p-submenu-list{display:none;position:absolute;top:0;width:12.5rem}.p-slidemenu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden}.p-slidemenu .p-menuitem-icon,.p-slidemenu .p-menuitem-text{vertical-align:middle}.p-slidemenu .p-menuitem{position:relative}.p-slidemenu .p-menuitem-link .p-submenu-icon{margin-left:auto}.p-slidemenu .p-slidemenu-wrapper{position:relative}.p-slidemenu .p-slidemenu-content{overflow-x:hidden;overflow-y:auto;position:relative}.p-slidemenu-backward{position:absolute;bottom:0;width:100%;cursor:pointer;display:none}.p-slidemenu-backward .p-slidemenu-backward-icon,.p-slidemenu-backward span{vertical-align:middle}.p-slidemenu .p-menuitem-active{position:static}.p-slidemenu .p-menuitem-active>.p-submenu>.p-submenu-list{display:block}.p-slidemenu ul:not(.p-active-submenu)>.p-menuitem:not(.p-menuitem-active),.p-slidemenu .p-active-submenu>.p-menuitem-active>.p-submenu>.p-submenu-list{display:none}.p-slidemenu .p-active-submenu>.p-menuitem-active~.p-menuitem{display:block}\n"], components: [{ type: SlideMenuSub, selector: "p-slideMenuSub", inputs: ["item", "root", "backLabel", "menuWidth", "effectDuration", "easing", "index"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SlideMenu, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-slideMenu', template: `
+        <div #container [ngClass]="{'p-slidemenu p-component':true, 'p-slidemenu-overlay':popup}"
+            [class]="styleClass" [ngStyle]="style" (click)="onOverlayClick($event)"
+            [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="popup !== true"
+            (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)" *ngIf="!popup || visible">
+            <div class="p-slidemenu-wrapper" [style.height]="left ? viewportHeight + 'px' : 'auto'" [style.width]="menuWidth + 'px'">
+                <div #slideMenuContent class="p-slidemenu-content">
+                    <p-slideMenuSub [item]="model" root="root" [index]="0" [menuWidth]="menuWidth" [effectDuration]="effectDuration" [easing]="easing"></p-slideMenuSub>
+                </div>
+                <a #backward (keydown.enter)="onBackwardKeydown($event)" (keydown.space)="onBackwardKeydown($event)" class="p-slidemenu-backward p-menuitem-link" tabindex="0" [style.display]="left ? 'block' : 'none'" (click)="goBack()">
+                    <span class="p-slidemenu-backward-icon pi pi-fw pi-caret-left"></span><span>{{backLabel}}</span>
+                </a>
+            </div>
+        </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-slidemenu{width:12.5rem}.p-slidemenu.p-slidemenu-overlay{position:absolute;top:0;left:0}.p-slidemenu ul{list-style:none;margin:0;padding:0}.p-slidemenu .p-slidemenu-rootlist{position:absolute;top:0}.p-slidemenu .p-submenu-list{display:none;position:absolute;top:0;width:12.5rem}.p-slidemenu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden}.p-slidemenu .p-menuitem-icon,.p-slidemenu .p-menuitem-text{vertical-align:middle}.p-slidemenu .p-menuitem{position:relative}.p-slidemenu .p-menuitem-link .p-submenu-icon{margin-left:auto}.p-slidemenu .p-slidemenu-wrapper{position:relative}.p-slidemenu .p-slidemenu-content{overflow-x:hidden;overflow-y:auto;position:relative}.p-slidemenu-backward{position:absolute;bottom:0;width:100%;cursor:pointer;display:none}.p-slidemenu-backward .p-slidemenu-backward-icon,.p-slidemenu-backward span{vertical-align:middle}.p-slidemenu .p-menuitem-active{position:static}.p-slidemenu .p-menuitem-active>.p-submenu>.p-submenu-list{display:block}.p-slidemenu ul:not(.p-active-submenu)>.p-menuitem:not(.p-menuitem-active),.p-slidemenu .p-active-submenu>.p-menuitem-active>.p-submenu>.p-submenu-list{display:none}.p-slidemenu .p-active-submenu>.p-menuitem-active~.p-menuitem{display:block}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i4.PrimeNGConfig }, { type: i4.OverlayService }]; }, propDecorators: { model: [{
+                type: Input
+            }], popup: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], menuWidth: [{
+                type: Input
+            }], viewportHeight: [{
+                type: Input
+            }], effectDuration: [{
+                type: Input
+            }], easing: [{
+                type: Input
+            }], backLabel: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], container: [{
+                type: ViewChild,
+                args: ['container']
+            }], backward: [{
+                type: ViewChild,
+                args: ['backward']
+            }], slideMenuContent: [{
+                type: ViewChild,
+                args: ['slideMenuContent']
+            }] } });
+class SlideMenuModule {
+}
+SlideMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SlideMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SlideMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SlideMenuModule, declarations: [SlideMenu, SlideMenuSub], imports: [CommonModule, RouterModule, TooltipModule], exports: [SlideMenu, RouterModule, TooltipModule] });
+SlideMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SlideMenuModule, imports: [[CommonModule, RouterModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SlideMenuModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, TooltipModule],
+                    exports: [SlideMenu, RouterModule, TooltipModule],
+                    declarations: [SlideMenu, SlideMenuSub]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { SlideMenu, SlideMenuModule, SlideMenuSub };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-slidemenu.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-slidemenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-slidemenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-slidemenu.mjs","sources":["../../src/app/components/slidemenu/slidemenu.ts","../../src/app/components/slidemenu/primeng-slidemenu.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,AfterViewChecked,OnDestroy,Input,Renderer2,Inject,forwardRef,ViewChild,Output,EventEmitter,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {MenuItem, OverlayService, PrimeNGConfig} from 'primeng/api';\nimport {RouterModule} from '@angular/router';\nimport {ZIndexUtils} from 'primeng/utils';\nimport {TooltipModule} from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-slideMenuSub',\n    template: `\n        <ul #sublist [ngClass]=\"{'p-slidemenu-rootlist':root, 'p-submenu-list':!root, 'p-active-submenu': isActive}\"\n            [style.width.px]=\"menuWidth\" [style.left.px]=\"root ? slideMenu.left : slideMenu.menuWidth\"\n            [style.transitionProperty]=\"root ? 'left' : 'none'\" [style.transitionDuration]=\"effectDuration + 'ms'\" [style.transitionTimingFunction]=\"easing\">\n            <ng-template ngFor let-child [ngForOf]=\"(root ? item : item.items)\">\n                <li *ngIf=\"child.separator\" class=\"p-menu-separator\" [ngClass]=\"{'p-hidden': child.visible === false}\">\n                <li *ngIf=\"!child.separator\" #listitem [ngClass]=\"{'p-menuitem':true,'p-menuitem-active':listitem==activeItem,'p-hidden': child.visible === false}\" pTooltip [tooltipOptions]=\"child.tooltipOptions\"\n                    [class]=\"child.styleClass\" [ngStyle]=\"child.style\">\n                    <a *ngIf=\"!child.routerLink\" (keydown)=\"onItemKeyDown($event)\"  [attr.href]=\"child.url\" class=\"p-menuitem-link\" [attr.target]=\"child.target\" [attr.title]=\"child.title\" [attr.id]=\"child.id\"\n                        [ngClass]=\"{'p-disabled':child.disabled}\" [attr.tabindex]=\"child.disabled || !isActive ? null : '0'\"\n                        (click)=\"itemClick($event, child, listitem)\">\n                        <span class=\"p-menuitem-icon\" *ngIf=\"child.icon\" [ngClass]=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlRouteLabel\">{{child.label}}</span>\n                        <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                        <span class=\"p-submenu-icon pi pi-fw pi-angle-right\" *ngIf=\"child.items\"></span>\n                    </a>\n                    <a *ngIf=\"child.routerLink\" (keydown)=\"onItemKeyDown($event)\"  [routerLink]=\"child.routerLink\" [queryParams]=\"child.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\"\n                        [routerLinkActiveOptions]=\"child.routerLinkActiveOptions||{exact:false}\" [href]=\"child.url\" class=\"p-menuitem-link\"\n                        [attr.target]=\"child.target\" [attr.title]=\"child.title\" [attr.id]=\"child.id\" [attr.tabindex]=\"child.disabled || !isActive ? null : '0'\"\n                        [ngClass]=\"{'p-disabled':child.disabled}\"\n                        (click)=\"itemClick($event, child, listitem)\"\n                        [fragment]=\"child.fragment\" [queryParamsHandling]=\"child.queryParamsHandling\" [preserveFragment]=\"child.preserveFragment\" [skipLocationChange]=\"child.skipLocationChange\" [replaceUrl]=\"child.replaceUrl\" [state]=\"child.state\">\n                        <span class=\"p-menuitem-icon\" *ngIf=\"child.icon\" [ngClass]=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlRouteLabel\">{{child.label}}</span>\n                        <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                        <span class=\"p-submenu-icon pi pi-fw pi-caret-right\" *ngIf=\"child.items\"></span>\n                    </a>\n                    <p-slideMenuSub class=\"p-submenu\" [item]=\"child\" [index]=\"index + 1\" [menuWidth]=\"menuWidth\" *ngIf=\"child.items\"></p-slideMenuSub>\n                </li>\n            </ng-template>\n        </ul>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class SlideMenuSub implements OnDestroy {\n\n    @Input() item: MenuItem;\n\n    @Input() root: boolean;\n\n    @Input() backLabel: string = 'Back';\n\n    @Input() menuWidth: number;\n\n    @Input() effectDuration: any;\n\n    @Input() easing: string = 'ease-out';\n\n    @Input() index: number;\n\n    @ViewChild('sublist') sublistViewChild: ElementRef;\n\n    slideMenu: SlideMenu;\n\n    transitionEndListener: any;\n\n    constructor(@Inject(forwardRef(() => SlideMenu)) slideMenu) {\n        this.slideMenu = slideMenu as SlideMenu;\n    }\n    activeItem: any;\n\n    itemClick(event, item: MenuItem, listitem: any) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (!item.url) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        if (item.items && !this.slideMenu.animating) {\n            this.slideMenu.left -= this.slideMenu.menuWidth;\n\n            this.activeItem = listitem;\n            this.slideMenu.animating = true;\n            setTimeout(() => this.slideMenu.animating = false, this.effectDuration);\n        }\n\n        if (!item.items && this.slideMenu.popup) {\n            this.slideMenu.hide();\n        }\n    }\n\n    focusNextList(listitem) {\n        if (!this.slideMenu.animating) {\n            let focusableElements = DomHandler.getFocusableElements(listitem);\n\n            if (focusableElements && focusableElements.length > 0) {\n                focusableElements[0].focus();\n            }\n\n            this.unbindTransitionEndListener();\n        }\n    }\n\n    onItemKeyDown(event) {\n        let listItem = event.currentTarget.parentElement;\n\n        switch (event.code) {\n            case 'Space':\n            case 'Enter':\n                if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {\n                    listItem.children[0].click();\n                    this.transitionEndListener = this.focusNextList.bind(this,listItem);\n                    this.sublistViewChild.nativeElement.addEventListener('transitionend', this.transitionEndListener);\n                }\n\n                event.preventDefault();\n            break;\n\n            default:\n            break;\n        }\n    }\n\n    unbindTransitionEndListener() {\n        if (this.transitionEndListener && this.sublistViewChild) {\n            this.sublistViewChild.nativeElement.removeEventListener('transitionend', this.transitionEndListener);\n            this.transitionEndListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.activeItem = null;\n        this.unbindTransitionEndListener();\n    }\n\n    get isActive() {\n        return -this.slideMenu.left == (this.index * this.menuWidth)\n    }\n}\n\n@Component({\n    selector: 'p-slideMenu',\n    template: `\n        <div #container [ngClass]=\"{'p-slidemenu p-component':true, 'p-slidemenu-overlay':popup}\"\n            [class]=\"styleClass\" [ngStyle]=\"style\" (click)=\"onOverlayClick($event)\"\n            [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" [@.disabled]=\"popup !== true\"\n            (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\" *ngIf=\"!popup || visible\">\n            <div class=\"p-slidemenu-wrapper\" [style.height]=\"left ? viewportHeight + 'px' : 'auto'\" [style.width]=\"menuWidth + 'px'\">\n                <div #slideMenuContent class=\"p-slidemenu-content\">\n                    <p-slideMenuSub [item]=\"model\" root=\"root\" [index]=\"0\" [menuWidth]=\"menuWidth\" [effectDuration]=\"effectDuration\" [easing]=\"easing\"></p-slideMenuSub>\n                </div>\n                <a #backward (keydown.enter)=\"onBackwardKeydown($event)\" (keydown.space)=\"onBackwardKeydown($event)\" class=\"p-slidemenu-backward p-menuitem-link\" tabindex=\"0\" [style.display]=\"left ? 'block' : 'none'\" (click)=\"goBack()\">\n                    <span class=\"p-slidemenu-backward-icon pi pi-fw pi-caret-left\"></span><span>{{backLabel}}</span>\n                </a>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./slidemenu.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class SlideMenu implements AfterViewChecked, OnDestroy {\n\n    @Input() model: MenuItem[];\n\n    @Input() popup: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() menuWidth: number = 190;\n\n    @Input() viewportHeight: number = 180;\n\n    @Input() effectDuration: any = 250;\n\n    @Input() easing: string = 'ease-out';\n\n    @Input() backLabel: string = 'Back';\n\n    @Input() appendTo: any;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    containerViewChild: ElementRef;\n\n    backwardViewChild: ElementRef;\n\n    slideMenuContentViewChild: ElementRef;\n\n    documentClickListener: any;\n\n    documentResizeListener: any;\n\n    preventDocumentDefault: boolean;\n\n    scrollHandler: any;\n\n    left: number = 0;\n\n    animating: boolean = false;\n\n    target: any;\n\n    visible: boolean;\n\n    viewportUpdated: boolean;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    ngAfterViewChecked() {\n        if (!this.viewportUpdated && !this.popup && this.containerViewChild) {\n            this.updateViewPort();\n            this.viewportUpdated = true;\n        }\n    }\n\n    @ViewChild('container') set container(element: ElementRef) {\n        this.containerViewChild = element;\n    }\n\n    @ViewChild('backward') set backward(element: ElementRef) {\n        this.backwardViewChild = element;\n    }\n\n    @ViewChild('slideMenuContent') set slideMenuContent(element: ElementRef) {\n        this.slideMenuContentViewChild = element;\n    }\n\n    updateViewPort() {\n        this.slideMenuContentViewChild.nativeElement.style.height = this.viewportHeight - DomHandler.getHiddenElementOuterHeight(this.backwardViewChild.nativeElement) + 'px';\n    }\n\n    toggle(event) {\n        if (this.visible)\n            this.hide();\n        else\n            this.show(event);\n\n        this.preventDocumentDefault = true;\n    }\n\n    show(event) {\n        this.target = event.currentTarget;\n        this.visible = true;\n        this.preventDocumentDefault = true;\n        this.cd.markForCheck();\n    }\n\n    onOverlayClick(event) {\n        if (this.popup) {\n            this.overlayService.add({\n                originalEvent: event,\n                target: this.el.nativeElement\n            });\n        }\n\n        this.preventDocumentDefault = true;\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                if (this.popup) {\n                    this.updateViewPort();\n                    this.moveOnTop();\n                    this.onShow.emit({});\n                    this.appendOverlay();\n                    DomHandler.absolutePosition(this.containerViewChild.nativeElement, this.target);\n                    this.bindDocumentClickListener();\n                    this.bindDocumentResizeListener();\n                    this.bindScrollListener();\n                }\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n                this.onHide.emit({});\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                ZIndexUtils.clear(event.element);\n            break;\n        }\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.containerViewChild.nativeElement);\n            else\n                DomHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.container && this.appendTo) {\n            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);\n        }\n    }\n\n    moveOnTop() {\n        if (this.autoZIndex) {\n            ZIndexUtils.set('menu', this.containerViewChild.nativeElement, this.baseZIndex + this.config.zIndex.menu);\n        }\n    }\n\n    hide() {\n        this.visible = false;\n        this.cd.markForCheck();\n    }\n\n    onWindowResize() {\n        this.hide();\n    }\n\n    goBack() {\n        this.left += this.menuWidth;\n    }\n\n    onBackwardKeydown(event) {\n        this.goBack();\n\n        if (!this.left) {\n            setTimeout(() => {\n                let focusableElements = DomHandler.getFocusableElements(this.el.nativeElement);\n\n                if (focusableElements && focusableElements.length > 0) {\n                    focusableElements[0].focus();\n                }\n            }, 1);\n        }\n\n        event.preventDefault();\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {\n                if (!this.preventDocumentDefault) {\n                    this.hide();\n                    this.cd.detectChanges();\n                }\n\n                this.preventDocumentDefault = false;\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n                if (this.visible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    onOverlayHide() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.preventDocumentDefault = false;\n        this.target = null;\n        this.left = 0;\n    }\n\n    ngOnDestroy() {\n        if (this.popup) {\n            if (this.scrollHandler) {\n                this.scrollHandler.destroy();\n                this.scrollHandler = null;\n            }\n\n            this.restoreOverlayAppend();\n            this.onOverlayHide();\n        }\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,TooltipModule],\n    exports: [SlideMenu,RouterModule,TooltipModule],\n    declarations: [SlideMenu,SlideMenuSub]\n})\nexport class SlideMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-slider.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-slider.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-slider.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,438 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const SLIDER_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Slider),
+    multi: true
+};
+class Slider {
+    constructor(el, renderer, ngZone, cd) {
+        this.el = el;
+        this.renderer = renderer;
+        this.ngZone = ngZone;
+        this.cd = cd;
+        this.min = 0;
+        this.max = 100;
+        this.orientation = 'horizontal';
+        this.tabindex = 0;
+        this.onChange = new EventEmitter();
+        this.onSlideEnd = new EventEmitter();
+        this.handleValues = [];
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+        this.handleIndex = 0;
+    }
+    onMouseDown(event, index) {
+        if (this.disabled) {
+            return;
+        }
+        this.dragging = true;
+        this.updateDomData();
+        this.sliderHandleClick = true;
+        if (this.range && this.handleValues && this.handleValues[0] === this.max) {
+            this.handleIndex = 0;
+        }
+        else {
+            this.handleIndex = index;
+        }
+        this.bindDragListeners();
+        event.target.focus();
+        event.preventDefault();
+        if (this.animate) {
+            DomHandler.removeClass(this.el.nativeElement.children[0], 'p-slider-animate');
+        }
+    }
+    onTouchStart(event, index) {
+        if (this.disabled) {
+            return;
+        }
+        var touchobj = event.changedTouches[0];
+        this.startHandleValue = (this.range) ? this.handleValues[index] : this.handleValue;
+        this.dragging = true;
+        if (this.range && this.handleValues && this.handleValues[0] === this.max) {
+            this.handleIndex = 0;
+        }
+        else {
+            this.handleIndex = index;
+        }
+        if (this.orientation === 'horizontal') {
+            this.startx = parseInt(touchobj.clientX, 10);
+            this.barWidth = this.el.nativeElement.children[0].offsetWidth;
+        }
+        else {
+            this.starty = parseInt(touchobj.clientY, 10);
+            this.barHeight = this.el.nativeElement.children[0].offsetHeight;
+        }
+        if (this.animate) {
+            DomHandler.removeClass(this.el.nativeElement.children[0], 'p-slider-animate');
+        }
+        event.preventDefault();
+    }
+    onTouchMove(event, index) {
+        if (this.disabled) {
+            return;
+        }
+        var touchobj = event.changedTouches[0], handleValue = 0;
+        if (this.orientation === 'horizontal') {
+            handleValue = Math.floor(((parseInt(touchobj.clientX, 10) - this.startx) * 100) / (this.barWidth)) + this.startHandleValue;
+        }
+        else {
+            handleValue = Math.floor(((this.starty - parseInt(touchobj.clientY, 10)) * 100) / (this.barHeight)) + this.startHandleValue;
+        }
+        this.setValueFromHandle(event, handleValue);
+        event.preventDefault();
+    }
+    onTouchEnd(event, index) {
+        if (this.disabled) {
+            return;
+        }
+        this.dragging = false;
+        if (this.range)
+            this.onSlideEnd.emit({ originalEvent: event, values: this.values });
+        else
+            this.onSlideEnd.emit({ originalEvent: event, value: this.value });
+        if (this.animate) {
+            DomHandler.addClass(this.el.nativeElement.children[0], 'p-slider-animate');
+        }
+        event.preventDefault();
+    }
+    onBarClick(event) {
+        if (this.disabled) {
+            return;
+        }
+        if (!this.sliderHandleClick) {
+            this.updateDomData();
+            this.handleChange(event);
+        }
+        this.sliderHandleClick = false;
+    }
+    onHandleKeydown(event, handleIndex) {
+        if (this.disabled) {
+            return;
+        }
+        if (event.which == 38 || event.which == 39) {
+            this.spin(event, 1, handleIndex);
+        }
+        else if (event.which == 37 || event.which == 40) {
+            this.spin(event, -1, handleIndex);
+        }
+    }
+    spin(event, dir, handleIndex) {
+        let step = (this.step || 1) * dir;
+        if (this.range) {
+            this.handleIndex = handleIndex;
+            this.updateValue(this.values[this.handleIndex] + step);
+            this.updateHandleValue();
+        }
+        else {
+            this.updateValue(this.value + step);
+            this.updateHandleValue();
+        }
+        event.preventDefault();
+    }
+    handleChange(event) {
+        let handleValue = this.calculateHandleValue(event);
+        this.setValueFromHandle(event, handleValue);
+    }
+    bindDragListeners() {
+        this.ngZone.runOutsideAngular(() => {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            if (!this.dragListener) {
+                this.dragListener = this.renderer.listen(documentTarget, 'mousemove', (event) => {
+                    if (this.dragging) {
+                        this.ngZone.run(() => {
+                            this.handleChange(event);
+                        });
+                    }
+                });
+            }
+            if (!this.mouseupListener) {
+                this.mouseupListener = this.renderer.listen(documentTarget, 'mouseup', (event) => {
+                    if (this.dragging) {
+                        this.dragging = false;
+                        this.ngZone.run(() => {
+                            if (this.range)
+                                this.onSlideEnd.emit({ originalEvent: event, values: this.values });
+                            else
+                                this.onSlideEnd.emit({ originalEvent: event, value: this.value });
+                            if (this.animate) {
+                                DomHandler.addClass(this.el.nativeElement.children[0], 'p-slider-animate');
+                            }
+                        });
+                    }
+                });
+            }
+        });
+    }
+    unbindDragListeners() {
+        if (this.dragListener) {
+            this.dragListener();
+        }
+        if (this.mouseupListener) {
+            this.mouseupListener();
+        }
+    }
+    setValueFromHandle(event, handleValue) {
+        this.sliderHandleClick = false;
+        let newValue = this.getValueFromHandle(handleValue);
+        if (this.range) {
+            if (this.step) {
+                this.handleStepChange(newValue, this.values[this.handleIndex]);
+            }
+            else {
+                this.handleValues[this.handleIndex] = handleValue;
+                this.updateValue(newValue, event);
+            }
+        }
+        else {
+            if (this.step) {
+                this.handleStepChange(newValue, this.value);
+            }
+            else {
+                this.handleValue = handleValue;
+                this.updateValue(newValue, event);
+            }
+        }
+        this.cd.markForCheck();
+    }
+    handleStepChange(newValue, oldValue) {
+        let diff = (newValue - oldValue);
+        let val = oldValue;
+        if (diff < 0) {
+            val = oldValue + Math.ceil(newValue / this.step - oldValue / this.step) * this.step;
+        }
+        else if (diff > 0) {
+            val = oldValue + Math.floor(newValue / this.step - oldValue / this.step) * this.step;
+        }
+        this.updateValue(val);
+        this.updateHandleValue();
+    }
+    writeValue(value) {
+        if (this.range)
+            this.values = value || [0, 0];
+        else
+            this.value = value || 0;
+        this.updateHandleValue();
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    get rangeStartLeft() {
+        return this.isVertical() ? 'auto' : this.handleValues[0] + '%';
+    }
+    get rangeStartBottom() {
+        return this.isVertical() ? this.handleValues[0] + '%' : 'auto';
+    }
+    get rangeEndLeft() {
+        return this.isVertical() ? 'auto' : this.handleValues[1] + '%';
+    }
+    get rangeEndBottom() {
+        return this.isVertical() ? this.handleValues[1] + '%' : 'auto';
+    }
+    isVertical() {
+        return this.orientation === 'vertical';
+    }
+    updateDomData() {
+        let rect = this.el.nativeElement.children[0].getBoundingClientRect();
+        this.initX = rect.left + DomHandler.getWindowScrollLeft();
+        this.initY = rect.top + DomHandler.getWindowScrollTop();
+        this.barWidth = this.el.nativeElement.children[0].offsetWidth;
+        this.barHeight = this.el.nativeElement.children[0].offsetHeight;
+    }
+    calculateHandleValue(event) {
+        if (this.orientation === 'horizontal')
+            return ((event.pageX - this.initX) * 100) / (this.barWidth);
+        else
+            return (((this.initY + this.barHeight) - event.pageY) * 100) / (this.barHeight);
+    }
+    updateHandleValue() {
+        if (this.range) {
+            this.handleValues[0] = (this.values[0] < this.min ? 0 : this.values[0] - this.min) * 100 / (this.max - this.min);
+            this.handleValues[1] = (this.values[1] > this.max ? 100 : this.values[1] - this.min) * 100 / (this.max - this.min);
+        }
+        else {
+            if (this.value < this.min)
+                this.handleValue = 0;
+            else if (this.value > this.max)
+                this.handleValue = 100;
+            else
+                this.handleValue = (this.value - this.min) * 100 / (this.max - this.min);
+        }
+    }
+    updateValue(val, event) {
+        if (this.range) {
+            let value = val;
+            if (this.handleIndex == 0) {
+                if (value < this.min) {
+                    value = this.min;
+                    this.handleValues[0] = 0;
+                }
+                else if (value > this.values[1]) {
+                    value = this.values[1];
+                    this.handleValues[0] = this.handleValues[1];
+                }
+                this.sliderHandleStart.nativeElement.focus();
+            }
+            else {
+                if (value > this.max) {
+                    value = this.max;
+                    this.handleValues[1] = 100;
+                }
+                else if (value < this.values[0]) {
+                    value = this.values[0];
+                    this.handleValues[1] = this.handleValues[0];
+                }
+                this.sliderHandleEnd.nativeElement.focus();
+            }
+            this.values[this.handleIndex] = this.getNormalizedValue(value);
+            this.values = this.values.slice();
+            this.onModelChange(this.values);
+            this.onChange.emit({ event: event, values: this.values });
+        }
+        else {
+            if (val < this.min) {
+                val = this.min;
+                this.handleValue = 0;
+            }
+            else if (val > this.max) {
+                val = this.max;
+                this.handleValue = 100;
+            }
+            this.value = this.getNormalizedValue(val);
+            this.onModelChange(this.value);
+            this.onChange.emit({ event: event, value: this.value });
+            this.sliderHandle.nativeElement.focus();
+        }
+    }
+    getValueFromHandle(handleValue) {
+        return (this.max - this.min) * (handleValue / 100) + this.min;
+    }
+    getDecimalsCount(value) {
+        if (value && Math.floor(value) !== value)
+            return value.toString().split(".")[1].length || 0;
+        return 0;
+    }
+    getNormalizedValue(val) {
+        let decimalsCount = this.getDecimalsCount(this.step);
+        if (decimalsCount > 0) {
+            return +val.toFixed(decimalsCount);
+        }
+        else {
+            return Math.floor(val);
+        }
+    }
+    ngOnDestroy() {
+        this.unbindDragListeners();
+    }
+}
+Slider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Slider, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Slider.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Slider, selector: "p-slider", inputs: { animate: "animate", disabled: "disabled", min: "min", max: "max", orientation: "orientation", step: "step", range: "range", style: "style", styleClass: "styleClass", ariaLabelledBy: "ariaLabelledBy", tabindex: "tabindex" }, outputs: { onChange: "onChange", onSlideEnd: "onSlideEnd" }, host: { classAttribute: "p-element" }, providers: [SLIDER_VALUE_ACCESSOR], viewQueries: [{ propertyName: "sliderHandle", first: true, predicate: ["sliderHandle"], descendants: true }, { propertyName: "sliderHandleStart", first: true, predicate: ["sliderHandleStart"], descendants: true }, { propertyName: "sliderHandleEnd", first: true, predicate: ["sliderHandleEnd"], descendants: true }], ngImport: i0, template: `
+        <div [ngStyle]="style" [class]="styleClass" [ngClass]="{'p-slider p-component':true,'p-disabled':disabled,
+            'p-slider-horizontal':orientation == 'horizontal','p-slider-vertical':orientation == 'vertical','p-slider-animate':animate}"
+            (click)="onBarClick($event)">
+            <span *ngIf="range && orientation == 'horizontal'" class="p-slider-range" [ngStyle]="{'left':handleValues[0] + '%',width: (handleValues[1] - handleValues[0] + '%')}"></span>
+            <span *ngIf="range && orientation == 'vertical'" class="p-slider-range" [ngStyle]="{'bottom':handleValues[0] + '%',height: (handleValues[1] - handleValues[0] + '%')}"></span>
+            <span *ngIf="!range && orientation=='vertical'" class="p-slider-range" [ngStyle]="{'height': handleValue + '%'}"></span>
+            <span *ngIf="!range && orientation=='horizontal'" class="p-slider-range" [ngStyle]="{'width': handleValue + '%'}"></span>
+            <span #sliderHandle *ngIf="!range" [attr.tabindex]="disabled ? null : tabindex" (keydown)="onHandleKeydown($event)" class="p-slider-handle" (mousedown)="onMouseDown($event)" (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)" (touchend)="onTouchEnd($event)"
+                [style.transition]="dragging ? 'none': null" [ngStyle]="{'left': orientation == 'horizontal' ? handleValue + '%' : null,'bottom': orientation == 'vertical' ? handleValue + '%' : null}"
+                [attr.aria-valuemin]="min" [attr.aria-valuenow]="value" [attr.aria-valuemax]="max" [attr.aria-labelledby]="ariaLabelledBy"></span>
+            <span #sliderHandleStart *ngIf="range" [attr.tabindex]="disabled ? null : tabindex" (keydown)="onHandleKeydown($event,0)" (mousedown)="onMouseDown($event,0)" (touchstart)="onTouchStart($event,0)" (touchmove)="onTouchMove($event,0)" (touchend)="onTouchEnd($event)" [style.transition]="dragging ? 'none': null" class="p-slider-handle"
+                [ngStyle]="{'left': rangeStartLeft, 'bottom': rangeStartBottom}" [ngClass]="{'p-slider-handle-active':handleIndex==0}"
+                [attr.aria-valuemin]="min" [attr.aria-valuenow]="value ? value[0] : null" [attr.aria-valuemax]="max" [attr.aria-labelledby]="ariaLabelledBy"></span>
+            <span #sliderHandleEnd *ngIf="range" [attr.tabindex]="disabled ? null : tabindex" (keydown)="onHandleKeydown($event,1)" (mousedown)="onMouseDown($event,1)" (touchstart)="onTouchStart($event,1)" (touchmove)="onTouchMove($event,1)" (touchend)="onTouchEnd($event)" [style.transition]="dragging ? 'none': null" class="p-slider-handle"
+                [ngStyle]="{'left': rangeEndLeft, 'bottom': rangeEndBottom}" [ngClass]="{'p-slider-handle-active':handleIndex==1}"
+                [attr.aria-valuemin]="min" [attr.aria-valuenow]="value ? value[1] : null" [attr.aria-valuemax]="max" [attr.aria-labelledby]="ariaLabelledBy"></span>
+        </div>
+    `, isInline: true, styles: [".p-slider{position:relative}.p-slider .p-slider-handle{position:absolute;cursor:grab;touch-action:none;display:block}.p-slider-range{position:absolute;display:block}.p-slider-horizontal .p-slider-range{top:0;left:0;height:100%}.p-slider-horizontal .p-slider-handle{top:50%}.p-slider-vertical{height:100px}.p-slider-vertical .p-slider-handle{left:50%}.p-slider-vertical .p-slider-range{bottom:0;left:0;width:100%}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Slider, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-slider', template: `
+        <div [ngStyle]="style" [class]="styleClass" [ngClass]="{'p-slider p-component':true,'p-disabled':disabled,
+            'p-slider-horizontal':orientation == 'horizontal','p-slider-vertical':orientation == 'vertical','p-slider-animate':animate}"
+            (click)="onBarClick($event)">
+            <span *ngIf="range && orientation == 'horizontal'" class="p-slider-range" [ngStyle]="{'left':handleValues[0] + '%',width: (handleValues[1] - handleValues[0] + '%')}"></span>
+            <span *ngIf="range && orientation == 'vertical'" class="p-slider-range" [ngStyle]="{'bottom':handleValues[0] + '%',height: (handleValues[1] - handleValues[0] + '%')}"></span>
+            <span *ngIf="!range && orientation=='vertical'" class="p-slider-range" [ngStyle]="{'height': handleValue + '%'}"></span>
+            <span *ngIf="!range && orientation=='horizontal'" class="p-slider-range" [ngStyle]="{'width': handleValue + '%'}"></span>
+            <span #sliderHandle *ngIf="!range" [attr.tabindex]="disabled ? null : tabindex" (keydown)="onHandleKeydown($event)" class="p-slider-handle" (mousedown)="onMouseDown($event)" (touchstart)="onTouchStart($event)" (touchmove)="onTouchMove($event)" (touchend)="onTouchEnd($event)"
+                [style.transition]="dragging ? 'none': null" [ngStyle]="{'left': orientation == 'horizontal' ? handleValue + '%' : null,'bottom': orientation == 'vertical' ? handleValue + '%' : null}"
+                [attr.aria-valuemin]="min" [attr.aria-valuenow]="value" [attr.aria-valuemax]="max" [attr.aria-labelledby]="ariaLabelledBy"></span>
+            <span #sliderHandleStart *ngIf="range" [attr.tabindex]="disabled ? null : tabindex" (keydown)="onHandleKeydown($event,0)" (mousedown)="onMouseDown($event,0)" (touchstart)="onTouchStart($event,0)" (touchmove)="onTouchMove($event,0)" (touchend)="onTouchEnd($event)" [style.transition]="dragging ? 'none': null" class="p-slider-handle"
+                [ngStyle]="{'left': rangeStartLeft, 'bottom': rangeStartBottom}" [ngClass]="{'p-slider-handle-active':handleIndex==0}"
+                [attr.aria-valuemin]="min" [attr.aria-valuenow]="value ? value[0] : null" [attr.aria-valuemax]="max" [attr.aria-labelledby]="ariaLabelledBy"></span>
+            <span #sliderHandleEnd *ngIf="range" [attr.tabindex]="disabled ? null : tabindex" (keydown)="onHandleKeydown($event,1)" (mousedown)="onMouseDown($event,1)" (touchstart)="onTouchStart($event,1)" (touchmove)="onTouchMove($event,1)" (touchend)="onTouchEnd($event)" [style.transition]="dragging ? 'none': null" class="p-slider-handle"
+                [ngStyle]="{'left': rangeEndLeft, 'bottom': rangeEndBottom}" [ngClass]="{'p-slider-handle-active':handleIndex==1}"
+                [attr.aria-valuemin]="min" [attr.aria-valuenow]="value ? value[1] : null" [attr.aria-valuemax]="max" [attr.aria-labelledby]="ariaLabelledBy"></span>
+        </div>
+    `, providers: [SLIDER_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-slider{position:relative}.p-slider .p-slider-handle{position:absolute;cursor:grab;touch-action:none;display:block}.p-slider-range{position:absolute;display:block}.p-slider-horizontal .p-slider-range{top:0;left:0;height:100%}.p-slider-horizontal .p-slider-handle{top:50%}.p-slider-vertical{height:100px}.p-slider-vertical .p-slider-handle{left:50%}.p-slider-vertical .p-slider-range{bottom:0;left:0;width:100%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { animate: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], min: [{
+                type: Input
+            }], max: [{
+                type: Input
+            }], orientation: [{
+                type: Input
+            }], step: [{
+                type: Input
+            }], range: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], onChange: [{
+                type: Output
+            }], onSlideEnd: [{
+                type: Output
+            }], sliderHandle: [{
+                type: ViewChild,
+                args: ["sliderHandle"]
+            }], sliderHandleStart: [{
+                type: ViewChild,
+                args: ["sliderHandleStart"]
+            }], sliderHandleEnd: [{
+                type: ViewChild,
+                args: ["sliderHandleEnd"]
+            }] } });
+class SliderModule {
+}
+SliderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SliderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SliderModule, declarations: [Slider], imports: [CommonModule], exports: [Slider] });
+SliderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SliderModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SliderModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Slider],
+                    declarations: [Slider]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { SLIDER_VALUE_ACCESSOR, Slider, SliderModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-slider.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-slider.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-slider.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-slider.mjs","sources":["../../src/app/components/slider/slider.ts","../../src/app/components/slider/primeng-slider.ts"],"sourcesContent":["import {NgModule, Component, ElementRef, OnDestroy, Input, Output, EventEmitter, forwardRef, Renderer2,NgZone,ChangeDetectorRef, ViewChild, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const SLIDER_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => Slider),\n  multi: true\n};\n\n@Component({\n    selector: 'p-slider',\n    template: `\n        <div [ngStyle]=\"style\" [class]=\"styleClass\" [ngClass]=\"{'p-slider p-component':true,'p-disabled':disabled,\n            'p-slider-horizontal':orientation == 'horizontal','p-slider-vertical':orientation == 'vertical','p-slider-animate':animate}\"\n            (click)=\"onBarClick($event)\">\n            <span *ngIf=\"range && orientation == 'horizontal'\" class=\"p-slider-range\" [ngStyle]=\"{'left':handleValues[0] + '%',width: (handleValues[1] - handleValues[0] + '%')}\"></span>\n            <span *ngIf=\"range && orientation == 'vertical'\" class=\"p-slider-range\" [ngStyle]=\"{'bottom':handleValues[0] + '%',height: (handleValues[1] - handleValues[0] + '%')}\"></span>\n            <span *ngIf=\"!range && orientation=='vertical'\" class=\"p-slider-range\" [ngStyle]=\"{'height': handleValue + '%'}\"></span>\n            <span *ngIf=\"!range && orientation=='horizontal'\" class=\"p-slider-range\" [ngStyle]=\"{'width': handleValue + '%'}\"></span>\n            <span #sliderHandle *ngIf=\"!range\" [attr.tabindex]=\"disabled ? null : tabindex\" (keydown)=\"onHandleKeydown($event)\" class=\"p-slider-handle\" (mousedown)=\"onMouseDown($event)\" (touchstart)=\"onTouchStart($event)\" (touchmove)=\"onTouchMove($event)\" (touchend)=\"onTouchEnd($event)\"\n                [style.transition]=\"dragging ? 'none': null\" [ngStyle]=\"{'left': orientation == 'horizontal' ? handleValue + '%' : null,'bottom': orientation == 'vertical' ? handleValue + '%' : null}\"\n                [attr.aria-valuemin]=\"min\" [attr.aria-valuenow]=\"value\" [attr.aria-valuemax]=\"max\" [attr.aria-labelledby]=\"ariaLabelledBy\"></span>\n            <span #sliderHandleStart *ngIf=\"range\" [attr.tabindex]=\"disabled ? null : tabindex\" (keydown)=\"onHandleKeydown($event,0)\" (mousedown)=\"onMouseDown($event,0)\" (touchstart)=\"onTouchStart($event,0)\" (touchmove)=\"onTouchMove($event,0)\" (touchend)=\"onTouchEnd($event)\" [style.transition]=\"dragging ? 'none': null\" class=\"p-slider-handle\"\n                [ngStyle]=\"{'left': rangeStartLeft, 'bottom': rangeStartBottom}\" [ngClass]=\"{'p-slider-handle-active':handleIndex==0}\"\n                [attr.aria-valuemin]=\"min\" [attr.aria-valuenow]=\"value ? value[0] : null\" [attr.aria-valuemax]=\"max\" [attr.aria-labelledby]=\"ariaLabelledBy\"></span>\n            <span #sliderHandleEnd *ngIf=\"range\" [attr.tabindex]=\"disabled ? null : tabindex\" (keydown)=\"onHandleKeydown($event,1)\" (mousedown)=\"onMouseDown($event,1)\" (touchstart)=\"onTouchStart($event,1)\" (touchmove)=\"onTouchMove($event,1)\" (touchend)=\"onTouchEnd($event)\" [style.transition]=\"dragging ? 'none': null\" class=\"p-slider-handle\"\n                [ngStyle]=\"{'left': rangeEndLeft, 'bottom': rangeEndBottom}\" [ngClass]=\"{'p-slider-handle-active':handleIndex==1}\"\n                [attr.aria-valuemin]=\"min\" [attr.aria-valuenow]=\"value ? value[1] : null\" [attr.aria-valuemax]=\"max\" [attr.aria-labelledby]=\"ariaLabelledBy\"></span>\n        </div>\n    `,\n    providers: [SLIDER_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./slider.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Slider implements OnDestroy,ControlValueAccessor {\n\n    @Input() animate: boolean;\n\n    @Input() disabled: boolean;\n\n    @Input() min: number = 0;\n\n    @Input() max: number = 100;\n\n    @Input() orientation: string = 'horizontal';\n\n    @Input() step: number;\n\n    @Input() range: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() tabindex: number = 0;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSlideEnd: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild(\"sliderHandle\") sliderHandle: ElementRef;\n\n    @ViewChild(\"sliderHandleStart\") sliderHandleStart: ElementRef;\n\n    @ViewChild(\"sliderHandleEnd\") sliderHandleEnd: ElementRef;\n\n    public value: number;\n\n    public values: number[];\n\n    public handleValue: number;\n\n    public handleValues: number[] = [];\n\n    public onModelChange: Function = () => {};\n\n    public onModelTouched: Function = () => {};\n\n    public dragging: boolean;\n\n    public dragListener: any;\n\n    public mouseupListener: any;\n\n    public initX: number;\n\n    public initY: number;\n\n    public barWidth: number;\n\n    public barHeight: number;\n\n    public sliderHandleClick: boolean;\n\n    public handleIndex: number = 0;\n\n    public startHandleValue: any;\n\n    public startx: number;\n\n    public starty: number;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, private ngZone: NgZone, public cd: ChangeDetectorRef) {}\n\n    onMouseDown(event, index?:number) {\n        if (this.disabled) {\n            return;\n        }\n\n        this.dragging = true;\n        this.updateDomData();\n        this.sliderHandleClick = true;\n        if (this.range && this.handleValues && this.handleValues[0] === this.max) {\n            this.handleIndex = 0;\n        }\n        else {\n            this.handleIndex = index;\n        }\n\n        this.bindDragListeners();\n        event.target.focus();\n        event.preventDefault();\n\n        if (this.animate) {\n            DomHandler.removeClass(this.el.nativeElement.children[0], 'p-slider-animate');\n        }\n    }\n\n    onTouchStart(event, index?:number) {\n        if (this.disabled) {\n            return;\n        }\n\n        var touchobj = event.changedTouches[0];\n        this.startHandleValue = (this.range) ? this.handleValues[index] : this.handleValue;\n        this.dragging = true;\n        if (this.range && this.handleValues && this.handleValues[0] === this.max) {\n            this.handleIndex = 0;\n        }\n        else {\n            this.handleIndex = index;\n        }\n\n        if (this.orientation === 'horizontal') {\n            this.startx = parseInt(touchobj.clientX, 10);\n            this.barWidth = this.el.nativeElement.children[0].offsetWidth;\n        }\n        else {\n            this.starty = parseInt(touchobj.clientY, 10);\n            this.barHeight = this.el.nativeElement.children[0].offsetHeight;\n        }\n\n        if (this.animate) {\n            DomHandler.removeClass(this.el.nativeElement.children[0], 'p-slider-animate');\n        }\n\n        event.preventDefault();\n    }\n\n    onTouchMove(event, index?:number) {\n        if (this.disabled) {\n            return;\n        }\n\n        var touchobj = event.changedTouches[0],\n        handleValue = 0;\n\n        if (this.orientation === 'horizontal') {\n            handleValue = Math.floor(((parseInt(touchobj.clientX, 10) - this.startx) * 100) / (this.barWidth)) + this.startHandleValue;\n        }\n        else {\n            handleValue = Math.floor(((this.starty - parseInt(touchobj.clientY, 10)) * 100) / (this.barHeight))  + this.startHandleValue;\n        }\n\n        this.setValueFromHandle(event, handleValue);\n\n        event.preventDefault();\n    }\n\n    onTouchEnd(event, index?:number) {\n        if (this.disabled) {\n            return;\n        }\n\n        this.dragging = false;\n\n        if (this.range)\n            this.onSlideEnd.emit({originalEvent: event, values: this.values});\n        else\n            this.onSlideEnd.emit({originalEvent: event, value: this.value});\n\n        if (this.animate) {\n            DomHandler.addClass(this.el.nativeElement.children[0], 'p-slider-animate');\n        }\n\n        event.preventDefault();\n    }\n\n    onBarClick(event) {\n        if (this.disabled) {\n            return;\n        }\n\n        if (!this.sliderHandleClick) {\n            this.updateDomData();\n            this.handleChange(event);\n        }\n\n        this.sliderHandleClick = false;\n    }\n\n    onHandleKeydown(event, handleIndex?:number) {\n        if (this.disabled) {\n            return;\n        }\n        if (event.which == 38 || event.which == 39) {\n            this.spin(event, 1, handleIndex);\n        }\n        else if (event.which == 37 || event.which == 40) {\n            this.spin(event, -1, handleIndex);\n        }\n    }\n\n    spin(event, dir: number, handleIndex?:number) {\n        let step = (this.step || 1) * dir;\n\n        if (this.range) {\n            this.handleIndex = handleIndex;\n            this.updateValue(this.values[this.handleIndex] + step);\n            this.updateHandleValue();\n        }\n        else {\n            this.updateValue(this.value + step);\n            this.updateHandleValue();\n        }\n\n        event.preventDefault();\n    }\n\n    handleChange(event: Event) {\n        let handleValue = this.calculateHandleValue(event);\n        this.setValueFromHandle(event, handleValue);\n    }\n\n    bindDragListeners() {\n        this.ngZone.runOutsideAngular(() => {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            if (!this.dragListener) {\n                this.dragListener = this.renderer.listen(documentTarget, 'mousemove', (event) => {\n                    if (this.dragging) {\n                        this.ngZone.run(() => {\n                            this.handleChange(event);\n                        });\n                    }\n                });\n            }\n\n            if (!this.mouseupListener) {\n                this.mouseupListener = this.renderer.listen(documentTarget, 'mouseup', (event) => {\n                    if (this.dragging) {\n                        this.dragging = false;\n                        this.ngZone.run(() => {\n                            if (this.range)\n                                this.onSlideEnd.emit({originalEvent: event, values: this.values});\n                            else\n                                this.onSlideEnd.emit({originalEvent: event, value: this.value});\n\n                            if (this.animate) {\n                                DomHandler.addClass(this.el.nativeElement.children[0], 'p-slider-animate');\n                            }\n                        });\n                    }\n                });\n            }\n        });\n    }\n\n    unbindDragListeners() {\n        if (this.dragListener) {\n            this.dragListener();\n        }\n\n        if (this.mouseupListener) {\n            this.mouseupListener();\n        }\n    }\n\n    setValueFromHandle(event: Event, handleValue: any) {\n        this.sliderHandleClick = false;\n        let newValue = this.getValueFromHandle(handleValue);\n\n        if (this.range) {\n            if (this.step) {\n                this.handleStepChange(newValue, this.values[this.handleIndex]);\n            }\n            else {\n                this.handleValues[this.handleIndex] = handleValue;\n                this.updateValue(newValue, event);\n            }\n        }\n        else {\n            if (this.step) {\n                this.handleStepChange(newValue, this.value);\n            }\n            else {\n                this.handleValue = handleValue;\n                this.updateValue(newValue, event);\n            }\n        }\n\n        this.cd.markForCheck();\n    }\n\n    handleStepChange(newValue: number, oldValue: number) {\n        let diff = (newValue - oldValue);\n        let val = oldValue;\n\n        if (diff < 0) {\n            val = oldValue + Math.ceil(newValue / this.step - oldValue / this.step) * this.step;\n        }\n        else if (diff > 0) {\n            val = oldValue + Math.floor(newValue / this.step - oldValue / this.step) * this.step;\n        }\n\n        this.updateValue(val);\n        this.updateHandleValue();\n    }\n\n    writeValue(value: any) : void {\n        if (this.range)\n            this.values = value||[0,0];\n        else\n            this.value = value||0;\n\n        this.updateHandleValue();\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    get rangeStartLeft() {\n        return this.isVertical() ? 'auto' : this.handleValues[0] + '%';\n    }\n\n    get rangeStartBottom() {\n        return this.isVertical() ? this.handleValues[0] + '%' : 'auto';\n    }\n\n    get rangeEndLeft() {\n        return this.isVertical() ? 'auto' : this.handleValues[1] + '%';\n    }\n\n    get rangeEndBottom() {\n        return this.isVertical() ? this.handleValues[1] + '%' : 'auto';\n    }\n\n    isVertical(): boolean {\n        return this.orientation === 'vertical';\n    }\n\n    updateDomData(): void {\n        let rect = this.el.nativeElement.children[0].getBoundingClientRect();\n        this.initX = rect.left + DomHandler.getWindowScrollLeft();\n        this.initY = rect.top + DomHandler.getWindowScrollTop();\n        this.barWidth = this.el.nativeElement.children[0].offsetWidth;\n        this.barHeight = this.el.nativeElement.children[0].offsetHeight;\n    }\n\n    calculateHandleValue(event): number {\n        if (this.orientation === 'horizontal')\n            return ((event.pageX - this.initX) * 100) / (this.barWidth);\n        else\n            return(((this.initY + this.barHeight) - event.pageY) * 100) / (this.barHeight);\n    }\n\n    updateHandleValue(): void {\n        if (this.range) {\n            this.handleValues[0] = (this.values[0] < this.min ? 0 : this.values[0] - this.min) * 100 / (this.max - this.min);\n            this.handleValues[1] = (this.values[1] > this.max ? 100 : this.values[1] - this.min) * 100 / (this.max - this.min);\n        }\n        else {\n            if (this.value < this.min)\n                this.handleValue = 0;\n            else if (this.value > this.max)\n                this.handleValue = 100;\n            else\n                this.handleValue = (this.value - this.min) * 100 / (this.max - this.min);\n        }\n    }\n\n    updateValue(val: number, event?: Event): void {\n        if (this.range) {\n            let value = val;\n\n            if (this.handleIndex == 0) {\n                if (value < this.min) {\n                    value = this.min;\n                    this.handleValues[0] = 0;\n                }\n                else if (value > this.values[1]) {\n                    value = this.values[1];\n                    this.handleValues[0] = this.handleValues[1];\n                }\n\n                this.sliderHandleStart.nativeElement.focus();\n            }\n            else {\n                if (value > this.max) {\n                    value = this.max;\n                    this.handleValues[1] = 100;\n                }\n                else if (value < this.values[0]) {\n                    value = this.values[0];\n                    this.handleValues[1] = this.handleValues[0];\n                }\n\n                this.sliderHandleEnd.nativeElement.focus();\n            }\n\n            this.values[this.handleIndex] = this.getNormalizedValue(value);\n            this.values = this.values.slice();\n            this.onModelChange(this.values);\n            this.onChange.emit({event: event, values: this.values});\n        }\n        else {\n            if (val < this.min) {\n                val = this.min;\n                this.handleValue = 0;\n            }\n            else if (val > this.max) {\n                val = this.max;\n                this.handleValue = 100;\n            }\n\n\t\t\tthis.value = this.getNormalizedValue(val);\n\n            this.onModelChange(this.value);\n            this.onChange.emit({event: event, value: this.value});\n            this.sliderHandle.nativeElement.focus();\n        }\n    }\n\n    getValueFromHandle(handleValue: number): number {\n        return (this.max - this.min) * (handleValue / 100) + this.min;\n    }\n\n\tgetDecimalsCount(value: number): number {\n\t\tif (value && Math.floor(value) !== value)\n\t\t\treturn value.toString().split(\".\")[1].length || 0;\n\t\treturn 0;\n\t}\n\n\tgetNormalizedValue(val: number): number {\n\t\tlet decimalsCount = this.getDecimalsCount(this.step);\n\t\tif (decimalsCount > 0) {\n\t\t\treturn +val.toFixed(decimalsCount);\n\t\t}\n\t\telse {\n\t\t\treturn Math.floor(val);\n\t\t}\n\t}\n\n    ngOnDestroy() {\n        this.unbindDragListeners();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Slider],\n    declarations: [Slider]\n})\nexport class SliderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-speeddial.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-speeddial.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-speeddial.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,338 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i3 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i4 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+import { DomHandler } from 'primeng/dom';
+import * as i5 from '@angular/router';
+import { RouterModule } from '@angular/router';
+
+class SpeedDial {
+    constructor(el, cd) {
+        this.el = el;
+        this.cd = cd;
+        this.model = null;
+        this.direction = 'up';
+        this.transitionDelay = 30;
+        this.type = 'linear';
+        this.radius = 0;
+        this.mask = false;
+        this.disabled = false;
+        this.hideOnClickOutside = true;
+        this.showIcon = 'pi pi-plus';
+        this.rotateAnimation = true;
+        this.onVisibleChange = new EventEmitter();
+        this.visibleChange = new EventEmitter();
+        this.onClick = new EventEmitter();
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.isItemClicked = false;
+        this._visible = false;
+    }
+    get visible() {
+        return this._visible;
+    }
+    set visible(value) {
+        this._visible = value;
+        if (this._visible) {
+            this.bindDocumentClickListener();
+        }
+        else {
+            this.unbindDocumentClickListener();
+        }
+    }
+    ngAfterViewInit() {
+        if (this.type !== 'linear') {
+            const button = DomHandler.findSingle(this.container.nativeElement, '.p-speeddial-button');
+            const firstItem = DomHandler.findSingle(this.list.nativeElement, '.p-speeddial-item');
+            if (button && firstItem) {
+                const wDiff = Math.abs(button.offsetWidth - firstItem.offsetWidth);
+                const hDiff = Math.abs(button.offsetHeight - firstItem.offsetHeight);
+                this.list.nativeElement.style.setProperty('--item-diff-x', `${wDiff / 2}px`);
+                this.list.nativeElement.style.setProperty('--item-diff-y', `${hDiff / 2}px`);
+            }
+        }
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'button':
+                    this.buttonTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    show() {
+        this.onVisibleChange.emit(true);
+        this.visibleChange.emit(true);
+        this._visible = true;
+        this.onShow.emit();
+        this.bindDocumentClickListener();
+        this.cd.markForCheck();
+    }
+    hide() {
+        this.onVisibleChange.emit(false);
+        this.visibleChange.emit(false);
+        this._visible = false;
+        this.onHide.emit();
+        this.unbindDocumentClickListener();
+        this.cd.markForCheck();
+    }
+    onButtonClick(event) {
+        this.visible ? this.hide() : this.show();
+        this.onClick.emit(event);
+        this.isItemClicked = true;
+    }
+    onItemClick(e, item) {
+        if (item.command) {
+            item.command({ originalEvent: e, item });
+        }
+        this.hide();
+        this.isItemClicked = true;
+    }
+    calculatePointStyle(index) {
+        const type = this.type;
+        if (type !== 'linear') {
+            const length = this.model.length;
+            const radius = this.radius || (length * 20);
+            if (type === 'circle') {
+                const step = 2 * Math.PI / length;
+                return {
+                    left: `calc(${radius * Math.cos(step * index)}px + var(--item-diff-x, 0px))`,
+                    top: `calc(${radius * Math.sin(step * index)}px + var(--item-diff-y, 0px))`,
+                };
+            }
+            else if (type === 'semi-circle') {
+                const direction = this.direction;
+                const step = Math.PI / (length - 1);
+                const x = `calc(${radius * Math.cos(step * index)}px + var(--item-diff-x, 0px))`;
+                const y = `calc(${radius * Math.sin(step * index)}px + var(--item-diff-y, 0px))`;
+                if (direction === 'up') {
+                    return { left: x, bottom: y };
+                }
+                else if (direction === 'down') {
+                    return { left: x, top: y };
+                }
+                else if (direction === 'left') {
+                    return { right: y, top: x };
+                }
+                else if (direction === 'right') {
+                    return { left: y, top: x };
+                }
+            }
+            else if (type === 'quarter-circle') {
+                const direction = this.direction;
+                const step = Math.PI / (2 * (length - 1));
+                const x = `calc(${radius * Math.cos(step * index)}px + var(--item-diff-x, 0px))`;
+                const y = `calc(${radius * Math.sin(step * index)}px + var(--item-diff-y, 0px))`;
+                if (direction === 'up-left') {
+                    return { right: x, bottom: y };
+                }
+                else if (direction === 'up-right') {
+                    return { left: x, bottom: y };
+                }
+                else if (direction === 'down-left') {
+                    return { right: y, top: x };
+                }
+                else if (direction === 'down-right') {
+                    return { left: y, top: x };
+                }
+            }
+        }
+        return {};
+    }
+    calculateTransitionDelay(index) {
+        const length = this.model.length;
+        return (this.visible ? index : length - index - 1) * this.transitionDelay;
+    }
+    containerClass() {
+        return {
+            ['p-speeddial p-component' + ` p-speeddial-${this.type}`]: true,
+            [`p-speeddial-direction-${this.direction}`]: this.type !== 'circle',
+            'p-speeddial-opened': this.visible,
+            'p-disabled': this.disabled
+        };
+    }
+    buttonClass() {
+        return {
+            'p-speeddial-button p-button-rounded': true,
+            'p-speeddial-rotate': this.rotateAnimation && !this.hideIcon,
+            [this.buttonClassName]: true
+        };
+    }
+    get buttonIconClass() {
+        return ((!this.visible && this.showIcon) || !this.hideIcon) ? this.showIcon : this.hideIcon;
+    }
+    getItemStyle(index) {
+        const transitionDelay = this.calculateTransitionDelay(index);
+        const pointStyle = this.calculatePointStyle(index);
+        return {
+            transitionDelay: `${transitionDelay}ms`,
+            ...pointStyle
+        };
+    }
+    isClickableRouterLink(item) {
+        return item.routerLink && !this.disabled && !item.disabled;
+    }
+    isOutsideClicked(event) {
+        return this.container && !(this.container.nativeElement.isSameNode(event.target) || this.container.nativeElement.contains(event.target) || this.isItemClicked);
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener && this.hideOnClickOutside) {
+            this.documentClickListener = (event) => {
+                if (this.visible && this.isOutsideClicked(event)) {
+                    this.hide();
+                }
+                this.isItemClicked = false;
+            };
+            document.addEventListener('click', this.documentClickListener);
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            document.removeEventListener('click', this.documentClickListener);
+            this.documentClickListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.unbindDocumentClickListener();
+    }
+}
+SpeedDial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpeedDial, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+SpeedDial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: SpeedDial, selector: "p-speedDial", inputs: { id: "id", model: "model", visible: "visible", style: "style", className: "className", direction: "direction", transitionDelay: "transitionDelay", type: "type", radius: "radius", mask: "mask", disabled: "disabled", hideOnClickOutside: "hideOnClickOutside", buttonStyle: "buttonStyle", buttonClassName: "buttonClassName", maskStyle: "maskStyle", maskClassName: "maskClassName", showIcon: "showIcon", hideIcon: "hideIcon", rotateAnimation: "rotateAnimation" }, outputs: { onVisibleChange: "onVisibleChange", visibleChange: "visibleChange", onClick: "onClick", onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true }], ngImport: i0, template: `
+        <div #container [attr.id]="id" [ngClass]="containerClass()" [class]="className" [ngStyle]="style">
+            <button pRipple pButton [style]="buttonStyle" [icon]="buttonIconClass" [ngClass]="buttonClass()" (click)="onButtonClick($event)">
+                <ng-container *ngIf="buttonTemplate">
+                    <ng-container *ngTemplateOutlet="buttonTemplate"></ng-container>
+                </ng-container>
+            </button>
+            <ul #list class="p-speeddial-list" role="menu">
+                <li *ngFor="let item of model; let i = index" [ngStyle]="getItemStyle(i)" class="p-speeddial-item" pTooltip [tooltipOptions]="item.tooltipOptions">
+                    <a *ngIf="isClickableRouterLink(item); else elseBlock" pRipple [routerLink]="item.routerLink" [queryParams]="item.queryParams" class="p-speeddial-action" [ngClass]="{'p-disabled':item.disabled}"  role="menuitem" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" (click)="onItemClick($event, item)" (keydown.enter)="onItemClick($event, item, i)"
+                        [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')"
+                        [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                            <span class="p-speeddial-action-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+                    </a>
+                    <ng-template #elseBlock>
+                        <a [attr.href]="item.url||null" class="p-speeddial-action" role="menuitem" pRipple (click)="onItemClick($event, item)" [ngClass]="{'p-disabled':item.disabled}"
+                            (keydown.enter)="onItemClick($event, item, i)" [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')">
+                            <span class="p-speeddial-action-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+                        </a>
+                    </ng-template>
+                </li>
+            </ul>
+        </div>
+        <div *ngIf="mask && visible" [ngClass]="{'p-speeddial-mask': true, 'p-speeddial-mask-visible': visible}" [class]="maskClassName" [ngStyle]="maskStyle"></div>
+    `, isInline: true, styles: [".p-speeddial{position:absolute;display:flex;z-index:1}.p-speeddial-list{margin:0;padding:0;list-style:none;display:flex;align-items:center;justify-content:center;transition:top 0s linear .2s;pointer-events:none}.p-speeddial-item{transform:scale(0);opacity:0;transition:transform .2s cubic-bezier(.4,0,.2,1) 0ms,opacity .8s;will-change:transform}.p-speeddial-action{display:flex;align-items:center;justify-content:center;border-radius:50%;position:relative;overflow:hidden;cursor:pointer}.p-speeddial-circle .p-speeddial-item,.p-speeddial-semi-circle .p-speeddial-item,.p-speeddial-quarter-circle .p-speeddial-item{position:absolute}.p-speeddial-rotate{transition:transform .25s cubic-bezier(.4,0,.2,1) 0ms;will-change:transform}.p-speeddial-mask{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;transition:opacity .25s cubic-bezier(.25,.8,.25,1)}.p-speeddial-mask-visible{pointer-events:none;opacity:1;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}.p-speeddial-opened .p-speeddial-list{pointer-events:auto}.p-speeddial-opened .p-speeddial-item{transform:scale(1);opacity:1}.p-speeddial-opened .p-speeddial-rotate{transform:rotate(45deg)}.p-speeddial-direction-up{align-items:center;flex-direction:column-reverse}.p-speeddial-direction-up .p-speeddial-list{flex-direction:column-reverse}.p-speeddial-direction-down{align-items:center;flex-direction:column}.p-speeddial-direction-down .p-speeddial-list{flex-direction:column}.p-speeddial-direction-left{justify-content:center;flex-direction:row-reverse}.p-speeddial-direction-left .p-speeddial-list{flex-direction:row-reverse}.p-speeddial-direction-right{justify-content:center;flex-direction:row}.p-speeddial-direction-right .p-speeddial-list{flex-direction:row}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.Ripple, selector: "[pRipple]" }, { type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i5.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpeedDial, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-speedDial', template: `
+        <div #container [attr.id]="id" [ngClass]="containerClass()" [class]="className" [ngStyle]="style">
+            <button pRipple pButton [style]="buttonStyle" [icon]="buttonIconClass" [ngClass]="buttonClass()" (click)="onButtonClick($event)">
+                <ng-container *ngIf="buttonTemplate">
+                    <ng-container *ngTemplateOutlet="buttonTemplate"></ng-container>
+                </ng-container>
+            </button>
+            <ul #list class="p-speeddial-list" role="menu">
+                <li *ngFor="let item of model; let i = index" [ngStyle]="getItemStyle(i)" class="p-speeddial-item" pTooltip [tooltipOptions]="item.tooltipOptions">
+                    <a *ngIf="isClickableRouterLink(item); else elseBlock" pRipple [routerLink]="item.routerLink" [queryParams]="item.queryParams" class="p-speeddial-action" [ngClass]="{'p-disabled':item.disabled}"  role="menuitem" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" (click)="onItemClick($event, item)" (keydown.enter)="onItemClick($event, item, i)"
+                        [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')"
+                        [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                            <span class="p-speeddial-action-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+                    </a>
+                    <ng-template #elseBlock>
+                        <a [attr.href]="item.url||null" class="p-speeddial-action" role="menuitem" pRipple (click)="onItemClick($event, item)" [ngClass]="{'p-disabled':item.disabled}"
+                            (keydown.enter)="onItemClick($event, item, i)" [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')">
+                            <span class="p-speeddial-action-icon" *ngIf="item.icon" [ngClass]="item.icon"></span>
+                        </a>
+                    </ng-template>
+                </li>
+            </ul>
+        </div>
+        <div *ngIf="mask && visible" [ngClass]="{'p-speeddial-mask': true, 'p-speeddial-mask-visible': visible}" [class]="maskClassName" [ngStyle]="maskStyle"></div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-speeddial{position:absolute;display:flex;z-index:1}.p-speeddial-list{margin:0;padding:0;list-style:none;display:flex;align-items:center;justify-content:center;transition:top 0s linear .2s;pointer-events:none}.p-speeddial-item{transform:scale(0);opacity:0;transition:transform .2s cubic-bezier(.4,0,.2,1) 0ms,opacity .8s;will-change:transform}.p-speeddial-action{display:flex;align-items:center;justify-content:center;border-radius:50%;position:relative;overflow:hidden;cursor:pointer}.p-speeddial-circle .p-speeddial-item,.p-speeddial-semi-circle .p-speeddial-item,.p-speeddial-quarter-circle .p-speeddial-item{position:absolute}.p-speeddial-rotate{transition:transform .25s cubic-bezier(.4,0,.2,1) 0ms;will-change:transform}.p-speeddial-mask{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;transition:opacity .25s cubic-bezier(.25,.8,.25,1)}.p-speeddial-mask-visible{pointer-events:none;opacity:1;transition:opacity .4s cubic-bezier(.25,.8,.25,1)}.p-speeddial-opened .p-speeddial-list{pointer-events:auto}.p-speeddial-opened .p-speeddial-item{transform:scale(1);opacity:1}.p-speeddial-opened .p-speeddial-rotate{transform:rotate(45deg)}.p-speeddial-direction-up{align-items:center;flex-direction:column-reverse}.p-speeddial-direction-up .p-speeddial-list{flex-direction:column-reverse}.p-speeddial-direction-down{align-items:center;flex-direction:column}.p-speeddial-direction-down .p-speeddial-list{flex-direction:column}.p-speeddial-direction-left{justify-content:center;flex-direction:row-reverse}.p-speeddial-direction-left .p-speeddial-list{flex-direction:row-reverse}.p-speeddial-direction-right{justify-content:center;flex-direction:row}.p-speeddial-direction-right .p-speeddial-list{flex-direction:row}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
+                type: Input
+            }], model: [{
+                type: Input
+            }], visible: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], className: [{
+                type: Input
+            }], direction: [{
+                type: Input
+            }], transitionDelay: [{
+                type: Input
+            }], type: [{
+                type: Input
+            }], radius: [{
+                type: Input
+            }], mask: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], hideOnClickOutside: [{
+                type: Input
+            }], buttonStyle: [{
+                type: Input
+            }], buttonClassName: [{
+                type: Input
+            }], maskStyle: [{
+                type: Input
+            }], maskClassName: [{
+                type: Input
+            }], showIcon: [{
+                type: Input
+            }], hideIcon: [{
+                type: Input
+            }], rotateAnimation: [{
+                type: Input
+            }], onVisibleChange: [{
+                type: Output
+            }], visibleChange: [{
+                type: Output
+            }], onClick: [{
+                type: Output
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], container: [{
+                type: ViewChild,
+                args: ['container']
+            }], list: [{
+                type: ViewChild,
+                args: ['list']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class SpeedDialModule {
+}
+SpeedDialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpeedDialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SpeedDialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpeedDialModule, declarations: [SpeedDial], imports: [CommonModule, ButtonModule, RippleModule, TooltipModule, RouterModule], exports: [SpeedDial, SharedModule, ButtonModule, TooltipModule, RouterModule] });
+SpeedDialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpeedDialModule, imports: [[CommonModule, ButtonModule, RippleModule, TooltipModule, RouterModule], SharedModule, ButtonModule, TooltipModule, RouterModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpeedDialModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ButtonModule, RippleModule, TooltipModule, RouterModule],
+                    exports: [SpeedDial, SharedModule, ButtonModule, TooltipModule, RouterModule],
+                    declarations: [SpeedDial]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { SpeedDial, SpeedDialModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-speeddial.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-speeddial.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-speeddial.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-speeddial.mjs","sources":["../../src/app/components/speeddial/speeddial.ts","../../src/app/components/speeddial/primeng-speeddial.ts"],"sourcesContent":["import { NgModule, Component, Input, ElementRef, ChangeDetectionStrategy, ViewEncapsulation, TemplateRef, AfterContentInit, ContentChildren, QueryList, Output, EventEmitter, ChangeDetectorRef, ViewChild, OnDestroy, OnInit, AfterViewInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule, PrimeTemplate, MenuItem } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DomHandler } from 'primeng/dom';\nimport { RouterModule } from '@angular/router';\n\n@Component({\n    selector: 'p-speedDial',\n    template: `\n        <div #container [attr.id]=\"id\" [ngClass]=\"containerClass()\" [class]=\"className\" [ngStyle]=\"style\">\n            <button pRipple pButton [style]=\"buttonStyle\" [icon]=\"buttonIconClass\" [ngClass]=\"buttonClass()\" (click)=\"onButtonClick($event)\">\n                <ng-container *ngIf=\"buttonTemplate\">\n                    <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n                </ng-container>\n            </button>\n            <ul #list class=\"p-speeddial-list\" role=\"menu\">\n                <li *ngFor=\"let item of model; let i = index\" [ngStyle]=\"getItemStyle(i)\" class=\"p-speeddial-item\" pTooltip [tooltipOptions]=\"item.tooltipOptions\">\n                    <a *ngIf=\"isClickableRouterLink(item); else elseBlock\" pRipple [routerLink]=\"item.routerLink\" [queryParams]=\"item.queryParams\" class=\"p-speeddial-action\" [ngClass]=\"{'p-disabled':item.disabled}\"  role=\"menuitem\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{exact:false}\" (click)=\"onItemClick($event, item)\" (keydown.enter)=\"onItemClick($event, item, i)\"\n                        [attr.target]=\"item.target\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')\"\n                        [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\" [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\">\n                            <span class=\"p-speeddial-action-icon\" *ngIf=\"item.icon\" [ngClass]=\"item.icon\"></span>\n                    </a>\n                    <ng-template #elseBlock>\n                        <a [attr.href]=\"item.url||null\" class=\"p-speeddial-action\" role=\"menuitem\" pRipple (click)=\"onItemClick($event, item)\" [ngClass]=\"{'p-disabled':item.disabled}\"\n                            (keydown.enter)=\"onItemClick($event, item, i)\" [attr.target]=\"item.target\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')\">\n                            <span class=\"p-speeddial-action-icon\" *ngIf=\"item.icon\" [ngClass]=\"item.icon\"></span>\n                        </a>\n                    </ng-template>\n                </li>\n            </ul>\n        </div>\n        <div *ngIf=\"mask && visible\" [ngClass]=\"{'p-speeddial-mask': true, 'p-speeddial-mask-visible': visible}\" [class]=\"maskClassName\" [ngStyle]=\"maskStyle\"></div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./speeddial.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class SpeedDial implements AfterViewInit, AfterContentInit, OnDestroy {\n\n    @Input() id: string;\n\n    @Input() model: any[] = null;\n\n    @Input() get visible(): any {\n        return this._visible;\n    }\n    set visible(value:any) {\n        this._visible = value;\n\n        if (this._visible) {\n            this.bindDocumentClickListener();\n        }\n        else {\n            this.unbindDocumentClickListener();\n        }\n    }\n\n    @Input() style: any;\n\n    @Input() className: string;\n\n    @Input() direction: string =  'up'\n\n    @Input() transitionDelay: number = 30;\n\n    @Input() type: string =  'linear'\n\n    @Input() radius: number = 0;\n\n    @Input() mask: boolean = false;\n\n    @Input() disabled: boolean = false;\n\n    @Input() hideOnClickOutside: boolean = true;\n\n    @Input() buttonStyle: any;\n\n    @Input() buttonClassName: string;\n\n    @Input() maskStyle: any;\n\n    @Input() maskClassName: string;\n\n    @Input() showIcon: string = 'pi pi-plus';\n\n    @Input() hideIcon: string;\n\n    @Input() rotateAnimation: boolean = true;\n\n    @Output() onVisibleChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() visibleChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('container') container: ElementRef;\n\n    @ViewChild('list') list: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    buttonTemplate: TemplateRef<any>;\n\n    isItemClicked: boolean = false;\n\n    _visible: boolean = false;\n\n    documentClickListener: any;\n\n    constructor(private el: ElementRef, public cd: ChangeDetectorRef) { }\n\n    ngAfterViewInit() {\n        if (this.type !== 'linear') {\n            const button = DomHandler.findSingle(this.container.nativeElement, '.p-speeddial-button');\n            const firstItem = DomHandler.findSingle(this.list.nativeElement, '.p-speeddial-item');\n\n            if (button && firstItem) {\n                const wDiff = Math.abs(button.offsetWidth - firstItem.offsetWidth);\n                const hDiff = Math.abs(button.offsetHeight - firstItem.offsetHeight);\n                this.list.nativeElement.style.setProperty('--item-diff-x', `${wDiff / 2}px`);\n                this.list.nativeElement.style.setProperty('--item-diff-y', `${hDiff / 2}px`);\n            }\n        }\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'button':\n                    this.buttonTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    show() {\n        this.onVisibleChange.emit(true);\n        this.visibleChange.emit(true);\n        this._visible = true;\n        this.onShow.emit();\n        this.bindDocumentClickListener();\n        this.cd.markForCheck();\n    }\n\n    hide() {\n        this.onVisibleChange.emit(false);\n        this.visibleChange.emit(false);\n        this._visible = false;\n        this.onHide.emit();\n        this.unbindDocumentClickListener();\n        this.cd.markForCheck();\n    }\n\n    onButtonClick(event) {\n        this.visible ? this.hide() : this.show();\n        this.onClick.emit(event)\n        this.isItemClicked = true;\n    }\n\n    onItemClick(e, item) {\n        if (item.command) {\n            item.command({ originalEvent: e, item });\n        }\n\n        this.hide();\n\n        this.isItemClicked = true;\n    }\n\n\n    calculatePointStyle(index) {\n        const type = this.type;\n\n        if (type !== 'linear') {\n            const length = this.model.length;\n            const radius = this.radius || (length * 20);\n\n            if (type === 'circle') {\n                const step = 2 * Math.PI / length;\n\n                return {\n                    left: `calc(${radius * Math.cos(step * index)}px + var(--item-diff-x, 0px))`,\n                    top: `calc(${radius * Math.sin(step * index)}px + var(--item-diff-y, 0px))`,\n                }\n            }\n            else if (type === 'semi-circle') {\n                const direction = this.direction;\n                const step = Math.PI / (length - 1);\n                const x = `calc(${radius * Math.cos(step * index)}px + var(--item-diff-x, 0px))`;\n                const y = `calc(${radius * Math.sin(step * index)}px + var(--item-diff-y, 0px))`;\n                if (direction === 'up') {\n                    return { left: x, bottom: y };\n                }\n                else if (direction === 'down') {\n                    return { left: x, top: y };\n                }\n                else if (direction === 'left') {\n                    return { right: y, top: x };\n                }\n                else if (direction === 'right') {\n                    return { left: y, top: x };\n                }\n            }\n            else if (type === 'quarter-circle') {\n                const direction = this.direction;\n                const step = Math.PI / (2 * (length - 1));\n                const x = `calc(${radius * Math.cos(step * index)}px + var(--item-diff-x, 0px))`;\n                const y = `calc(${radius * Math.sin(step * index)}px + var(--item-diff-y, 0px))`;\n                if (direction === 'up-left') {\n                    return { right: x, bottom: y };\n                }\n                else if (direction === 'up-right') {\n                    return { left: x, bottom: y };\n                }\n                else if (direction === 'down-left') {\n                    return { right: y, top: x };\n                }\n                else if (direction === 'down-right') {\n                    return { left: y, top: x };\n                }\n            }\n        }\n\n        return {};\n    }\n\n    calculateTransitionDelay(index) {\n        const length = this.model.length;\n\n        return (this.visible ? index : length - index - 1) * this.transitionDelay;\n    }\n\n    containerClass() {\n        return {\n            ['p-speeddial p-component' + ` p-speeddial-${this.type}`]: true,\n            [`p-speeddial-direction-${this.direction}`]: this.type !== 'circle',\n            'p-speeddial-opened': this.visible,\n            'p-disabled': this.disabled\n        };\n    }\n\n    buttonClass() {\n        return {\n            'p-speeddial-button p-button-rounded': true,\n            'p-speeddial-rotate': this.rotateAnimation && !this.hideIcon,\n            [this.buttonClassName]: true\n        };\n    }\n\n    get buttonIconClass() {\n        return ((!this.visible && this.showIcon) || !this.hideIcon) ? this.showIcon : this.hideIcon;\n    }\n\n    getItemStyle(index) {\n        const transitionDelay = this.calculateTransitionDelay(index);\n        const pointStyle = this.calculatePointStyle(index);\n        return {\n            transitionDelay: `${transitionDelay}ms`,\n            ...pointStyle\n        };\n    }\n\n    isClickableRouterLink(item: MenuItem) {\n        return item.routerLink && !this.disabled && !item.disabled;\n    }\n\n    isOutsideClicked(event) {\n        return this.container && !(this.container.nativeElement.isSameNode(event.target) || this.container.nativeElement.contains(event.target) || this.isItemClicked);\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener && this.hideOnClickOutside) {\n            this.documentClickListener = (event) => {\n                if (this.visible && this.isOutsideClicked(event)) {\n                    this.hide();\n                }\n\n                this.isItemClicked = false;\n            };\n            document.addEventListener('click', this.documentClickListener);\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            document.removeEventListener('click', this.documentClickListener);\n            this.documentClickListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.unbindDocumentClickListener();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule, ButtonModule, RippleModule, TooltipModule, RouterModule],\n    exports: [SpeedDial, SharedModule, ButtonModule, TooltipModule, RouterModule],\n    declarations: [SpeedDial]\n})\nexport class SpeedDialModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;MA2Ca,SAAS;IA4ElB,YAAoB,EAAc,EAAS,EAAqB;QAA5C,OAAE,GAAF,EAAE,CAAY;QAAS,OAAE,GAAF,EAAE,CAAmB;QAxEvD,UAAK,GAAU,IAAI,CAAC;QAoBpB,cAAS,GAAY,IAAI,CAAA;QAEzB,oBAAe,GAAW,EAAE,CAAC;QAE7B,SAAI,GAAY,QAAQ,CAAA;QAExB,WAAM,GAAW,CAAC,CAAC;QAEnB,SAAI,GAAY,KAAK,CAAC;QAEtB,aAAQ,GAAY,KAAK,CAAC;QAE1B,uBAAkB,GAAY,IAAI,CAAC;QAUnC,aAAQ,GAAW,YAAY,CAAC;QAIhC,oBAAe,GAAY,IAAI,CAAC;QAE/B,oBAAe,GAAsB,IAAI,YAAY,EAAE,CAAC;QAExD,kBAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEtD,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE/C,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAUzD,kBAAa,GAAY,KAAK,CAAC;QAE/B,aAAQ,GAAY,KAAK,CAAC;KAI2C;IAtErE,IAAa,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IACD,IAAI,OAAO,CAAC,KAAS;QACjB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACpC;aACI;YACD,IAAI,CAAC,2BAA2B,EAAE,CAAC;SACtC;KACJ;IA4DD,eAAe;QACX,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACxB,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;YAC1F,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;YAEtF,IAAI,MAAM,IAAI,SAAS,EAAE;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;gBACnE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;gBACrE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC7E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;aAChF;SACJ;KACJ;IAED,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAO,IAAI,CAAC,OAAO,EAAE;gBACjB,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;IAED,IAAI;QACA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,IAAI;QACA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,aAAa,CAAC,KAAK;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC7B;IAED,WAAW,CAAC,CAAC,EAAE,IAAI;QACf,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC5C;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC7B;IAGD,mBAAmB,CAAC,KAAK;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,IAAI,IAAI,KAAK,QAAQ,EAAE;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;YAE5C,IAAI,IAAI,KAAK,QAAQ,EAAE;gBACnB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;gBAElC,OAAO;oBACH,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,+BAA+B;oBAC5E,GAAG,EAAE,QAAQ,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,+BAA+B;iBAC9E,CAAA;aACJ;iBACI,IAAI,IAAI,KAAK,aAAa,EAAE;gBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,QAAQ,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,+BAA+B,CAAC;gBACjF,MAAM,CAAC,GAAG,QAAQ,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,+BAA+B,CAAC;gBACjF,IAAI,SAAS,KAAK,IAAI,EAAE;oBACpB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;iBACjC;qBACI,IAAI,SAAS,KAAK,MAAM,EAAE;oBAC3B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;iBAC9B;qBACI,IAAI,SAAS,KAAK,MAAM,EAAE;oBAC3B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;iBAC/B;qBACI,IAAI,SAAS,KAAK,OAAO,EAAE;oBAC5B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;iBAC9B;aACJ;iBACI,IAAI,IAAI,KAAK,gBAAgB,EAAE;gBAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,QAAQ,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,+BAA+B,CAAC;gBACjF,MAAM,CAAC,GAAG,QAAQ,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,+BAA+B,CAAC;gBACjF,IAAI,SAAS,KAAK,SAAS,EAAE;oBACzB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;iBAClC;qBACI,IAAI,SAAS,KAAK,UAAU,EAAE;oBAC/B,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;iBACjC;qBACI,IAAI,SAAS,KAAK,WAAW,EAAE;oBAChC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;iBAC/B;qBACI,IAAI,SAAS,KAAK,YAAY,EAAE;oBACjC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;iBAC9B;aACJ;SACJ;QAED,OAAO,EAAE,CAAC;KACb;IAED,wBAAwB,CAAC,KAAK;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAEjC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC;KAC7E;IAED,cAAc;QACV,OAAO;YACH,CAAC,yBAAyB,GAAG,gBAAgB,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI;YAC/D,CAAC,yBAAyB,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ;YACnE,oBAAoB,EAAE,IAAI,CAAC,OAAO;YAClC,YAAY,EAAE,IAAI,CAAC,QAAQ;SAC9B,CAAC;KACL;IAED,WAAW;QACP,OAAO;YACH,qCAAqC,EAAE,IAAI;YAC3C,oBAAoB,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5D,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI;SAC/B,CAAC;KACL;IAED,IAAI,eAAe;QACf,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;KAC/F;IAED,YAAY,CAAC,KAAK;QACd,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO;YACH,eAAe,EAAE,GAAG,eAAe,IAAI;YACvC,GAAG,UAAU;SAChB,CAAC;KACL;IAED,qBAAqB,CAAC,IAAc;QAChC,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;KAC9D;IAED,gBAAgB,CAAC,KAAK;QAClB,OAAO,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;KAClK;IAED,yBAAyB;QACrB,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACxD,IAAI,CAAC,qBAAqB,GAAG,CAAC,KAAK;gBAC/B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf;gBAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;aAC9B,CAAC;YACF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;SAClE;KACJ;IAED,2BAA2B;QACvB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAClE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;SACrC;KACJ;IAED,WAAW;QACP,IAAI,CAAC,2BAA2B,EAAE,CAAC;KACtC;;sGAnQQ,SAAS;0FAAT,SAAS,itBAkED,aAAa,oNAlGpB;;;;;;;;;;;;;;;;;;;;;;;;KAwBT;2FAQQ,SAAS;kBAlCrB,SAAS;+BACI,aAAa,YACb;;;;;;;;;;;;;;;;;;;;;;;;KAwBT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;iIAIQ,EAAE;sBAAV,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEO,OAAO;sBAAnB,KAAK;gBAcG,KAAK;sBAAb,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,MAAM;sBAAd,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,kBAAkB;sBAA1B,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEI,eAAe;sBAAxB,MAAM;gBAEG,aAAa;sBAAtB,MAAM;gBAEG,OAAO;sBAAhB,MAAM;gBAEG,MAAM;sBAAf,MAAM;gBAEG,MAAM;sBAAf,MAAM;gBAEiB,SAAS;sBAAhC,SAAS;uBAAC,WAAW;gBAEH,IAAI;sBAAtB,SAAS;uBAAC,MAAM;gBAEe,SAAS;sBAAxC,eAAe;uBAAC,aAAa;;MAyMrB,eAAe;;4GAAf,eAAe;6GAAf,eAAe,iBA3Qf,SAAS,aAuQR,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,aAvQtE,SAAS,EAwQG,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY;6GAGnE,eAAe,YAJf,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC,EAC3D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY;2FAGnE,eAAe;kBAL3B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC;oBAChF,OAAO,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC;oBAC7E,YAAY,EAAE,CAAC,SAAS,CAAC;iBAC5B;;;ACrTD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-spinner.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-spinner.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-spinner.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,337 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Output, Input, ViewChild, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { InputTextModule } from 'primeng/inputtext';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const SPINNER_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => Spinner),
+    multi: true
+};
+class Spinner {
+    constructor(el, cd) {
+        this.el = el;
+        this.cd = cd;
+        this.onChange = new EventEmitter();
+        this.onFocus = new EventEmitter();
+        this.onBlur = new EventEmitter();
+        this._step = 1;
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+        this.keyPattern = /[0-9\+\-]/;
+        this.negativeSeparator = '-';
+    }
+    get step() {
+        return this._step;
+    }
+    set step(val) {
+        this._step = val;
+        if (this._step != null) {
+            let tokens = this.step.toString().split(/[,]|[.]/);
+            this.calculatedPrecision = tokens[1] ? tokens[1].length : undefined;
+        }
+    }
+    ngOnInit() {
+        if (this.formatInput) {
+            this.localeDecimalSeparator = (1.1).toLocaleString().substring(1, 2);
+            this.localeThousandSeparator = (1000).toLocaleString().substring(1, 2);
+            this.thousandRegExp = new RegExp(`[${this.thousandSeparator || this.localeThousandSeparator}]`, 'gim');
+            if (this.decimalSeparator && this.thousandSeparator && this.decimalSeparator === this.thousandSeparator) {
+                console.warn("thousandSeparator and decimalSeparator cannot have the same value.");
+            }
+        }
+    }
+    repeat(event, interval, dir) {
+        let i = interval || 500;
+        this.clearTimer();
+        this.timer = setTimeout(() => {
+            this.repeat(event, 40, dir);
+        }, i);
+        this.spin(event, dir);
+    }
+    spin(event, dir) {
+        let step = this.step * dir;
+        let currentValue;
+        let precision = this.getPrecision();
+        if (this.value)
+            currentValue = (typeof this.value === 'string') ? this.parseValue(this.value) : this.value;
+        else
+            currentValue = 0;
+        if (precision)
+            this.value = parseFloat(this.toFixed(currentValue + step, precision));
+        else
+            this.value = currentValue + step;
+        if (this.maxlength !== undefined && this.value.toString().length > this.maxlength) {
+            this.value = currentValue;
+        }
+        if (this.min !== undefined && this.value < this.min) {
+            this.value = this.min;
+        }
+        if (this.max !== undefined && this.value > this.max) {
+            this.value = this.max;
+        }
+        this.formatValue();
+        this.onModelChange(this.value);
+        this.onChange.emit(event);
+    }
+    getPrecision() {
+        return this.precision === undefined ? this.calculatedPrecision : this.precision;
+    }
+    toFixed(value, precision) {
+        let power = Math.pow(10, precision || 0);
+        return String(Math.round(value * power) / power);
+    }
+    onUpButtonMousedown(event) {
+        if (!this.disabled) {
+            this.inputfieldViewChild.nativeElement.focus();
+            this.repeat(event, null, 1);
+            this.updateFilledState();
+            event.preventDefault();
+        }
+    }
+    onUpButtonMouseup(event) {
+        if (!this.disabled) {
+            this.clearTimer();
+        }
+    }
+    onUpButtonMouseleave(event) {
+        if (!this.disabled) {
+            this.clearTimer();
+        }
+    }
+    onDownButtonMousedown(event) {
+        if (!this.disabled) {
+            this.inputfieldViewChild.nativeElement.focus();
+            this.repeat(event, null, -1);
+            this.updateFilledState();
+            event.preventDefault();
+        }
+    }
+    onDownButtonMouseup(event) {
+        if (!this.disabled) {
+            this.clearTimer();
+        }
+    }
+    onDownButtonMouseleave(event) {
+        if (!this.disabled) {
+            this.clearTimer();
+        }
+    }
+    onInputKeydown(event) {
+        if (event.which == 38) {
+            this.spin(event, 1);
+            event.preventDefault();
+        }
+        else if (event.which == 40) {
+            this.spin(event, -1);
+            event.preventDefault();
+        }
+    }
+    onInputChange(event) {
+        this.onChange.emit(event);
+    }
+    onInput(event) {
+        this.value = this.parseValue(event.target.value);
+        this.onModelChange(this.value);
+        this.updateFilledState();
+    }
+    onInputBlur(event) {
+        this.focus = false;
+        this.formatValue();
+        this.onModelTouched();
+        this.onBlur.emit(event);
+    }
+    onInputFocus(event) {
+        this.focus = true;
+        this.onFocus.emit(event);
+    }
+    parseValue(val) {
+        let value;
+        let precision = this.getPrecision();
+        if (val.trim() === '') {
+            value = null;
+        }
+        else {
+            if (this.formatInput) {
+                val = val.replace(this.thousandRegExp, '');
+            }
+            if (precision) {
+                val = this.formatInput ? val.replace(this.decimalSeparator || this.localeDecimalSeparator, '.') : val.replace(',', '.');
+                value = parseFloat(val);
+            }
+            else {
+                value = parseInt(val, 10);
+            }
+            if (!isNaN(value)) {
+                if (this.max !== null && value > this.max) {
+                    value = this.max;
+                }
+                if (this.min !== null && value < this.min) {
+                    value = this.min;
+                }
+            }
+            else {
+                value = null;
+            }
+        }
+        return value;
+    }
+    formatValue() {
+        let value = this.value;
+        let precision = this.getPrecision();
+        if (value != null) {
+            if (this.formatInput) {
+                value = value.toLocaleString(undefined, { maximumFractionDigits: 20 });
+                if (this.decimalSeparator && this.thousandSeparator) {
+                    value = value.split(this.localeDecimalSeparator);
+                    if (precision && value[1]) {
+                        value[1] = (this.decimalSeparator || this.localeDecimalSeparator) + value[1];
+                    }
+                    if (this.thousandSeparator && value[0].length > 3) {
+                        value[0] = value[0].replace(new RegExp(`[${this.localeThousandSeparator}]`, 'gim'), this.thousandSeparator);
+                    }
+                    value = value.join('');
+                }
+            }
+            this.formattedValue = value.toString();
+        }
+        else {
+            this.formattedValue = null;
+        }
+        if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {
+            this.inputfieldViewChild.nativeElement.value = this.formattedValue;
+        }
+    }
+    clearTimer() {
+        if (this.timer) {
+            clearInterval(this.timer);
+        }
+    }
+    writeValue(value) {
+        this.value = value;
+        this.formatValue();
+        this.updateFilledState();
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    updateFilledState() {
+        this.filled = (this.value !== undefined && this.value != null);
+    }
+}
+Spinner.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Spinner, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Spinner.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Spinner, selector: "p-spinner", inputs: { min: "min", max: "max", maxlength: "maxlength", size: "size", placeholder: "placeholder", inputId: "inputId", disabled: "disabled", readonly: "readonly", tabindex: "tabindex", required: "required", name: "name", ariaLabelledBy: "ariaLabelledBy", inputStyle: "inputStyle", inputStyleClass: "inputStyleClass", formatInput: "formatInput", decimalSeparator: "decimalSeparator", thousandSeparator: "thousandSeparator", precision: "precision", step: "step" }, outputs: { onChange: "onChange", onFocus: "onFocus", onBlur: "onBlur" }, host: { properties: { "class.ui-inputwrapper-filled": "filled", "class.ui-inputwrapper-focus": "focus" }, classAttribute: "p-element" }, providers: [SPINNER_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputfieldViewChild", first: true, predicate: ["inputfield"], descendants: true }], ngImport: i0, template: `
+        <span class="ui-spinner ui-widget ui-corner-all">
+            <input #inputfield type="text" [attr.id]="inputId" [value]="formattedValue||null" [attr.name]="name" [attr.aria-valumin]="min" [attr.aria-valuemax]="max" [attr.aria-valuenow]="value" [attr.aria-labelledby]="ariaLabelledBy"
+            [attr.size]="size" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [attr.placeholder]="placeholder" [disabled]="disabled" [readonly]="readonly" [attr.required]="required"
+            (keydown)="onInputKeydown($event)" (blur)="onInputBlur($event)" (input)="onInput($event)" (change)="onInputChange($event)" (focus)="onInputFocus($event)"
+            [ngStyle]="inputStyle" [class]="inputStyleClass" [ngClass]="'ui-spinner-input ui-inputtext ui-widget ui-state-default ui-corner-all'">
+            <button type="button" [ngClass]="{'ui-spinner-button ui-spinner-up ui-corner-tr ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}" [disabled]="disabled||readonly" tabindex="-1" [attr.readonly]="readonly"
+                (mouseleave)="onUpButtonMouseleave($event)" (mousedown)="onUpButtonMousedown($event)" (mouseup)="onUpButtonMouseup($event)">
+                <span class="ui-spinner-button-icon pi pi-caret-up ui-clickable"></span>
+            </button>
+            <button type="button" [ngClass]="{'ui-spinner-button ui-spinner-down ui-corner-br ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}" [disabled]="disabled||readonly" tabindex="-1" [attr.readonly]="readonly"
+                (mouseleave)="onDownButtonMouseleave($event)" (mousedown)="onDownButtonMousedown($event)" (mouseup)="onDownButtonMouseup($event)">
+                <span class="ui-spinner-button-icon pi pi-caret-down ui-clickable"></span>
+            </button>
+        </span>
+    `, isInline: true, styles: [".ui-spinner{display:inline-block;overflow:visible;padding:0;position:relative;vertical-align:middle}.ui-spinner-input{vertical-align:middle;padding-right:1.5em}.ui-spinner-button{cursor:default;display:block;height:50%;margin:0;overflow:hidden;padding:0;position:absolute;right:0;text-align:center;vertical-align:middle;width:1.5em}.ui-spinner .ui-spinner-button-icon{position:absolute;top:50%;left:50%;margin-top:-.5em;margin-left:-.5em;width:1em}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-fluid .ui-spinner{width:100%}.ui-fluid .ui-spinner .ui-spinner-input{padding-right:2em;width:100%}.ui-fluid .ui-spinner .ui-spinner-button{width:1.5em}.ui-fluid .ui-spinner .ui-spinner-button .ui-spinner-button-icon{left:.7em}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Spinner, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-spinner', template: `
+        <span class="ui-spinner ui-widget ui-corner-all">
+            <input #inputfield type="text" [attr.id]="inputId" [value]="formattedValue||null" [attr.name]="name" [attr.aria-valumin]="min" [attr.aria-valuemax]="max" [attr.aria-valuenow]="value" [attr.aria-labelledby]="ariaLabelledBy"
+            [attr.size]="size" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [attr.placeholder]="placeholder" [disabled]="disabled" [readonly]="readonly" [attr.required]="required"
+            (keydown)="onInputKeydown($event)" (blur)="onInputBlur($event)" (input)="onInput($event)" (change)="onInputChange($event)" (focus)="onInputFocus($event)"
+            [ngStyle]="inputStyle" [class]="inputStyleClass" [ngClass]="'ui-spinner-input ui-inputtext ui-widget ui-state-default ui-corner-all'">
+            <button type="button" [ngClass]="{'ui-spinner-button ui-spinner-up ui-corner-tr ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}" [disabled]="disabled||readonly" tabindex="-1" [attr.readonly]="readonly"
+                (mouseleave)="onUpButtonMouseleave($event)" (mousedown)="onUpButtonMousedown($event)" (mouseup)="onUpButtonMouseup($event)">
+                <span class="ui-spinner-button-icon pi pi-caret-up ui-clickable"></span>
+            </button>
+            <button type="button" [ngClass]="{'ui-spinner-button ui-spinner-down ui-corner-br ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}" [disabled]="disabled||readonly" tabindex="-1" [attr.readonly]="readonly"
+                (mouseleave)="onDownButtonMouseleave($event)" (mousedown)="onDownButtonMousedown($event)" (mouseup)="onDownButtonMouseup($event)">
+                <span class="ui-spinner-button-icon pi pi-caret-down ui-clickable"></span>
+            </button>
+        </span>
+    `, host: {
+                        'class': 'p-element',
+                        '[class.ui-inputwrapper-filled]': 'filled',
+                        '[class.ui-inputwrapper-focus]': 'focus'
+                    }, providers: [SPINNER_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ui-spinner{display:inline-block;overflow:visible;padding:0;position:relative;vertical-align:middle}.ui-spinner-input{vertical-align:middle;padding-right:1.5em}.ui-spinner-button{cursor:default;display:block;height:50%;margin:0;overflow:hidden;padding:0;position:absolute;right:0;text-align:center;vertical-align:middle;width:1.5em}.ui-spinner .ui-spinner-button-icon{position:absolute;top:50%;left:50%;margin-top:-.5em;margin-left:-.5em;width:1em}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-fluid .ui-spinner{width:100%}.ui-fluid .ui-spinner .ui-spinner-input{padding-right:2em;width:100%}.ui-fluid .ui-spinner .ui-spinner-button{width:1.5em}.ui-fluid .ui-spinner .ui-spinner-button .ui-spinner-button-icon{left:.7em}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { onChange: [{
+                type: Output
+            }], onFocus: [{
+                type: Output
+            }], onBlur: [{
+                type: Output
+            }], min: [{
+                type: Input
+            }], max: [{
+                type: Input
+            }], maxlength: [{
+                type: Input
+            }], size: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], required: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], inputStyle: [{
+                type: Input
+            }], inputStyleClass: [{
+                type: Input
+            }], formatInput: [{
+                type: Input
+            }], decimalSeparator: [{
+                type: Input
+            }], thousandSeparator: [{
+                type: Input
+            }], precision: [{
+                type: Input
+            }], inputfieldViewChild: [{
+                type: ViewChild,
+                args: ['inputfield']
+            }], step: [{
+                type: Input
+            }] } });
+class SpinnerModule {
+}
+SpinnerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SpinnerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpinnerModule, declarations: [Spinner], imports: [CommonModule, InputTextModule], exports: [Spinner] });
+SpinnerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpinnerModule, imports: [[CommonModule, InputTextModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SpinnerModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, InputTextModule],
+                    exports: [Spinner],
+                    declarations: [Spinner]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { SPINNER_VALUE_ACCESSOR, Spinner, SpinnerModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-spinner.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-spinner.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-spinner.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-spinner.mjs","sources":["../../src/app/components/spinner/spinner.ts","../../src/app/components/spinner/primeng-spinner.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnInit,Input,Output,EventEmitter,forwardRef,ViewChild,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const SPINNER_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Spinner),\n    multi: true\n};\n\n@Component({\n    selector: 'p-spinner',\n    template: `\n        <span class=\"ui-spinner ui-widget ui-corner-all\">\n            <input #inputfield type=\"text\" [attr.id]=\"inputId\" [value]=\"formattedValue||null\" [attr.name]=\"name\" [attr.aria-valumin]=\"min\" [attr.aria-valuemax]=\"max\" [attr.aria-valuenow]=\"value\" [attr.aria-labelledby]=\"ariaLabelledBy\"\n            [attr.size]=\"size\" [attr.maxlength]=\"maxlength\" [attr.tabindex]=\"tabindex\" [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\" [readonly]=\"readonly\" [attr.required]=\"required\"\n            (keydown)=\"onInputKeydown($event)\" (blur)=\"onInputBlur($event)\" (input)=\"onInput($event)\" (change)=\"onInputChange($event)\" (focus)=\"onInputFocus($event)\"\n            [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [ngClass]=\"'ui-spinner-input ui-inputtext ui-widget ui-state-default ui-corner-all'\">\n            <button type=\"button\" [ngClass]=\"{'ui-spinner-button ui-spinner-up ui-corner-tr ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}\" [disabled]=\"disabled||readonly\" tabindex=\"-1\" [attr.readonly]=\"readonly\"\n                (mouseleave)=\"onUpButtonMouseleave($event)\" (mousedown)=\"onUpButtonMousedown($event)\" (mouseup)=\"onUpButtonMouseup($event)\">\n                <span class=\"ui-spinner-button-icon pi pi-caret-up ui-clickable\"></span>\n            </button>\n            <button type=\"button\" [ngClass]=\"{'ui-spinner-button ui-spinner-down ui-corner-br ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}\" [disabled]=\"disabled||readonly\" tabindex=\"-1\" [attr.readonly]=\"readonly\"\n                (mouseleave)=\"onDownButtonMouseleave($event)\" (mousedown)=\"onDownButtonMousedown($event)\" (mouseup)=\"onDownButtonMouseup($event)\">\n                <span class=\"ui-spinner-button-icon pi pi-caret-down ui-clickable\"></span>\n            </button>\n        </span>\n    `,\n    host: {\n        'class': 'p-element',\n        '[class.ui-inputwrapper-filled]': 'filled',\n        '[class.ui-inputwrapper-focus]': 'focus'\n    },\n    providers: [SPINNER_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./spinner.css']\n})\nexport class Spinner implements OnInit,ControlValueAccessor {\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Input() min: number;\n\n    @Input() max: number;\n\n    @Input() maxlength: number;\n\n    @Input() size: number;\n\n    @Input() placeholder: string;\n\n    @Input() inputId: string;\n\n    @Input() disabled: boolean;\n\n    @Input() readonly: boolean;\n\n    @Input() tabindex: number;\n\n    @Input() required: boolean;\n\n    @Input() name: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() inputStyle: any;\n\n    @Input() inputStyleClass: string;\n\n    @Input() formatInput: boolean;\n\n    @Input() decimalSeparator: string;\n\n    @Input() thousandSeparator: string;\n\n    @Input() precision: number;\n\n    value: any;\n\n    _step: number = 1;\n\n    formattedValue: string;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    keyPattern: RegExp = /[0-9\\+\\-]/;\n\n    public timer: any;\n\n    public focus: boolean;\n\n    public filled: boolean;\n\n    public negativeSeparator = '-';\n\n    localeDecimalSeparator: string;\n\n    localeThousandSeparator: string;\n\n    thousandRegExp: RegExp;\n\n    calculatedPrecision: number;\n\n    @ViewChild('inputfield') inputfieldViewChild: ElementRef;\n\n    @Input() get step(): number {\n        return this._step;\n    }\n    set step(val:number) {\n        this._step = val;\n\n        if (this._step != null) {\n            let tokens = this.step.toString().split(/[,]|[.]/);\n            this.calculatedPrecision = tokens[1] ? tokens[1].length : undefined;\n        }\n    }\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef) {}\n\n    ngOnInit() {\n        if (this.formatInput) {\n            this.localeDecimalSeparator = (1.1).toLocaleString().substring(1, 2);\n            this.localeThousandSeparator = (1000).toLocaleString().substring(1, 2);\n            this.thousandRegExp = new RegExp(`[${this.thousandSeparator || this.localeThousandSeparator}]`, 'gim');\n\n            if (this.decimalSeparator && this.thousandSeparator && this.decimalSeparator === this.thousandSeparator) {\n                console.warn(\"thousandSeparator and decimalSeparator cannot have the same value.\");\n            }\n        }\n    }\n\n    repeat(event: Event, interval: number, dir: number) {\n        let i = interval||500;\n\n        this.clearTimer();\n        this.timer = setTimeout(() => {\n            this.repeat(event, 40, dir);\n        }, i);\n\n        this.spin(event, dir);\n    }\n\n    spin(event: Event, dir: number) {\n        let step = this.step * dir;\n        let currentValue: number;\n        let precision = this.getPrecision();\n\n        if (this.value)\n            currentValue = (typeof this.value === 'string') ? this.parseValue(this.value) : this.value;\n        else\n            currentValue = 0;\n\n        if (precision)\n            this.value = parseFloat(this.toFixed(currentValue + step, precision));\n        else\n            this.value = currentValue + step;\n\n        if (this.maxlength !== undefined && this.value.toString().length > this.maxlength) {\n            this.value = currentValue;\n        }\n\n        if (this.min !== undefined && this.value < this.min) {\n            this.value = this.min;\n        }\n\n        if (this.max !== undefined && this.value > this.max) {\n            this.value = this.max;\n        }\n\n        this.formatValue();\n        this.onModelChange(this.value);\n        this.onChange.emit(event);\n    }\n\n    getPrecision() {\n        return this.precision === undefined ? this.calculatedPrecision : this.precision;\n    }\n\n    toFixed(value: number, precision: number) {\n        let power = Math.pow(10, precision||0);\n        return String(Math.round(value * power) / power);\n    }\n\n    onUpButtonMousedown(event: Event) {\n        if (!this.disabled) {\n            this.inputfieldViewChild.nativeElement.focus();\n            this.repeat(event, null, 1);\n            this.updateFilledState();\n            event.preventDefault();\n        }\n    }\n\n    onUpButtonMouseup(event: Event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    }\n\n    onUpButtonMouseleave(event: Event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    }\n\n    onDownButtonMousedown(event: Event) {\n        if (!this.disabled) {\n            this.inputfieldViewChild.nativeElement.focus();\n            this.repeat(event, null, -1);\n            this.updateFilledState();\n            event.preventDefault();\n        }\n    }\n\n    onDownButtonMouseup(event: Event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    }\n\n    onDownButtonMouseleave(event: Event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    }\n\n    onInputKeydown(event: KeyboardEvent) {\n        if (event.which == 38) {\n            this.spin(event, 1);\n            event.preventDefault();\n        }\n        else if (event.which == 40) {\n            this.spin(event, -1);\n            event.preventDefault();\n        }\n    }\n\n    onInputChange(event: Event) {\n        this.onChange.emit(event);\n    }\n\n    onInput(event: KeyboardEvent) {\n        this.value = this.parseValue((<HTMLInputElement> event.target).value);\n        this.onModelChange(this.value);\n        this.updateFilledState();\n    }\n\n    onInputBlur(event) {\n        this.focus = false;\n        this.formatValue();\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    }\n\n    onInputFocus(event) {\n        this.focus = true;\n        this.onFocus.emit(event);\n    }\n\n    parseValue(val: string): number {\n        let value: number;\n        let precision = this.getPrecision();\n\n        if (val.trim() === '') {\n            value = null;\n        }\n        else {\n            if (this.formatInput) {\n                val = val.replace(this.thousandRegExp, '');\n            }\n\n            if (precision) {\n                val = this.formatInput ? val.replace(this.decimalSeparator || this.localeDecimalSeparator, '.') : val.replace(',', '.');\n                value = parseFloat(val);\n            }\n            else {\n                value = parseInt(val, 10);\n            }\n\n            if (!isNaN(value)) {\n                if (this.max !== null && value > this.max) {\n                    value = this.max;\n                }\n\n                if (this.min !== null && value < this.min) {\n                    value = this.min;\n                }\n            }\n            else {\n                value = null;\n            }\n        }\n\n        return value;\n    }\n\n    formatValue() {\n        let value = this.value;\n        let precision = this.getPrecision();\n\n        if (value != null) {\n            if (this.formatInput) {\n                value = value.toLocaleString(undefined, {maximumFractionDigits: 20});\n\n                if (this.decimalSeparator && this.thousandSeparator) {\n                    value = value.split(this.localeDecimalSeparator);\n\n                    if (precision && value[1]) {\n                        value[1] = (this.decimalSeparator || this.localeDecimalSeparator) + value[1];\n                    }\n\n                    if (this.thousandSeparator && value[0].length > 3) {\n                        value[0] = value[0].replace(new RegExp(`[${this.localeThousandSeparator}]`, 'gim'), this.thousandSeparator);\n                    }\n\n                    value = value.join('');\n                }\n            }\n\n            this.formattedValue = value.toString();\n        }\n        else {\n            this.formattedValue = null;\n        }\n\n        if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {\n            this.inputfieldViewChild.nativeElement.value = this.formattedValue;\n        }\n    }\n\n    clearTimer() {\n        if (this.timer) {\n            clearInterval(this.timer);\n        }\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.formatValue();\n        this.updateFilledState();\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    updateFilledState() {\n        this.filled = (this.value !== undefined && this.value != null);\n    }\n}\n\n\n@NgModule({\n    imports: [CommonModule,InputTextModule],\n    exports: [Spinner],\n    declarations: [Spinner]\n})\nexport class SpinnerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-splitbutton.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-splitbutton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-splitbutton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,109 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import * as i1 from 'primeng/menu';
+import { MenuModule } from 'primeng/menu';
+
+class SplitButton {
+    constructor() {
+        this.iconPos = 'left';
+        this.onClick = new EventEmitter();
+        this.onDropdownClick = new EventEmitter();
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+    }
+    onDefaultButtonClick(event) {
+        this.onClick.emit(event);
+    }
+    onDropdownButtonClick(event) {
+        this.onDropdownClick.emit(event);
+        this.menu.toggle({ currentTarget: this.containerViewChild.nativeElement, relativeAlign: this.appendTo == null });
+    }
+}
+SplitButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
+SplitButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: SplitButton, selector: "p-splitButton", inputs: { model: "model", icon: "icon", iconPos: "iconPos", label: "label", style: "style", styleClass: "styleClass", menuStyle: "menuStyle", menuStyleClass: "menuStyleClass", disabled: "disabled", tabindex: "tabindex", appendTo: "appendTo", dir: "dir", expandAriaLabel: "expandAriaLabel", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onClick: "onClick", onDropdownClick: "onDropdownClick" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "buttonViewChild", first: true, predicate: ["defaultbtn"], descendants: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="'p-splitbutton p-component'" [ngStyle]="style" [class]="styleClass">
+            <button #defaultbtn class="p-splitbutton-defaultbutton" type="button" pButton [icon]="icon" [iconPos]="iconPos" [label]="label" (click)="onDefaultButtonClick($event)" [disabled]="disabled" [attr.tabindex]="tabindex"></button>
+            <button type="button" pButton class="p-splitbutton-menubutton" icon="pi pi-chevron-down" (click)="onDropdownButtonClick($event)" [disabled]="disabled" [attr.aria-label]="expandAriaLabel"></button>
+            <p-menu #menu [popup]="true" [model]="model" [style]="menuStyle" [styleClass]="menuStyleClass" [appendTo]="appendTo"
+                    [showTransitionOptions]="showTransitionOptions" [hideTransitionOptions]="hideTransitionOptions"></p-menu>
+        </div>
+    `, isInline: true, styles: [".p-splitbutton{display:inline-flex;position:relative}.p-splitbutton .p-splitbutton-defaultbutton{flex:1 1 auto;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0 none}.p-splitbutton-menubutton{display:flex;align-items:center;justify-content:center;border-top-left-radius:0;border-bottom-left-radius:0}.p-splitbutton .p-menu{min-width:100%}.p-fluid .p-splitbutton{display:flex}\n"], components: [{ type: i1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitButton, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-splitButton', template: `
+        <div #container [ngClass]="'p-splitbutton p-component'" [ngStyle]="style" [class]="styleClass">
+            <button #defaultbtn class="p-splitbutton-defaultbutton" type="button" pButton [icon]="icon" [iconPos]="iconPos" [label]="label" (click)="onDefaultButtonClick($event)" [disabled]="disabled" [attr.tabindex]="tabindex"></button>
+            <button type="button" pButton class="p-splitbutton-menubutton" icon="pi pi-chevron-down" (click)="onDropdownButtonClick($event)" [disabled]="disabled" [attr.aria-label]="expandAriaLabel"></button>
+            <p-menu #menu [popup]="true" [model]="model" [style]="menuStyle" [styleClass]="menuStyleClass" [appendTo]="appendTo"
+                    [showTransitionOptions]="showTransitionOptions" [hideTransitionOptions]="hideTransitionOptions"></p-menu>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-splitbutton{display:inline-flex;position:relative}.p-splitbutton .p-splitbutton-defaultbutton{flex:1 1 auto;border-top-right-radius:0;border-bottom-right-radius:0;border-right:0 none}.p-splitbutton-menubutton{display:flex;align-items:center;justify-content:center;border-top-left-radius:0;border-bottom-left-radius:0}.p-splitbutton .p-menu{min-width:100%}.p-fluid .p-splitbutton{display:flex}\n"] }]
+        }], propDecorators: { model: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], iconPos: [{
+                type: Input
+            }], label: [{
+                type: Input
+            }], onClick: [{
+                type: Output
+            }], onDropdownClick: [{
+                type: Output
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], menuStyle: [{
+                type: Input
+            }], menuStyleClass: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], dir: [{
+                type: Input
+            }], expandAriaLabel: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], buttonViewChild: [{
+                type: ViewChild,
+                args: ['defaultbtn']
+            }], menu: [{
+                type: ViewChild,
+                args: ['menu']
+            }] } });
+class SplitButtonModule {
+}
+SplitButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SplitButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitButtonModule, declarations: [SplitButton], imports: [CommonModule, ButtonModule, MenuModule], exports: [SplitButton, ButtonModule] });
+SplitButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitButtonModule, imports: [[CommonModule, ButtonModule, MenuModule], ButtonModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitButtonModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ButtonModule, MenuModule],
+                    exports: [SplitButton, ButtonModule],
+                    declarations: [SplitButton]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { SplitButton, SplitButtonModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-splitbutton.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-splitbutton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-splitbutton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-splitbutton.mjs","sources":["../../src/app/components/splitbutton/splitbutton.ts","../../src/app/components/splitbutton/primeng-splitbutton.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,Input,Output,EventEmitter,ViewChild,ChangeDetectionStrategy,ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MenuItem} from 'primeng/api';\nimport {ButtonModule} from 'primeng/button';\nimport {MenuModule, Menu} from 'primeng/menu';\n\n@Component({\n    selector: 'p-splitButton',\n    template: `\n        <div #container [ngClass]=\"'p-splitbutton p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <button #defaultbtn class=\"p-splitbutton-defaultbutton\" type=\"button\" pButton [icon]=\"icon\" [iconPos]=\"iconPos\" [label]=\"label\" (click)=\"onDefaultButtonClick($event)\" [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\"></button>\n            <button type=\"button\" pButton class=\"p-splitbutton-menubutton\" icon=\"pi pi-chevron-down\" (click)=\"onDropdownButtonClick($event)\" [disabled]=\"disabled\" [attr.aria-label]=\"expandAriaLabel\"></button>\n            <p-menu #menu [popup]=\"true\" [model]=\"model\" [style]=\"menuStyle\" [styleClass]=\"menuStyleClass\" [appendTo]=\"appendTo\"\n                    [showTransitionOptions]=\"showTransitionOptions\" [hideTransitionOptions]=\"hideTransitionOptions\"></p-menu>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./splitbutton.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class SplitButton {\n\n    @Input() model: MenuItem[];\n\n    @Input() icon: string;\n\n    @Input() iconPos: string = 'left';\n\n    @Input() label: string;\n\n    @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDropdownClick: EventEmitter<any> = new EventEmitter();\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() menuStyle: any;\n\n    @Input() menuStyleClass: string;\n\n    @Input() disabled: boolean;\n\n    @Input() tabindex: number;\n\n    @Input() appendTo: any;\n\n    @Input() dir: string;\n\n    @Input() expandAriaLabel: string;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @ViewChild('defaultbtn') buttonViewChild: ElementRef;\n\n    @ViewChild('menu') menu: Menu;\n\n    onDefaultButtonClick(event: Event) {\n        this.onClick.emit(event);\n    }\n\n    onDropdownButtonClick(event: Event) {\n        this.onDropdownClick.emit(event);\n        this.menu.toggle({currentTarget: this.containerViewChild.nativeElement, relativeAlign: this.appendTo == null});\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule,MenuModule],\n    exports: [SplitButton,ButtonModule],\n    declarations: [SplitButton]\n})\nexport class SplitButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;MAuBa,WAAW;IAjBxB;QAuBa,YAAO,GAAW,MAAM,CAAC;QAIxB,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,oBAAe,GAAsB,IAAI,YAAY,EAAE,CAAC;QAoBzD,0BAAqB,GAAW,iCAAiC,CAAC;QAElE,0BAAqB,GAAW,YAAY,CAAC;KAiBzD;IATG,oBAAoB,CAAC,KAAY;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IAED,qBAAqB,CAAC,KAAY;QAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAC,CAAC,CAAC;KAClH;;wGAjDQ,WAAW;4FAAX,WAAW,q0BAfV;;;;;;;KAOT;2FAQQ,WAAW;kBAjBvB,SAAS;+BACI,eAAe,YACf;;;;;;;KAOT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,KAAK;sBAAb,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEI,OAAO;sBAAhB,MAAM;gBAEG,eAAe;sBAAxB,MAAM;gBAEE,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,GAAG;sBAAX,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEkB,kBAAkB;sBAAzC,SAAS;uBAAC,WAAW;gBAEG,eAAe;sBAAvC,SAAS;uBAAC,YAAY;gBAEJ,IAAI;sBAAtB,SAAS;uBAAC,MAAM;;MAkBR,iBAAiB;;8GAAjB,iBAAiB;+GAAjB,iBAAiB,iBA1DjB,WAAW,aAsDV,YAAY,EAAC,YAAY,EAAC,UAAU,aAtDrC,WAAW,EAuDE,YAAY;+GAGzB,iBAAiB,YAJjB,CAAC,YAAY,EAAC,YAAY,EAAC,UAAU,CAAC,EACzB,YAAY;2FAGzB,iBAAiB;kBAL7B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAC,YAAY,EAAC,UAAU,CAAC;oBAC/C,OAAO,EAAE,CAAC,WAAW,EAAC,YAAY,CAAC;oBACnC,YAAY,EAAE,CAAC,WAAW,CAAC;iBAC9B;;;AChFD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-splitter.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-splitter.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-splitter.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,337 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+
+class Splitter {
+    constructor(cd, el) {
+        this.cd = cd;
+        this.el = el;
+        this.stateStorage = "session";
+        this.stateKey = null;
+        this.layout = "horizontal";
+        this.gutterSize = 4;
+        this.panelSizes = [];
+        this.minSizes = [];
+        this.onResizeEnd = new EventEmitter();
+        this.onResizeStart = new EventEmitter();
+        this.nested = false;
+        this.panels = [];
+        this.dragging = false;
+        this.mouseMoveListener = null;
+        this.mouseUpListener = null;
+        this.touchMoveListener = null;
+        this.touchEndListener = null;
+        this.size = null;
+        this.gutterElement = null;
+        this.startPos = null;
+        this.prevPanelElement = null;
+        this.nextPanelElement = null;
+        this.nextPanelSize = null;
+        this.prevPanelSize = null;
+        this._panelSizes = null;
+        this.prevPanelIndex = null;
+    }
+    ngOnInit() {
+        this.nested = this.isNested();
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'panel':
+                    this.panels.push(item.template);
+                    break;
+                default:
+                    this.panels.push(item.template);
+                    break;
+            }
+        });
+    }
+    ngAfterViewInit() {
+        if (this.panels && this.panels.length) {
+            let initialized = false;
+            if (this.isStateful()) {
+                initialized = this.restoreState();
+            }
+            if (!initialized) {
+                let children = [...this.el.nativeElement.children[0].children].filter(child => DomHandler.hasClass(child, 'p-splitter-panel'));
+                let _panelSizes = [];
+                this.panels.map((panel, i) => {
+                    let panelInitialSize = this.panelSizes.length - 1 >= i ? this.panelSizes[i] : null;
+                    let panelSize = panelInitialSize || (100 / this.panels.length);
+                    _panelSizes[i] = panelSize;
+                    children[i].style.flexBasis = 'calc(' + panelSize + '% - ' + ((this.panels.length - 1) * this.gutterSize) + 'px)';
+                });
+                this._panelSizes = _panelSizes;
+            }
+        }
+    }
+    resizeStart(event, index) {
+        this.gutterElement = event.currentTarget;
+        this.size = this.horizontal() ? DomHandler.getWidth(this.containerViewChild.nativeElement) : DomHandler.getHeight(this.containerViewChild.nativeElement);
+        this.dragging = true;
+        this.startPos = this.horizontal() ? (event.pageX || event.changedTouches[0].pageX) : (event.pageY || event.changedTouches[0].pageY);
+        this.prevPanelElement = this.gutterElement.previousElementSibling;
+        this.nextPanelElement = this.gutterElement.nextElementSibling;
+        this.prevPanelSize = 100 * (this.horizontal() ? DomHandler.getOuterWidth(this.prevPanelElement, true) : DomHandler.getOuterHeight(this.prevPanelElement, true)) / this.size;
+        this.nextPanelSize = 100 * (this.horizontal() ? DomHandler.getOuterWidth(this.nextPanelElement, true) : DomHandler.getOuterHeight(this.nextPanelElement, true)) / this.size;
+        this.prevPanelIndex = index;
+        DomHandler.addClass(this.gutterElement, 'p-splitter-gutter-resizing');
+        DomHandler.addClass(this.containerViewChild.nativeElement, 'p-splitter-resizing');
+        this.onResizeStart.emit({ originalEvent: event, sizes: this._panelSizes });
+    }
+    onResize(event) {
+        let newPos;
+        if (this.horizontal())
+            newPos = (event.pageX * 100 / this.size) - (this.startPos * 100 / this.size);
+        else
+            newPos = (event.pageY * 100 / this.size) - (this.startPos * 100 / this.size);
+        let newPrevPanelSize = this.prevPanelSize + newPos;
+        let newNextPanelSize = this.nextPanelSize - newPos;
+        if (this.validateResize(newPrevPanelSize, newNextPanelSize)) {
+            this.prevPanelElement.style.flexBasis = 'calc(' + newPrevPanelSize + '% - ' + ((this.panels.length - 1) * this.gutterSize) + 'px)';
+            this.nextPanelElement.style.flexBasis = 'calc(' + newNextPanelSize + '% - ' + ((this.panels.length - 1) * this.gutterSize) + 'px)';
+            this._panelSizes[this.prevPanelIndex] = newPrevPanelSize;
+            this._panelSizes[this.prevPanelIndex + 1] = newNextPanelSize;
+        }
+    }
+    resizeEnd(event) {
+        if (this.isStateful()) {
+            this.saveState();
+        }
+        this.onResizeEnd.emit({ originalEvent: event, sizes: this._panelSizes });
+        DomHandler.removeClass(this.gutterElement, 'p-splitter-gutter-resizing');
+        DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-splitter-resizing');
+        this.clear();
+    }
+    onGutterMouseDown(event, index) {
+        this.resizeStart(event, index);
+        this.bindMouseListeners();
+    }
+    onGutterTouchStart(event, index) {
+        if (event.cancelable) {
+            this.resizeStart(event, index);
+            this.bindTouchListeners();
+            event.preventDefault();
+        }
+    }
+    onGutterTouchEnd(event) {
+        this.resizeEnd(event);
+        this.unbindTouchListeners();
+        if (event.cancelable)
+            event.preventDefault();
+    }
+    validateResize(newPrevPanelSize, newNextPanelSize) {
+        if (this.minSizes.length >= 1 && this.minSizes[0] && this.minSizes[0] > newPrevPanelSize) {
+            return false;
+        }
+        if (this.minSizes.length > 1 && this.minSizes[1] && this.minSizes[1] > newNextPanelSize) {
+            return false;
+        }
+        return true;
+    }
+    bindMouseListeners() {
+        if (!this.mouseMoveListener) {
+            this.mouseMoveListener = event => this.onResize(event);
+            document.addEventListener('mousemove', this.mouseMoveListener);
+        }
+        if (!this.mouseUpListener) {
+            this.mouseUpListener = event => {
+                this.resizeEnd(event);
+                this.unbindMouseListeners();
+            };
+            document.addEventListener('mouseup', this.mouseUpListener);
+        }
+    }
+    bindTouchListeners() {
+        if (!this.touchMoveListener) {
+            this.touchMoveListener = event => this.onResize(event.changedTouches[0]);
+            document.addEventListener('touchmove', this.touchMoveListener);
+        }
+        if (!this.touchEndListener) {
+            this.touchEndListener = event => {
+                this.resizeEnd(event);
+                this.unbindTouchListeners();
+            };
+            document.addEventListener('touchend', this.touchEndListener);
+        }
+    }
+    unbindMouseListeners() {
+        if (this.mouseMoveListener) {
+            document.removeEventListener('mousemove', this.mouseMoveListener);
+            this.mouseMoveListener = null;
+        }
+        if (this.mouseUpListener) {
+            document.removeEventListener('mouseup', this.mouseUpListener);
+            this.mouseUpListener = null;
+        }
+    }
+    unbindTouchListeners() {
+        if (this.touchMoveListener) {
+            document.removeEventListener('touchmove', this.touchMoveListener);
+            this.touchMoveListener = null;
+        }
+        if (this.touchEndListener) {
+            document.removeEventListener('touchend', this.touchEndListener);
+            this.touchEndListener = null;
+        }
+    }
+    clear() {
+        this.dragging = false;
+        this.size = null;
+        this.startPos = null;
+        this.prevPanelElement = null;
+        this.nextPanelElement = null;
+        this.prevPanelSize = null;
+        this.nextPanelSize = null;
+        this.gutterElement = null;
+        this.prevPanelIndex = null;
+    }
+    isNested() {
+        if (this.el.nativeElement) {
+            let parent = this.el.nativeElement.parentElement;
+            while (parent && !DomHandler.hasClass(parent, 'p-splitter')) {
+                parent = parent.parentElement;
+            }
+            return parent !== null;
+        }
+        else {
+            return false;
+        }
+    }
+    isStateful() {
+        return this.stateKey != null;
+    }
+    getStorage() {
+        switch (this.stateStorage) {
+            case 'local':
+                return window.localStorage;
+            case 'session':
+                return window.sessionStorage;
+            default:
+                throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are "local" and "session".');
+        }
+    }
+    saveState() {
+        this.getStorage().setItem(this.stateKey, JSON.stringify(this._panelSizes));
+    }
+    restoreState() {
+        const storage = this.getStorage();
+        const stateString = storage.getItem(this.stateKey);
+        if (stateString) {
+            this._panelSizes = JSON.parse(stateString);
+            let children = [...this.containerViewChild.nativeElement.children].filter(child => DomHandler.hasClass(child, 'p-splitter-panel'));
+            children.forEach((child, i) => {
+                child.style.flexBasis = 'calc(' + this._panelSizes[i] + '% - ' + ((this.panels.length - 1) * this.gutterSize) + 'px)';
+            });
+            return true;
+        }
+        return false;
+    }
+    containerClass() {
+        return {
+            'p-splitter p-component': true,
+            'p-splitter-horizontal': this.layout === "horizontal",
+            'p-splitter-vertical': this.layout === "vertical"
+        };
+    }
+    panelContainerClass() {
+        return {
+            'p-splitter-panel': true,
+            'p-splitter-panel-nested': true
+        };
+    }
+    gutterStyle() {
+        if (this.horizontal())
+            return { width: this.gutterSize + 'px' };
+        else
+            return { height: this.gutterSize + 'px' };
+    }
+    horizontal() {
+        return this.layout === 'horizontal';
+    }
+}
+Splitter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Splitter, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+Splitter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Splitter, selector: "p-splitter", inputs: { styleClass: "styleClass", panelStyleClass: "panelStyleClass", style: "style", panelStyle: "panelStyle", stateStorage: "stateStorage", stateKey: "stateKey", layout: "layout", gutterSize: "gutterSize", panelSizes: "panelSizes", minSizes: "minSizes" }, outputs: { onResizeEnd: "onResizeEnd", onResizeStart: "onResizeStart" }, host: { properties: { "class.p-splitter-panel-nested": "nested" }, classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+            <ng-template ngFor let-panel let-i="index" [ngForOf]="panels">
+                <div [ngClass]="panelContainerClass()" [class]="panelStyleClass" [ngStyle]="panelStyle">
+                    <ng-container *ngTemplateOutlet="panel"></ng-container>
+                </div>
+                <div class="p-splitter-gutter" *ngIf="i !== (panels.length - 1)" [ngStyle]="gutterStyle()"
+                    (mousedown)="onGutterMouseDown($event, i)" (touchstart)="onGutterTouchStart($event, i)">
+                    <div class="p-splitter-gutter-handle"></div>
+                </div>
+            </ng-template>
+        </div>
+    `, isInline: true, styles: [".p-splitter{display:flex;flex-wrap:nowrap}.p-splitter-vertical{flex-direction:column}.p-splitter-panel{flex-grow:1}.p-splitter-panel-nested{display:flex}.p-splitter-panel p-splitter{flex-grow:1}.p-splitter-panel .p-splitter{flex-grow:1;border:0 none}.p-splitter-gutter{flex-grow:0;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:col-resize}.p-splitter-horizontal.p-splitter-resizing{cursor:col-resize;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-splitter-horizontal>.p-splitter-gutter>.p-splitter-gutter-handle{height:24px;width:100%}.p-splitter-horizontal>.p-splitter-gutter{cursor:col-resize}.p-splitter-vertical.p-splitter-resizing{cursor:row-resize;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-splitter-vertical>.p-splitter-gutter{cursor:row-resize}.p-splitter-vertical>.p-splitter-gutter>.p-splitter-gutter-handle{width:24px;height:100%}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Splitter, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-splitter', template: `
+        <div #container [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+            <ng-template ngFor let-panel let-i="index" [ngForOf]="panels">
+                <div [ngClass]="panelContainerClass()" [class]="panelStyleClass" [ngStyle]="panelStyle">
+                    <ng-container *ngTemplateOutlet="panel"></ng-container>
+                </div>
+                <div class="p-splitter-gutter" *ngIf="i !== (panels.length - 1)" [ngStyle]="gutterStyle()"
+                    (mousedown)="onGutterMouseDown($event, i)" (touchstart)="onGutterTouchStart($event, i)">
+                    <div class="p-splitter-gutter-handle"></div>
+                </div>
+            </ng-template>
+        </div>
+    `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
+                        'class': 'p-element',
+                        '[class.p-splitter-panel-nested]': 'nested'
+                    }, styles: [".p-splitter{display:flex;flex-wrap:nowrap}.p-splitter-vertical{flex-direction:column}.p-splitter-panel{flex-grow:1}.p-splitter-panel-nested{display:flex}.p-splitter-panel p-splitter{flex-grow:1}.p-splitter-panel .p-splitter{flex-grow:1;border:0 none}.p-splitter-gutter{flex-grow:0;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:col-resize}.p-splitter-horizontal.p-splitter-resizing{cursor:col-resize;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-splitter-horizontal>.p-splitter-gutter>.p-splitter-gutter-handle{height:24px;width:100%}.p-splitter-horizontal>.p-splitter-gutter{cursor:col-resize}.p-splitter-vertical.p-splitter-resizing{cursor:row-resize;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-splitter-vertical>.p-splitter-gutter{cursor:row-resize}.p-splitter-vertical>.p-splitter-gutter>.p-splitter-gutter-handle{width:24px;height:100%}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { styleClass: [{
+                type: Input
+            }], panelStyleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], panelStyle: [{
+                type: Input
+            }], stateStorage: [{
+                type: Input
+            }], stateKey: [{
+                type: Input
+            }], layout: [{
+                type: Input
+            }], gutterSize: [{
+                type: Input
+            }], panelSizes: [{
+                type: Input
+            }], minSizes: [{
+                type: Input
+            }], onResizeEnd: [{
+                type: Output
+            }], onResizeStart: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container', { static: false }]
+            }] } });
+class SplitterModule {
+}
+SplitterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+SplitterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitterModule, declarations: [Splitter], imports: [CommonModule], exports: [Splitter, SharedModule] });
+SplitterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitterModule, imports: [[CommonModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SplitterModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Splitter, SharedModule],
+                    declarations: [Splitter]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Splitter, SplitterModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-splitter.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-splitter.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-splitter.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-splitter.mjs","sources":["../../src/app/components/splitter/splitter.ts","../../src/app/components/splitter/primeng-splitter.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, QueryList, ElementRef, ChangeDetectorRef, TemplateRef, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler } from 'primeng/dom';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\n\n@Component({\n    selector: 'p-splitter',\n    template: `\n        <div #container [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\">\n            <ng-template ngFor let-panel let-i=\"index\" [ngForOf]=\"panels\">\n                <div [ngClass]=\"panelContainerClass()\" [class]=\"panelStyleClass\" [ngStyle]=\"panelStyle\">\n                    <ng-container *ngTemplateOutlet=\"panel\"></ng-container>\n                </div>\n                <div class=\"p-splitter-gutter\" *ngIf=\"i !== (panels.length - 1)\" [ngStyle]=\"gutterStyle()\"\n                    (mousedown)=\"onGutterMouseDown($event, i)\" (touchstart)=\"onGutterTouchStart($event, i)\">\n                    <div class=\"p-splitter-gutter-handle\"></div>\n                </div>\n            </ng-template>\n        </div>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styleUrls: ['./splitter.css'],\n    host: {\n        'class': 'p-element',\n        '[class.p-splitter-panel-nested]': 'nested'\n    }\n})\nexport class Splitter {\n\n    @Input() styleClass: string;\n\n    @Input() panelStyleClass: string;\n\n    @Input() style: any;\n\n    @Input() panelStyle: any;\n\n    @Input() stateStorage: string = \"session\";\n\n    @Input() stateKey: string = null;\n\n    @Input() layout: string = \"horizontal\";\n\n    @Input() gutterSize: number = 4;\n\n    @Input() panelSizes: number[] = [];\n\n    @Input() minSizes: number[] = [];\n\n    @Output() onResizeEnd: EventEmitter<any> = new EventEmitter();\n\n    @Output() onResizeStart: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @ViewChild('container', { static: false }) containerViewChild: ElementRef;\n\n    nested = false;\n\n    panels = [];\n\n    dragging = false;\n\n    mouseMoveListener = null;\n\n    mouseUpListener = null;\n\n    touchMoveListener = null;\n\n    touchEndListener = null;\n\n    size = null;\n\n    gutterElement = null;\n\n    startPos = null;\n\n    prevPanelElement = null;\n\n    nextPanelElement = null;\n\n    nextPanelSize = null;\n\n    prevPanelSize = null;\n\n    _panelSizes = null;\n\n    prevPanelIndex = null;\n\n    constructor(public cd: ChangeDetectorRef, private el: ElementRef) { }\n\n    ngOnInit() {\n        this.nested = this.isNested();\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'panel':\n                    this.panels.push(item.template);\n                break;\n                default:\n                    this.panels.push(item.template);\n                break;\n            }\n        })\n    }\n\n    ngAfterViewInit() {\n        if (this.panels && this.panels.length) {\n            let initialized = false;\n            if (this.isStateful()) {\n                initialized = this.restoreState();\n            }\n\n            if (!initialized) {\n                let children = [...this.el.nativeElement.children[0].children].filter(child => DomHandler.hasClass(child, 'p-splitter-panel'));\n                let _panelSizes = [];\n\n                this.panels.map((panel, i) => {\n                    let panelInitialSize = this.panelSizes.length -1 >= i ? this.panelSizes[i]: null;\n                    let panelSize = panelInitialSize || (100 / this.panels.length);\n                    _panelSizes[i] = panelSize;\n                    children[i].style.flexBasis = 'calc(' + panelSize + '% - ' + ((this.panels.length - 1) * this.gutterSize) + 'px)';\n                });\n\n                this._panelSizes = _panelSizes;\n            }\n        }\n    }\n\n    resizeStart(event, index) {\n        this.gutterElement = event.currentTarget;\n        this.size = this.horizontal() ? DomHandler.getWidth(this.containerViewChild.nativeElement) : DomHandler.getHeight(this.containerViewChild.nativeElement);\n        this.dragging = true;\n        this.startPos = this.horizontal() ? (event.pageX || event.changedTouches[0].pageX) : (event.pageY || event.changedTouches[0].pageY);\n        this.prevPanelElement = this.gutterElement.previousElementSibling;\n        this.nextPanelElement = this.gutterElement.nextElementSibling;\n        this.prevPanelSize = 100 * (this.horizontal() ? DomHandler.getOuterWidth(this.prevPanelElement, true): DomHandler.getOuterHeight(this.prevPanelElement, true)) / this.size;\n        this.nextPanelSize = 100 * (this.horizontal() ? DomHandler.getOuterWidth(this.nextPanelElement, true): DomHandler.getOuterHeight(this.nextPanelElement, true)) / this.size;\n        this.prevPanelIndex = index;\n        DomHandler.addClass(this.gutterElement, 'p-splitter-gutter-resizing');\n        DomHandler.addClass(this.containerViewChild.nativeElement, 'p-splitter-resizing');\n        this.onResizeStart.emit({originalEvent: event, sizes: this._panelSizes});\n    }\n\n    onResize(event) {\n        let newPos;\n        if (this.horizontal())\n            newPos = (event.pageX * 100 / this.size) - (this.startPos * 100 / this.size);\n        else\n            newPos = (event.pageY  * 100 / this.size) - (this.startPos * 100 / this.size);\n\n        let newPrevPanelSize = this.prevPanelSize + newPos;\n        let newNextPanelSize = this.nextPanelSize - newPos;\n\n        if (this.validateResize(newPrevPanelSize, newNextPanelSize)) {\n            this.prevPanelElement.style.flexBasis = 'calc(' + newPrevPanelSize + '% - ' + ((this.panels.length - 1) * this.gutterSize) + 'px)';\n            this.nextPanelElement.style.flexBasis = 'calc(' + newNextPanelSize + '% - ' + ((this.panels.length - 1) * this.gutterSize) + 'px)';\n            this._panelSizes[this.prevPanelIndex] = newPrevPanelSize;\n            this._panelSizes[this.prevPanelIndex + 1] = newNextPanelSize;\n        }\n    }\n\n    resizeEnd(event) {\n        if (this.isStateful()) {\n            this.saveState();\n        }\n\n        this.onResizeEnd.emit({originalEvent: event, sizes: this._panelSizes});\n        DomHandler.removeClass(this.gutterElement, 'p-splitter-gutter-resizing');\n        DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-splitter-resizing');\n        this.clear();\n    }\n\n    onGutterMouseDown(event, index) {\n        this.resizeStart(event, index);\n        this.bindMouseListeners();\n    }\n\n    onGutterTouchStart(event, index) {\n        if (event.cancelable){\n            this.resizeStart(event, index);\n            this.bindTouchListeners();\n\n            event.preventDefault();\n        }\n    }\n\n    onGutterTouchEnd(event) {\n        this.resizeEnd(event);\n        this.unbindTouchListeners();\n\n        if (event.cancelable)\n            event.preventDefault();\n    }\n\n    validateResize(newPrevPanelSize, newNextPanelSize) {\n        if (this.minSizes.length >= 1 && this.minSizes[0] && this.minSizes[0] > newPrevPanelSize) {\n            return false;\n        }\n\n        if (this.minSizes.length > 1 && this.minSizes[1] && this.minSizes[1] > newNextPanelSize) {\n            return false;\n        }\n\n        return true;\n    }\n\n    bindMouseListeners() {\n        if (!this.mouseMoveListener) {\n            this.mouseMoveListener = event => this.onResize(event)\n            document.addEventListener('mousemove', this.mouseMoveListener);\n        }\n\n        if (!this.mouseUpListener) {\n            this.mouseUpListener = event => {\n                this.resizeEnd(event);\n                this.unbindMouseListeners();\n            }\n            document.addEventListener('mouseup', this.mouseUpListener);\n        }\n    }\n\n    bindTouchListeners() {\n        if (!this.touchMoveListener) {\n            this.touchMoveListener = event => this.onResize(event.changedTouches[0])\n            document.addEventListener('touchmove', this.touchMoveListener);\n        }\n\n        if (!this.touchEndListener) {\n            this.touchEndListener = event => {\n                this.resizeEnd(event);\n                this.unbindTouchListeners();\n            }\n            document.addEventListener('touchend', this.touchEndListener);\n        }\n    }\n\n    unbindMouseListeners() {\n        if (this.mouseMoveListener) {\n            document.removeEventListener('mousemove', this.mouseMoveListener);\n            this.mouseMoveListener = null;\n        }\n\n        if (this.mouseUpListener) {\n            document.removeEventListener('mouseup', this.mouseUpListener);\n            this.mouseUpListener = null;\n        }\n    }\n\n    unbindTouchListeners() {\n        if (this.touchMoveListener) {\n            document.removeEventListener('touchmove', this.touchMoveListener);\n            this.touchMoveListener = null;\n        }\n\n        if (this.touchEndListener) {\n            document.removeEventListener('touchend', this.touchEndListener);\n            this.touchEndListener = null;\n        }\n    }\n\n    clear() {\n        this.dragging = false;\n        this.size = null;\n        this.startPos = null;\n        this.prevPanelElement = null;\n        this.nextPanelElement = null;\n        this.prevPanelSize = null;\n        this.nextPanelSize = null;\n        this.gutterElement = null;\n        this.prevPanelIndex = null;\n    }\n\n    isNested() {\n        if (this.el.nativeElement) {\n            let parent = this.el.nativeElement.parentElement;\n            while (parent && !DomHandler.hasClass(parent, 'p-splitter')) {\n                parent = parent.parentElement;\n            }\n\n            return parent !== null;\n        }\n        else {\n            return false;\n        }\n    }\n\n    isStateful() {\n        return this.stateKey != null;\n    }\n\n    getStorage() {\n        switch(this.stateStorage) {\n            case 'local':\n                return window.localStorage;\n\n            case 'session':\n                return window.sessionStorage;\n\n            default:\n                throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n        }\n    }\n\n    saveState() {\n        this.getStorage().setItem(this.stateKey, JSON.stringify(this._panelSizes));\n    }\n\n    restoreState() {\n        const storage = this.getStorage();\n        const stateString = storage.getItem(this.stateKey);\n\n        if (stateString) {\n            this._panelSizes = JSON.parse(stateString);\n            let children = [...this.containerViewChild.nativeElement.children].filter(child => DomHandler.hasClass(child, 'p-splitter-panel'));\n            children.forEach((child, i) => {\n                child.style.flexBasis = 'calc(' + this._panelSizes[i] + '% - ' + ((this.panels.length - 1) * this.gutterSize) + 'px)';\n            });\n\n            return true;\n        }\n\n        return false;\n    }\n\n    containerClass() {\n        return {\n            'p-splitter p-component': true,\n            'p-splitter-horizontal': this.layout === \"horizontal\",\n            'p-splitter-vertical': this.layout === \"vertical\"\n        };\n    }\n\n    panelContainerClass() {\n        return {\n            'p-splitter-panel': true,\n            'p-splitter-panel-nested': true\n        };\n    }\n\n    gutterStyle() {\n        if (this.horizontal())\n            return {width: this.gutterSize + 'px'};\n        else\n            return {height: this.gutterSize + 'px'};\n    }\n\n    horizontal() {\n        return this.layout === 'horizontal';\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Splitter, SharedModule],\n    declarations: [Splitter]\n})\nexport class SplitterModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-steps.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-steps.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-steps.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,138 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i1 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import * as i3 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+
+class Steps {
+    constructor(router, route, cd) {
+        this.router = router;
+        this.route = route;
+        this.cd = cd;
+        this.activeIndex = 0;
+        this.readonly = true;
+        this.activeIndexChange = new EventEmitter();
+    }
+    ngOnInit() {
+        this.subscription = this.router.events.subscribe(() => this.cd.markForCheck());
+    }
+    itemClick(event, item, i) {
+        if (this.readonly || item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        this.activeIndexChange.emit(i);
+        if (!item.url) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item,
+                index: i
+            });
+        }
+    }
+    isClickableRouterLink(item) {
+        return item.routerLink && !this.readonly && !item.disabled;
+    }
+    isActive(item, index) {
+        if (item.routerLink)
+            return this.router.isActive(item.routerLink, false) || this.router.isActive(this.router.createUrlTree([item.routerLink], { relativeTo: this.route }).toString(), false);
+        else
+            return index === this.activeIndex;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+Steps.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Steps, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Steps.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Steps, selector: "p-steps", inputs: { activeIndex: "activeIndex", model: "model", readonly: "readonly", style: "style", styleClass: "styleClass" }, outputs: { activeIndexChange: "activeIndexChange" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="{'p-steps p-component':true,'p-readonly':readonly}" [ngStyle]="style" [class]="styleClass">
+            <ul role="tablist">
+                <li *ngFor="let item of model; let i = index" class="p-steps-item" #menuitem [ngStyle]="item.style" [class]="item.styleClass" role="tab" [attr.aria-selected]="i === activeIndex" [attr.aria-expanded]="i === activeIndex" pTooltip [tooltipOptions]="item.tooltipOptions"
+                    [ngClass]="{'p-highlight p-steps-current': isActive(item, i), 'p-disabled': item.disabled || (readonly && !isActive(item, i))}">
+                    <a *ngIf="isClickableRouterLink(item); else elseBlock" [routerLink]="item.routerLink" [queryParams]="item.queryParams" role="presentation" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link"
+                        (click)="itemClick($event, item, i)" (keydown.enter)="itemClick($event, item, i)" [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')"
+                        [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                        <span class="p-steps-number">{{i + 1}}</span>
+                        <span class="p-steps-title" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+                        <ng-template #htmlLabel><span class="p-steps-title" [innerHTML]="item.label"></span></ng-template>
+                    </a>
+                    <ng-template #elseBlock>
+                        <a [attr.href]="item.url" class="p-menuitem-link" role="presentation" (click)="itemClick($event, item, i)" (keydown.enter)="itemClick($event, item, i)" [attr.target]="item.target" [attr.id]="item.id"
+                            [attr.tabindex]="item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')">
+                            <span class="p-steps-number">{{i + 1}}</span>
+                            <span class="p-steps-title" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+                            <ng-template #htmlRouteLabel><span class="p-steps-title" [innerHTML]="item.label"></span></ng-template>
+                        </a>
+                    </ng-template>
+                </li>
+            </ul>
+        </div>
+    `, isInline: true, styles: [".p-steps{position:relative}.p-steps ul{padding:0;margin:0;list-style-type:none;display:flex}.p-steps-item{position:relative;display:flex;justify-content:center;flex:1 1 auto}.p-steps-item .p-menuitem-link{display:inline-flex;flex-direction:column;align-items:center;overflow:hidden;text-decoration:none}.p-steps.p-steps-readonly .p-steps-item{cursor:auto}.p-steps-item.p-steps-current .p-menuitem-link{cursor:default}.p-steps-title{white-space:nowrap}.p-steps-number{display:flex;align-items:center;justify-content:center}.p-steps-title{display:block}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Steps, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-steps', template: `
+        <div [ngClass]="{'p-steps p-component':true,'p-readonly':readonly}" [ngStyle]="style" [class]="styleClass">
+            <ul role="tablist">
+                <li *ngFor="let item of model; let i = index" class="p-steps-item" #menuitem [ngStyle]="item.style" [class]="item.styleClass" role="tab" [attr.aria-selected]="i === activeIndex" [attr.aria-expanded]="i === activeIndex" pTooltip [tooltipOptions]="item.tooltipOptions"
+                    [ngClass]="{'p-highlight p-steps-current': isActive(item, i), 'p-disabled': item.disabled || (readonly && !isActive(item, i))}">
+                    <a *ngIf="isClickableRouterLink(item); else elseBlock" [routerLink]="item.routerLink" [queryParams]="item.queryParams" role="presentation" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}" class="p-menuitem-link"
+                        (click)="itemClick($event, item, i)" (keydown.enter)="itemClick($event, item, i)" [attr.target]="item.target" [attr.id]="item.id" [attr.tabindex]="item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')"
+                        [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state">
+                        <span class="p-steps-number">{{i + 1}}</span>
+                        <span class="p-steps-title" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+                        <ng-template #htmlLabel><span class="p-steps-title" [innerHTML]="item.label"></span></ng-template>
+                    </a>
+                    <ng-template #elseBlock>
+                        <a [attr.href]="item.url" class="p-menuitem-link" role="presentation" (click)="itemClick($event, item, i)" (keydown.enter)="itemClick($event, item, i)" [attr.target]="item.target" [attr.id]="item.id"
+                            [attr.tabindex]="item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')">
+                            <span class="p-steps-number">{{i + 1}}</span>
+                            <span class="p-steps-title" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+                            <ng-template #htmlRouteLabel><span class="p-steps-title" [innerHTML]="item.label"></span></ng-template>
+                        </a>
+                    </ng-template>
+                </li>
+            </ul>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-steps{position:relative}.p-steps ul{padding:0;margin:0;list-style-type:none;display:flex}.p-steps-item{position:relative;display:flex;justify-content:center;flex:1 1 auto}.p-steps-item .p-menuitem-link{display:inline-flex;flex-direction:column;align-items:center;overflow:hidden;text-decoration:none}.p-steps.p-steps-readonly .p-steps-item{cursor:auto}.p-steps-item.p-steps-current .p-menuitem-link{cursor:default}.p-steps-title{white-space:nowrap}.p-steps-number{display:flex;align-items:center;justify-content:center}.p-steps-title{display:block}\n"] }]
+        }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { activeIndex: [{
+                type: Input
+            }], model: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], activeIndexChange: [{
+                type: Output
+            }] } });
+class StepsModule {
+}
+StepsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StepsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+StepsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StepsModule, declarations: [Steps], imports: [CommonModule, RouterModule, TooltipModule], exports: [Steps, RouterModule, TooltipModule] });
+StepsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StepsModule, imports: [[CommonModule, RouterModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StepsModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, TooltipModule],
+                    exports: [Steps, RouterModule, TooltipModule],
+                    declarations: [Steps]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Steps, StepsModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-steps.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-steps.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-steps.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-steps.mjs","sources":["../../src/app/components/steps/steps.ts","../../src/app/components/steps/primeng-steps.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,EventEmitter,ChangeDetectionStrategy, ViewEncapsulation, OnInit, OnDestroy, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MenuItem} from 'primeng/api';\nimport {RouterModule, Router, ActivatedRoute} from '@angular/router';\nimport {Subscription} from 'rxjs';\nimport {TooltipModule} from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-steps',\n    template: `\n        <div [ngClass]=\"{'p-steps p-component':true,'p-readonly':readonly}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <ul role=\"tablist\">\n                <li *ngFor=\"let item of model; let i = index\" class=\"p-steps-item\" #menuitem [ngStyle]=\"item.style\" [class]=\"item.styleClass\" role=\"tab\" [attr.aria-selected]=\"i === activeIndex\" [attr.aria-expanded]=\"i === activeIndex\" pTooltip [tooltipOptions]=\"item.tooltipOptions\"\n                    [ngClass]=\"{'p-highlight p-steps-current': isActive(item, i), 'p-disabled': item.disabled || (readonly && !isActive(item, i))}\">\n                    <a *ngIf=\"isClickableRouterLink(item); else elseBlock\" [routerLink]=\"item.routerLink\" [queryParams]=\"item.queryParams\" role=\"presentation\" [routerLinkActive]=\"'p-menuitem-link-active'\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{exact:false}\" class=\"p-menuitem-link\"\n                        (click)=\"itemClick($event, item, i)\" (keydown.enter)=\"itemClick($event, item, i)\" [attr.target]=\"item.target\" [attr.id]=\"item.id\" [attr.tabindex]=\"item.disabled || readonly ? null : (item.tabindex ? item.tabindex : '0')\"\n                        [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\" [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\">\n                        <span class=\"p-steps-number\">{{i + 1}}</span>\n                        <span class=\"p-steps-title\" *ngIf=\"item.escape !== false; else htmlLabel\">{{item.label}}</span>\n                        <ng-template #htmlLabel><span class=\"p-steps-title\" [innerHTML]=\"item.label\"></span></ng-template>\n                    </a>\n                    <ng-template #elseBlock>\n                        <a [attr.href]=\"item.url\" class=\"p-menuitem-link\" role=\"presentation\" (click)=\"itemClick($event, item, i)\" (keydown.enter)=\"itemClick($event, item, i)\" [attr.target]=\"item.target\" [attr.id]=\"item.id\"\n                            [attr.tabindex]=\"item.disabled||(i !== activeIndex && readonly) ? null : (item.tabindex ? item.tabindex : '0')\">\n                            <span class=\"p-steps-number\">{{i + 1}}</span>\n                            <span class=\"p-steps-title\" *ngIf=\"item.escape !== false; else htmlRouteLabel\">{{item.label}}</span>\n                            <ng-template #htmlRouteLabel><span class=\"p-steps-title\" [innerHTML]=\"item.label\"></span></ng-template>\n                        </a>\n                    </ng-template>\n                </li>\n            </ul>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./steps.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Steps implements OnInit, OnDestroy {\n\n    @Input() activeIndex: number = 0;\n\n    @Input() model: MenuItem[];\n\n    @Input() readonly: boolean =  true;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Output() activeIndexChange: EventEmitter<any> = new EventEmitter();\n\n    constructor(private router: Router, private route:ActivatedRoute, private cd: ChangeDetectorRef) { }\n\n    subscription: Subscription;\n\n    ngOnInit() {\n        this.subscription = this.router.events.subscribe(() => this.cd.markForCheck());\n    }\n\n    itemClick(event: Event, item: MenuItem, i: number) {\n        if (this.readonly || item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        this.activeIndexChange.emit(i);\n\n        if (!item.url) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item,\n                index: i\n            });\n        }\n    }\n\n    isClickableRouterLink(item: MenuItem) {\n        return item.routerLink && !this.readonly && !item.disabled;\n    }\n\n    isActive(item: MenuItem, index: number) {\n        if (item.routerLink)\n            return this.router.isActive(item.routerLink, false) || this.router.isActive(this.router.createUrlTree([item.routerLink], {relativeTo: this.route}).toString(), false);\n        else\n            return index === this.activeIndex;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,TooltipModule],\n    exports: [Steps,RouterModule,TooltipModule],\n    declarations: [Steps]\n})\nexport class StepsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-styleclass.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-styleclass.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-styleclass.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,189 @@
+import { CommonModule } from '@angular/common';
+import * as i0 from '@angular/core';
+import { Directive, Input, NgModule } from '@angular/core';
+import { DomHandler } from 'primeng/dom';
+
+class StyleClass {
+    constructor(el, renderer) {
+        this.el = el;
+        this.renderer = renderer;
+    }
+    ngAfterViewInit() {
+        this.eventListener = this.renderer.listen(this.el.nativeElement, 'click', () => {
+            this.target = this.resolveTarget();
+            if (this.toggleClass) {
+                if (DomHandler.hasClass(this.target, this.toggleClass))
+                    DomHandler.removeClass(this.target, this.toggleClass);
+                else
+                    DomHandler.addClass(this.target, this.toggleClass);
+            }
+            else {
+                if (this.target.offsetParent === null)
+                    this.enter();
+                else
+                    this.leave();
+            }
+        });
+    }
+    enter() {
+        if (this.enterActiveClass) {
+            if (!this.animating) {
+                this.animating = true;
+                if (this.enterActiveClass === 'slidedown') {
+                    this.target.style.height = '0px';
+                    DomHandler.removeClass(this.target, 'hidden');
+                    this.target.style.maxHeight = this.target.scrollHeight + 'px';
+                    DomHandler.addClass(this.target, 'hidden');
+                    this.target.style.height = '';
+                }
+                DomHandler.addClass(this.target, this.enterActiveClass);
+                if (this.enterClass) {
+                    DomHandler.removeClass(this.target, this.enterClass);
+                }
+                this.enterListener = this.renderer.listen(this.target, 'animationend', () => {
+                    DomHandler.removeClass(this.target, this.enterActiveClass);
+                    if (this.enterToClass) {
+                        DomHandler.addClass(this.target, this.enterToClass);
+                    }
+                    this.enterListener();
+                    if (this.enterActiveClass === 'slidedown') {
+                        this.target.style.maxHeight = '';
+                    }
+                    this.animating = false;
+                });
+            }
+        }
+        else {
+            if (this.enterClass) {
+                DomHandler.removeClass(this.target, this.enterClass);
+            }
+            if (this.enterToClass) {
+                DomHandler.addClass(this.target, this.enterToClass);
+            }
+        }
+        if (this.hideOnOutsideClick) {
+            this.bindDocumentListener();
+        }
+    }
+    leave() {
+        if (this.leaveActiveClass) {
+            if (!this.animating) {
+                this.animating = true;
+                DomHandler.addClass(this.target, this.leaveActiveClass);
+                if (this.leaveClass) {
+                    DomHandler.removeClass(this.target, this.leaveClass);
+                }
+                this.leaveListener = this.renderer.listen(this.target, 'animationend', () => {
+                    DomHandler.removeClass(this.target, this.leaveActiveClass);
+                    if (this.leaveToClass) {
+                        DomHandler.addClass(this.target, this.leaveToClass);
+                    }
+                    this.leaveListener();
+                    this.animating = false;
+                });
+            }
+        }
+        else {
+            if (this.leaveClass) {
+                DomHandler.removeClass(this.target, this.leaveClass);
+            }
+            if (this.leaveToClass) {
+                DomHandler.addClass(this.target, this.leaveToClass);
+            }
+        }
+        if (this.hideOnOutsideClick) {
+            this.unbindDocumentListener();
+        }
+    }
+    resolveTarget() {
+        if (this.target) {
+            return this.target;
+        }
+        switch (this.selector) {
+            case '@next':
+                return this.el.nativeElement.nextElementSibling;
+            case '@prev':
+                return this.el.nativeElement.previousElementSibling;
+            case '@parent':
+                return this.el.nativeElement.parentElement;
+            case '@grandparent':
+                return this.el.nativeElement.parentElement.parentElement;
+            default:
+                return document.querySelector(this.selector);
+        }
+    }
+    bindDocumentListener() {
+        if (!this.documentListener) {
+            this.documentListener = this.renderer.listen(this.el.nativeElement.ownerDocument, 'click', event => {
+                if (getComputedStyle(this.target).getPropertyValue('position') === 'static') {
+                    this.unbindDocumentListener();
+                }
+                else if (!this.el.nativeElement.isSameNode(event.target) && !this.el.nativeElement.contains(event.target) && !this.target.contains(event.target)) {
+                    this.leave();
+                }
+            });
+        }
+    }
+    unbindDocumentListener() {
+        if (this.documentListener) {
+            this.documentListener();
+            this.documentListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.target = null;
+        if (this.eventListener) {
+            this.eventListener();
+        }
+        this.unbindDocumentListener();
+    }
+}
+StyleClass.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StyleClass, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
+StyleClass.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: StyleClass, selector: "[pStyleClass]", inputs: { selector: ["pStyleClass", "selector"], enterClass: "enterClass", enterActiveClass: "enterActiveClass", enterToClass: "enterToClass", leaveClass: "leaveClass", leaveActiveClass: "leaveActiveClass", leaveToClass: "leaveToClass", hideOnOutsideClick: "hideOnOutsideClick", toggleClass: "toggleClass" }, host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StyleClass, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pStyleClass]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { selector: [{
+                type: Input,
+                args: ['pStyleClass']
+            }], enterClass: [{
+                type: Input
+            }], enterActiveClass: [{
+                type: Input
+            }], enterToClass: [{
+                type: Input
+            }], leaveClass: [{
+                type: Input
+            }], leaveActiveClass: [{
+                type: Input
+            }], leaveToClass: [{
+                type: Input
+            }], hideOnOutsideClick: [{
+                type: Input
+            }], toggleClass: [{
+                type: Input
+            }] } });
+class StyleClassModule {
+}
+StyleClassModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StyleClassModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+StyleClassModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StyleClassModule, declarations: [StyleClass], imports: [CommonModule], exports: [StyleClass] });
+StyleClassModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StyleClassModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: StyleClassModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [StyleClass],
+                    declarations: [StyleClass]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { StyleClass, StyleClassModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-styleclass.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-styleclass.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-styleclass.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-styleclass.mjs","sources":["../../src/app/components/styleclass/styleclass.ts","../../src/app/components/styleclass/primeng-styleclass.ts"],"sourcesContent":["import { CommonModule} from '@angular/common';\nimport { NgModule, Directive, ElementRef, Input, Renderer2, OnDestroy, AfterViewInit } from '@angular/core';\nimport { DomHandler } from 'primeng/dom';\n\n@Directive({\n    selector: '[pStyleClass]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class StyleClass implements AfterViewInit, OnDestroy {\n\n    constructor(public el: ElementRef, public renderer: Renderer2) {}\n\n    @Input('pStyleClass') selector: string;\n\n    @Input() enterClass: string;\n\n    @Input() enterActiveClass: string;\n\n    @Input() enterToClass: string;\n\n    @Input() leaveClass: string;\n\n    @Input() leaveActiveClass: string;\n\n    @Input() leaveToClass: string;\n\n    @Input() hideOnOutsideClick: boolean;\n\n    @Input() toggleClass: string;\n\n    eventListener: Function;\n\n    documentListener: Function;\n\n    target: HTMLElement;\n\n    enterListener: Function;\n\n    leaveListener: Function;\n\n    animating: boolean;\n\n    ngAfterViewInit() {\n        this.eventListener = this.renderer.listen(this.el.nativeElement, 'click', () => {\n            this.target = this.resolveTarget();\n\n            if (this.toggleClass) {\n                if (DomHandler.hasClass(this.target, this.toggleClass))\n                    DomHandler.removeClass(this.target, this.toggleClass);\n                else\n                    DomHandler.addClass(this.target, this.toggleClass);\n            }\n            else {\n                if (this.target.offsetParent === null)\n                    this.enter();\n                else\n                    this.leave();\n            }\n        });\n    }\n\n    enter() {\n        if (this.enterActiveClass) {\n            if (!this.animating) {\n                this.animating = true;\n\n                if (this.enterActiveClass === 'slidedown') {\n                    this.target.style.height = '0px';\n                    DomHandler.removeClass(this.target, 'hidden');\n                    this.target.style.maxHeight = this.target.scrollHeight + 'px';\n                    DomHandler.addClass(this.target, 'hidden');\n                    this.target.style.height = '';\n                }\n\n                DomHandler.addClass(this.target, this.enterActiveClass);\n                if (this.enterClass) {\n                    DomHandler.removeClass(this.target, this.enterClass);\n                }\n\n                this.enterListener = this.renderer.listen(this.target, 'animationend', () => {\n                    DomHandler.removeClass(this.target, this.enterActiveClass);\n                    if (this.enterToClass) {\n                        DomHandler.addClass(this.target, this.enterToClass);\n                    }\n                    this.enterListener();\n\n                    if (this.enterActiveClass === 'slidedown') {\n                        this.target.style.maxHeight = '';\n                    }\n                    this.animating = false;\n                });\n            }\n        }\n        else {\n            if (this.enterClass) {\n                DomHandler.removeClass(this.target, this.enterClass);\n            }\n\n            if (this.enterToClass) {\n                DomHandler.addClass(this.target, this.enterToClass);\n            }\n        }\n\n        if (this.hideOnOutsideClick) {\n            this.bindDocumentListener();\n        }\n    }\n\n    leave() {\n        if (this.leaveActiveClass) {\n            if (!this.animating) {\n                this.animating = true;\n                DomHandler.addClass(this.target, this.leaveActiveClass);\n                if (this.leaveClass) {\n                    DomHandler.removeClass(this.target, this.leaveClass);\n                }\n\n                this.leaveListener = this.renderer.listen(this.target, 'animationend', () => {\n                    DomHandler.removeClass(this.target, this.leaveActiveClass);\n                    if (this.leaveToClass) {\n                        DomHandler.addClass(this.target, this.leaveToClass);\n                    }\n                    this.leaveListener();\n                    this.animating = false;\n                });\n            }\n        }\n        else {\n            if (this.leaveClass) {\n                DomHandler.removeClass(this.target, this.leaveClass);\n            }\n\n            if (this.leaveToClass) {\n                DomHandler.addClass(this.target, this.leaveToClass);\n            }\n        }\n\n        if (this.hideOnOutsideClick) {\n            this.unbindDocumentListener();\n        }\n    }\n\n    resolveTarget() {\n        if (this.target) {\n            return this.target;\n        }\n\n        switch (this.selector) {\n            case '@next':\n                return this.el.nativeElement.nextElementSibling;\n\n            case '@prev':\n                return this.el.nativeElement.previousElementSibling;\n\n            case '@parent':\n                return this.el.nativeElement.parentElement;\n\n            case '@grandparent':\n                return this.el.nativeElement.parentElement.parentElement;\n\n            default:\n                return document.querySelector(this.selector);\n        }\n    }\n\n    bindDocumentListener() {\n        if (!this.documentListener) {\n            this.documentListener = this.renderer.listen(this.el.nativeElement.ownerDocument, 'click', event => {\n                if (getComputedStyle(this.target).getPropertyValue('position') === 'static') {\n                    this.unbindDocumentListener();\n                }\n                else  if (!this.el.nativeElement.isSameNode(event.target) && !this.el.nativeElement.contains(event.target) && !this.target.contains(event.target)) {\n                    this.leave();\n                }\n            });\n        }\n    }\n\n    unbindDocumentListener() {\n        if (this.documentListener) {\n            this.documentListener();\n            this.documentListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.target = null;\n        if (this.eventListener) {\n            this.eventListener();\n        }\n        this.unbindDocumentListener();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [StyleClass],\n    declarations: [StyleClass]\n})\nexport class StyleClassModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-table.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-table.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-table.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,4554 @@
+import * as i0 from '@angular/core';
+import { Injectable, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, ViewChild, ContentChildren, Directive, HostListener, Optional, NgModule } from '@angular/core';
+import * as i4 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i9 from '@angular/forms';
+import { FormsModule } from '@angular/forms';
+import * as i1 from 'primeng/api';
+import { FilterOperator, FilterMatchMode, PrimeTemplate, TranslationKeys, SharedModule } from 'primeng/api';
+import * as i2 from 'primeng/paginator';
+import { PaginatorModule } from 'primeng/paginator';
+import * as i8 from 'primeng/inputtext';
+import { InputTextModule } from 'primeng/inputtext';
+import * as i11 from 'primeng/button';
+import { ButtonModule } from 'primeng/button';
+import { SelectButtonModule } from 'primeng/selectbutton';
+import * as i6 from 'primeng/tristatecheckbox';
+import { TriStateCheckboxModule } from 'primeng/tristatecheckbox';
+import * as i7 from 'primeng/calendar';
+import { CalendarModule } from 'primeng/calendar';
+import * as i5 from 'primeng/inputnumber';
+import { InputNumberModule } from 'primeng/inputnumber';
+import * as i10 from 'primeng/dropdown';
+import { DropdownModule } from 'primeng/dropdown';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import { UniqueComponentId, ObjectUtils, ZIndexUtils } from 'primeng/utils';
+import { Subject } from 'rxjs';
+import * as i3 from '@angular/cdk/scrolling';
+import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
+import { trigger, transition, style, animate } from '@angular/animations';
+
+class TableService {
+    constructor() {
+        this.sortSource = new Subject();
+        this.selectionSource = new Subject();
+        this.contextMenuSource = new Subject();
+        this.valueSource = new Subject();
+        this.totalRecordsSource = new Subject();
+        this.columnsSource = new Subject();
+        this.resetSource = new Subject();
+        this.sortSource$ = this.sortSource.asObservable();
+        this.selectionSource$ = this.selectionSource.asObservable();
+        this.contextMenuSource$ = this.contextMenuSource.asObservable();
+        this.valueSource$ = this.valueSource.asObservable();
+        this.totalRecordsSource$ = this.totalRecordsSource.asObservable();
+        this.columnsSource$ = this.columnsSource.asObservable();
+        this.resetSource$ = this.resetSource.asObservable();
+    }
+    onSort(sortMeta) {
+        this.sortSource.next(sortMeta);
+    }
+    onSelectionChange() {
+        this.selectionSource.next(null);
+    }
+    onResetChange() {
+        this.resetSource.next(null);
+    }
+    onContextMenu(data) {
+        this.contextMenuSource.next(data);
+    }
+    onValueChange(value) {
+        this.valueSource.next(value);
+    }
+    onTotalRecordsChange(value) {
+        this.totalRecordsSource.next(value);
+    }
+    onColumnsChange(columns) {
+        this.columnsSource.next(columns);
+    }
+}
+TableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+TableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableService });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableService, decorators: [{
+            type: Injectable
+        }] });
+class Table {
+    constructor(el, zone, tableService, cd, filterService, overlayService) {
+        this.el = el;
+        this.zone = zone;
+        this.tableService = tableService;
+        this.cd = cd;
+        this.filterService = filterService;
+        this.overlayService = overlayService;
+        this.pageLinks = 5;
+        this.alwaysShowPaginator = true;
+        this.paginatorPosition = 'bottom';
+        this.paginatorDropdownScrollHeight = '200px';
+        this.currentPageReportTemplate = '{currentPage} of {totalPages}';
+        this.showFirstLastIcon = true;
+        this.showPageLinks = true;
+        this.defaultSortOrder = 1;
+        this.sortMode = 'single';
+        this.resetPageOnSort = true;
+        this.selectionChange = new EventEmitter();
+        this.contextMenuSelectionChange = new EventEmitter();
+        this.contextMenuSelectionMode = "separate";
+        this.rowTrackBy = (index, item) => item;
+        this.lazy = false;
+        this.lazyLoadOnInit = true;
+        this.compareSelectionBy = 'deepEquals';
+        this.csvSeparator = ',';
+        this.exportFilename = 'download';
+        this.filters = {};
+        this.filterDelay = 300;
+        this.expandedRowKeys = {};
+        this.editingRowKeys = {};
+        this.rowExpandMode = 'multiple';
+        this.scrollDirection = "vertical";
+        this.virtualScrollDelay = 250;
+        this.virtualRowHeight = 28;
+        this.columnResizeMode = 'fit';
+        this.loadingIcon = 'pi pi-spinner';
+        this.showLoader = true;
+        this.showInitialSortBadge = true;
+        this.stateStorage = 'session';
+        this.editMode = 'cell';
+        this.groupRowsByOrder = 1;
+        this.responsiveLayout = 'stack';
+        this.breakpoint = '960px';
+        this.onRowSelect = new EventEmitter();
+        this.onRowUnselect = new EventEmitter();
+        this.onPage = new EventEmitter();
+        this.onSort = new EventEmitter();
+        this.onFilter = new EventEmitter();
+        this.onLazyLoad = new EventEmitter();
+        this.onRowExpand = new EventEmitter();
+        this.onRowCollapse = new EventEmitter();
+        this.onContextMenuSelect = new EventEmitter();
+        this.onColResize = new EventEmitter();
+        this.onColReorder = new EventEmitter();
+        this.onRowReorder = new EventEmitter();
+        this.onEditInit = new EventEmitter();
+        this.onEditComplete = new EventEmitter();
+        this.onEditCancel = new EventEmitter();
+        this.onHeaderCheckboxToggle = new EventEmitter();
+        this.sortFunction = new EventEmitter();
+        this.firstChange = new EventEmitter();
+        this.rowsChange = new EventEmitter();
+        this.onStateSave = new EventEmitter();
+        this.onStateRestore = new EventEmitter();
+        this._value = [];
+        this._totalRecords = 0;
+        this._first = 0;
+        this.selectionKeys = {};
+        this._sortOrder = 1;
+        this.columnResizing = false;
+        this.rowGroupHeaderStyleObject = {};
+        this.id = UniqueComponentId();
+    }
+    ngOnInit() {
+        if (this.lazy && this.lazyLoadOnInit) {
+            if (!this.virtualScroll) {
+                this.onLazyLoad.emit(this.createLazyLoadMetadata());
+            }
+            if (this.restoringFilter) {
+                this.restoringFilter = false;
+            }
+        }
+        if (this.responsiveLayout === 'stack' && !this.scrollable) {
+            this.createResponsiveStyle();
+        }
+        this.initialized = true;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'caption':
+                    this.captionTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'headergrouped':
+                    this.headerGroupedTemplate = item.template;
+                    break;
+                case 'body':
+                    this.bodyTemplate = item.template;
+                    break;
+                case 'loadingbody':
+                    this.loadingBodyTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                case 'footergrouped':
+                    this.footerGroupedTemplate = item.template;
+                    break;
+                case 'summary':
+                    this.summaryTemplate = item.template;
+                    break;
+                case 'colgroup':
+                    this.colGroupTemplate = item.template;
+                    break;
+                case 'rowexpansion':
+                    this.expandedRowTemplate = item.template;
+                    break;
+                case 'groupheader':
+                    this.groupHeaderTemplate = item.template;
+                    break;
+                case 'rowspan':
+                    this.rowspanTemplate = item.template;
+                    break;
+                case 'groupfooter':
+                    this.groupFooterTemplate = item.template;
+                    break;
+                case 'frozenrows':
+                    this.frozenRowsTemplate = item.template;
+                    break;
+                case 'frozenheader':
+                    this.frozenHeaderTemplate = item.template;
+                    break;
+                case 'frozenbody':
+                    this.frozenBodyTemplate = item.template;
+                    break;
+                case 'frozenfooter':
+                    this.frozenFooterTemplate = item.template;
+                    break;
+                case 'frozencolgroup':
+                    this.frozenColGroupTemplate = item.template;
+                    break;
+                case 'frozenrowexpansion':
+                    this.frozenExpandedRowTemplate = item.template;
+                    break;
+                case 'emptymessage':
+                    this.emptyMessageTemplate = item.template;
+                    break;
+                case 'paginatorleft':
+                    this.paginatorLeftTemplate = item.template;
+                    break;
+                case 'paginatorright':
+                    this.paginatorRightTemplate = item.template;
+                    break;
+                case 'paginatordropdownitem':
+                    this.paginatorDropdownItemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngAfterViewInit() {
+        if (this.isStateful() && this.resizableColumns) {
+            this.restoreColumnWidths();
+        }
+        if (this.scrollable && this.virtualScroll) {
+            this.virtualScrollSubscription = this.virtualScrollBody.renderedRangeStream.subscribe(range => {
+                let top = range.start * this.virtualRowHeight * -1;
+                this.tableHeaderViewChild.nativeElement.style.top = top + 'px';
+            });
+        }
+    }
+    ngOnChanges(simpleChange) {
+        if (simpleChange.value) {
+            if (this.isStateful() && !this.stateRestored) {
+                this.restoreState();
+            }
+            this._value = simpleChange.value.currentValue;
+            if (!this.lazy) {
+                this.totalRecords = (this._value ? this._value.length : 0);
+                if (this.sortMode == 'single' && (this.sortField || this.groupRowsBy))
+                    this.sortSingle();
+                else if (this.sortMode == 'multiple' && (this.multiSortMeta || this.groupRowsBy))
+                    this.sortMultiple();
+                else if (this.hasFilter()) //sort already filters
+                    this._filter();
+            }
+            this.tableService.onValueChange(simpleChange.value.currentValue);
+        }
+        if (simpleChange.columns) {
+            this._columns = simpleChange.columns.currentValue;
+            this.tableService.onColumnsChange(simpleChange.columns.currentValue);
+            if (this._columns && this.isStateful() && this.reorderableColumns && !this.columnOrderStateRestored) {
+                this.restoreColumnOrder();
+            }
+        }
+        if (simpleChange.sortField) {
+            this._sortField = simpleChange.sortField.currentValue;
+            //avoid triggering lazy load prior to lazy initialization at onInit
+            if (!this.lazy || this.initialized) {
+                if (this.sortMode === 'single') {
+                    this.sortSingle();
+                }
+            }
+        }
+        if (simpleChange.groupRowsBy) {
+            //avoid triggering lazy load prior to lazy initialization at onInit
+            if (!this.lazy || this.initialized) {
+                if (this.sortMode === 'single') {
+                    this.sortSingle();
+                }
+            }
+        }
+        if (simpleChange.sortOrder) {
+            this._sortOrder = simpleChange.sortOrder.currentValue;
+            //avoid triggering lazy load prior to lazy initialization at onInit
+            if (!this.lazy || this.initialized) {
+                if (this.sortMode === 'single') {
+                    this.sortSingle();
+                }
+            }
+        }
+        if (simpleChange.groupRowsByOrder) {
+            //avoid triggering lazy load prior to lazy initialization at onInit
+            if (!this.lazy || this.initialized) {
+                if (this.sortMode === 'single') {
+                    this.sortSingle();
+                }
+            }
+        }
+        if (simpleChange.multiSortMeta) {
+            this._multiSortMeta = simpleChange.multiSortMeta.currentValue;
+            if (this.sortMode === 'multiple' && (this.initialized || (!this.lazy && !this.virtualScroll))) {
+                this.sortMultiple();
+            }
+        }
+        if (simpleChange.selection) {
+            this._selection = simpleChange.selection.currentValue;
+            if (!this.preventSelectionSetterPropagation) {
+                this.updateSelectionKeys();
+                this.tableService.onSelectionChange();
+            }
+            this.preventSelectionSetterPropagation = false;
+        }
+    }
+    get value() {
+        return this._value;
+    }
+    set value(val) {
+        this._value = val;
+    }
+    get columns() {
+        return this._columns;
+    }
+    set columns(cols) {
+        this._columns = cols;
+    }
+    get first() {
+        return this._first;
+    }
+    set first(val) {
+        this._first = val;
+    }
+    get rows() {
+        return this._rows;
+    }
+    set rows(val) {
+        this._rows = val;
+    }
+    get totalRecords() {
+        return this._totalRecords;
+    }
+    set totalRecords(val) {
+        this._totalRecords = val;
+        this.tableService.onTotalRecordsChange(this._totalRecords);
+    }
+    get sortField() {
+        return this._sortField;
+    }
+    set sortField(val) {
+        this._sortField = val;
+    }
+    get sortOrder() {
+        return this._sortOrder;
+    }
+    set sortOrder(val) {
+        this._sortOrder = val;
+    }
+    get multiSortMeta() {
+        return this._multiSortMeta;
+    }
+    set multiSortMeta(val) {
+        this._multiSortMeta = val;
+    }
+    get selection() {
+        return this._selection;
+    }
+    set selection(val) {
+        this._selection = val;
+    }
+    get dataToRender() {
+        let data = this.filteredValue || this.value;
+        return data ? ((this.paginator && !this.lazy) ? (data.slice(this.first, this.first + this.rows)) : data) : [];
+    }
+    updateSelectionKeys() {
+        if (this.dataKey && this._selection) {
+            this.selectionKeys = {};
+            if (Array.isArray(this._selection)) {
+                for (let data of this._selection) {
+                    this.selectionKeys[String(ObjectUtils.resolveFieldData(data, this.dataKey))] = 1;
+                }
+            }
+            else {
+                this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection, this.dataKey))] = 1;
+            }
+        }
+    }
+    onPageChange(event) {
+        this.first = event.first;
+        this.rows = event.rows;
+        if (this.lazy) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        this.onPage.emit({
+            first: this.first,
+            rows: this.rows
+        });
+        this.firstChange.emit(this.first);
+        this.rowsChange.emit(this.rows);
+        this.tableService.onValueChange(this.value);
+        if (this.isStateful()) {
+            this.saveState();
+        }
+        this.anchorRowIndex = null;
+        if (this.scrollable) {
+            this.resetScrollTop();
+        }
+    }
+    sort(event) {
+        let originalEvent = event.originalEvent;
+        if (this.sortMode === 'single') {
+            this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;
+            this._sortField = event.field;
+            if (this.resetPageOnSort) {
+                this._first = 0;
+                this.firstChange.emit(this._first);
+                if (this.scrollable) {
+                    this.resetScrollTop();
+                }
+            }
+            this.sortSingle();
+        }
+        if (this.sortMode === 'multiple') {
+            let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;
+            let sortMeta = this.getSortMeta(event.field);
+            if (sortMeta) {
+                if (!metaKey) {
+                    this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];
+                    if (this.resetPageOnSort) {
+                        this._first = 0;
+                        this.firstChange.emit(this._first);
+                        if (this.scrollable) {
+                            this.resetScrollTop();
+                        }
+                    }
+                }
+                else {
+                    sortMeta.order = sortMeta.order * -1;
+                }
+            }
+            else {
+                if (!metaKey || !this.multiSortMeta) {
+                    this._multiSortMeta = [];
+                    if (this.resetPageOnSort) {
+                        this._first = 0;
+                        this.firstChange.emit(this._first);
+                    }
+                }
+                this._multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });
+            }
+            this.sortMultiple();
+        }
+        if (this.isStateful()) {
+            this.saveState();
+        }
+        this.anchorRowIndex = null;
+    }
+    sortSingle() {
+        let field = this.sortField || this.groupRowsBy;
+        let order = this.sortField ? this.sortOrder : this.groupRowsByOrder;
+        if (this.groupRowsBy && this.sortField && this.groupRowsBy !== this.sortField) {
+            this._multiSortMeta = [this.getGroupRowsMeta(), { field: this.sortField, order: this.sortOrder }];
+            this.sortMultiple();
+            return;
+        }
+        if (field && order) {
+            if (this.restoringSort) {
+                this.restoringSort = false;
+            }
+            if (this.lazy) {
+                this.onLazyLoad.emit(this.createLazyLoadMetadata());
+            }
+            else if (this.value) {
+                if (this.customSort) {
+                    this.sortFunction.emit({
+                        data: this.value,
+                        mode: this.sortMode,
+                        field: field,
+                        order: order
+                    });
+                }
+                else {
+                    this.value.sort((data1, data2) => {
+                        let value1 = ObjectUtils.resolveFieldData(data1, field);
+                        let value2 = ObjectUtils.resolveFieldData(data2, field);
+                        let result = null;
+                        if (value1 == null && value2 != null)
+                            result = -1;
+                        else if (value1 != null && value2 == null)
+                            result = 1;
+                        else if (value1 == null && value2 == null)
+                            result = 0;
+                        else if (typeof value1 === 'string' && typeof value2 === 'string')
+                            result = value1.localeCompare(value2);
+                        else
+                            result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
+                        return (order * result);
+                    });
+                    this._value = [...this.value];
+                }
+                if (this.hasFilter()) {
+                    this._filter();
+                }
+            }
+            let sortMeta = {
+                field: field,
+                order: order
+            };
+            this.onSort.emit(sortMeta);
+            this.tableService.onSort(sortMeta);
+        }
+    }
+    sortMultiple() {
+        if (this.groupRowsBy) {
+            if (!this._multiSortMeta)
+                this._multiSortMeta = [this.getGroupRowsMeta()];
+            else if (this.multiSortMeta[0].field !== this.groupRowsBy)
+                this._multiSortMeta = [this.getGroupRowsMeta(), ...this._multiSortMeta];
+        }
+        if (this.multiSortMeta) {
+            if (this.lazy) {
+                this.onLazyLoad.emit(this.createLazyLoadMetadata());
+            }
+            else if (this.value) {
+                if (this.customSort) {
+                    this.sortFunction.emit({
+                        data: this.value,
+                        mode: this.sortMode,
+                        multiSortMeta: this.multiSortMeta
+                    });
+                }
+                else {
+                    this.value.sort((data1, data2) => {
+                        return this.multisortField(data1, data2, this.multiSortMeta, 0);
+                    });
+                    this._value = [...this.value];
+                }
+                if (this.hasFilter()) {
+                    this._filter();
+                }
+            }
+            this.onSort.emit({
+                multisortmeta: this.multiSortMeta
+            });
+            this.tableService.onSort(this.multiSortMeta);
+        }
+    }
+    multisortField(data1, data2, multiSortMeta, index) {
+        let value1 = ObjectUtils.resolveFieldData(data1, multiSortMeta[index].field);
+        let value2 = ObjectUtils.resolveFieldData(data2, multiSortMeta[index].field);
+        let result = null;
+        if (value1 == null && value2 != null)
+            result = -1;
+        else if (value1 != null && value2 == null)
+            result = 1;
+        else if (value1 == null && value2 == null)
+            result = 0;
+        else if (typeof value1 == 'string' || value1 instanceof String) {
+            if (value1.localeCompare && (value1 != value2)) {
+                return (multiSortMeta[index].order * value1.localeCompare(value2));
+            }
+        }
+        else {
+            result = (value1 < value2) ? -1 : 1;
+        }
+        if (value1 == value2) {
+            return (multiSortMeta.length - 1) > (index) ? (this.multisortField(data1, data2, multiSortMeta, index + 1)) : 0;
+        }
+        return (multiSortMeta[index].order * result);
+    }
+    getSortMeta(field) {
+        if (this.multiSortMeta && this.multiSortMeta.length) {
+            for (let i = 0; i < this.multiSortMeta.length; i++) {
+                if (this.multiSortMeta[i].field === field) {
+                    return this.multiSortMeta[i];
+                }
+            }
+        }
+        return null;
+    }
+    isSorted(field) {
+        if (this.sortMode === 'single') {
+            return (this.sortField && this.sortField === field);
+        }
+        else if (this.sortMode === 'multiple') {
+            let sorted = false;
+            if (this.multiSortMeta) {
+                for (let i = 0; i < this.multiSortMeta.length; i++) {
+                    if (this.multiSortMeta[i].field == field) {
+                        sorted = true;
+                        break;
+                    }
+                }
+            }
+            return sorted;
+        }
+    }
+    handleRowClick(event) {
+        let target = event.originalEvent.target;
+        let targetNode = target.nodeName;
+        let parentNode = target.parentElement && target.parentElement.nodeName;
+        if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' ||
+            parentNode == 'INPUT' || parentNode == 'BUTTON' || parentNode == 'A' ||
+            (DomHandler.hasClass(event.originalEvent.target, 'p-clickable'))) {
+            return;
+        }
+        if (this.selectionMode) {
+            this.preventSelectionSetterPropagation = true;
+            if (this.isMultipleSelectionMode() && event.originalEvent.shiftKey && this.anchorRowIndex != null) {
+                DomHandler.clearSelection();
+                if (this.rangeRowIndex != null) {
+                    this.clearSelectionRange(event.originalEvent);
+                }
+                this.rangeRowIndex = event.rowIndex;
+                this.selectRange(event.originalEvent, event.rowIndex);
+            }
+            else {
+                let rowData = event.rowData;
+                let selected = this.isSelected(rowData);
+                let metaSelection = this.rowTouched ? false : this.metaKeySelection;
+                let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;
+                this.anchorRowIndex = event.rowIndex;
+                this.rangeRowIndex = event.rowIndex;
+                if (metaSelection) {
+                    let metaKey = event.originalEvent.metaKey || event.originalEvent.ctrlKey;
+                    if (selected && metaKey) {
+                        if (this.isSingleSelectionMode()) {
+                            this._selection = null;
+                            this.selectionKeys = {};
+                            this.selectionChange.emit(null);
+                        }
+                        else {
+                            let selectionIndex = this.findIndexInSelection(rowData);
+                            this._selection = this.selection.filter((val, i) => i != selectionIndex);
+                            this.selectionChange.emit(this.selection);
+                            if (dataKeyValue) {
+                                delete this.selectionKeys[dataKeyValue];
+                            }
+                        }
+                        this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });
+                    }
+                    else {
+                        if (this.isSingleSelectionMode()) {
+                            this._selection = rowData;
+                            this.selectionChange.emit(rowData);
+                            if (dataKeyValue) {
+                                this.selectionKeys = {};
+                                this.selectionKeys[dataKeyValue] = 1;
+                            }
+                        }
+                        else if (this.isMultipleSelectionMode()) {
+                            if (metaKey) {
+                                this._selection = this.selection || [];
+                            }
+                            else {
+                                this._selection = [];
+                                this.selectionKeys = {};
+                            }
+                            this._selection = [...this.selection, rowData];
+                            this.selectionChange.emit(this.selection);
+                            if (dataKeyValue) {
+                                this.selectionKeys[dataKeyValue] = 1;
+                            }
+                        }
+                        this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });
+                    }
+                }
+                else {
+                    if (this.selectionMode === 'single') {
+                        if (selected) {
+                            this._selection = null;
+                            this.selectionKeys = {};
+                            this.selectionChange.emit(this.selection);
+                            this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });
+                        }
+                        else {
+                            this._selection = rowData;
+                            this.selectionChange.emit(this.selection);
+                            this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });
+                            if (dataKeyValue) {
+                                this.selectionKeys = {};
+                                this.selectionKeys[dataKeyValue] = 1;
+                            }
+                        }
+                    }
+                    else if (this.selectionMode === 'multiple') {
+                        if (selected) {
+                            let selectionIndex = this.findIndexInSelection(rowData);
+                            this._selection = this.selection.filter((val, i) => i != selectionIndex);
+                            this.selectionChange.emit(this.selection);
+                            this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });
+                            if (dataKeyValue) {
+                                delete this.selectionKeys[dataKeyValue];
+                            }
+                        }
+                        else {
+                            this._selection = this.selection ? [...this.selection, rowData] : [rowData];
+                            this.selectionChange.emit(this.selection);
+                            this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });
+                            if (dataKeyValue) {
+                                this.selectionKeys[dataKeyValue] = 1;
+                            }
+                        }
+                    }
+                }
+            }
+            this.tableService.onSelectionChange();
+            if (this.isStateful()) {
+                this.saveState();
+            }
+        }
+        this.rowTouched = false;
+    }
+    handleRowTouchEnd(event) {
+        this.rowTouched = true;
+    }
+    handleRowRightClick(event) {
+        if (this.contextMenu) {
+            const rowData = event.rowData;
+            if (this.contextMenuSelectionMode === 'separate') {
+                this.contextMenuSelection = rowData;
+                this.contextMenuSelectionChange.emit(rowData);
+                this.onContextMenuSelect.emit({ originalEvent: event.originalEvent, data: rowData, index: event.rowIndex });
+                this.contextMenu.show(event.originalEvent);
+                this.tableService.onContextMenu(rowData);
+            }
+            else if (this.contextMenuSelectionMode === 'joint') {
+                this.preventSelectionSetterPropagation = true;
+                let selected = this.isSelected(rowData);
+                let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;
+                if (!selected) {
+                    if (this.isSingleSelectionMode()) {
+                        this.selection = rowData;
+                        this.selectionChange.emit(rowData);
+                        if (dataKeyValue) {
+                            this.selectionKeys = {};
+                            this.selectionKeys[dataKeyValue] = 1;
+                        }
+                    }
+                    else if (this.isMultipleSelectionMode()) {
+                        this._selection = this.selection ? [...this.selection, rowData] : [rowData];
+                        this.selectionChange.emit(this.selection);
+                        if (dataKeyValue) {
+                            this.selectionKeys[dataKeyValue] = 1;
+                        }
+                    }
+                }
+                this.tableService.onSelectionChange();
+                this.contextMenu.show(event.originalEvent);
+                this.onContextMenuSelect.emit({ originalEvent: event, data: rowData, index: event.rowIndex });
+            }
+        }
+    }
+    selectRange(event, rowIndex) {
+        let rangeStart, rangeEnd;
+        if (this.anchorRowIndex > rowIndex) {
+            rangeStart = rowIndex;
+            rangeEnd = this.anchorRowIndex;
+        }
+        else if (this.anchorRowIndex < rowIndex) {
+            rangeStart = this.anchorRowIndex;
+            rangeEnd = rowIndex;
+        }
+        else {
+            rangeStart = rowIndex;
+            rangeEnd = rowIndex;
+        }
+        if (this.lazy && this.paginator) {
+            rangeStart -= this.first;
+            rangeEnd -= this.first;
+        }
+        let rangeRowsData = [];
+        for (let i = rangeStart; i <= rangeEnd; i++) {
+            let rangeRowData = this.filteredValue ? this.filteredValue[i] : this.value[i];
+            if (!this.isSelected(rangeRowData)) {
+                rangeRowsData.push(rangeRowData);
+                this._selection = [...this.selection, rangeRowData];
+                let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;
+                if (dataKeyValue) {
+                    this.selectionKeys[dataKeyValue] = 1;
+                }
+            }
+        }
+        this.selectionChange.emit(this.selection);
+        this.onRowSelect.emit({ originalEvent: event, data: rangeRowsData, type: 'row' });
+    }
+    clearSelectionRange(event) {
+        let rangeStart, rangeEnd;
+        if (this.rangeRowIndex > this.anchorRowIndex) {
+            rangeStart = this.anchorRowIndex;
+            rangeEnd = this.rangeRowIndex;
+        }
+        else if (this.rangeRowIndex < this.anchorRowIndex) {
+            rangeStart = this.rangeRowIndex;
+            rangeEnd = this.anchorRowIndex;
+        }
+        else {
+            rangeStart = this.rangeRowIndex;
+            rangeEnd = this.rangeRowIndex;
+        }
+        for (let i = rangeStart; i <= rangeEnd; i++) {
+            let rangeRowData = this.value[i];
+            let selectionIndex = this.findIndexInSelection(rangeRowData);
+            this._selection = this.selection.filter((val, i) => i != selectionIndex);
+            let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;
+            if (dataKeyValue) {
+                delete this.selectionKeys[dataKeyValue];
+            }
+            this.onRowUnselect.emit({ originalEvent: event, data: rangeRowData, type: 'row' });
+        }
+    }
+    isSelected(rowData) {
+        if (rowData && this.selection) {
+            if (this.dataKey) {
+                return this.selectionKeys[ObjectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;
+            }
+            else {
+                if (this.selection instanceof Array)
+                    return this.findIndexInSelection(rowData) > -1;
+                else
+                    return this.equals(rowData, this.selection);
+            }
+        }
+        return false;
+    }
+    findIndexInSelection(rowData) {
+        let index = -1;
+        if (this.selection && this.selection.length) {
+            for (let i = 0; i < this.selection.length; i++) {
+                if (this.equals(rowData, this.selection[i])) {
+                    index = i;
+                    break;
+                }
+            }
+        }
+        return index;
+    }
+    toggleRowWithRadio(event, rowData) {
+        this.preventSelectionSetterPropagation = true;
+        if (this.selection != rowData) {
+            this._selection = rowData;
+            this.selectionChange.emit(this.selection);
+            this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton' });
+            if (this.dataKey) {
+                this.selectionKeys = {};
+                this.selectionKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] = 1;
+            }
+        }
+        else {
+            this._selection = null;
+            this.selectionChange.emit(this.selection);
+            this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton' });
+        }
+        this.tableService.onSelectionChange();
+        if (this.isStateful()) {
+            this.saveState();
+        }
+    }
+    toggleRowWithCheckbox(event, rowData) {
+        this.selection = this.selection || [];
+        let selected = this.isSelected(rowData);
+        let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;
+        this.preventSelectionSetterPropagation = true;
+        if (selected) {
+            let selectionIndex = this.findIndexInSelection(rowData);
+            this._selection = this.selection.filter((val, i) => i != selectionIndex);
+            this.selectionChange.emit(this.selection);
+            this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });
+            if (dataKeyValue) {
+                delete this.selectionKeys[dataKeyValue];
+            }
+        }
+        else {
+            this._selection = this.selection ? [...this.selection, rowData] : [rowData];
+            this.selectionChange.emit(this.selection);
+            this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });
+            if (dataKeyValue) {
+                this.selectionKeys[dataKeyValue] = 1;
+            }
+        }
+        this.tableService.onSelectionChange();
+        if (this.isStateful()) {
+            this.saveState();
+        }
+    }
+    toggleRowsWithCheckbox(event, check) {
+        this._selection = check ? this.filteredValue ? this.filteredValue.slice() : this.value.slice() : [];
+        this.preventSelectionSetterPropagation = true;
+        this.updateSelectionKeys();
+        this.selectionChange.emit(this._selection);
+        this.tableService.onSelectionChange();
+        this.onHeaderCheckboxToggle.emit({ originalEvent: event, checked: check });
+        if (this.isStateful()) {
+            this.saveState();
+        }
+    }
+    equals(data1, data2) {
+        return this.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, this.dataKey);
+    }
+    /* Legacy Filtering for custom elements */
+    filter(value, field, matchMode) {
+        if (this.filterTimeout) {
+            clearTimeout(this.filterTimeout);
+        }
+        if (!this.isFilterBlank(value)) {
+            this.filters[field] = { value: value, matchMode: matchMode };
+        }
+        else if (this.filters[field]) {
+            delete this.filters[field];
+        }
+        this.filterTimeout = setTimeout(() => {
+            this._filter();
+            this.filterTimeout = null;
+        }, this.filterDelay);
+        this.anchorRowIndex = null;
+    }
+    filterGlobal(value, matchMode) {
+        this.filter(value, 'global', matchMode);
+    }
+    isFilterBlank(filter) {
+        if (filter !== null && filter !== undefined) {
+            if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))
+                return true;
+            else
+                return false;
+        }
+        return true;
+    }
+    _filter() {
+        if (!this.restoringFilter) {
+            this.first = 0;
+            this.firstChange.emit(this.first);
+        }
+        if (this.lazy) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        else {
+            if (!this.value) {
+                return;
+            }
+            if (!this.hasFilter()) {
+                this.filteredValue = null;
+                if (this.paginator) {
+                    this.totalRecords = this.value ? this.value.length : 0;
+                }
+            }
+            else {
+                let globalFilterFieldsArray;
+                if (this.filters['global']) {
+                    if (!this.columns && !this.globalFilterFields)
+                        throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');
+                    else
+                        globalFilterFieldsArray = this.globalFilterFields || this.columns;
+                }
+                this.filteredValue = [];
+                for (let i = 0; i < this.value.length; i++) {
+                    let localMatch = true;
+                    let globalMatch = false;
+                    let localFiltered = false;
+                    for (let prop in this.filters) {
+                        if (this.filters.hasOwnProperty(prop) && prop !== 'global') {
+                            localFiltered = true;
+                            let filterField = prop;
+                            let filterMeta = this.filters[filterField];
+                            if (Array.isArray(filterMeta)) {
+                                for (let meta of filterMeta) {
+                                    localMatch = this.executeLocalFilter(filterField, this.value[i], meta);
+                                    if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {
+                                        break;
+                                    }
+                                }
+                            }
+                            else {
+                                localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);
+                            }
+                            if (!localMatch) {
+                                break;
+                            }
+                        }
+                    }
+                    if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {
+                        for (let j = 0; j < globalFilterFieldsArray.length; j++) {
+                            let globalFilterField = globalFilterFieldsArray[j].field || globalFilterFieldsArray[j];
+                            globalMatch = this.filterService.filters[this.filters['global'].matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), this.filters['global'].value, this.filterLocale);
+                            if (globalMatch) {
+                                break;
+                            }
+                        }
+                    }
+                    let matches;
+                    if (this.filters['global']) {
+                        matches = localFiltered ? (localFiltered && localMatch && globalMatch) : globalMatch;
+                    }
+                    else {
+                        matches = localFiltered && localMatch;
+                    }
+                    if (matches) {
+                        this.filteredValue.push(this.value[i]);
+                    }
+                }
+                if (this.filteredValue.length === this.value.length) {
+                    this.filteredValue = null;
+                }
+                if (this.paginator) {
+                    this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;
+                }
+            }
+        }
+        this.onFilter.emit({
+            filters: this.filters,
+            filteredValue: this.filteredValue || this.value
+        });
+        this.tableService.onValueChange(this.value);
+        if (this.isStateful() && !this.restoringFilter) {
+            this.saveState();
+        }
+        if (this.restoringFilter) {
+            this.restoringFilter = false;
+        }
+        this.cd.markForCheck();
+        if (this.scrollable) {
+            this.resetScrollTop();
+        }
+    }
+    executeLocalFilter(field, rowData, filterMeta) {
+        let filterValue = filterMeta.value;
+        let filterMatchMode = filterMeta.matchMode || FilterMatchMode.STARTS_WITH;
+        let dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);
+        let filterConstraint = this.filterService.filters[filterMatchMode];
+        return filterConstraint(dataFieldValue, filterValue, this.filterLocale);
+    }
+    hasFilter() {
+        let empty = true;
+        for (let prop in this.filters) {
+            if (this.filters.hasOwnProperty(prop)) {
+                empty = false;
+                break;
+            }
+        }
+        return !empty;
+    }
+    createLazyLoadMetadata() {
+        return {
+            first: this.first,
+            rows: this.rows,
+            sortField: this.sortField,
+            sortOrder: this.sortOrder,
+            filters: this.filters,
+            globalFilter: this.filters && this.filters['global'] ? this.filters['global'].value : null,
+            multiSortMeta: this.multiSortMeta
+        };
+    }
+    clear() {
+        this._sortField = null;
+        this._sortOrder = this.defaultSortOrder;
+        this._multiSortMeta = null;
+        this.tableService.onSort(null);
+        this.filteredValue = null;
+        this.tableService.onResetChange();
+        this.first = 0;
+        this.firstChange.emit(this.first);
+        if (this.lazy) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        else {
+            this.totalRecords = (this._value ? this._value.length : 0);
+        }
+    }
+    reset() {
+        this.clear();
+    }
+    exportCSV(options) {
+        let data;
+        let csv = '';
+        let columns = this.frozenColumns ? [...this.frozenColumns, ...this.columns] : this.columns;
+        if (options && options.selectionOnly) {
+            data = this.selection || [];
+        }
+        else {
+            data = this.filteredValue || this.value;
+            if (this.frozenValue) {
+                data = data ? [...this.frozenValue, ...data] : this.frozenValue;
+            }
+        }
+        //headers
+        for (let i = 0; i < columns.length; i++) {
+            let column = columns[i];
+            if (column.exportable !== false && column.field) {
+                csv += '"' + (column.header || column.field) + '"';
+                if (i < (columns.length - 1)) {
+                    csv += this.csvSeparator;
+                }
+            }
+        }
+        //body
+        data.forEach((record, i) => {
+            csv += '\n';
+            for (let i = 0; i < columns.length; i++) {
+                let column = columns[i];
+                if (column.exportable !== false && column.field) {
+                    let cellData = ObjectUtils.resolveFieldData(record, column.field);
+                    if (cellData != null) {
+                        if (this.exportFunction) {
+                            cellData = this.exportFunction({
+                                data: cellData,
+                                field: column.field
+                            });
+                        }
+                        else
+                            cellData = String(cellData).replace(/"/g, '""');
+                    }
+                    else
+                        cellData = '';
+                    csv += '"' + cellData + '"';
+                    if (i < (columns.length - 1)) {
+                        csv += this.csvSeparator;
+                    }
+                }
+            }
+        });
+        let blob = new Blob([csv], {
+            type: 'text/csv;charset=utf-8;'
+        });
+        let link = document.createElement("a");
+        link.style.display = 'none';
+        document.body.appendChild(link);
+        if (link.download !== undefined) {
+            link.setAttribute('href', URL.createObjectURL(blob));
+            link.setAttribute('download', this.exportFilename + '.csv');
+            link.click();
+        }
+        else {
+            csv = 'data:text/csv;charset=utf-8,' + csv;
+            window.open(encodeURI(csv));
+        }
+        document.body.removeChild(link);
+    }
+    resetScrollTop() {
+        if (this.virtualScroll)
+            this.scrollToVirtualIndex(0);
+        else
+            this.scrollTo({ top: 0 });
+    }
+    scrollToVirtualIndex(index) {
+        if (this.virtualScrollBody) {
+            this.virtualScrollBody.scrollToIndex(index);
+        }
+    }
+    onScrollIndexChange(index) {
+        if (this.lazy) {
+            if (this.virtualScrollTimeout) {
+                clearTimeout(this.virtualScrollTimeout);
+            }
+            this.virtualScrollTimeout = setTimeout(() => {
+                let page = Math.floor(index / this.rows);
+                let virtualScrollOffset = page === 0 ? 0 : (page - 1) * this.rows;
+                let virtualScrollChunkSize = page === 0 ? this.rows * 2 : this.rows * 3;
+                if (page !== this.virtualPage) {
+                    this.virtualPage = page;
+                    this.onLazyLoad.emit({
+                        first: virtualScrollOffset,
+                        rows: virtualScrollChunkSize,
+                        sortField: this.sortField,
+                        sortOrder: this.sortOrder,
+                        filters: this.filters,
+                        globalFilter: this.filters && this.filters['global'] ? this.filters['global'].value : null,
+                        multiSortMeta: this.multiSortMeta
+                    });
+                }
+            }, this.virtualScrollDelay);
+        }
+    }
+    scrollTo(options) {
+        if (this.virtualScrollBody) {
+            this.virtualScrollBody.scrollTo(options);
+        }
+        else {
+            if (this.wrapperViewChild.nativeElement.scrollTo) {
+                this.wrapperViewChild.nativeElement.scrollTo(options);
+            }
+            else {
+                this.wrapperViewChild.nativeElement.scrollLeft = options.left;
+                this.wrapperViewChild.nativeElement.scrollTop = options.top;
+            }
+        }
+    }
+    updateEditingCell(cell, data, field, index) {
+        this.editingCell = cell;
+        this.editingCellData = data;
+        this.editingCellField = field;
+        this.editingCellRowIndex = index;
+        this.bindDocumentEditListener();
+    }
+    isEditingCellValid() {
+        return (this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0);
+    }
+    bindDocumentEditListener() {
+        if (!this.documentEditListener) {
+            this.documentEditListener = (event) => {
+                if (this.editingCell && !this.selfClick && this.isEditingCellValid()) {
+                    DomHandler.removeClass(this.editingCell, 'p-cell-editing');
+                    this.editingCell = null;
+                    this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData, originalEvent: event, index: this.editingCellRowIndex });
+                    this.editingCellField = null;
+                    this.editingCellData = null;
+                    this.editingCellRowIndex = null;
+                    this.unbindDocumentEditListener();
+                    this.cd.markForCheck();
+                    if (this.overlaySubscription) {
+                        this.overlaySubscription.unsubscribe();
+                    }
+                }
+                this.selfClick = false;
+            };
+            document.addEventListener('click', this.documentEditListener);
+        }
+    }
+    unbindDocumentEditListener() {
+        if (this.documentEditListener) {
+            document.removeEventListener('click', this.documentEditListener);
+            this.documentEditListener = null;
+        }
+    }
+    initRowEdit(rowData) {
+        let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));
+        this.editingRowKeys[dataKeyValue] = true;
+    }
+    saveRowEdit(rowData, rowElement) {
+        if (DomHandler.find(rowElement, '.ng-invalid.ng-dirty').length === 0) {
+            let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));
+            delete this.editingRowKeys[dataKeyValue];
+        }
+    }
+    cancelRowEdit(rowData) {
+        let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));
+        delete this.editingRowKeys[dataKeyValue];
+    }
+    toggleRow(rowData, event) {
+        if (!this.dataKey) {
+            throw new Error('dataKey must be defined to use row expansion');
+        }
+        let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));
+        if (this.expandedRowKeys[dataKeyValue] != null) {
+            delete this.expandedRowKeys[dataKeyValue];
+            this.onRowCollapse.emit({
+                originalEvent: event,
+                data: rowData
+            });
+        }
+        else {
+            if (this.rowExpandMode === 'single') {
+                this.expandedRowKeys = {};
+            }
+            this.expandedRowKeys[dataKeyValue] = true;
+            this.onRowExpand.emit({
+                originalEvent: event,
+                data: rowData
+            });
+        }
+        if (event) {
+            event.preventDefault();
+        }
+        if (this.isStateful()) {
+            this.saveState();
+        }
+    }
+    isRowExpanded(rowData) {
+        return this.expandedRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;
+    }
+    isRowEditing(rowData) {
+        return this.editingRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;
+    }
+    isSingleSelectionMode() {
+        return this.selectionMode === 'single';
+    }
+    isMultipleSelectionMode() {
+        return this.selectionMode === 'multiple';
+    }
+    onColumnResizeBegin(event) {
+        let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;
+        this.resizeColumnElement = event.target.parentElement;
+        this.columnResizing = true;
+        this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);
+        this.onColumnResize(event);
+        event.preventDefault();
+    }
+    onColumnResize(event) {
+        let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;
+        DomHandler.addClass(this.containerViewChild.nativeElement, 'p-unselectable-text');
+        this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';
+        this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';
+        this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';
+        this.resizeHelperViewChild.nativeElement.style.display = 'block';
+    }
+    onColumnResizeEnd() {
+        let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;
+        let columnWidth = this.resizeColumnElement.offsetWidth;
+        let newColumnWidth = columnWidth + delta;
+        let minWidth = this.resizeColumnElement.style.minWidth || 15;
+        if (newColumnWidth >= minWidth) {
+            if (this.columnResizeMode === 'fit') {
+                let nextColumn = this.resizeColumnElement.nextElementSibling;
+                let nextColumnWidth = nextColumn.offsetWidth - delta;
+                if (newColumnWidth > 15 && nextColumnWidth > 15) {
+                    if (!this.scrollable) {
+                        this.resizeColumnElement.style.width = newColumnWidth + 'px';
+                        if (nextColumn) {
+                            nextColumn.style.width = nextColumnWidth + 'px';
+                        }
+                    }
+                    else {
+                        this.resizeTableCells(newColumnWidth, nextColumnWidth);
+                    }
+                }
+            }
+            else if (this.columnResizeMode === 'expand') {
+                let tableWidth = this.tableViewChild.nativeElement.offsetWidth + delta;
+                this.tableViewChild.nativeElement.style.minWidth = tableWidth + 'px';
+                this.resizeColumnElement.style.width = newColumnWidth + 'px';
+                if (!this.scrollable)
+                    this.tableViewChild.nativeElement.style.width = tableWidth + 'px';
+                else
+                    this.resizeTableCells(newColumnWidth, null);
+            }
+            this.onColResize.emit({
+                element: this.resizeColumnElement,
+                delta: delta
+            });
+            if (this.isStateful()) {
+                this.saveState();
+            }
+        }
+        this.resizeHelperViewChild.nativeElement.style.display = 'none';
+        DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-unselectable-text');
+    }
+    resizeTableCells(newColumnWidth, nextColumnWidth) {
+        let colIndex = DomHandler.index(this.resizeColumnElement);
+        let widths = [];
+        const tableHead = DomHandler.findSingle(this.containerViewChild.nativeElement, '.p-datatable-thead');
+        let headers = DomHandler.find(tableHead, 'tr > th');
+        headers.forEach(header => widths.push(DomHandler.getOuterWidth(header)));
+        this.destroyStyleElement();
+        this.createStyleElement();
+        let innerHTML = '';
+        widths.forEach((width, index) => {
+            let colWidth = index === colIndex ? newColumnWidth : (nextColumnWidth && index === colIndex + 1) ? nextColumnWidth : width;
+            innerHTML += `
+                #${this.id}-table > .p-datatable-thead > tr > th:nth-child(${index + 1}) {
+                    flex: 0 0 ${colWidth}px !important;
+                }
+
+                #${this.id}-table > .p-datatable-tbody > tr > td:nth-child(${index + 1}) {
+                    flex: 0 0 ${colWidth}px !important;
+                }
+            `;
+        });
+        this.styleElement.innerHTML = innerHTML;
+    }
+    onColumnDragStart(event, columnElement) {
+        this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);
+        this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);
+        this.draggedColumn = columnElement;
+        event.dataTransfer.setData('text', 'b'); // For firefox
+    }
+    onColumnDragEnter(event, dropHeader) {
+        if (this.reorderableColumns && this.draggedColumn && dropHeader) {
+            event.preventDefault();
+            let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);
+            let dropHeaderOffset = DomHandler.getOffset(dropHeader);
+            if (this.draggedColumn != dropHeader) {
+                let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');
+                let dropIndex = DomHandler.indexWithinGroup(dropHeader, 'preorderablecolumn');
+                let targetLeft = dropHeaderOffset.left - containerOffset.left;
+                let targetTop = containerOffset.top - dropHeaderOffset.top;
+                let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;
+                this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';
+                this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';
+                if (event.pageX > columnCenter) {
+                    this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';
+                    this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';
+                    this.dropPosition = 1;
+                }
+                else {
+                    this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';
+                    this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';
+                    this.dropPosition = -1;
+                }
+                if ((dropIndex - dragIndex === 1 && this.dropPosition === -1) || (dropIndex - dragIndex === -1 && this.dropPosition === 1)) {
+                    this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';
+                    this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';
+                }
+                else {
+                    this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';
+                    this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';
+                }
+            }
+            else {
+                event.dataTransfer.dropEffect = 'none';
+            }
+        }
+    }
+    onColumnDragLeave(event) {
+        if (this.reorderableColumns && this.draggedColumn) {
+            event.preventDefault();
+            this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';
+            this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';
+        }
+    }
+    onColumnDrop(event, dropColumn) {
+        event.preventDefault();
+        if (this.draggedColumn) {
+            let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');
+            let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'preorderablecolumn');
+            let allowDrop = (dragIndex != dropIndex);
+            if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {
+                allowDrop = false;
+            }
+            if (allowDrop && ((dropIndex < dragIndex && this.dropPosition === 1))) {
+                dropIndex = dropIndex + 1;
+            }
+            if (allowDrop && ((dropIndex > dragIndex && this.dropPosition === -1))) {
+                dropIndex = dropIndex - 1;
+            }
+            if (allowDrop) {
+                ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);
+                this.onColReorder.emit({
+                    dragIndex: dragIndex,
+                    dropIndex: dropIndex,
+                    columns: this.columns
+                });
+                if (this.isStateful()) {
+                    this.zone.runOutsideAngular(() => {
+                        setTimeout(() => {
+                            this.saveState();
+                        });
+                    });
+                }
+            }
+            this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';
+            this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';
+            this.draggedColumn.draggable = false;
+            this.draggedColumn = null;
+            this.dropPosition = null;
+        }
+    }
+    onRowDragStart(event, index) {
+        this.rowDragging = true;
+        this.draggedRowIndex = index;
+        event.dataTransfer.setData('text', 'b'); // For firefox
+    }
+    onRowDragOver(event, index, rowElement) {
+        if (this.rowDragging && this.draggedRowIndex !== index) {
+            let rowY = DomHandler.getOffset(rowElement).top + DomHandler.getWindowScrollTop();
+            let pageY = event.pageY;
+            let rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2;
+            let prevRowElement = rowElement.previousElementSibling;
+            if (pageY < rowMidY) {
+                DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');
+                this.droppedRowIndex = index;
+                if (prevRowElement)
+                    DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom');
+                else
+                    DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');
+            }
+            else {
+                if (prevRowElement)
+                    DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');
+                else
+                    DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');
+                this.droppedRowIndex = index + 1;
+                DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom');
+            }
+        }
+    }
+    onRowDragLeave(event, rowElement) {
+        let prevRowElement = rowElement.previousElementSibling;
+        if (prevRowElement) {
+            DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');
+        }
+        DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');
+        DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-top');
+    }
+    onRowDragEnd(event) {
+        this.rowDragging = false;
+        this.draggedRowIndex = null;
+        this.droppedRowIndex = null;
+    }
+    onRowDrop(event, rowElement) {
+        if (this.droppedRowIndex != null) {
+            let dropIndex = (this.draggedRowIndex > this.droppedRowIndex) ? this.droppedRowIndex : (this.droppedRowIndex === 0) ? 0 : this.droppedRowIndex - 1;
+            ObjectUtils.reorderArray(this.value, this.draggedRowIndex, dropIndex);
+            this.onRowReorder.emit({
+                dragIndex: this.draggedRowIndex,
+                dropIndex: dropIndex
+            });
+        }
+        //cleanup
+        this.onRowDragLeave(event, rowElement);
+        this.onRowDragEnd(event);
+    }
+    isEmpty() {
+        let data = this.filteredValue || this.value;
+        return data == null || data.length == 0;
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    getStorage() {
+        switch (this.stateStorage) {
+            case 'local':
+                return window.localStorage;
+            case 'session':
+                return window.sessionStorage;
+            default:
+                throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are "local" and "session".');
+        }
+    }
+    isStateful() {
+        return this.stateKey != null;
+    }
+    saveState() {
+        const storage = this.getStorage();
+        let state = {};
+        if (this.paginator) {
+            state.first = this.first;
+            state.rows = this.rows;
+        }
+        if (this.sortField) {
+            state.sortField = this.sortField;
+            state.sortOrder = this.sortOrder;
+        }
+        if (this.multiSortMeta) {
+            state.multiSortMeta = this.multiSortMeta;
+        }
+        if (this.hasFilter()) {
+            state.filters = this.filters;
+        }
+        if (this.resizableColumns) {
+            this.saveColumnWidths(state);
+        }
+        if (this.reorderableColumns) {
+            this.saveColumnOrder(state);
+        }
+        if (this.selection) {
+            state.selection = this.selection;
+        }
+        if (Object.keys(this.expandedRowKeys).length) {
+            state.expandedRowKeys = this.expandedRowKeys;
+        }
+        storage.setItem(this.stateKey, JSON.stringify(state));
+        this.onStateSave.emit(state);
+    }
+    clearState() {
+        const storage = this.getStorage();
+        if (this.stateKey) {
+            storage.removeItem(this.stateKey);
+        }
+    }
+    restoreState() {
+        const storage = this.getStorage();
+        const stateString = storage.getItem(this.stateKey);
+        const dateFormat = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/;
+        const reviver = function (key, value) {
+            if (typeof value === "string" && dateFormat.test(value)) {
+                return new Date(value);
+            }
+            return value;
+        };
+        if (stateString) {
+            let state = JSON.parse(stateString, reviver);
+            if (this.paginator) {
+                if (this.first !== undefined) {
+                    this.first = state.first;
+                    this.firstChange.emit(this.first);
+                }
+                if (this.rows !== undefined) {
+                    this.rows = state.rows;
+                    this.rowsChange.emit(this.rows);
+                }
+            }
+            if (state.sortField) {
+                this.restoringSort = true;
+                this._sortField = state.sortField;
+                this._sortOrder = state.sortOrder;
+            }
+            if (state.multiSortMeta) {
+                this.restoringSort = true;
+                this._multiSortMeta = state.multiSortMeta;
+            }
+            if (state.filters) {
+                this.restoringFilter = true;
+                this.filters = state.filters;
+            }
+            if (this.resizableColumns) {
+                this.columnWidthsState = state.columnWidths;
+                this.tableWidthState = state.tableWidth;
+            }
+            if (state.expandedRowKeys) {
+                this.expandedRowKeys = state.expandedRowKeys;
+            }
+            if (state.selection) {
+                Promise.resolve(null).then(() => this.selectionChange.emit(state.selection));
+            }
+            this.stateRestored = true;
+            this.onStateRestore.emit(state);
+        }
+    }
+    saveColumnWidths(state) {
+        let widths = [];
+        let headers = DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-thead > tr > th');
+        headers.forEach(header => widths.push(DomHandler.getOuterWidth(header)));
+        state.columnWidths = widths.join(',');
+        if (this.columnResizeMode === 'expand') {
+            state.tableWidth = DomHandler.getOuterWidth(this.tableViewChild.nativeElement) + 'px';
+        }
+    }
+    restoreColumnWidths() {
+        if (this.columnWidthsState) {
+            let widths = this.columnWidthsState.split(',');
+            if (this.columnResizeMode === 'expand' && this.tableWidthState) {
+                this.tableViewChild.nativeElement.style.width = this.tableWidthState;
+                this.tableViewChild.nativeElement.style.minWidth = this.tableWidthState;
+                this.containerViewChild.nativeElement.style.width = this.tableWidthState;
+            }
+            this.createStyleElement();
+            if (this.scrollable && widths && widths.length > 0) {
+                let innerHTML = '';
+                widths.forEach((width, index) => {
+                    innerHTML += `
+                            #${this.id}-table > .p-datatable-thead > tr > th:nth-child(${index + 1}) {
+                                flex: 0 0 ${width}px;
+                            }
+
+                            #${this.id}-table > .p-datatable-tbody > tr > td:nth-child(${index + 1}) {
+                                flex: 0 0 ${width}px;
+                            }
+                        `;
+                });
+                this.styleElement.innerHTML = innerHTML;
+            }
+            else {
+                DomHandler.find(this.tableViewChild.nativeElement, '.p-datatable-thead > tr > th').forEach((header, index) => {
+                    header.style.width = widths[index] + 'px';
+                });
+            }
+        }
+    }
+    saveColumnOrder(state) {
+        if (this.columns) {
+            let columnOrder = [];
+            this.columns.map(column => {
+                columnOrder.push(column.field || column.key);
+            });
+            state.columnOrder = columnOrder;
+        }
+    }
+    restoreColumnOrder() {
+        const storage = this.getStorage();
+        const stateString = storage.getItem(this.stateKey);
+        if (stateString) {
+            let state = JSON.parse(stateString);
+            let columnOrder = state.columnOrder;
+            if (columnOrder) {
+                let reorderedColumns = [];
+                columnOrder.map(key => {
+                    let col = this.findColumnByKey(key);
+                    if (col) {
+                        reorderedColumns.push(col);
+                    }
+                });
+                this.columnOrderStateRestored = true;
+                this.columns = reorderedColumns;
+            }
+        }
+    }
+    findColumnByKey(key) {
+        if (this.columns) {
+            for (let col of this.columns) {
+                if (col.key === key || col.field === key)
+                    return col;
+                else
+                    continue;
+            }
+        }
+        else {
+            return null;
+        }
+    }
+    createStyleElement() {
+        this.styleElement = document.createElement('style');
+        this.styleElement.type = 'text/css';
+        document.head.appendChild(this.styleElement);
+    }
+    getGroupRowsMeta() {
+        return { field: this.groupRowsBy, order: this.groupRowsByOrder };
+    }
+    createResponsiveStyle() {
+        if (!this.responsiveStyleElement) {
+            this.responsiveStyleElement = document.createElement('style');
+            this.responsiveStyleElement.type = 'text/css';
+            document.head.appendChild(this.responsiveStyleElement);
+            let innerHTML = `
+@media screen and (max-width: ${this.breakpoint}) {
+    #${this.id} .p-datatable-thead > tr > th,
+    #${this.id} .p-datatable-tfoot > tr > td {
+        display: none !important;
+    }
+
+    #${this.id} .p-datatable-tbody > tr > td {
+        display: flex;
+        width: 100% !important;
+        align-items: center;
+        justify-content: space-between;
+    }
+
+    #${this.id} .p-datatable-tbody > tr > td:not(:last-child) {
+        border: 0 none;
+    }
+
+    #${this.id}.p-datatable-gridlines .p-datatable-tbody > tr > td:last-child {
+        border-top: 0;
+        border-right: 0;
+        border-left: 0;
+    }
+
+    #${this.id} .p-datatable-tbody > tr > td > .p-column-title {
+        display: block;
+    }
+}
+`;
+            this.responsiveStyleElement.innerHTML = innerHTML;
+        }
+    }
+    destroyResponsiveStyle() {
+        if (this.responsiveStyleElement) {
+            document.head.removeChild(this.responsiveStyleElement);
+            this.responsiveStyleElement = null;
+        }
+    }
+    destroyStyleElement() {
+        if (this.styleElement) {
+            document.head.removeChild(this.styleElement);
+            this.styleElement = null;
+        }
+    }
+    ngOnDestroy() {
+        this.unbindDocumentEditListener();
+        this.editingCell = null;
+        this.initialized = null;
+        if (this.virtualScrollSubscription) {
+            this.virtualScrollSubscription.unsubscribe();
+        }
+        this.destroyStyleElement();
+        this.destroyResponsiveStyle();
+    }
+}
+Table.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Table, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: TableService }, { token: i0.ChangeDetectorRef }, { token: i1.FilterService }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+Table.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Table, selector: "p-table", inputs: { frozenColumns: "frozenColumns", frozenValue: "frozenValue", style: "style", styleClass: "styleClass", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", paginator: "paginator", pageLinks: "pageLinks", rowsPerPageOptions: "rowsPerPageOptions", alwaysShowPaginator: "alwaysShowPaginator", paginatorPosition: "paginatorPosition", paginatorDropdownAppendTo: "paginatorDropdownAppendTo", paginatorDropdownScrollHeight: "paginatorDropdownScrollHeight", currentPageReportTemplate: "currentPageReportTemplate", showCurrentPageReport: "showCurrentPageReport", showJumpToPageDropdown: "showJumpToPageDropdown", showJumpToPageInput: "showJumpToPageInput", showFirstLastIcon: "showFirstLastIcon", showPageLinks: "showPageLinks", defaultSortOrder: "defaultSortOrder", sortMode: "sortMode", resetPageOnSort: "resetPageOnSort", selectionMode: "selectionMode", contextMenuSelection: "contextMenuSelection", contextMenuSelectionMode: "contextMenuSelectionMode", dataKey: "dataKey", metaKeySelection: "metaKeySelection", rowTrackBy: "rowTrackBy", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", compareSelectionBy: "compareSelectionBy", csvSeparator: "csvSeparator", exportFilename: "exportFilename", filters: "filters", globalFilterFields: "globalFilterFields", filterDelay: "filterDelay", filterLocale: "filterLocale", expandedRowKeys: "expandedRowKeys", editingRowKeys: "editingRowKeys", rowExpandMode: "rowExpandMode", scrollable: "scrollable", scrollDirection: "scrollDirection", rowGroupMode: "rowGroupMode", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", virtualScrollDelay: "virtualScrollDelay", virtualRowHeight: "virtualRowHeight", frozenWidth: "frozenWidth", responsive: "responsive", contextMenu: "contextMenu", resizableColumns: "resizableColumns", columnResizeMode: "columnResizeMode", reorderableColumns: "reorderableColumns", loading: "loading", loadingIcon: "loadingIcon", showLoader: "showLoader", rowHover: "rowHover", customSort: "customSort", showInitialSortBadge: "showInitialSortBadge", autoLayout: "autoLayout", exportFunction: "exportFunction", stateKey: "stateKey", stateStorage: "stateStorage", editMode: "editMode", groupRowsBy: "groupRowsBy", groupRowsByOrder: "groupRowsByOrder", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", responsiveLayout: "responsiveLayout", breakpoint: "breakpoint", value: "value", columns: "columns", first: "first", rows: "rows", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", multiSortMeta: "multiSortMeta", selection: "selection" }, outputs: { selectionChange: "selectionChange", contextMenuSelectionChange: "contextMenuSelectionChange", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect", onPage: "onPage", onSort: "onSort", onFilter: "onFilter", onLazyLoad: "onLazyLoad", onRowExpand: "onRowExpand", onRowCollapse: "onRowCollapse", onContextMenuSelect: "onContextMenuSelect", onColResize: "onColResize", onColReorder: "onColReorder", onRowReorder: "onRowReorder", onEditInit: "onEditInit", onEditComplete: "onEditComplete", onEditCancel: "onEditCancel", onHeaderCheckboxToggle: "onHeaderCheckboxToggle", sortFunction: "sortFunction", firstChange: "firstChange", rowsChange: "rowsChange", onStateSave: "onStateSave", onStateRestore: "onStateRestore" }, host: { classAttribute: "p-element" }, providers: [TableService], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "resizeHelperViewChild", first: true, predicate: ["resizeHelper"], descendants: true }, { propertyName: "reorderIndicatorUpViewChild", first: true, predicate: ["reorderIndicatorUp"], descendants: true }, { propertyName: "reorderIndicatorDownViewChild", first: true, predicate: ["reorderIndicatorDown"], descendants: true }, { propertyName: "wrapperViewChild", first: true, predicate: ["wrapper"], descendants: true }, { propertyName: "tableViewChild", first: true, predicate: ["table"], descendants: true }, { propertyName: "tableHeaderViewChild", first: true, predicate: ["tableHeader"], descendants: true }, { propertyName: "virtualScrollBody", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
+        <div #container [ngStyle]="style" [class]="styleClass"
+            [ngClass]="{'p-datatable p-component': true,
+                'p-datatable-hoverable-rows': (rowHover||selectionMode),
+                'p-datatable-auto-layout': autoLayout,
+                'p-datatable-resizable': resizableColumns,
+                'p-datatable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),
+                'p-datatable-scrollable': scrollable,
+                'p-datatable-scrollable-vertical': scrollable && scrollDirection === 'vertical',
+                'p-datatable-scrollable-horizontal': scrollable && scrollDirection === 'horizontal',
+                'p-datatable-scrollable-both': scrollable && scrollDirection === 'both',
+                'p-datatable-flex-scrollable': (scrollable && scrollHeight === 'flex'),
+                'p-datatable-responsive-stack': responsiveLayout === 'stack',
+                'p-datatable-responsive-scroll': responsiveLayout === 'scroll',
+                'p-datatable-responsive': responsive,
+                'p-datatable-grouped-header': headerGroupedTemplate != null,
+                'p-datatable-grouped-footer': footerGroupedTemplate != null}" [attr.id]="id">
+            <div class="p-datatable-loading-overlay p-component-overlay" *ngIf="loading && showLoader">
+                <i [class]="'p-datatable-loading-icon pi-spin ' + loadingIcon"></i>
+            </div>
+            <div *ngIf="captionTemplate" class="p-datatable-header">
+                <ng-container *ngTemplateOutlet="captionTemplate"></ng-container>
+            </div>
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="p-paginator-top" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'top' || paginatorPosition =='both')"
+                [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate" [dropdownAppendTo]="paginatorDropdownAppendTo" [dropdownScrollHeight]="paginatorDropdownScrollHeight"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showJumpToPageInput]="showJumpToPageInput" [showPageLinks]="showPageLinks"></p-paginator>
+
+            <div #wrapper class="p-datatable-wrapper" [ngStyle]="{height: scrollHeight}">
+                <table #table *ngIf="!virtualScroll" role="table" class="p-datatable-table" [ngClass]="tableStyleClass" [ngStyle]="tableStyle" [attr.id]="id+'-table'">
+                    <ng-container *ngTemplateOutlet="colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <thead class="p-datatable-thead">
+                        <ng-container *ngTemplateOutlet="headerGroupedTemplate||headerTemplate; context: {$implicit: columns}"></ng-container>
+                    </thead>
+                    <tbody class="p-datatable-tbody p-datatable-frozen-tbody" *ngIf="frozenValue||frozenBodyTemplate" [value]="frozenValue" [frozenRows]="true" [pTableBody]="columns" [pTableBodyTemplate]="frozenBodyTemplate" [frozen]="true"></tbody>
+                    <tbody class="p-datatable-tbody" [value]="dataToRender" [pTableBody]="columns" [pTableBodyTemplate]="bodyTemplate"></tbody>
+                    <tfoot *ngIf="footerGroupedTemplate||footerTemplate" class="p-datatable-tfoot">
+                        <ng-container *ngTemplateOutlet="footerGroupedTemplate||footerTemplate; context {$implicit: columns}"></ng-container>
+                    </tfoot>
+                </table>
+                <cdk-virtual-scroll-viewport *ngIf="virtualScroll" [itemSize]="virtualRowHeight" tabindex="0" [style.height]="scrollHeight !== 'flex' ? scrollHeight : undefined" [minBufferPx]="minBufferPx" [maxBufferPx]="maxBufferPx" (scrolledIndexChange)="onScrollIndexChange($event)" class="p-datatable-virtual-scrollable-body">
+                    <table #table role="table" class="p-datatable-table" [ngClass]="tableStyleClass" [ngStyle]="tableStyle" [attr.id]="id+'-table'">
+                        <ng-container *ngTemplateOutlet="colGroupTemplate; context {$implicit: columns}"></ng-container>
+                        <thead #tableHeader class="p-datatable-thead">
+                            <ng-container *ngTemplateOutlet="headerGroupedTemplate||headerTemplate; context: {$implicit: columns}"></ng-container>
+                        </thead>
+                        <tbody class="p-datatable-tbody p-datatable-frozen-tbody" *ngIf="frozenValue||frozenBodyTemplate" [value]="frozenValue" [frozenRows]="true" [pTableBody]="columns" [pTableBodyTemplate]="bodyTemplate" [frozen]="true"></tbody>
+                        <tbody class="p-datatable-tbody" [value]="dataToRender" [pTableBody]="columns" [pTableBodyTemplate]="bodyTemplate"></tbody>
+                        <tfoot *ngIf="footerGroupedTemplate||footerTemplate" class="p-datatable-tfoot">
+                            <ng-container *ngTemplateOutlet="footerGroupedTemplate||footerTemplate; context {$implicit: columns}"></ng-container>
+                        </tfoot>
+                    </table>
+                </cdk-virtual-scroll-viewport>
+            </div>
+
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="p-paginator-bottom" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')"
+                [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate" [dropdownAppendTo]="paginatorDropdownAppendTo" [dropdownScrollHeight]="paginatorDropdownScrollHeight"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showJumpToPageInput]="showJumpToPageInput" [showPageLinks]="showPageLinks"></p-paginator>
+
+            <div *ngIf="summaryTemplate" class="p-datatable-footer">
+                <ng-container *ngTemplateOutlet="summaryTemplate"></ng-container>
+            </div>
+
+            <div #resizeHelper class="p-column-resizer-helper" style="display:none" *ngIf="resizableColumns"></div>
+            <span #reorderIndicatorUp class="pi pi-arrow-down p-datatable-reorder-indicator-up" style="display:none" *ngIf="reorderableColumns"></span>
+            <span #reorderIndicatorDown class="pi pi-arrow-up p-datatable-reorder-indicator-down" style="display:none" *ngIf="reorderableColumns"></span>
+        </div>
+    `, isInline: true, styles: [".p-datatable{position:relative}.p-datatable table{border-collapse:collapse;min-width:100%;table-layout:fixed}.p-datatable .p-sortable-column{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-datatable .p-sortable-column .p-column-title,.p-datatable .p-sortable-column .p-sortable-column-icon,.p-datatable .p-sortable-column .p-sortable-column-badge{vertical-align:middle}.p-datatable .p-sortable-column .p-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.p-datatable-auto-layout>.p-datatable-wrapper{overflow-x:auto}.p-datatable-auto-layout>.p-datatable-wrapper>table{table-layout:auto}.p-datatable-responsive-scroll>.p-datatable-wrapper{overflow-x:auto}.p-datatable-responsive-scroll>.p-datatable-wrapper>table,.p-datatable-auto-layout>.p-datatable-wrapper>table{table-layout:auto}.p-datatable-hoverable-rows .p-selectable-row{cursor:pointer}.p-datatable-scrollable .p-datatable-wrapper{position:relative;overflow:auto}.p-datatable-scrollable .p-datatable-thead,.p-datatable-scrollable .p-datatable-tbody,.p-datatable-scrollable .p-datatable-tfoot{display:block}.p-datatable-scrollable .p-datatable-thead>tr,.p-datatable-scrollable .p-datatable-tbody>tr,.p-datatable-scrollable .p-datatable-tfoot>tr{display:flex;flex-wrap:nowrap;width:100%}.p-datatable-scrollable .p-datatable-thead>tr>th,.p-datatable-scrollable .p-datatable-tbody>tr>td,.p-datatable-scrollable .p-datatable-tfoot>tr>td{display:flex;flex:1 1 0;align-items:center}.p-datatable-scrollable .p-datatable-thead{position:sticky;top:0;z-index:1}.p-datatable-scrollable .p-datatable-frozen-tbody{position:sticky;z-index:1}.p-datatable-scrollable .p-datatable-tfoot{position:sticky;bottom:0;z-index:1}.p-datatable-scrollable .p-frozen-column{position:sticky;background:inherit}.p-datatable-scrollable th.p-frozen-column{z-index:1}.p-datatable-scrollable-both .p-datatable-thead>tr>th,.p-datatable-scrollable-both .p-datatable-tbody>tr>td,.p-datatable-scrollable-both .p-datatable-tfoot>tr>td,.p-datatable-scrollable-horizontal .p-datatable-thead>tr>th .p-datatable-scrollable-horizontal .p-datatable-tbody>tr>td,.p-datatable-scrollable-horizontal .p-datatable-tfoot>tr>td{flex:0 0 auto}.p-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}.p-datatable-flex-scrollable .p-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}.p-datatable-scrollable .p-rowgroup-header{position:sticky;z-index:1}.p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead,.p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot{display:table;border-collapse:collapse;width:100%;table-layout:fixed}.p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead>tr,.p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot>tr{display:table-row}.p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead>tr>th,.p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot>tr>td{display:table-cell}.p-datatable-flex-scrollable{display:flex;flex-direction:column;flex:1;height:100%}.p-datatable-flex-scrollable .p-datatable-virtual-scrollable-body{flex:1}.p-datatable-resizable>.p-datatable-wrapper{overflow-x:auto}.p-datatable-resizable .p-datatable-thead>tr>th,.p-datatable-resizable .p-datatable-tfoot>tr>td,.p-datatable-resizable .p-datatable-tbody>tr>td{overflow:hidden;white-space:nowrap}.p-datatable-resizable .p-resizable-column{background-clip:padding-box;position:relative}.p-datatable-resizable-fit .p-resizable-column:last-child .p-column-resizer{display:none}.p-datatable .p-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.p-datatable .p-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.p-datatable .p-row-editor-init,.p-datatable .p-row-editor-save,.p-datatable .p-row-editor-cancel,.p-datatable .p-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-datatable-reorder-indicator-up,.p-datatable-reorder-indicator-down{position:absolute;display:none}.p-datatable-reorderablerow-handle,[pReorderableColumn]{cursor:move}.p-datatable .p-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}.p-column-filter-row{display:flex;align-items:center;width:100%}.p-column-filter-menu{display:inline-flex}.p-column-filter-row p-columnfilterformelement{flex:1 1 auto;width:1%}.p-column-filter-menu-button,.p-column-filter-clear-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}.p-column-filter-overlay{position:absolute;top:0;left:0}.p-column-filter-row-items{margin:0;padding:0;list-style:none}.p-column-filter-row-item{cursor:pointer}.p-column-filter-add-button,.p-column-filter-remove-button{justify-content:center}.p-column-filter-add-button .p-button-label,.p-column-filter-remove-button .p-button-label{flex-grow:0}.p-column-filter-buttonbar{display:flex;align-items:center;justify-content:space-between}.p-column-filter-buttonbar .p-button{width:auto}.p-datatable .p-datatable-tbody>tr>td>.p-column-title{display:none}cdk-virtual-scroll-viewport{outline:0 none}\n"], components: [{ type: i0.forwardRef(function () { return i2.Paginator; }), selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "templateLeft", "templateRight", "dropdownAppendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "showPageLinks", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { type: i0.forwardRef(function () { return TableBody; }), selector: "[pTableBody]", inputs: ["pTableBody", "pTableBodyTemplate", "value", "frozen", "frozenRows"] }, { type: i0.forwardRef(function () { return i3.CdkVirtualScrollViewport; }), selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i0.forwardRef(function () { return i4.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i0.forwardRef(function () { return i4.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i4.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i4.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i0.forwardRef(function () { return i3.CdkFixedSizeVirtualScroll; }), selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Table, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-table', template: `
+        <div #container [ngStyle]="style" [class]="styleClass"
+            [ngClass]="{'p-datatable p-component': true,
+                'p-datatable-hoverable-rows': (rowHover||selectionMode),
+                'p-datatable-auto-layout': autoLayout,
+                'p-datatable-resizable': resizableColumns,
+                'p-datatable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),
+                'p-datatable-scrollable': scrollable,
+                'p-datatable-scrollable-vertical': scrollable && scrollDirection === 'vertical',
+                'p-datatable-scrollable-horizontal': scrollable && scrollDirection === 'horizontal',
+                'p-datatable-scrollable-both': scrollable && scrollDirection === 'both',
+                'p-datatable-flex-scrollable': (scrollable && scrollHeight === 'flex'),
+                'p-datatable-responsive-stack': responsiveLayout === 'stack',
+                'p-datatable-responsive-scroll': responsiveLayout === 'scroll',
+                'p-datatable-responsive': responsive,
+                'p-datatable-grouped-header': headerGroupedTemplate != null,
+                'p-datatable-grouped-footer': footerGroupedTemplate != null}" [attr.id]="id">
+            <div class="p-datatable-loading-overlay p-component-overlay" *ngIf="loading && showLoader">
+                <i [class]="'p-datatable-loading-icon pi-spin ' + loadingIcon"></i>
+            </div>
+            <div *ngIf="captionTemplate" class="p-datatable-header">
+                <ng-container *ngTemplateOutlet="captionTemplate"></ng-container>
+            </div>
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="p-paginator-top" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'top' || paginatorPosition =='both')"
+                [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate" [dropdownAppendTo]="paginatorDropdownAppendTo" [dropdownScrollHeight]="paginatorDropdownScrollHeight"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showJumpToPageInput]="showJumpToPageInput" [showPageLinks]="showPageLinks"></p-paginator>
+
+            <div #wrapper class="p-datatable-wrapper" [ngStyle]="{height: scrollHeight}">
+                <table #table *ngIf="!virtualScroll" role="table" class="p-datatable-table" [ngClass]="tableStyleClass" [ngStyle]="tableStyle" [attr.id]="id+'-table'">
+                    <ng-container *ngTemplateOutlet="colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <thead class="p-datatable-thead">
+                        <ng-container *ngTemplateOutlet="headerGroupedTemplate||headerTemplate; context: {$implicit: columns}"></ng-container>
+                    </thead>
+                    <tbody class="p-datatable-tbody p-datatable-frozen-tbody" *ngIf="frozenValue||frozenBodyTemplate" [value]="frozenValue" [frozenRows]="true" [pTableBody]="columns" [pTableBodyTemplate]="frozenBodyTemplate" [frozen]="true"></tbody>
+                    <tbody class="p-datatable-tbody" [value]="dataToRender" [pTableBody]="columns" [pTableBodyTemplate]="bodyTemplate"></tbody>
+                    <tfoot *ngIf="footerGroupedTemplate||footerTemplate" class="p-datatable-tfoot">
+                        <ng-container *ngTemplateOutlet="footerGroupedTemplate||footerTemplate; context {$implicit: columns}"></ng-container>
+                    </tfoot>
+                </table>
+                <cdk-virtual-scroll-viewport *ngIf="virtualScroll" [itemSize]="virtualRowHeight" tabindex="0" [style.height]="scrollHeight !== 'flex' ? scrollHeight : undefined" [minBufferPx]="minBufferPx" [maxBufferPx]="maxBufferPx" (scrolledIndexChange)="onScrollIndexChange($event)" class="p-datatable-virtual-scrollable-body">
+                    <table #table role="table" class="p-datatable-table" [ngClass]="tableStyleClass" [ngStyle]="tableStyle" [attr.id]="id+'-table'">
+                        <ng-container *ngTemplateOutlet="colGroupTemplate; context {$implicit: columns}"></ng-container>
+                        <thead #tableHeader class="p-datatable-thead">
+                            <ng-container *ngTemplateOutlet="headerGroupedTemplate||headerTemplate; context: {$implicit: columns}"></ng-container>
+                        </thead>
+                        <tbody class="p-datatable-tbody p-datatable-frozen-tbody" *ngIf="frozenValue||frozenBodyTemplate" [value]="frozenValue" [frozenRows]="true" [pTableBody]="columns" [pTableBodyTemplate]="bodyTemplate" [frozen]="true"></tbody>
+                        <tbody class="p-datatable-tbody" [value]="dataToRender" [pTableBody]="columns" [pTableBodyTemplate]="bodyTemplate"></tbody>
+                        <tfoot *ngIf="footerGroupedTemplate||footerTemplate" class="p-datatable-tfoot">
+                            <ng-container *ngTemplateOutlet="footerGroupedTemplate||footerTemplate; context {$implicit: columns}"></ng-container>
+                        </tfoot>
+                    </table>
+                </cdk-virtual-scroll-viewport>
+            </div>
+
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="p-paginator-bottom" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')"
+                [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate" [dropdownAppendTo]="paginatorDropdownAppendTo" [dropdownScrollHeight]="paginatorDropdownScrollHeight"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showJumpToPageInput]="showJumpToPageInput" [showPageLinks]="showPageLinks"></p-paginator>
+
+            <div *ngIf="summaryTemplate" class="p-datatable-footer">
+                <ng-container *ngTemplateOutlet="summaryTemplate"></ng-container>
+            </div>
+
+            <div #resizeHelper class="p-column-resizer-helper" style="display:none" *ngIf="resizableColumns"></div>
+            <span #reorderIndicatorUp class="pi pi-arrow-down p-datatable-reorder-indicator-up" style="display:none" *ngIf="reorderableColumns"></span>
+            <span #reorderIndicatorDown class="pi pi-arrow-up p-datatable-reorder-indicator-down" style="display:none" *ngIf="reorderableColumns"></span>
+        </div>
+    `, providers: [TableService], changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-datatable{position:relative}.p-datatable table{border-collapse:collapse;min-width:100%;table-layout:fixed}.p-datatable .p-sortable-column{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-datatable .p-sortable-column .p-column-title,.p-datatable .p-sortable-column .p-sortable-column-icon,.p-datatable .p-sortable-column .p-sortable-column-badge{vertical-align:middle}.p-datatable .p-sortable-column .p-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.p-datatable-auto-layout>.p-datatable-wrapper{overflow-x:auto}.p-datatable-auto-layout>.p-datatable-wrapper>table{table-layout:auto}.p-datatable-responsive-scroll>.p-datatable-wrapper{overflow-x:auto}.p-datatable-responsive-scroll>.p-datatable-wrapper>table,.p-datatable-auto-layout>.p-datatable-wrapper>table{table-layout:auto}.p-datatable-hoverable-rows .p-selectable-row{cursor:pointer}.p-datatable-scrollable .p-datatable-wrapper{position:relative;overflow:auto}.p-datatable-scrollable .p-datatable-thead,.p-datatable-scrollable .p-datatable-tbody,.p-datatable-scrollable .p-datatable-tfoot{display:block}.p-datatable-scrollable .p-datatable-thead>tr,.p-datatable-scrollable .p-datatable-tbody>tr,.p-datatable-scrollable .p-datatable-tfoot>tr{display:flex;flex-wrap:nowrap;width:100%}.p-datatable-scrollable .p-datatable-thead>tr>th,.p-datatable-scrollable .p-datatable-tbody>tr>td,.p-datatable-scrollable .p-datatable-tfoot>tr>td{display:flex;flex:1 1 0;align-items:center}.p-datatable-scrollable .p-datatable-thead{position:sticky;top:0;z-index:1}.p-datatable-scrollable .p-datatable-frozen-tbody{position:sticky;z-index:1}.p-datatable-scrollable .p-datatable-tfoot{position:sticky;bottom:0;z-index:1}.p-datatable-scrollable .p-frozen-column{position:sticky;background:inherit}.p-datatable-scrollable th.p-frozen-column{z-index:1}.p-datatable-scrollable-both .p-datatable-thead>tr>th,.p-datatable-scrollable-both .p-datatable-tbody>tr>td,.p-datatable-scrollable-both .p-datatable-tfoot>tr>td,.p-datatable-scrollable-horizontal .p-datatable-thead>tr>th .p-datatable-scrollable-horizontal .p-datatable-tbody>tr>td,.p-datatable-scrollable-horizontal .p-datatable-tfoot>tr>td{flex:0 0 auto}.p-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}.p-datatable-flex-scrollable .p-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}.p-datatable-scrollable .p-rowgroup-header{position:sticky;z-index:1}.p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead,.p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot{display:table;border-collapse:collapse;width:100%;table-layout:fixed}.p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead>tr,.p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot>tr{display:table-row}.p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead>tr>th,.p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot>tr>td{display:table-cell}.p-datatable-flex-scrollable{display:flex;flex-direction:column;flex:1;height:100%}.p-datatable-flex-scrollable .p-datatable-virtual-scrollable-body{flex:1}.p-datatable-resizable>.p-datatable-wrapper{overflow-x:auto}.p-datatable-resizable .p-datatable-thead>tr>th,.p-datatable-resizable .p-datatable-tfoot>tr>td,.p-datatable-resizable .p-datatable-tbody>tr>td{overflow:hidden;white-space:nowrap}.p-datatable-resizable .p-resizable-column{background-clip:padding-box;position:relative}.p-datatable-resizable-fit .p-resizable-column:last-child .p-column-resizer{display:none}.p-datatable .p-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.p-datatable .p-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.p-datatable .p-row-editor-init,.p-datatable .p-row-editor-save,.p-datatable .p-row-editor-cancel,.p-datatable .p-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-datatable-reorder-indicator-up,.p-datatable-reorder-indicator-down{position:absolute;display:none}.p-datatable-reorderablerow-handle,[pReorderableColumn]{cursor:move}.p-datatable .p-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}.p-column-filter-row{display:flex;align-items:center;width:100%}.p-column-filter-menu{display:inline-flex}.p-column-filter-row p-columnfilterformelement{flex:1 1 auto;width:1%}.p-column-filter-menu-button,.p-column-filter-clear-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}.p-column-filter-overlay{position:absolute;top:0;left:0}.p-column-filter-row-items{margin:0;padding:0;list-style:none}.p-column-filter-row-item{cursor:pointer}.p-column-filter-add-button,.p-column-filter-remove-button{justify-content:center}.p-column-filter-add-button .p-button-label,.p-column-filter-remove-button .p-button-label{flex-grow:0}.p-column-filter-buttonbar{display:flex;align-items:center;justify-content:space-between}.p-column-filter-buttonbar .p-button{width:auto}.p-datatable .p-datatable-tbody>tr>td>.p-column-title{display:none}cdk-virtual-scroll-viewport{outline:0 none}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: TableService }, { type: i0.ChangeDetectorRef }, { type: i1.FilterService }, { type: i1.OverlayService }]; }, propDecorators: { frozenColumns: [{
+                type: Input
+            }], frozenValue: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], tableStyle: [{
+                type: Input
+            }], tableStyleClass: [{
+                type: Input
+            }], paginator: [{
+                type: Input
+            }], pageLinks: [{
+                type: Input
+            }], rowsPerPageOptions: [{
+                type: Input
+            }], alwaysShowPaginator: [{
+                type: Input
+            }], paginatorPosition: [{
+                type: Input
+            }], paginatorDropdownAppendTo: [{
+                type: Input
+            }], paginatorDropdownScrollHeight: [{
+                type: Input
+            }], currentPageReportTemplate: [{
+                type: Input
+            }], showCurrentPageReport: [{
+                type: Input
+            }], showJumpToPageDropdown: [{
+                type: Input
+            }], showJumpToPageInput: [{
+                type: Input
+            }], showFirstLastIcon: [{
+                type: Input
+            }], showPageLinks: [{
+                type: Input
+            }], defaultSortOrder: [{
+                type: Input
+            }], sortMode: [{
+                type: Input
+            }], resetPageOnSort: [{
+                type: Input
+            }], selectionMode: [{
+                type: Input
+            }], selectionChange: [{
+                type: Output
+            }], contextMenuSelection: [{
+                type: Input
+            }], contextMenuSelectionChange: [{
+                type: Output
+            }], contextMenuSelectionMode: [{
+                type: Input
+            }], dataKey: [{
+                type: Input
+            }], metaKeySelection: [{
+                type: Input
+            }], rowTrackBy: [{
+                type: Input
+            }], lazy: [{
+                type: Input
+            }], lazyLoadOnInit: [{
+                type: Input
+            }], compareSelectionBy: [{
+                type: Input
+            }], csvSeparator: [{
+                type: Input
+            }], exportFilename: [{
+                type: Input
+            }], filters: [{
+                type: Input
+            }], globalFilterFields: [{
+                type: Input
+            }], filterDelay: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], expandedRowKeys: [{
+                type: Input
+            }], editingRowKeys: [{
+                type: Input
+            }], rowExpandMode: [{
+                type: Input
+            }], scrollable: [{
+                type: Input
+            }], scrollDirection: [{
+                type: Input
+            }], rowGroupMode: [{
+                type: Input
+            }], scrollHeight: [{
+                type: Input
+            }], virtualScroll: [{
+                type: Input
+            }], virtualScrollDelay: [{
+                type: Input
+            }], virtualRowHeight: [{
+                type: Input
+            }], frozenWidth: [{
+                type: Input
+            }], responsive: [{
+                type: Input
+            }], contextMenu: [{
+                type: Input
+            }], resizableColumns: [{
+                type: Input
+            }], columnResizeMode: [{
+                type: Input
+            }], reorderableColumns: [{
+                type: Input
+            }], loading: [{
+                type: Input
+            }], loadingIcon: [{
+                type: Input
+            }], showLoader: [{
+                type: Input
+            }], rowHover: [{
+                type: Input
+            }], customSort: [{
+                type: Input
+            }], showInitialSortBadge: [{
+                type: Input
+            }], autoLayout: [{
+                type: Input
+            }], exportFunction: [{
+                type: Input
+            }], stateKey: [{
+                type: Input
+            }], stateStorage: [{
+                type: Input
+            }], editMode: [{
+                type: Input
+            }], groupRowsBy: [{
+                type: Input
+            }], groupRowsByOrder: [{
+                type: Input
+            }], minBufferPx: [{
+                type: Input
+            }], maxBufferPx: [{
+                type: Input
+            }], responsiveLayout: [{
+                type: Input
+            }], breakpoint: [{
+                type: Input
+            }], onRowSelect: [{
+                type: Output
+            }], onRowUnselect: [{
+                type: Output
+            }], onPage: [{
+                type: Output
+            }], onSort: [{
+                type: Output
+            }], onFilter: [{
+                type: Output
+            }], onLazyLoad: [{
+                type: Output
+            }], onRowExpand: [{
+                type: Output
+            }], onRowCollapse: [{
+                type: Output
+            }], onContextMenuSelect: [{
+                type: Output
+            }], onColResize: [{
+                type: Output
+            }], onColReorder: [{
+                type: Output
+            }], onRowReorder: [{
+                type: Output
+            }], onEditInit: [{
+                type: Output
+            }], onEditComplete: [{
+                type: Output
+            }], onEditCancel: [{
+                type: Output
+            }], onHeaderCheckboxToggle: [{
+                type: Output
+            }], sortFunction: [{
+                type: Output
+            }], firstChange: [{
+                type: Output
+            }], rowsChange: [{
+                type: Output
+            }], onStateSave: [{
+                type: Output
+            }], onStateRestore: [{
+                type: Output
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], resizeHelperViewChild: [{
+                type: ViewChild,
+                args: ['resizeHelper']
+            }], reorderIndicatorUpViewChild: [{
+                type: ViewChild,
+                args: ['reorderIndicatorUp']
+            }], reorderIndicatorDownViewChild: [{
+                type: ViewChild,
+                args: ['reorderIndicatorDown']
+            }], wrapperViewChild: [{
+                type: ViewChild,
+                args: ['wrapper']
+            }], tableViewChild: [{
+                type: ViewChild,
+                args: ['table']
+            }], tableHeaderViewChild: [{
+                type: ViewChild,
+                args: ['tableHeader']
+            }], virtualScrollBody: [{
+                type: ViewChild,
+                args: [CdkVirtualScrollViewport]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], value: [{
+                type: Input
+            }], columns: [{
+                type: Input
+            }], first: [{
+                type: Input
+            }], rows: [{
+                type: Input
+            }], totalRecords: [{
+                type: Input
+            }], sortField: [{
+                type: Input
+            }], sortOrder: [{
+                type: Input
+            }], multiSortMeta: [{
+                type: Input
+            }], selection: [{
+                type: Input
+            }] } });
+class TableBody {
+    constructor(dt, tableService, cd, el) {
+        this.dt = dt;
+        this.tableService = tableService;
+        this.cd = cd;
+        this.el = el;
+        this.subscription = this.dt.tableService.valueSource$.subscribe(() => {
+            if (this.dt.virtualScroll) {
+                this.cd.detectChanges();
+            }
+        });
+    }
+    get value() {
+        return this._value;
+    }
+    set value(val) {
+        this._value = val;
+        if (this.frozenRows) {
+            this.updateFrozenRowStickyPosition();
+        }
+        if (this.dt.scrollable && this.dt.rowGroupMode === 'subheader') {
+            this.updateFrozenRowGroupHeaderStickyPosition();
+        }
+    }
+    ngAfterViewInit() {
+        if (this.frozenRows) {
+            this.updateFrozenRowStickyPosition();
+        }
+        if (this.dt.scrollable && this.dt.rowGroupMode === 'subheader') {
+            this.updateFrozenRowGroupHeaderStickyPosition();
+        }
+    }
+    shouldRenderRowGroupHeader(value, rowData, i) {
+        let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.dt.groupRowsBy);
+        let prevRowData = value[i - 1];
+        if (prevRowData) {
+            let previousRowFieldData = ObjectUtils.resolveFieldData(prevRowData, this.dt.groupRowsBy);
+            return currentRowFieldData !== previousRowFieldData;
+        }
+        else {
+            return true;
+        }
+    }
+    shouldRenderRowGroupFooter(value, rowData, i) {
+        let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.dt.groupRowsBy);
+        let nextRowData = value[i + 1];
+        if (nextRowData) {
+            let nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, this.dt.groupRowsBy);
+            return currentRowFieldData !== nextRowFieldData;
+        }
+        else {
+            return true;
+        }
+    }
+    shouldRenderRowspan(value, rowData, i) {
+        let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.dt.groupRowsBy);
+        let prevRowData = value[i - 1];
+        if (prevRowData) {
+            let previousRowFieldData = ObjectUtils.resolveFieldData(prevRowData, this.dt.groupRowsBy);
+            return currentRowFieldData !== previousRowFieldData;
+        }
+        else {
+            return true;
+        }
+    }
+    calculateRowGroupSize(value, rowData, index) {
+        let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.dt.groupRowsBy);
+        let nextRowFieldData = currentRowFieldData;
+        let groupRowSpan = 0;
+        while (currentRowFieldData === nextRowFieldData) {
+            groupRowSpan++;
+            let nextRowData = value[++index];
+            if (nextRowData) {
+                nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, this.dt.groupRowsBy);
+            }
+            else {
+                break;
+            }
+        }
+        return groupRowSpan === 1 ? null : groupRowSpan;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+    updateFrozenRowStickyPosition() {
+        this.el.nativeElement.style.top = DomHandler.getOuterHeight(this.el.nativeElement.previousElementSibling) + 'px';
+    }
+    updateFrozenRowGroupHeaderStickyPosition() {
+        if (this.el.nativeElement.previousElementSibling) {
+            let tableHeaderHeight = DomHandler.getOuterHeight(this.el.nativeElement.previousElementSibling);
+            this.dt.rowGroupHeaderStyleObject.top = tableHeaderHeight + 'px';
+        }
+    }
+}
+TableBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableBody, deps: [{ token: Table }, { token: TableService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+TableBody.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TableBody, selector: "[pTableBody]", inputs: { columns: ["pTableBody", "columns"], template: ["pTableBodyTemplate", "template"], value: "value", frozen: "frozen", frozenRows: "frozenRows" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <ng-container *ngIf="!dt.expandedRowTemplate && !dt.virtualScroll">
+            <ng-template ngFor let-rowData let-rowIndex="index" [ngForOf]="value" [ngForTrackBy]="dt.rowTrackBy">
+                <ng-container *ngIf="dt.groupHeaderTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupHeader(value, rowData, rowIndex)" role="row">
+                    <ng-container *ngTemplateOutlet="dt.groupHeaderTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.rowGroupMode !== 'rowspan'">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.rowGroupMode === 'rowspan'">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen, rowgroup: shouldRenderRowspan(value, rowData, rowIndex), rowspan: calculateRowGroupSize(value, rowData, rowIndex)}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.groupFooterTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupFooter(value, rowData, rowIndex)" role="row">
+                    <ng-container *ngTemplateOutlet="dt.groupFooterTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="!dt.expandedRowTemplate && dt.virtualScroll">
+            <ng-template cdkVirtualFor let-rowData let-rowIndex="index" [cdkVirtualForOf]="value" [cdkVirtualForTrackBy]="dt.rowTrackBy" [cdkVirtualForTemplateCacheSize]="0">
+                <ng-container *ngTemplateOutlet="rowData ? template: dt.loadingBodyTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="dt.expandedRowTemplate && !(frozen && dt.frozenExpandedRowTemplate)">
+            <ng-template ngFor let-rowData let-rowIndex="index" [ngForOf]="value" [ngForTrackBy]="dt.rowTrackBy">
+                <ng-container *ngIf="!dt.groupHeaderTemplate">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.groupHeaderTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupHeader(value, rowData, rowIndex)" role="row">
+                    <ng-container *ngTemplateOutlet="dt.groupHeaderTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.isRowExpanded(rowData)">
+                    <ng-container *ngTemplateOutlet="dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, frozen: frozen}"></ng-container>
+                    <ng-container *ngIf="dt.groupFooterTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupFooter(value, rowData, rowIndex)" role="row">
+                        <ng-container *ngTemplateOutlet="dt.groupFooterTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                    </ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="dt.frozenExpandedRowTemplate && frozen">
+            <ng-template ngFor let-rowData let-rowIndex="index" [ngForOf]="value" [ngForTrackBy]="dt.rowTrackBy">
+                <ng-container *ngTemplateOutlet="template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                <ng-container *ngIf="dt.isRowExpanded(rowData)">
+                    <ng-container *ngTemplateOutlet="dt.frozenExpandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, frozen: frozen}"></ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="dt.loading">
+            <ng-container *ngTemplateOutlet="dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}"></ng-container>
+        </ng-container>
+        <ng-container *ngIf="dt.isEmpty() && !dt.loading">
+            <ng-container *ngTemplateOutlet="dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}"></ng-container>
+        </ng-container>
+    `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableBody, decorators: [{
+            type: Component,
+            args: [{
+                    selector: '[pTableBody]',
+                    template: `
+        <ng-container *ngIf="!dt.expandedRowTemplate && !dt.virtualScroll">
+            <ng-template ngFor let-rowData let-rowIndex="index" [ngForOf]="value" [ngForTrackBy]="dt.rowTrackBy">
+                <ng-container *ngIf="dt.groupHeaderTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupHeader(value, rowData, rowIndex)" role="row">
+                    <ng-container *ngTemplateOutlet="dt.groupHeaderTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.rowGroupMode !== 'rowspan'">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.rowGroupMode === 'rowspan'">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen, rowgroup: shouldRenderRowspan(value, rowData, rowIndex), rowspan: calculateRowGroupSize(value, rowData, rowIndex)}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.groupFooterTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupFooter(value, rowData, rowIndex)" role="row">
+                    <ng-container *ngTemplateOutlet="dt.groupFooterTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="!dt.expandedRowTemplate && dt.virtualScroll">
+            <ng-template cdkVirtualFor let-rowData let-rowIndex="index" [cdkVirtualForOf]="value" [cdkVirtualForTrackBy]="dt.rowTrackBy" [cdkVirtualForTemplateCacheSize]="0">
+                <ng-container *ngTemplateOutlet="rowData ? template: dt.loadingBodyTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="dt.expandedRowTemplate && !(frozen && dt.frozenExpandedRowTemplate)">
+            <ng-template ngFor let-rowData let-rowIndex="index" [ngForOf]="value" [ngForTrackBy]="dt.rowTrackBy">
+                <ng-container *ngIf="!dt.groupHeaderTemplate">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.groupHeaderTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupHeader(value, rowData, rowIndex)" role="row">
+                    <ng-container *ngTemplateOutlet="dt.groupHeaderTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                </ng-container>
+                <ng-container *ngIf="dt.isRowExpanded(rowData)">
+                    <ng-container *ngTemplateOutlet="dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, frozen: frozen}"></ng-container>
+                    <ng-container *ngIf="dt.groupFooterTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupFooter(value, rowData, rowIndex)" role="row">
+                        <ng-container *ngTemplateOutlet="dt.groupFooterTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                    </ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="dt.frozenExpandedRowTemplate && frozen">
+            <ng-template ngFor let-rowData let-rowIndex="index" [ngForOf]="value" [ngForTrackBy]="dt.rowTrackBy">
+                <ng-container *ngTemplateOutlet="template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}"></ng-container>
+                <ng-container *ngIf="dt.isRowExpanded(rowData)">
+                    <ng-container *ngTemplateOutlet="dt.frozenExpandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, frozen: frozen}"></ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="dt.loading">
+            <ng-container *ngTemplateOutlet="dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}"></ng-container>
+        </ng-container>
+        <ng-container *ngIf="dt.isEmpty() && !dt.loading">
+            <ng-container *ngTemplateOutlet="dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}"></ng-container>
+        </ng-container>
+    `,
+                    changeDetection: ChangeDetectionStrategy.Default,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: TableService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { columns: [{
+                type: Input,
+                args: ["pTableBody"]
+            }], template: [{
+                type: Input,
+                args: ["pTableBodyTemplate"]
+            }], value: [{
+                type: Input
+            }], frozen: [{
+                type: Input
+            }], frozenRows: [{
+                type: Input
+            }] } });
+class RowGroupHeader {
+    constructor(dt) {
+        this.dt = dt;
+    }
+    get getFrozenRowGroupHeaderStickyPosition() {
+        return this.dt.rowGroupHeaderStyleObject ? this.dt.rowGroupHeaderStyleObject.top : '';
+    }
+}
+RowGroupHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RowGroupHeader, deps: [{ token: Table }], target: i0.ɵɵFactoryTarget.Directive });
+RowGroupHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: RowGroupHeader, selector: "[pRowGroupHeader]", host: { properties: { "style.top": "getFrozenRowGroupHeaderStickyPosition" }, classAttribute: "p-rowgroup-header p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RowGroupHeader, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pRowGroupHeader]',
+                    host: {
+                        'class': 'p-rowgroup-header p-element',
+                        '[style.top]': "getFrozenRowGroupHeaderStickyPosition"
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }]; } });
+class FrozenColumn {
+    constructor(el) {
+        this.el = el;
+        this.alignFrozen = "left";
+        this._frozen = true;
+    }
+    get frozen() {
+        return this._frozen;
+    }
+    set frozen(val) {
+        this._frozen = val;
+        this.updateStickyPosition();
+    }
+    ngAfterViewInit() {
+        this.updateStickyPosition();
+    }
+    updateStickyPosition() {
+        if (this._frozen) {
+            if (this.alignFrozen === 'right') {
+                let right = 0;
+                let next = this.el.nativeElement.nextElementSibling;
+                if (next) {
+                    right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right);
+                }
+                this.el.nativeElement.style.right = right + 'px';
+            }
+            else {
+                let left = 0;
+                let prev = this.el.nativeElement.previousElementSibling;
+                if (prev) {
+                    left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left);
+                }
+                this.el.nativeElement.style.left = left + 'px';
+            }
+            let filterRow = this.el.nativeElement.parentElement.nextElementSibling;
+            if (filterRow) {
+                let index = DomHandler.index(this.el.nativeElement);
+                if (filterRow.children && filterRow.children[index]) {
+                    filterRow.children[index].style.left = this.el.nativeElement.style.left;
+                    filterRow.children[index].style.right = this.el.nativeElement.style.right;
+                }
+            }
+        }
+    }
+}
+FrozenColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FrozenColumn, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+FrozenColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: FrozenColumn, selector: "[pFrozenColumn]", inputs: { frozen: "frozen", alignFrozen: "alignFrozen" }, host: { properties: { "class.p-frozen-column": "frozen" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FrozenColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pFrozenColumn]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-frozen-column]': 'frozen'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { frozen: [{
+                type: Input
+            }], alignFrozen: [{
+                type: Input
+            }] } });
+class SortableColumn {
+    constructor(dt) {
+        this.dt = dt;
+        if (this.isEnabled()) {
+            this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {
+                this.updateSortState();
+            });
+        }
+    }
+    ngOnInit() {
+        if (this.isEnabled()) {
+            this.updateSortState();
+        }
+    }
+    updateSortState() {
+        this.sorted = this.dt.isSorted(this.field);
+        this.sortOrder = this.sorted ? (this.dt.sortOrder === 1 ? 'ascending' : 'descending') : 'none';
+    }
+    onClick(event) {
+        if (this.isEnabled() && !this.isFilterElement(event.target)) {
+            this.updateSortState();
+            this.dt.sort({
+                originalEvent: event,
+                field: this.field
+            });
+            DomHandler.clearSelection();
+        }
+    }
+    onEnterKey(event) {
+        this.onClick(event);
+    }
+    isEnabled() {
+        return this.pSortableColumnDisabled !== true;
+    }
+    isFilterElement(element) {
+        return DomHandler.hasClass(element, 'pi-filter-icon') || DomHandler.hasClass(element, 'p-column-filter-menu-button');
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+SortableColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SortableColumn, deps: [{ token: Table }], target: i0.ɵɵFactoryTarget.Directive });
+SortableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: SortableColumn, selector: "[pSortableColumn]", inputs: { field: ["pSortableColumn", "field"], pSortableColumnDisabled: "pSortableColumnDisabled" }, host: { listeners: { "click": "onClick($event)", "keydown.enter": "onEnterKey($event)" }, properties: { "class.p-sortable-column": "isEnabled()", "class.p-highlight": "sorted", "attr.tabindex": "isEnabled() ? \"0\" : null", "attr.role": "\"columnheader\"", "attr.aria-sort": "sortOrder" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SortableColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pSortableColumn]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-sortable-column]': 'isEnabled()',
+                        '[class.p-highlight]': 'sorted',
+                        '[attr.tabindex]': 'isEnabled() ? "0" : null',
+                        '[attr.role]': '"columnheader"',
+                        '[attr.aria-sort]': 'sortOrder'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }]; }, propDecorators: { field: [{
+                type: Input,
+                args: ["pSortableColumn"]
+            }], pSortableColumnDisabled: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }], onEnterKey: [{
+                type: HostListener,
+                args: ['keydown.enter', ['$event']]
+            }] } });
+class SortIcon {
+    constructor(dt, cd) {
+        this.dt = dt;
+        this.cd = cd;
+        this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {
+            this.updateSortState();
+        });
+    }
+    ngOnInit() {
+        this.updateSortState();
+    }
+    onClick(event) {
+        event.preventDefault();
+    }
+    updateSortState() {
+        if (this.dt.sortMode === 'single') {
+            this.sortOrder = this.dt.isSorted(this.field) ? this.dt.sortOrder : 0;
+        }
+        else if (this.dt.sortMode === 'multiple') {
+            let sortMeta = this.dt.getSortMeta(this.field);
+            this.sortOrder = sortMeta ? sortMeta.order : 0;
+        }
+        this.cd.markForCheck();
+    }
+    getMultiSortMetaIndex() {
+        let multiSortMeta = this.dt._multiSortMeta;
+        let index = -1;
+        if (multiSortMeta && this.dt.sortMode === 'multiple' && (this.dt.showInitialSortBadge || multiSortMeta.length > 1)) {
+            for (let i = 0; i < multiSortMeta.length; i++) {
+                let meta = multiSortMeta[i];
+                if (meta.field === this.field || meta.field === this.field) {
+                    index = i;
+                    break;
+                }
+            }
+        }
+        return index;
+    }
+    getBadgeValue() {
+        let index = this.getMultiSortMetaIndex();
+        return this.dt.groupRowsBy && index > -1 ? index : index + 1;
+    }
+    isMultiSorted() {
+        return this.dt.sortMode === 'multiple' && this.getMultiSortMetaIndex() > -1;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+SortIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SortIcon, deps: [{ token: Table }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+SortIcon.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: SortIcon, selector: "p-sortIcon", inputs: { field: "field" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <i class="p-sortable-column-icon pi pi-fw" [ngClass]="{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}"></i>
+        <span *ngIf="isMultiSorted()" class="p-sortable-column-badge">{{getBadgeValue()}}</span>
+    `, isInline: true, directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SortIcon, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-sortIcon',
+                    template: `
+        <i class="p-sortable-column-icon pi pi-fw" [ngClass]="{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}"></i>
+        <span *ngIf="isMultiSorted()" class="p-sortable-column-badge">{{getBadgeValue()}}</span>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { field: [{
+                type: Input
+            }] } });
+class SelectableRow {
+    constructor(dt, tableService) {
+        this.dt = dt;
+        this.tableService = tableService;
+        if (this.isEnabled()) {
+            this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {
+                this.selected = this.dt.isSelected(this.data);
+            });
+        }
+    }
+    ngOnInit() {
+        if (this.isEnabled()) {
+            this.selected = this.dt.isSelected(this.data);
+        }
+    }
+    onClick(event) {
+        if (this.isEnabled()) {
+            this.dt.handleRowClick({
+                originalEvent: event,
+                rowData: this.data,
+                rowIndex: this.index
+            });
+        }
+    }
+    onTouchEnd(event) {
+        if (this.isEnabled()) {
+            this.dt.handleRowTouchEnd(event);
+        }
+    }
+    onArrowDownKeyDown(event) {
+        if (!this.isEnabled()) {
+            return;
+        }
+        const row = event.currentTarget;
+        const nextRow = this.findNextSelectableRow(row);
+        if (nextRow) {
+            nextRow.focus();
+        }
+        event.preventDefault();
+    }
+    onArrowUpKeyDown(event) {
+        if (!this.isEnabled()) {
+            return;
+        }
+        const row = event.currentTarget;
+        const prevRow = this.findPrevSelectableRow(row);
+        if (prevRow) {
+            prevRow.focus();
+        }
+        event.preventDefault();
+    }
+    onEnterKeyDown(event) {
+        if (!this.isEnabled()) {
+            return;
+        }
+        this.dt.handleRowClick({
+            originalEvent: event,
+            rowData: this.data,
+            rowIndex: this.index
+        });
+    }
+    onPageDownKeyDown() {
+        if (this.dt.virtualScroll) {
+            this.dt.virtualScrollBody.elementRef.nativeElement.focus();
+        }
+    }
+    onSpaceKeydown() {
+        if (this.dt.virtualScroll && !this.dt.editingCell) {
+            this.dt.virtualScrollBody.elementRef.nativeElement.focus();
+        }
+    }
+    findNextSelectableRow(row) {
+        let nextRow = row.nextElementSibling;
+        if (nextRow) {
+            if (DomHandler.hasClass(nextRow, 'p-selectable-row'))
+                return nextRow;
+            else
+                return this.findNextSelectableRow(nextRow);
+        }
+        else {
+            return null;
+        }
+    }
+    findPrevSelectableRow(row) {
+        let prevRow = row.previousElementSibling;
+        if (prevRow) {
+            if (DomHandler.hasClass(prevRow, 'p-selectable-row'))
+                return prevRow;
+            else
+                return this.findPrevSelectableRow(prevRow);
+        }
+        else {
+            return null;
+        }
+    }
+    isEnabled() {
+        return this.pSelectableRowDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+SelectableRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectableRow, deps: [{ token: Table }, { token: TableService }], target: i0.ɵɵFactoryTarget.Directive });
+SelectableRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: SelectableRow, selector: "[pSelectableRow]", inputs: { data: ["pSelectableRow", "data"], index: ["pSelectableRowIndex", "index"], pSelectableRowDisabled: "pSelectableRowDisabled" }, host: { listeners: { "click": "onClick($event)", "touchend": "onTouchEnd($event)", "keydown.arrowdown": "onArrowDownKeyDown($event)", "keydown.arrowup": "onArrowUpKeyDown($event)", "keydown.enter": "onEnterKeyDown($event)", "keydown.shift.enter": "onEnterKeyDown($event)", "keydown.meta.enter": "onEnterKeyDown($event)", "keydown.pagedown": "onPageDownKeyDown()", "keydown.pageup": "onPageDownKeyDown()", "keydown.home": "onPageDownKeyDown()", "keydown.end": "onPageDownKeyDown()", "keydown.space": "onSpaceKeydown()" }, properties: { "class.p-selectable-row": "isEnabled()", "class.p-highlight": "selected", "attr.tabindex": "isEnabled() ? 0 : undefined" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectableRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pSelectableRow]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-selectable-row]': 'isEnabled()',
+                        '[class.p-highlight]': 'selected',
+                        '[attr.tabindex]': 'isEnabled() ? 0 : undefined'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: TableService }]; }, propDecorators: { data: [{
+                type: Input,
+                args: ["pSelectableRow"]
+            }], index: [{
+                type: Input,
+                args: ["pSelectableRowIndex"]
+            }], pSelectableRowDisabled: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }], onTouchEnd: [{
+                type: HostListener,
+                args: ['touchend', ['$event']]
+            }], onArrowDownKeyDown: [{
+                type: HostListener,
+                args: ['keydown.arrowdown', ['$event']]
+            }], onArrowUpKeyDown: [{
+                type: HostListener,
+                args: ['keydown.arrowup', ['$event']]
+            }], onEnterKeyDown: [{
+                type: HostListener,
+                args: ['keydown.enter', ['$event']]
+            }, {
+                type: HostListener,
+                args: ['keydown.shift.enter', ['$event']]
+            }, {
+                type: HostListener,
+                args: ['keydown.meta.enter', ['$event']]
+            }], onPageDownKeyDown: [{
+                type: HostListener,
+                args: ['keydown.pagedown']
+            }, {
+                type: HostListener,
+                args: ['keydown.pageup']
+            }, {
+                type: HostListener,
+                args: ['keydown.home']
+            }, {
+                type: HostListener,
+                args: ['keydown.end']
+            }], onSpaceKeydown: [{
+                type: HostListener,
+                args: ['keydown.space']
+            }] } });
+class SelectableRowDblClick {
+    constructor(dt, tableService) {
+        this.dt = dt;
+        this.tableService = tableService;
+        if (this.isEnabled()) {
+            this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {
+                this.selected = this.dt.isSelected(this.data);
+            });
+        }
+    }
+    ngOnInit() {
+        if (this.isEnabled()) {
+            this.selected = this.dt.isSelected(this.data);
+        }
+    }
+    onClick(event) {
+        if (this.isEnabled()) {
+            this.dt.handleRowClick({
+                originalEvent: event,
+                rowData: this.data,
+                rowIndex: this.index
+            });
+        }
+    }
+    isEnabled() {
+        return this.pSelectableRowDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+SelectableRowDblClick.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectableRowDblClick, deps: [{ token: Table }, { token: TableService }], target: i0.ɵɵFactoryTarget.Directive });
+SelectableRowDblClick.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: SelectableRowDblClick, selector: "[pSelectableRowDblClick]", inputs: { data: ["pSelectableRowDblClick", "data"], index: ["pSelectableRowIndex", "index"], pSelectableRowDisabled: "pSelectableRowDisabled" }, host: { listeners: { "dblclick": "onClick($event)" }, properties: { "class.p-selectable-row": "isEnabled()", "class.p-highlight": "selected" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SelectableRowDblClick, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pSelectableRowDblClick]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-selectable-row]': 'isEnabled()',
+                        '[class.p-highlight]': 'selected'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: TableService }]; }, propDecorators: { data: [{
+                type: Input,
+                args: ["pSelectableRowDblClick"]
+            }], index: [{
+                type: Input,
+                args: ["pSelectableRowIndex"]
+            }], pSelectableRowDisabled: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['dblclick', ['$event']]
+            }] } });
+class ContextMenuRow {
+    constructor(dt, tableService, el) {
+        this.dt = dt;
+        this.tableService = tableService;
+        this.el = el;
+        if (this.isEnabled()) {
+            this.subscription = this.dt.tableService.contextMenuSource$.subscribe((data) => {
+                this.selected = this.dt.equals(this.data, data);
+            });
+        }
+    }
+    onContextMenu(event) {
+        if (this.isEnabled()) {
+            this.dt.handleRowRightClick({
+                originalEvent: event,
+                rowData: this.data,
+                rowIndex: this.index
+            });
+            this.el.nativeElement.focus();
+            event.preventDefault();
+        }
+    }
+    isEnabled() {
+        return this.pContextMenuRowDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+ContextMenuRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuRow, deps: [{ token: Table }, { token: TableService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+ContextMenuRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: ContextMenuRow, selector: "[pContextMenuRow]", inputs: { data: ["pContextMenuRow", "data"], index: ["pContextMenuRowIndex", "index"], pContextMenuRowDisabled: "pContextMenuRowDisabled" }, host: { listeners: { "contextmenu": "onContextMenu($event)" }, properties: { "class.p-highlight-contextmenu": "selected", "attr.tabindex": "isEnabled() ? 0 : undefined" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ContextMenuRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pContextMenuRow]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-highlight-contextmenu]': 'selected',
+                        '[attr.tabindex]': 'isEnabled() ? 0 : undefined'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: TableService }, { type: i0.ElementRef }]; }, propDecorators: { data: [{
+                type: Input,
+                args: ["pContextMenuRow"]
+            }], index: [{
+                type: Input,
+                args: ["pContextMenuRowIndex"]
+            }], pContextMenuRowDisabled: [{
+                type: Input
+            }], onContextMenu: [{
+                type: HostListener,
+                args: ['contextmenu', ['$event']]
+            }] } });
+class RowToggler {
+    constructor(dt) {
+        this.dt = dt;
+    }
+    onClick(event) {
+        if (this.isEnabled()) {
+            this.dt.toggleRow(this.data, event);
+            event.preventDefault();
+        }
+    }
+    isEnabled() {
+        return this.pRowTogglerDisabled !== true;
+    }
+}
+RowToggler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RowToggler, deps: [{ token: Table }], target: i0.ɵɵFactoryTarget.Directive });
+RowToggler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: RowToggler, selector: "[pRowToggler]", inputs: { data: ["pRowToggler", "data"], pRowTogglerDisabled: "pRowTogglerDisabled" }, host: { listeners: { "click": "onClick($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: RowToggler, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pRowToggler]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }]; }, propDecorators: { data: [{
+                type: Input,
+                args: ['pRowToggler']
+            }], pRowTogglerDisabled: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }] } });
+class ResizableColumn {
+    constructor(dt, el, zone) {
+        this.dt = dt;
+        this.el = el;
+        this.zone = zone;
+    }
+    ngAfterViewInit() {
+        if (this.isEnabled()) {
+            DomHandler.addClass(this.el.nativeElement, 'p-resizable-column');
+            this.resizer = document.createElement('span');
+            this.resizer.className = 'p-column-resizer';
+            this.el.nativeElement.appendChild(this.resizer);
+            this.zone.runOutsideAngular(() => {
+                this.resizerMouseDownListener = this.onMouseDown.bind(this);
+                this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);
+            });
+        }
+    }
+    bindDocumentEvents() {
+        this.zone.runOutsideAngular(() => {
+            this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);
+            document.addEventListener('mousemove', this.documentMouseMoveListener);
+            this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);
+            document.addEventListener('mouseup', this.documentMouseUpListener);
+        });
+    }
+    unbindDocumentEvents() {
+        if (this.documentMouseMoveListener) {
+            document.removeEventListener('mousemove', this.documentMouseMoveListener);
+            this.documentMouseMoveListener = null;
+        }
+        if (this.documentMouseUpListener) {
+            document.removeEventListener('mouseup', this.documentMouseUpListener);
+            this.documentMouseUpListener = null;
+        }
+    }
+    onMouseDown(event) {
+        if (event.which === 1) {
+            this.dt.onColumnResizeBegin(event);
+            this.bindDocumentEvents();
+        }
+    }
+    onDocumentMouseMove(event) {
+        this.dt.onColumnResize(event);
+    }
+    onDocumentMouseUp(event) {
+        this.dt.onColumnResizeEnd();
+        this.unbindDocumentEvents();
+    }
+    isEnabled() {
+        return this.pResizableColumnDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.resizerMouseDownListener) {
+            this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);
+        }
+        this.unbindDocumentEvents();
+    }
+}
+ResizableColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ResizableColumn, deps: [{ token: Table }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+ResizableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: ResizableColumn, selector: "[pResizableColumn]", inputs: { pResizableColumnDisabled: "pResizableColumnDisabled" }, host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ResizableColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pResizableColumn]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { pResizableColumnDisabled: [{
+                type: Input
+            }] } });
+class ReorderableColumn {
+    constructor(dt, el, zone) {
+        this.dt = dt;
+        this.el = el;
+        this.zone = zone;
+    }
+    ngAfterViewInit() {
+        if (this.isEnabled()) {
+            this.bindEvents();
+        }
+    }
+    bindEvents() {
+        this.zone.runOutsideAngular(() => {
+            this.mouseDownListener = this.onMouseDown.bind(this);
+            this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);
+            this.dragStartListener = this.onDragStart.bind(this);
+            this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);
+            this.dragOverListener = this.onDragEnter.bind(this);
+            this.el.nativeElement.addEventListener('dragover', this.dragOverListener);
+            this.dragEnterListener = this.onDragEnter.bind(this);
+            this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);
+            this.dragLeaveListener = this.onDragLeave.bind(this);
+            this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);
+        });
+    }
+    unbindEvents() {
+        if (this.mouseDownListener) {
+            document.removeEventListener('mousedown', this.mouseDownListener);
+            this.mouseDownListener = null;
+        }
+        if (this.dragOverListener) {
+            document.removeEventListener('dragover', this.dragOverListener);
+            this.dragOverListener = null;
+        }
+        if (this.dragEnterListener) {
+            document.removeEventListener('dragenter', this.dragEnterListener);
+            this.dragEnterListener = null;
+        }
+        if (this.dragEnterListener) {
+            document.removeEventListener('dragenter', this.dragEnterListener);
+            this.dragEnterListener = null;
+        }
+        if (this.dragLeaveListener) {
+            document.removeEventListener('dragleave', this.dragLeaveListener);
+            this.dragLeaveListener = null;
+        }
+    }
+    onMouseDown(event) {
+        if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer'))
+            this.el.nativeElement.draggable = false;
+        else
+            this.el.nativeElement.draggable = true;
+    }
+    onDragStart(event) {
+        this.dt.onColumnDragStart(event, this.el.nativeElement);
+    }
+    onDragOver(event) {
+        event.preventDefault();
+    }
+    onDragEnter(event) {
+        this.dt.onColumnDragEnter(event, this.el.nativeElement);
+    }
+    onDragLeave(event) {
+        this.dt.onColumnDragLeave(event);
+    }
+    onDrop(event) {
+        if (this.isEnabled()) {
+            this.dt.onColumnDrop(event, this.el.nativeElement);
+        }
+    }
+    isEnabled() {
+        return this.pReorderableColumnDisabled !== true;
+    }
+    ngOnDestroy() {
+        this.unbindEvents();
+    }
+}
+ReorderableColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ReorderableColumn, deps: [{ token: Table }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+ReorderableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: ReorderableColumn, selector: "[pReorderableColumn]", inputs: { pReorderableColumnDisabled: "pReorderableColumnDisabled" }, host: { listeners: { "drop": "onDrop($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ReorderableColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pReorderableColumn]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { pReorderableColumnDisabled: [{
+                type: Input
+            }], onDrop: [{
+                type: HostListener,
+                args: ['drop', ['$event']]
+            }] } });
+class EditableColumn {
+    constructor(dt, el, zone) {
+        this.dt = dt;
+        this.el = el;
+        this.zone = zone;
+    }
+    ngAfterViewInit() {
+        if (this.isEnabled()) {
+            DomHandler.addClass(this.el.nativeElement, 'p-editable-column');
+        }
+    }
+    onClick(event) {
+        if (this.isEnabled()) {
+            this.dt.selfClick = true;
+            if (this.dt.editingCell) {
+                if (this.dt.editingCell !== this.el.nativeElement) {
+                    if (!this.dt.isEditingCellValid()) {
+                        return;
+                    }
+                    this.closeEditingCell(true, event);
+                    this.openCell();
+                }
+            }
+            else {
+                this.openCell();
+            }
+        }
+    }
+    openCell() {
+        this.dt.updateEditingCell(this.el.nativeElement, this.data, this.field, this.rowIndex);
+        DomHandler.addClass(this.el.nativeElement, 'p-cell-editing');
+        this.dt.onEditInit.emit({ field: this.field, data: this.data, index: this.rowIndex });
+        this.zone.runOutsideAngular(() => {
+            setTimeout(() => {
+                let focusCellSelector = this.pFocusCellSelector || 'input, textarea, select';
+                let focusableElement = DomHandler.findSingle(this.el.nativeElement, focusCellSelector);
+                if (focusableElement) {
+                    focusableElement.focus();
+                }
+            }, 50);
+        });
+        this.overlayEventListener = (e) => {
+            if (this.el && this.el.nativeElement.contains(e.target)) {
+                this.dt.selfClick = true;
+            }
+        };
+        this.dt.overlaySubscription = this.dt.overlayService.clickObservable.subscribe(this.overlayEventListener);
+    }
+    closeEditingCell(completed, event) {
+        if (completed)
+            this.dt.onEditComplete.emit({ field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.dt.editingCellRowIndex });
+        else
+            this.dt.onEditCancel.emit({ field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.dt.editingCellRowIndex });
+        DomHandler.removeClass(this.dt.editingCell, 'p-cell-editing');
+        this.dt.editingCell = null;
+        this.dt.editingCellData = null;
+        this.dt.editingCellField = null;
+        this.dt.unbindDocumentEditListener();
+        if (this.dt.overlaySubscription) {
+            this.dt.overlaySubscription.unsubscribe();
+        }
+    }
+    onEnterKeyDown(event) {
+        if (this.isEnabled()) {
+            if (this.dt.isEditingCellValid()) {
+                this.closeEditingCell(true, event);
+            }
+            event.preventDefault();
+        }
+    }
+    onEscapeKeyDown(event) {
+        if (this.isEnabled()) {
+            if (this.dt.isEditingCellValid()) {
+                this.closeEditingCell(false, event);
+            }
+            event.preventDefault();
+        }
+    }
+    onShiftKeyDown(event) {
+        if (this.isEnabled()) {
+            if (event.shiftKey)
+                this.moveToPreviousCell(event);
+            else {
+                this.moveToNextCell(event);
+            }
+        }
+    }
+    onArrowDown(event) {
+        if (this.isEnabled()) {
+            let currentCell = this.findCell(event.target);
+            if (currentCell) {
+                let cellIndex = DomHandler.index(currentCell);
+                let targetCell = this.findNextEditableColumnByIndex(currentCell, cellIndex);
+                if (targetCell) {
+                    if (this.dt.isEditingCellValid()) {
+                        this.closeEditingCell(true, event);
+                    }
+                    DomHandler.invokeElementMethod(event.target, 'blur');
+                    DomHandler.invokeElementMethod(targetCell, 'click');
+                }
+                event.preventDefault();
+            }
+        }
+    }
+    onArrowUp(event) {
+        if (this.isEnabled()) {
+            let currentCell = this.findCell(event.target);
+            if (currentCell) {
+                let cellIndex = DomHandler.index(currentCell);
+                let targetCell = this.findPrevEditableColumnByIndex(currentCell, cellIndex);
+                if (targetCell) {
+                    if (this.dt.isEditingCellValid()) {
+                        this.closeEditingCell(true, event);
+                    }
+                    DomHandler.invokeElementMethod(event.target, 'blur');
+                    DomHandler.invokeElementMethod(targetCell, 'click');
+                }
+                event.preventDefault();
+            }
+        }
+    }
+    onArrowLeft(event) {
+        if (this.isEnabled()) {
+            this.moveToPreviousCell(event);
+        }
+    }
+    onArrowRight(event) {
+        if (this.isEnabled()) {
+            this.moveToNextCell(event);
+        }
+    }
+    findCell(element) {
+        if (element) {
+            let cell = element;
+            while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {
+                cell = cell.parentElement;
+            }
+            return cell;
+        }
+        else {
+            return null;
+        }
+    }
+    moveToPreviousCell(event) {
+        let currentCell = this.findCell(event.target);
+        if (currentCell) {
+            let targetCell = this.findPreviousEditableColumn(currentCell);
+            if (targetCell) {
+                if (this.dt.isEditingCellValid()) {
+                    this.closeEditingCell(true, event);
+                }
+                DomHandler.invokeElementMethod(event.target, 'blur');
+                DomHandler.invokeElementMethod(targetCell, 'click');
+                event.preventDefault();
+            }
+        }
+    }
+    moveToNextCell(event) {
+        let currentCell = this.findCell(event.target);
+        if (currentCell) {
+            let targetCell = this.findNextEditableColumn(currentCell);
+            if (targetCell) {
+                if (this.dt.isEditingCellValid()) {
+                    this.closeEditingCell(true, event);
+                }
+                DomHandler.invokeElementMethod(event.target, 'blur');
+                DomHandler.invokeElementMethod(targetCell, 'click');
+                event.preventDefault();
+            }
+        }
+    }
+    findPreviousEditableColumn(cell) {
+        let prevCell = cell.previousElementSibling;
+        if (!prevCell) {
+            let previousRow = cell.parentElement.previousElementSibling;
+            if (previousRow) {
+                prevCell = previousRow.lastElementChild;
+            }
+        }
+        if (prevCell) {
+            if (DomHandler.hasClass(prevCell, 'p-editable-column'))
+                return prevCell;
+            else
+                return this.findPreviousEditableColumn(prevCell);
+        }
+        else {
+            return null;
+        }
+    }
+    findNextEditableColumn(cell) {
+        let nextCell = cell.nextElementSibling;
+        if (!nextCell) {
+            let nextRow = cell.parentElement.nextElementSibling;
+            if (nextRow) {
+                nextCell = nextRow.firstElementChild;
+            }
+        }
+        if (nextCell) {
+            if (DomHandler.hasClass(nextCell, 'p-editable-column'))
+                return nextCell;
+            else
+                return this.findNextEditableColumn(nextCell);
+        }
+        else {
+            return null;
+        }
+    }
+    findNextEditableColumnByIndex(cell, index) {
+        let nextRow = cell.parentElement.nextElementSibling;
+        if (nextRow) {
+            let nextCell = nextRow.children[index];
+            if (nextCell && DomHandler.hasClass(nextCell, 'p-editable-column')) {
+                return nextCell;
+            }
+            return null;
+        }
+        else {
+            return null;
+        }
+    }
+    findPrevEditableColumnByIndex(cell, index) {
+        let prevRow = cell.parentElement.previousElementSibling;
+        if (prevRow) {
+            let prevCell = prevRow.children[index];
+            if (prevCell && DomHandler.hasClass(prevCell, 'p-editable-column')) {
+                return prevCell;
+            }
+            return null;
+        }
+        else {
+            return null;
+        }
+    }
+    isEnabled() {
+        return this.pEditableColumnDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.dt.overlaySubscription) {
+            this.dt.overlaySubscription.unsubscribe();
+        }
+    }
+}
+EditableColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: EditableColumn, deps: [{ token: Table }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+EditableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: EditableColumn, selector: "[pEditableColumn]", inputs: { data: ["pEditableColumn", "data"], field: ["pEditableColumnField", "field"], rowIndex: ["pEditableColumnRowIndex", "rowIndex"], pEditableColumnDisabled: "pEditableColumnDisabled", pFocusCellSelector: "pFocusCellSelector" }, host: { listeners: { "click": "onClick($event)", "keydown.enter": "onEnterKeyDown($event)", "keydown.escape": "onEscapeKeyDown($event)", "keydown.tab": "onShiftKeyDown($event)", "keydown.shift.tab": "onShiftKeyDown($event)", "keydown.meta.tab": "onShiftKeyDown($event)", "keydown.arrowdown": "onArrowDown($event)", "keydown.arrowup": "onArrowUp($event)", "keydown.arrowleft": "onArrowLeft($event)", "keydown.arrowright": "onArrowRight($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: EditableColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pEditableColumn]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { data: [{
+                type: Input,
+                args: ["pEditableColumn"]
+            }], field: [{
+                type: Input,
+                args: ["pEditableColumnField"]
+            }], rowIndex: [{
+                type: Input,
+                args: ["pEditableColumnRowIndex"]
+            }], pEditableColumnDisabled: [{
+                type: Input
+            }], pFocusCellSelector: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }], onEnterKeyDown: [{
+                type: HostListener,
+                args: ['keydown.enter', ['$event']]
+            }], onEscapeKeyDown: [{
+                type: HostListener,
+                args: ['keydown.escape', ['$event']]
+            }], onShiftKeyDown: [{
+                type: HostListener,
+                args: ['keydown.tab', ['$event']]
+            }, {
+                type: HostListener,
+                args: ['keydown.shift.tab', ['$event']]
+            }, {
+                type: HostListener,
+                args: ['keydown.meta.tab', ['$event']]
+            }], onArrowDown: [{
+                type: HostListener,
+                args: ['keydown.arrowdown', ['$event']]
+            }], onArrowUp: [{
+                type: HostListener,
+                args: ['keydown.arrowup', ['$event']]
+            }], onArrowLeft: [{
+                type: HostListener,
+                args: ['keydown.arrowleft', ['$event']]
+            }], onArrowRight: [{
+                type: HostListener,
+                args: ['keydown.arrowright', ['$event']]
+            }] } });
+class EditableRow {
+    constructor(el) {
+        this.el = el;
+    }
+    isEnabled() {
+        return this.pEditableRowDisabled !== true;
+    }
+}
+EditableRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: EditableRow, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+EditableRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: EditableRow, selector: "[pEditableRow]", inputs: { data: ["pEditableRow", "data"], pEditableRowDisabled: "pEditableRowDisabled" }, host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: EditableRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pEditableRow]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { data: [{
+                type: Input,
+                args: ["pEditableRow"]
+            }], pEditableRowDisabled: [{
+                type: Input
+            }] } });
+class InitEditableRow {
+    constructor(dt, editableRow) {
+        this.dt = dt;
+        this.editableRow = editableRow;
+    }
+    onClick(event) {
+        this.dt.initRowEdit(this.editableRow.data);
+        event.preventDefault();
+    }
+}
+InitEditableRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InitEditableRow, deps: [{ token: Table }, { token: EditableRow }], target: i0.ɵɵFactoryTarget.Directive });
+InitEditableRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: InitEditableRow, selector: "[pInitEditableRow]", host: { listeners: { "click": "onClick($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: InitEditableRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pInitEditableRow]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: EditableRow }]; }, propDecorators: { onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }] } });
+class SaveEditableRow {
+    constructor(dt, editableRow) {
+        this.dt = dt;
+        this.editableRow = editableRow;
+    }
+    onClick(event) {
+        this.dt.saveRowEdit(this.editableRow.data, this.editableRow.el.nativeElement);
+        event.preventDefault();
+    }
+}
+SaveEditableRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SaveEditableRow, deps: [{ token: Table }, { token: EditableRow }], target: i0.ɵɵFactoryTarget.Directive });
+SaveEditableRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: SaveEditableRow, selector: "[pSaveEditableRow]", host: { listeners: { "click": "onClick($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SaveEditableRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pSaveEditableRow]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: EditableRow }]; }, propDecorators: { onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }] } });
+class CancelEditableRow {
+    constructor(dt, editableRow) {
+        this.dt = dt;
+        this.editableRow = editableRow;
+    }
+    onClick(event) {
+        this.dt.cancelRowEdit(this.editableRow.data);
+        event.preventDefault();
+    }
+}
+CancelEditableRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CancelEditableRow, deps: [{ token: Table }, { token: EditableRow }], target: i0.ɵɵFactoryTarget.Directive });
+CancelEditableRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: CancelEditableRow, selector: "[pCancelEditableRow]", host: { listeners: { "click": "onClick($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CancelEditableRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pCancelEditableRow]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: EditableRow }]; }, propDecorators: { onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }] } });
+class CellEditor {
+    constructor(dt, editableColumn, editableRow) {
+        this.dt = dt;
+        this.editableColumn = editableColumn;
+        this.editableRow = editableRow;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'input':
+                    this.inputTemplate = item.template;
+                    break;
+                case 'output':
+                    this.outputTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    get editing() {
+        return (this.dt.editingCell && this.editableColumn && this.dt.editingCell === this.editableColumn.el.nativeElement) ||
+            (this.editableRow && this.dt.editMode === 'row' && this.dt.isRowEditing(this.editableRow.data));
+    }
+}
+CellEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CellEditor, deps: [{ token: Table }, { token: EditableColumn, optional: true }, { token: EditableRow, optional: true }], target: i0.ɵɵFactoryTarget.Component });
+CellEditor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: CellEditor, selector: "p-cellEditor", host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <ng-container *ngIf="editing">
+            <ng-container *ngTemplateOutlet="inputTemplate"></ng-container>
+        </ng-container>
+        <ng-container *ngIf="!editing">
+            <ng-container *ngTemplateOutlet="outputTemplate"></ng-container>
+        </ng-container>
+    `, isInline: true, directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: CellEditor, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-cellEditor',
+                    template: `
+        <ng-container *ngIf="editing">
+            <ng-container *ngTemplateOutlet="inputTemplate"></ng-container>
+        </ng-container>
+        <ng-container *ngIf="!editing">
+            <ng-container *ngTemplateOutlet="outputTemplate"></ng-container>
+        </ng-container>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: EditableColumn, decorators: [{
+                    type: Optional
+                }] }, { type: EditableRow, decorators: [{
+                    type: Optional
+                }] }]; }, propDecorators: { templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class TableRadioButton {
+    constructor(dt, tableService, cd) {
+        this.dt = dt;
+        this.tableService = tableService;
+        this.cd = cd;
+        this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {
+            this.checked = this.dt.isSelected(this.value);
+            this.cd.markForCheck();
+        });
+    }
+    ngOnInit() {
+        this.checked = this.dt.isSelected(this.value);
+    }
+    onClick(event) {
+        if (!this.disabled) {
+            this.dt.toggleRowWithRadio({
+                originalEvent: event,
+                rowIndex: this.index
+            }, this.value);
+        }
+        DomHandler.clearSelection();
+    }
+    onFocus() {
+        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    onBlur() {
+        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TableRadioButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableRadioButton, deps: [{ token: Table }, { token: TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TableRadioButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TableRadioButton, selector: "p-tableRadioButton", inputs: { disabled: "disabled", value: "value", index: "index", inputId: "inputId", name: "name", ariaLabel: "ariaLabel" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "boxViewChild", first: true, predicate: ["box"], descendants: true }], ngImport: i0, template: `
+        <div class="p-radiobutton p-component" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input type="radio" [attr.id]="inputId" [attr.name]="name" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()"
+                [disabled]="disabled" [attr.aria-label]="ariaLabel">
+            </div>
+            <div #box [ngClass]="{'p-radiobutton-box p-component':true, 'p-highlight':checked, 'p-disabled':disabled}" role="radio" [attr.aria-checked]="checked">
+                <div class="p-radiobutton-icon"></div>
+            </div>
+        </div>
+    `, isInline: true, directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableRadioButton, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-tableRadioButton',
+                    template: `
+        <div class="p-radiobutton p-component" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input type="radio" [attr.id]="inputId" [attr.name]="name" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()"
+                [disabled]="disabled" [attr.aria-label]="ariaLabel">
+            </div>
+            <div #box [ngClass]="{'p-radiobutton-box p-component':true, 'p-highlight':checked, 'p-disabled':disabled}" role="radio" [attr.aria-checked]="checked">
+                <div class="p-radiobutton-icon"></div>
+            </div>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], index: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }], boxViewChild: [{
+                type: ViewChild,
+                args: ['box']
+            }] } });
+class TableCheckbox {
+    constructor(dt, tableService, cd) {
+        this.dt = dt;
+        this.tableService = tableService;
+        this.cd = cd;
+        this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {
+            this.checked = this.dt.isSelected(this.value);
+            this.cd.markForCheck();
+        });
+    }
+    ngOnInit() {
+        this.checked = this.dt.isSelected(this.value);
+    }
+    onClick(event) {
+        if (!this.disabled) {
+            this.dt.toggleRowWithCheckbox({
+                originalEvent: event,
+                rowIndex: this.index
+            }, this.value);
+        }
+        DomHandler.clearSelection();
+    }
+    onFocus() {
+        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    onBlur() {
+        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TableCheckbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableCheckbox, deps: [{ token: Table }, { token: TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TableCheckbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TableCheckbox, selector: "p-tableCheckbox", inputs: { disabled: "disabled", value: "value", index: "index", inputId: "inputId", name: "name", required: "required", ariaLabel: "ariaLabel" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "boxViewChild", first: true, predicate: ["box"], descendants: true }], ngImport: i0, template: `
+        <div class="p-checkbox p-component" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input type="checkbox" [attr.id]="inputId" [attr.name]="name" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()" [disabled]="disabled"
+                [attr.required]="required" [attr.aria-label]="ariaLabel">
+            </div>
+            <div #box [ngClass]="{'p-checkbox-box p-component':true,
+                'p-highlight':checked, 'p-disabled':disabled}" role="checkbox" [attr.aria-checked]="checked">
+                <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':checked}"></span>
+            </div>
+        </div>
+    `, isInline: true, directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableCheckbox, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-tableCheckbox',
+                    template: `
+        <div class="p-checkbox p-component" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input type="checkbox" [attr.id]="inputId" [attr.name]="name" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()" [disabled]="disabled"
+                [attr.required]="required" [attr.aria-label]="ariaLabel">
+            </div>
+            <div #box [ngClass]="{'p-checkbox-box p-component':true,
+                'p-highlight':checked, 'p-disabled':disabled}" role="checkbox" [attr.aria-checked]="checked">
+                <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':checked}"></span>
+            </div>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], index: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], required: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }], boxViewChild: [{
+                type: ViewChild,
+                args: ['box']
+            }] } });
+class TableHeaderCheckbox {
+    constructor(dt, tableService, cd) {
+        this.dt = dt;
+        this.tableService = tableService;
+        this.cd = cd;
+        this.valueChangeSubscription = this.dt.tableService.valueSource$.subscribe(() => {
+            this.checked = this.updateCheckedState();
+        });
+        this.selectionChangeSubscription = this.dt.tableService.selectionSource$.subscribe(() => {
+            this.checked = this.updateCheckedState();
+        });
+    }
+    ngOnInit() {
+        this.checked = this.updateCheckedState();
+    }
+    onClick(event) {
+        if (!this.disabled) {
+            if (this.dt.value && this.dt.value.length > 0) {
+                this.dt.toggleRowsWithCheckbox(event, !this.checked);
+            }
+        }
+        DomHandler.clearSelection();
+    }
+    onFocus() {
+        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    onBlur() {
+        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    isDisabled() {
+        return this.disabled || !this.dt.value || !this.dt.value.length;
+    }
+    ngOnDestroy() {
+        if (this.selectionChangeSubscription) {
+            this.selectionChangeSubscription.unsubscribe();
+        }
+        if (this.valueChangeSubscription) {
+            this.valueChangeSubscription.unsubscribe();
+        }
+    }
+    updateCheckedState() {
+        this.cd.markForCheck();
+        if (this.dt.filteredValue && !this.dt.lazy) {
+            const val = this.dt.filteredValue;
+            return (val && val.length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.isAllFilteredValuesChecked());
+        }
+        else {
+            const val = this.dt.value;
+            const length = this.dt.lazy ? this.dt._totalRecords : val ? val.length : 0;
+            return (val && length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.dt.selection.length === length);
+        }
+    }
+    isAllFilteredValuesChecked() {
+        if (!this.dt.filteredValue) {
+            return false;
+        }
+        else {
+            for (let rowData of this.dt.filteredValue) {
+                if (!this.dt.isSelected(rowData)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+}
+TableHeaderCheckbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableHeaderCheckbox, deps: [{ token: Table }, { token: TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TableHeaderCheckbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: { disabled: "disabled", inputId: "inputId", name: "name", ariaLabel: "ariaLabel" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "boxViewChild", first: true, predicate: ["box"], descendants: true }], ngImport: i0, template: `
+        <div class="p-checkbox p-component" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input #cb type="checkbox" [attr.id]="inputId" [attr.name]="name" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()"
+                [disabled]="isDisabled()" [attr.aria-label]="ariaLabel">
+            </div>
+            <div #box [ngClass]="{'p-checkbox-box':true,
+                'p-highlight':checked, 'p-disabled': isDisabled()}" role="checkbox" [attr.aria-checked]="checked">
+                <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':checked}"></span>
+            </div>
+        </div>
+    `, isInline: true, directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableHeaderCheckbox, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-tableHeaderCheckbox',
+                    template: `
+        <div class="p-checkbox p-component" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input #cb type="checkbox" [attr.id]="inputId" [attr.name]="name" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()"
+                [disabled]="isDisabled()" [attr.aria-label]="ariaLabel">
+            </div>
+            <div #box [ngClass]="{'p-checkbox-box':true,
+                'p-highlight':checked, 'p-disabled': isDisabled()}" role="checkbox" [attr.aria-checked]="checked">
+                <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':checked}"></span>
+            </div>
+        </div>
+    `,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: TableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { boxViewChild: [{
+                type: ViewChild,
+                args: ['box']
+            }], disabled: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }] } });
+class ReorderableRowHandle {
+    constructor(el) {
+        this.el = el;
+    }
+    ngAfterViewInit() {
+        DomHandler.addClass(this.el.nativeElement, 'p-datatable-reorderablerow-handle');
+    }
+}
+ReorderableRowHandle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ReorderableRowHandle, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+ReorderableRowHandle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: ReorderableRowHandle, selector: "[pReorderableRowHandle]", inputs: { index: ["pReorderableRowHandle", "index"] }, host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ReorderableRowHandle, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pReorderableRowHandle]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { index: [{
+                type: Input,
+                args: ["pReorderableRowHandle"]
+            }] } });
+class ReorderableRow {
+    constructor(dt, el, zone) {
+        this.dt = dt;
+        this.el = el;
+        this.zone = zone;
+    }
+    ngAfterViewInit() {
+        if (this.isEnabled()) {
+            this.el.nativeElement.droppable = true;
+            this.bindEvents();
+        }
+    }
+    bindEvents() {
+        this.zone.runOutsideAngular(() => {
+            this.mouseDownListener = this.onMouseDown.bind(this);
+            this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);
+            this.dragStartListener = this.onDragStart.bind(this);
+            this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);
+            this.dragEndListener = this.onDragEnd.bind(this);
+            this.el.nativeElement.addEventListener('dragend', this.dragEndListener);
+            this.dragOverListener = this.onDragOver.bind(this);
+            this.el.nativeElement.addEventListener('dragover', this.dragOverListener);
+            this.dragLeaveListener = this.onDragLeave.bind(this);
+            this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);
+        });
+    }
+    unbindEvents() {
+        if (this.mouseDownListener) {
+            document.removeEventListener('mousedown', this.mouseDownListener);
+            this.mouseDownListener = null;
+        }
+        if (this.dragStartListener) {
+            document.removeEventListener('dragstart', this.dragStartListener);
+            this.dragStartListener = null;
+        }
+        if (this.dragEndListener) {
+            document.removeEventListener('dragend', this.dragEndListener);
+            this.dragEndListener = null;
+        }
+        if (this.dragOverListener) {
+            document.removeEventListener('dragover', this.dragOverListener);
+            this.dragOverListener = null;
+        }
+        if (this.dragLeaveListener) {
+            document.removeEventListener('dragleave', this.dragLeaveListener);
+            this.dragLeaveListener = null;
+        }
+    }
+    onMouseDown(event) {
+        if (DomHandler.hasClass(event.target, 'p-datatable-reorderablerow-handle'))
+            this.el.nativeElement.draggable = true;
+        else
+            this.el.nativeElement.draggable = false;
+    }
+    onDragStart(event) {
+        this.dt.onRowDragStart(event, this.index);
+    }
+    onDragEnd(event) {
+        this.dt.onRowDragEnd(event);
+        this.el.nativeElement.draggable = false;
+    }
+    onDragOver(event) {
+        this.dt.onRowDragOver(event, this.index, this.el.nativeElement);
+        event.preventDefault();
+    }
+    onDragLeave(event) {
+        this.dt.onRowDragLeave(event, this.el.nativeElement);
+    }
+    isEnabled() {
+        return this.pReorderableRowDisabled !== true;
+    }
+    onDrop(event) {
+        if (this.isEnabled() && this.dt.rowDragging) {
+            this.dt.onRowDrop(event, this.el.nativeElement);
+        }
+        event.preventDefault();
+    }
+}
+ReorderableRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ReorderableRow, deps: [{ token: Table }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+ReorderableRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: ReorderableRow, selector: "[pReorderableRow]", inputs: { index: ["pReorderableRow", "index"], pReorderableRowDisabled: "pReorderableRowDisabled" }, host: { listeners: { "drop": "onDrop($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ReorderableRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pReorderableRow]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { index: [{
+                type: Input,
+                args: ["pReorderableRow"]
+            }], pReorderableRowDisabled: [{
+                type: Input
+            }], onDrop: [{
+                type: HostListener,
+                args: ['drop', ['$event']]
+            }] } });
+class ColumnFilterFormElement {
+    constructor(dt) {
+        this.dt = dt;
+        this.useGrouping = true;
+    }
+    ngOnInit() {
+        this.filterCallback = value => {
+            this.filterConstraint.value = value;
+            this.dt._filter();
+        };
+    }
+    onModelChange(value) {
+        this.filterConstraint.value = value;
+        if (this.type === 'boolean' || value === '') {
+            this.dt._filter();
+        }
+    }
+    onTextInputEnterKeyDown(event) {
+        this.dt._filter();
+        event.preventDefault();
+    }
+    onNumericInputKeyDown(event) {
+        if (event.key === 'Enter') {
+            this.dt._filter();
+            event.preventDefault();
+        }
+    }
+}
+ColumnFilterFormElement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColumnFilterFormElement, deps: [{ token: Table }], target: i0.ɵɵFactoryTarget.Component });
+ColumnFilterFormElement.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ColumnFilterFormElement, selector: "p-columnFilterFormElement", inputs: { field: "field", type: "type", filterConstraint: "filterConstraint", filterTemplate: "filterTemplate", placeholder: "placeholder", minFractionDigits: "minFractionDigits", maxFractionDigits: "maxFractionDigits", prefix: "prefix", suffix: "suffix", locale: "locale", localeMatcher: "localeMatcher", currency: "currency", currencyDisplay: "currencyDisplay", useGrouping: "useGrouping" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <ng-container *ngIf="filterTemplate; else builtInElement">
+            <ng-container *ngTemplateOutlet="filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}"></ng-container>
+        </ng-container>
+        <ng-template #builtInElement>
+            <ng-container [ngSwitch]="type">
+                <input *ngSwitchCase="'text'" type="text" pInputText [value]="filterConstraint?.value" (input)="onModelChange($event.target.value)"
+                    (keydown.enter)="onTextInputEnterKeyDown($event)" [attr.placeholder]="placeholder">
+                <p-inputNumber *ngSwitchCase="'numeric'" [ngModel]="filterConstraint?.value" (ngModelChange)="onModelChange($event)" (onKeyDown)="onNumericInputKeyDown($event)" [showButtons]="true" [attr.placeholder]="placeholder"
+                    [minFractionDigits]="minFractionDigits" [maxFractionDigits]="maxFractionDigits" [prefix]="prefix" [suffix]="suffix" [placeholder]="placeholder"
+                    [mode]="currency ? 'currency' : 'decimal'" [locale]="locale" [localeMatcher]="localeMatcher" [currency]="currency" [currencyDisplay]="currencyDisplay" [useGrouping]="useGrouping"></p-inputNumber>
+                <p-triStateCheckbox *ngSwitchCase="'boolean'" [ngModel]="filterConstraint?.value" (ngModelChange)="onModelChange($event)"></p-triStateCheckbox>
+                <p-calendar *ngSwitchCase="'date'" [ngModel]="filterConstraint?.value" (ngModelChange)="onModelChange($event)"></p-calendar>
+            </ng-container>
+        </ng-template>
+    `, isInline: true, components: [{ type: i5.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown"] }, { type: i6.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { type: i7.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "numberOfMonths", "view", "touchUI", "timeSeparator", "focusTrap", "firstDayOfWeek", "showTransitionOptions", "hideTransitionOptions", "tabindex", "defaultDate", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "locale"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i8.InputText, selector: "[pInputText]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColumnFilterFormElement, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-columnFilterFormElement',
+                    template: `
+        <ng-container *ngIf="filterTemplate; else builtInElement">
+            <ng-container *ngTemplateOutlet="filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}"></ng-container>
+        </ng-container>
+        <ng-template #builtInElement>
+            <ng-container [ngSwitch]="type">
+                <input *ngSwitchCase="'text'" type="text" pInputText [value]="filterConstraint?.value" (input)="onModelChange($event.target.value)"
+                    (keydown.enter)="onTextInputEnterKeyDown($event)" [attr.placeholder]="placeholder">
+                <p-inputNumber *ngSwitchCase="'numeric'" [ngModel]="filterConstraint?.value" (ngModelChange)="onModelChange($event)" (onKeyDown)="onNumericInputKeyDown($event)" [showButtons]="true" [attr.placeholder]="placeholder"
+                    [minFractionDigits]="minFractionDigits" [maxFractionDigits]="maxFractionDigits" [prefix]="prefix" [suffix]="suffix" [placeholder]="placeholder"
+                    [mode]="currency ? 'currency' : 'decimal'" [locale]="locale" [localeMatcher]="localeMatcher" [currency]="currency" [currencyDisplay]="currencyDisplay" [useGrouping]="useGrouping"></p-inputNumber>
+                <p-triStateCheckbox *ngSwitchCase="'boolean'" [ngModel]="filterConstraint?.value" (ngModelChange)="onModelChange($event)"></p-triStateCheckbox>
+                <p-calendar *ngSwitchCase="'date'" [ngModel]="filterConstraint?.value" (ngModelChange)="onModelChange($event)"></p-calendar>
+            </ng-container>
+        </ng-template>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: Table }]; }, propDecorators: { field: [{
+                type: Input
+            }], type: [{
+                type: Input
+            }], filterConstraint: [{
+                type: Input
+            }], filterTemplate: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], minFractionDigits: [{
+                type: Input
+            }], maxFractionDigits: [{
+                type: Input
+            }], prefix: [{
+                type: Input
+            }], suffix: [{
+                type: Input
+            }], locale: [{
+                type: Input
+            }], localeMatcher: [{
+                type: Input
+            }], currency: [{
+                type: Input
+            }], currencyDisplay: [{
+                type: Input
+            }], useGrouping: [{
+                type: Input
+            }] } });
+class ColumnFilter {
+    constructor(el, dt, renderer, config, overlayService) {
+        this.el = el;
+        this.dt = dt;
+        this.renderer = renderer;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.type = 'text';
+        this.display = 'row';
+        this.showMenu = true;
+        this.operator = FilterOperator.AND;
+        this.showOperator = true;
+        this.showClearButton = true;
+        this.showApplyButton = true;
+        this.showMatchModes = true;
+        this.showAddButton = true;
+        this.hideOnClear = false;
+        this.maxConstraints = 2;
+        this.useGrouping = true;
+    }
+    ngOnInit() {
+        if (!this.dt.filters[this.field]) {
+            this.initFieldFilterConstraint();
+        }
+        this.translationSubscription = this.config.translationObserver.subscribe(() => {
+            this.generateMatchModeOptions();
+            this.generateOperatorOptions();
+        });
+        this.resetSubscription = this.dt.tableService.resetSource$.subscribe(() => {
+            this.clearFilter();
+        });
+        this.generateMatchModeOptions();
+        this.generateOperatorOptions();
+    }
+    generateMatchModeOptions() {
+        this.matchModes = this.matchModeOptions ||
+            this.config.filterMatchModeOptions[this.type]?.map(key => {
+                return { label: this.config.getTranslation(key), value: key };
+            });
+    }
+    generateOperatorOptions() {
+        this.operatorOptions = [
+            { label: this.config.getTranslation(TranslationKeys.MATCH_ALL), value: FilterOperator.AND },
+            { label: this.config.getTranslation(TranslationKeys.MATCH_ANY), value: FilterOperator.OR }
+        ];
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'filter':
+                    this.filterTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.filterTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    initFieldFilterConstraint() {
+        let defaultMatchMode = this.getDefaultMatchMode();
+        this.dt.filters[this.field] = this.display == 'row' ? { value: null, matchMode: defaultMatchMode } : [{ value: null, matchMode: defaultMatchMode, operator: this.operator }];
+    }
+    onMenuMatchModeChange(value, filterMeta) {
+        filterMeta.matchMode = value;
+        if (!this.showApplyButton) {
+            this.dt._filter();
+        }
+    }
+    onRowMatchModeChange(matchMode) {
+        this.dt.filters[this.field].matchMode = matchMode;
+        this.dt._filter();
+        this.hide();
+    }
+    onRowMatchModeKeyDown(event) {
+        let item = event.target;
+        switch (event.key) {
+            case 'ArrowDown':
+                var nextItem = this.findNextItem(item);
+                if (nextItem) {
+                    item.removeAttribute('tabindex');
+                    nextItem.tabIndex = '0';
+                    nextItem.focus();
+                }
+                event.preventDefault();
+                break;
+            case 'ArrowUp':
+                var prevItem = this.findPrevItem(item);
+                if (prevItem) {
+                    item.removeAttribute('tabindex');
+                    prevItem.tabIndex = '0';
+                    prevItem.focus();
+                }
+                event.preventDefault();
+                break;
+        }
+    }
+    onRowClearItemClick() {
+        this.clearFilter();
+        this.hide();
+    }
+    isRowMatchModeSelected(matchMode) {
+        return this.dt.filters[this.field].matchMode === matchMode;
+    }
+    addConstraint() {
+        this.dt.filters[this.field].push({ value: null, matchMode: this.getDefaultMatchMode(), operator: this.getDefaultOperator() });
+        this.dt._filter();
+    }
+    removeConstraint(filterMeta) {
+        this.dt.filters[this.field] = this.dt.filters[this.field].filter(meta => meta !== filterMeta);
+        this.dt._filter();
+    }
+    onOperatorChange(value) {
+        this.dt.filters[this.field].forEach(filterMeta => {
+            filterMeta.operator = value;
+            this.operator = value;
+        });
+        if (!this.showApplyButton) {
+            this.dt._filter();
+        }
+    }
+    toggleMenu() {
+        this.overlayVisible = !this.overlayVisible;
+    }
+    onToggleButtonKeyDown(event) {
+        switch (event.key) {
+            case 'Escape':
+            case 'Tab':
+                this.overlayVisible = false;
+                break;
+            case 'ArrowDown':
+                if (this.overlayVisible) {
+                    let focusable = DomHandler.getFocusableElements(this.overlay);
+                    if (focusable) {
+                        focusable[0].focus();
+                    }
+                    event.preventDefault();
+                }
+                else if (event.altKey) {
+                    this.overlayVisible = true;
+                    event.preventDefault();
+                }
+                break;
+        }
+    }
+    onEscape() {
+        this.overlayVisible = false;
+        this.icon.nativeElement.focus();
+    }
+    findNextItem(item) {
+        let nextItem = item.nextElementSibling;
+        if (nextItem)
+            return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextItem(nextItem) : nextItem;
+        else
+            return item.parentElement.firstElementChild;
+    }
+    findPrevItem(item) {
+        let prevItem = item.previousElementSibling;
+        if (prevItem)
+            return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevItem(prevItem) : prevItem;
+        else
+            return item.parentElement.lastElementChild;
+    }
+    onContentClick() {
+        this.selfClick = true;
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.overlay = event.element;
+                document.body.appendChild(this.overlay);
+                ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);
+                DomHandler.absolutePosition(this.overlay, this.icon.nativeElement);
+                this.bindDocumentClickListener();
+                this.bindDocumentResizeListener();
+                this.bindScrollListener();
+                this.overlayEventListener = (e) => {
+                    if (this.overlay && this.overlay.contains(e.target)) {
+                        this.selfClick = true;
+                    }
+                };
+                this.overlaySubscription = this.overlayService.clickObservable.subscribe(this.overlayEventListener);
+                break;
+            case 'void':
+                this.onOverlayHide();
+                if (this.overlaySubscription) {
+                    this.overlaySubscription.unsubscribe();
+                }
+                break;
+        }
+    }
+    onOverlayAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                ZIndexUtils.clear(event.element);
+                break;
+        }
+    }
+    getDefaultMatchMode() {
+        if (this.matchMode) {
+            return this.matchMode;
+        }
+        else {
+            if (this.type === 'text')
+                return FilterMatchMode.STARTS_WITH;
+            else if (this.type === 'numeric')
+                return FilterMatchMode.EQUALS;
+            else if (this.type === 'date')
+                return FilterMatchMode.DATE_IS;
+            else
+                return FilterMatchMode.CONTAINS;
+        }
+    }
+    getDefaultOperator() {
+        return this.dt.filters ? this.dt.filters[this.field][0].operator : this.operator;
+    }
+    hasRowFilter() {
+        return this.dt.filters[this.field] && !this.dt.isFilterBlank(this.dt.filters[this.field].value);
+    }
+    get fieldConstraints() {
+        return this.dt.filters ? this.dt.filters[this.field] : null;
+    }
+    get showRemoveIcon() {
+        return this.fieldConstraints ? this.fieldConstraints.length > 1 : false;
+    }
+    get showMenuButton() {
+        return this.showMenu && (this.display === 'row' ? this.type !== 'boolean' : true);
+    }
+    get isShowOperator() {
+        return this.showOperator && this.type !== 'boolean';
+    }
+    get isShowAddConstraint() {
+        return this.showAddButton && this.type !== 'boolean' && (this.fieldConstraints && this.fieldConstraints.length < this.maxConstraints);
+    }
+    get applyButtonLabel() {
+        return this.config.getTranslation(TranslationKeys.APPLY);
+    }
+    get clearButtonLabel() {
+        return this.config.getTranslation(TranslationKeys.CLEAR);
+    }
+    get addRuleButtonLabel() {
+        return this.config.getTranslation(TranslationKeys.ADD_RULE);
+    }
+    get removeRuleButtonLabel() {
+        return this.config.getTranslation(TranslationKeys.REMOVE_RULE);
+    }
+    get noFilterLabel() {
+        return this.config.getTranslation(TranslationKeys.NO_FILTER);
+    }
+    hasFilter() {
+        let fieldFilter = this.dt.filters[this.field];
+        if (fieldFilter) {
+            if (Array.isArray(fieldFilter))
+                return !this.dt.isFilterBlank(fieldFilter[0].value);
+            else
+                return !this.dt.isFilterBlank(fieldFilter.value);
+        }
+        return false;
+    }
+    isOutsideClicked(event) {
+        return !(this.overlay.isSameNode(event.target) || this.overlay.contains(event.target)
+            || this.icon.nativeElement.isSameNode(event.target) || this.icon.nativeElement.contains(event.target)
+            || DomHandler.hasClass(event.target, 'p-column-filter-add-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button')
+            || DomHandler.hasClass(event.target, 'p-column-filter-remove-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button'));
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', event => {
+                if (this.overlayVisible && !this.selfClick && this.isOutsideClicked(event)) {
+                    this.hide();
+                }
+                this.selfClick = false;
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+            this.selfClick = false;
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = () => this.hide();
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon.nativeElement, () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    hide() {
+        this.overlayVisible = false;
+    }
+    onOverlayHide() {
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.overlay = null;
+    }
+    clearFilter() {
+        this.initFieldFilterConstraint();
+        this.dt._filter();
+        if (this.hideOnClear)
+            this.hide();
+    }
+    applyFilter() {
+        this.dt._filter();
+        this.hide();
+    }
+    ngOnDestroy() {
+        if (this.overlay) {
+            this.el.nativeElement.appendChild(this.overlay);
+            ZIndexUtils.clear(this.overlay);
+            this.onOverlayHide();
+        }
+        if (this.translationSubscription) {
+            this.translationSubscription.unsubscribe();
+        }
+        if (this.resetSubscription) {
+            this.resetSubscription.unsubscribe();
+        }
+        if (this.overlaySubscription) {
+            this.overlaySubscription.unsubscribe();
+        }
+    }
+}
+ColumnFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColumnFilter, deps: [{ token: i0.ElementRef }, { token: Table }, { token: i0.Renderer2 }, { token: i1.PrimeNGConfig }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+ColumnFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ColumnFilter, selector: "p-columnFilter", inputs: { field: "field", type: "type", display: "display", showMenu: "showMenu", matchMode: "matchMode", operator: "operator", showOperator: "showOperator", showClearButton: "showClearButton", showApplyButton: "showApplyButton", showMatchModes: "showMatchModes", showAddButton: "showAddButton", hideOnClear: "hideOnClear", placeholder: "placeholder", matchModeOptions: "matchModeOptions", maxConstraints: "maxConstraints", minFractionDigits: "minFractionDigits", maxFractionDigits: "maxFractionDigits", prefix: "prefix", suffix: "suffix", locale: "locale", localeMatcher: "localeMatcher", currency: "currency", currencyDisplay: "currencyDisplay", useGrouping: "useGrouping" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "icon", first: true, predicate: ["icon"], descendants: true }], ngImport: i0, template: `
+        <div class="p-column-filter" [ngClass]="{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}">
+            <p-columnFilterFormElement *ngIf="display === 'row'" class="p-fluid" [type]="type" [field]="field" [filterConstraint]="dt.filters[field]" [filterTemplate]="filterTemplate" [placeholder]="placeholder" [minFractionDigits]="minFractionDigits" [maxFractionDigits]="maxFractionDigits" [prefix]="prefix" [suffix]="suffix"
+                                    [locale]="locale"  [localeMatcher]="localeMatcher" [currency]="currency" [currencyDisplay]="currencyDisplay" [useGrouping]="useGrouping"></p-columnFilterFormElement>
+            <button #icon *ngIf="showMenuButton" type="button" class="p-column-filter-menu-button p-link" aria-haspopup="true" [attr.aria-expanded]="overlayVisible"
+                [ngClass]="{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}"
+                (click)="toggleMenu()" (keydown)="onToggleButtonKeyDown($event)"><span class="pi pi-filter-icon pi-filter"></span></button>
+            <button #icon *ngIf="showClearButton && display === 'row'" [ngClass]="{'p-hidden-space': !hasRowFilter()}" type="button" class="p-column-filter-clear-button p-link" (click)="clearFilter()"><span class="pi pi-filter-slash"></span></button>
+            <div *ngIf="showMenu && overlayVisible" [ngClass]="{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}" (click)="onContentClick()"
+                [@overlayAnimation]="'visible'" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)" (keydown.escape)="onEscape()">
+                <ng-container *ngTemplateOutlet="headerTemplate; context: {$implicit: field}"></ng-container>
+                <ul *ngIf="display === 'row'; else menu" class="p-column-filter-row-items">
+                    <li class="p-column-filter-row-item" *ngFor="let matchMode of matchModes; let i = index;" (click)="onRowMatchModeChange(matchMode.value)" (keydown)="onRowMatchModeKeyDown($event)" (keydown.enter)="this.onRowMatchModeChange(matchMode.value)"
+                        [ngClass]="{'p-highlight': isRowMatchModeSelected(matchMode.value)}" [attr.tabindex]="i === 0 ? '0' : null">{{matchMode.label}}</li>
+                    <li class="p-column-filter-separator"></li>
+                    <li class="p-column-filter-row-item" (click)="onRowClearItemClick()" (keydown)="onRowMatchModeKeyDown($event)" (keydown.enter)="onRowClearItemClick()">{{noFilterLabel}}</li>
+                </ul>
+                <ng-template #menu>
+                    <div class="p-column-filter-operator" *ngIf="isShowOperator">
+                        <p-dropdown [options]="operatorOptions" [ngModel]="operator" (ngModelChange)="onOperatorChange($event)" styleClass="p-column-filter-operator-dropdown"></p-dropdown>
+                    </div>
+                    <div class="p-column-filter-constraints">
+                        <div *ngFor="let fieldConstraint of fieldConstraints; let i = index" class="p-column-filter-constraint">
+                            <p-dropdown  *ngIf="showMatchModes && matchModes" [options]="matchModes" [ngModel]="fieldConstraint.matchMode" (ngModelChange)="onMenuMatchModeChange($event, fieldConstraint)" styleClass="p-column-filter-matchmode-dropdown"></p-dropdown>
+                            <p-columnFilterFormElement [type]="type" [field]="field" [filterConstraint]="fieldConstraint" [filterTemplate]="filterTemplate" [placeholder]="placeholder"
+                            [minFractionDigits]="minFractionDigits" [maxFractionDigits]="maxFractionDigits" [prefix]="prefix" [suffix]="suffix"
+                            [locale]="locale"  [localeMatcher]="localeMatcher" [currency]="currency" [currencyDisplay]="currencyDisplay" [useGrouping]="useGrouping"></p-columnFilterFormElement>
+                            <div>
+                                <button *ngIf="showRemoveIcon" type="button" pButton icon="pi pi-trash" class="p-column-filter-remove-button p-button-text p-button-danger p-button-sm" (click)="removeConstraint(fieldConstraint)" pRipple [label]="removeRuleButtonLabel"></button>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="p-column-filter-add-rule" *ngIf="isShowAddConstraint">
+                        <button type="button" pButton [label]="addRuleButtonLabel" icon="pi pi-plus" class="p-column-filter-add-button p-button-text p-button-sm" (click)="addConstraint()" pRipple></button>
+                    </div>
+                    <div class="p-column-filter-buttonbar">
+                        <button *ngIf="showClearButton" type="button" pButton class="p-button-outlined" (click)="clearFilter()" [label]="clearButtonLabel" pRipple></button>
+                        <button *ngIf="showApplyButton" type="button" pButton (click)="applyFilter()" [label]="applyButtonLabel" pRipple></button>
+                    </div>
+                </ng-template>
+                <ng-container *ngTemplateOutlet="footerTemplate; context: {$implicit: field}"></ng-container>
+            </div>
+        </div>
+    `, isInline: true, components: [{ type: ColumnFilterFormElement, selector: "p-columnFilterFormElement", inputs: ["field", "type", "filterConstraint", "filterTemplate", "placeholder", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping"] }, { type: i10.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "virtualScroll", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i11.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('.12s cubic-bezier(0, 0, 0.2, 1)')
+            ]),
+            transition(':leave', [
+                animate('.1s linear', style({ opacity: 0 }))
+            ])
+        ])
+    ], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ColumnFilter, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-columnFilter',
+                    template: `
+        <div class="p-column-filter" [ngClass]="{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}">
+            <p-columnFilterFormElement *ngIf="display === 'row'" class="p-fluid" [type]="type" [field]="field" [filterConstraint]="dt.filters[field]" [filterTemplate]="filterTemplate" [placeholder]="placeholder" [minFractionDigits]="minFractionDigits" [maxFractionDigits]="maxFractionDigits" [prefix]="prefix" [suffix]="suffix"
+                                    [locale]="locale"  [localeMatcher]="localeMatcher" [currency]="currency" [currencyDisplay]="currencyDisplay" [useGrouping]="useGrouping"></p-columnFilterFormElement>
+            <button #icon *ngIf="showMenuButton" type="button" class="p-column-filter-menu-button p-link" aria-haspopup="true" [attr.aria-expanded]="overlayVisible"
+                [ngClass]="{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}"
+                (click)="toggleMenu()" (keydown)="onToggleButtonKeyDown($event)"><span class="pi pi-filter-icon pi-filter"></span></button>
+            <button #icon *ngIf="showClearButton && display === 'row'" [ngClass]="{'p-hidden-space': !hasRowFilter()}" type="button" class="p-column-filter-clear-button p-link" (click)="clearFilter()"><span class="pi pi-filter-slash"></span></button>
+            <div *ngIf="showMenu && overlayVisible" [ngClass]="{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}" (click)="onContentClick()"
+                [@overlayAnimation]="'visible'" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)" (keydown.escape)="onEscape()">
+                <ng-container *ngTemplateOutlet="headerTemplate; context: {$implicit: field}"></ng-container>
+                <ul *ngIf="display === 'row'; else menu" class="p-column-filter-row-items">
+                    <li class="p-column-filter-row-item" *ngFor="let matchMode of matchModes; let i = index;" (click)="onRowMatchModeChange(matchMode.value)" (keydown)="onRowMatchModeKeyDown($event)" (keydown.enter)="this.onRowMatchModeChange(matchMode.value)"
+                        [ngClass]="{'p-highlight': isRowMatchModeSelected(matchMode.value)}" [attr.tabindex]="i === 0 ? '0' : null">{{matchMode.label}}</li>
+                    <li class="p-column-filter-separator"></li>
+                    <li class="p-column-filter-row-item" (click)="onRowClearItemClick()" (keydown)="onRowMatchModeKeyDown($event)" (keydown.enter)="onRowClearItemClick()">{{noFilterLabel}}</li>
+                </ul>
+                <ng-template #menu>
+                    <div class="p-column-filter-operator" *ngIf="isShowOperator">
+                        <p-dropdown [options]="operatorOptions" [ngModel]="operator" (ngModelChange)="onOperatorChange($event)" styleClass="p-column-filter-operator-dropdown"></p-dropdown>
+                    </div>
+                    <div class="p-column-filter-constraints">
+                        <div *ngFor="let fieldConstraint of fieldConstraints; let i = index" class="p-column-filter-constraint">
+                            <p-dropdown  *ngIf="showMatchModes && matchModes" [options]="matchModes" [ngModel]="fieldConstraint.matchMode" (ngModelChange)="onMenuMatchModeChange($event, fieldConstraint)" styleClass="p-column-filter-matchmode-dropdown"></p-dropdown>
+                            <p-columnFilterFormElement [type]="type" [field]="field" [filterConstraint]="fieldConstraint" [filterTemplate]="filterTemplate" [placeholder]="placeholder"
+                            [minFractionDigits]="minFractionDigits" [maxFractionDigits]="maxFractionDigits" [prefix]="prefix" [suffix]="suffix"
+                            [locale]="locale"  [localeMatcher]="localeMatcher" [currency]="currency" [currencyDisplay]="currencyDisplay" [useGrouping]="useGrouping"></p-columnFilterFormElement>
+                            <div>
+                                <button *ngIf="showRemoveIcon" type="button" pButton icon="pi pi-trash" class="p-column-filter-remove-button p-button-text p-button-danger p-button-sm" (click)="removeConstraint(fieldConstraint)" pRipple [label]="removeRuleButtonLabel"></button>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="p-column-filter-add-rule" *ngIf="isShowAddConstraint">
+                        <button type="button" pButton [label]="addRuleButtonLabel" icon="pi pi-plus" class="p-column-filter-add-button p-button-text p-button-sm" (click)="addConstraint()" pRipple></button>
+                    </div>
+                    <div class="p-column-filter-buttonbar">
+                        <button *ngIf="showClearButton" type="button" pButton class="p-button-outlined" (click)="clearFilter()" [label]="clearButtonLabel" pRipple></button>
+                        <button *ngIf="showApplyButton" type="button" pButton (click)="applyFilter()" [label]="applyButtonLabel" pRipple></button>
+                    </div>
+                </ng-template>
+                <ng-container *ngTemplateOutlet="footerTemplate; context: {$implicit: field}"></ng-container>
+            </div>
+        </div>
+    `,
+                    animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('.12s cubic-bezier(0, 0, 0.2, 1)')
+                            ]),
+                            transition(':leave', [
+                                animate('.1s linear', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ],
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Table }, { type: i0.Renderer2 }, { type: i1.PrimeNGConfig }, { type: i1.OverlayService }]; }, propDecorators: { field: [{
+                type: Input
+            }], type: [{
+                type: Input
+            }], display: [{
+                type: Input
+            }], showMenu: [{
+                type: Input
+            }], matchMode: [{
+                type: Input
+            }], operator: [{
+                type: Input
+            }], showOperator: [{
+                type: Input
+            }], showClearButton: [{
+                type: Input
+            }], showApplyButton: [{
+                type: Input
+            }], showMatchModes: [{
+                type: Input
+            }], showAddButton: [{
+                type: Input
+            }], hideOnClear: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], matchModeOptions: [{
+                type: Input
+            }], maxConstraints: [{
+                type: Input
+            }], minFractionDigits: [{
+                type: Input
+            }], maxFractionDigits: [{
+                type: Input
+            }], prefix: [{
+                type: Input
+            }], suffix: [{
+                type: Input
+            }], locale: [{
+                type: Input
+            }], localeMatcher: [{
+                type: Input
+            }], currency: [{
+                type: Input
+            }], currencyDisplay: [{
+                type: Input
+            }], useGrouping: [{
+                type: Input
+            }], icon: [{
+                type: ViewChild,
+                args: ['icon']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class TableModule {
+}
+TableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableModule, declarations: [Table, SortableColumn, FrozenColumn, RowGroupHeader, SelectableRow, RowToggler, ContextMenuRow, ResizableColumn, ReorderableColumn, EditableColumn, CellEditor, TableBody, SortIcon, TableRadioButton, TableCheckbox, TableHeaderCheckbox, ReorderableRowHandle, ReorderableRow, SelectableRowDblClick, EditableRow, InitEditableRow, SaveEditableRow, CancelEditableRow, ColumnFilter, ColumnFilterFormElement], imports: [CommonModule, PaginatorModule, InputTextModule, DropdownModule, ScrollingModule, FormsModule, ButtonModule, SelectButtonModule, CalendarModule, InputNumberModule, TriStateCheckboxModule], exports: [Table, SharedModule, SortableColumn, FrozenColumn, RowGroupHeader, SelectableRow, RowToggler, ContextMenuRow, ResizableColumn, ReorderableColumn, EditableColumn, CellEditor, SortIcon, TableRadioButton, TableCheckbox, TableHeaderCheckbox, ReorderableRowHandle, ReorderableRow, SelectableRowDblClick, EditableRow, InitEditableRow, SaveEditableRow, CancelEditableRow, ScrollingModule, ColumnFilter] });
+TableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableModule, imports: [[CommonModule, PaginatorModule, InputTextModule, DropdownModule, ScrollingModule, FormsModule, ButtonModule, SelectButtonModule, CalendarModule, InputNumberModule, TriStateCheckboxModule], SharedModule,
+        ScrollingModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TableModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, PaginatorModule, InputTextModule, DropdownModule, ScrollingModule, FormsModule, ButtonModule, SelectButtonModule, CalendarModule, InputNumberModule, TriStateCheckboxModule],
+                    exports: [Table, SharedModule, SortableColumn, FrozenColumn, RowGroupHeader, SelectableRow, RowToggler, ContextMenuRow, ResizableColumn, ReorderableColumn, EditableColumn, CellEditor, SortIcon,
+                        TableRadioButton, TableCheckbox, TableHeaderCheckbox, ReorderableRowHandle, ReorderableRow, SelectableRowDblClick, EditableRow, InitEditableRow, SaveEditableRow, CancelEditableRow, ScrollingModule, ColumnFilter],
+                    declarations: [Table, SortableColumn, FrozenColumn, RowGroupHeader, SelectableRow, RowToggler, ContextMenuRow, ResizableColumn, ReorderableColumn, EditableColumn, CellEditor, TableBody, SortIcon,
+                        TableRadioButton, TableCheckbox, TableHeaderCheckbox, ReorderableRowHandle, ReorderableRow, SelectableRowDblClick, EditableRow, InitEditableRow, SaveEditableRow, CancelEditableRow, ColumnFilter, ColumnFilterFormElement]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { CancelEditableRow, CellEditor, ColumnFilter, ColumnFilterFormElement, ContextMenuRow, EditableColumn, EditableRow, FrozenColumn, InitEditableRow, ReorderableColumn, ReorderableRow, ReorderableRowHandle, ResizableColumn, RowGroupHeader, RowToggler, SaveEditableRow, SelectableRow, SelectableRowDblClick, SortIcon, SortableColumn, Table, TableBody, TableCheckbox, TableHeaderCheckbox, TableModule, TableRadioButton, TableService };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-table.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-table.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-table.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-table.mjs","sources":["../../src/app/components/table/table.ts","../../src/app/components/table/primeng-table.ts"],"sourcesContent":["import { NgModule, Component, HostListener, OnInit, OnDestroy, AfterViewInit, Directive, Optional, AfterContentInit,\n    Input, Output, EventEmitter, ElementRef, ContentChildren, TemplateRef, QueryList, ViewChild, NgZone, ChangeDetectorRef, OnChanges, SimpleChanges, ChangeDetectionStrategy, Query, ViewEncapsulation, Renderer2} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PrimeTemplate, SharedModule, FilterMatchMode, FilterOperator, SelectItem, PrimeNGConfig, TranslationKeys, FilterService, OverlayService } from 'primeng/api';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { TriStateCheckboxModule } from 'primeng/tristatecheckbox';\nimport { CalendarModule } from 'primeng/calendar';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { ObjectUtils, UniqueComponentId, ZIndexUtils } from 'primeng/utils';\nimport { SortMeta } from 'primeng/api';\nimport { TableState } from 'primeng/api';\nimport { FilterMetadata } from 'primeng/api';\nimport { Injectable } from '@angular/core';\nimport { BlockableUI } from 'primeng/api';\nimport { Subject, Subscription } from 'rxjs';\nimport { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\n\n@Injectable()\nexport class TableService {\n\n    private sortSource = new Subject<SortMeta|SortMeta[]>();\n    private selectionSource = new Subject();\n    private contextMenuSource = new Subject<any>();\n    private valueSource = new Subject<any>();\n    private totalRecordsSource = new Subject<any>();\n    private columnsSource = new Subject();\n    private resetSource = new Subject();\n\n    sortSource$ = this.sortSource.asObservable();\n    selectionSource$ = this.selectionSource.asObservable();\n    contextMenuSource$ = this.contextMenuSource.asObservable();\n    valueSource$ = this.valueSource.asObservable();\n    totalRecordsSource$ = this.totalRecordsSource.asObservable();\n    columnsSource$ = this.columnsSource.asObservable();\n    resetSource$ = this.resetSource.asObservable();\n\n    onSort(sortMeta: SortMeta|SortMeta[]) {\n        this.sortSource.next(sortMeta);\n    }\n\n    onSelectionChange() {\n        this.selectionSource.next(null);\n    }\n\n    onResetChange() {\n        this.resetSource.next(null);\n    }\n\n    onContextMenu(data: any) {\n        this.contextMenuSource.next(data);\n    }\n\n    onValueChange(value: any) {\n        this.valueSource.next(value);\n    }\n\n    onTotalRecordsChange(value: number) {\n        this.totalRecordsSource.next(value);\n    }\n\n    onColumnsChange(columns: any[]) {\n        this.columnsSource.next(columns);\n    }\n}\n\n@Component({\n    selector: 'p-table',\n    template: `\n        <div #container [ngStyle]=\"style\" [class]=\"styleClass\"\n            [ngClass]=\"{'p-datatable p-component': true,\n                'p-datatable-hoverable-rows': (rowHover||selectionMode),\n                'p-datatable-auto-layout': autoLayout,\n                'p-datatable-resizable': resizableColumns,\n                'p-datatable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),\n                'p-datatable-scrollable': scrollable,\n                'p-datatable-scrollable-vertical': scrollable && scrollDirection === 'vertical',\n                'p-datatable-scrollable-horizontal': scrollable && scrollDirection === 'horizontal',\n                'p-datatable-scrollable-both': scrollable && scrollDirection === 'both',\n                'p-datatable-flex-scrollable': (scrollable && scrollHeight === 'flex'),\n                'p-datatable-responsive-stack': responsiveLayout === 'stack',\n                'p-datatable-responsive-scroll': responsiveLayout === 'scroll',\n                'p-datatable-responsive': responsive,\n                'p-datatable-grouped-header': headerGroupedTemplate != null,\n                'p-datatable-grouped-footer': footerGroupedTemplate != null}\" [attr.id]=\"id\">\n            <div class=\"p-datatable-loading-overlay p-component-overlay\" *ngIf=\"loading && showLoader\">\n                <i [class]=\"'p-datatable-loading-icon pi-spin ' + loadingIcon\"></i>\n            </div>\n            <div *ngIf=\"captionTemplate\" class=\"p-datatable-header\">\n                <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n            </div>\n            <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-paginator-top\" [alwaysShow]=\"alwaysShowPaginator\"\n                (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\"\n                [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\n                [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showJumpToPageInput]=\"showJumpToPageInput\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n            <div #wrapper class=\"p-datatable-wrapper\" [ngStyle]=\"{height: scrollHeight}\">\n                <table #table *ngIf=\"!virtualScroll\" role=\"table\" class=\"p-datatable-table\" [ngClass]=\"tableStyleClass\" [ngStyle]=\"tableStyle\" [attr.id]=\"id+'-table'\">\n                    <ng-container *ngTemplateOutlet=\"colGroupTemplate; context {$implicit: columns}\"></ng-container>\n                    <thead class=\"p-datatable-thead\">\n                        <ng-container *ngTemplateOutlet=\"headerGroupedTemplate||headerTemplate; context: {$implicit: columns}\"></ng-container>\n                    </thead>\n                    <tbody class=\"p-datatable-tbody p-datatable-frozen-tbody\" *ngIf=\"frozenValue||frozenBodyTemplate\" [value]=\"frozenValue\" [frozenRows]=\"true\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozenBodyTemplate\" [frozen]=\"true\"></tbody>\n                    <tbody class=\"p-datatable-tbody\" [value]=\"dataToRender\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"bodyTemplate\"></tbody>\n                    <tfoot *ngIf=\"footerGroupedTemplate||footerTemplate\" class=\"p-datatable-tfoot\">\n                        <ng-container *ngTemplateOutlet=\"footerGroupedTemplate||footerTemplate; context {$implicit: columns}\"></ng-container>\n                    </tfoot>\n                </table>\n                <cdk-virtual-scroll-viewport *ngIf=\"virtualScroll\" [itemSize]=\"virtualRowHeight\" tabindex=\"0\" [style.height]=\"scrollHeight !== 'flex' ? scrollHeight : undefined\" [minBufferPx]=\"minBufferPx\" [maxBufferPx]=\"maxBufferPx\" (scrolledIndexChange)=\"onScrollIndexChange($event)\" class=\"p-datatable-virtual-scrollable-body\">\n                    <table #table role=\"table\" class=\"p-datatable-table\" [ngClass]=\"tableStyleClass\" [ngStyle]=\"tableStyle\" [attr.id]=\"id+'-table'\">\n                        <ng-container *ngTemplateOutlet=\"colGroupTemplate; context {$implicit: columns}\"></ng-container>\n                        <thead #tableHeader class=\"p-datatable-thead\">\n                            <ng-container *ngTemplateOutlet=\"headerGroupedTemplate||headerTemplate; context: {$implicit: columns}\"></ng-container>\n                        </thead>\n                        <tbody class=\"p-datatable-tbody p-datatable-frozen-tbody\" *ngIf=\"frozenValue||frozenBodyTemplate\" [value]=\"frozenValue\" [frozenRows]=\"true\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"bodyTemplate\" [frozen]=\"true\"></tbody>\n                        <tbody class=\"p-datatable-tbody\" [value]=\"dataToRender\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"bodyTemplate\"></tbody>\n                        <tfoot *ngIf=\"footerGroupedTemplate||footerTemplate\" class=\"p-datatable-tfoot\">\n                            <ng-container *ngTemplateOutlet=\"footerGroupedTemplate||footerTemplate; context {$implicit: columns}\"></ng-container>\n                        </tfoot>\n                    </table>\n                </cdk-virtual-scroll-viewport>\n            </div>\n\n            <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-paginator-bottom\" [alwaysShow]=\"alwaysShowPaginator\"\n                (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\"\n                [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\n                [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showJumpToPageInput]=\"showJumpToPageInput\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n            <div *ngIf=\"summaryTemplate\" class=\"p-datatable-footer\">\n                <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\n            </div>\n\n            <div #resizeHelper class=\"p-column-resizer-helper\" style=\"display:none\" *ngIf=\"resizableColumns\"></div>\n            <span #reorderIndicatorUp class=\"pi pi-arrow-down p-datatable-reorder-indicator-up\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n            <span #reorderIndicatorDown class=\"pi pi-arrow-up p-datatable-reorder-indicator-down\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n        </div>\n    `,\n    providers: [TableService],\n    changeDetection: ChangeDetectionStrategy.Default,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./table.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Table implements OnInit, AfterViewInit, AfterContentInit, BlockableUI, OnChanges {\n\n    @Input() frozenColumns: any[];\n\n    @Input() frozenValue: any[];\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() tableStyle: any;\n\n    @Input() tableStyleClass: string;\n\n    @Input() paginator: boolean;\n\n    @Input() pageLinks: number = 5;\n\n    @Input() rowsPerPageOptions: any[];\n\n    @Input() alwaysShowPaginator: boolean = true;\n\n    @Input() paginatorPosition: string = 'bottom';\n\n    @Input() paginatorDropdownAppendTo: any;\n\n    @Input() paginatorDropdownScrollHeight: string = '200px';\n\n    @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n    @Input() showCurrentPageReport: boolean;\n\n    @Input() showJumpToPageDropdown: boolean;\n\n    @Input() showJumpToPageInput: boolean;\n\n    @Input() showFirstLastIcon: boolean = true;\n\n    @Input() showPageLinks: boolean = true;\n\n    @Input() defaultSortOrder: number = 1;\n\n    @Input() sortMode: string = 'single';\n\n    @Input() resetPageOnSort: boolean = true;\n\n    @Input() selectionMode: string;\n\n    @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n    @Input() contextMenuSelection: any;\n\n    @Output() contextMenuSelectionChange: EventEmitter<any> = new EventEmitter();\n\n    @Input() contextMenuSelectionMode: string = \"separate\";\n\n    @Input() dataKey: string;\n\n    @Input() metaKeySelection: boolean;\n\n    @Input() rowTrackBy: Function = (index: number, item: any) => item;\n\n    @Input() lazy: boolean = false;\n\n    @Input() lazyLoadOnInit: boolean = true;\n\n    @Input() compareSelectionBy: string = 'deepEquals';\n\n    @Input() csvSeparator: string = ',';\n\n    @Input() exportFilename: string = 'download';\n\n    @Input() filters: { [s: string]: FilterMetadata | FilterMetadata[] } = {};\n\n    @Input() globalFilterFields: string[];\n\n    @Input() filterDelay: number = 300;\n\n    @Input() filterLocale: string;\n\n    @Input() expandedRowKeys: { [s: string]: boolean; } = {};\n\n    @Input() editingRowKeys: { [s: string]: boolean; } = {};\n\n    @Input() rowExpandMode: string = 'multiple';\n\n    @Input() scrollable: boolean;\n\n    @Input() scrollDirection: string = \"vertical\";\n\n    @Input() rowGroupMode: string;\n\n    @Input() scrollHeight: string;\n\n    @Input() virtualScroll: boolean;\n\n    @Input() virtualScrollDelay: number = 250;\n\n    @Input() virtualRowHeight: number = 28;\n\n    @Input() frozenWidth: string;\n\n    @Input() responsive: boolean;\n\n    @Input() contextMenu: any;\n\n    @Input() resizableColumns: boolean;\n\n    @Input() columnResizeMode: string = 'fit';\n\n    @Input() reorderableColumns: boolean;\n\n    @Input() loading: boolean;\n\n    @Input() loadingIcon: string = 'pi pi-spinner';\n\n    @Input() showLoader: boolean = true;\n\n    @Input() rowHover: boolean;\n\n    @Input() customSort: boolean;\n\n    @Input() showInitialSortBadge: boolean = true;\n\n    @Input() autoLayout: boolean;\n\n    @Input() exportFunction;\n\n    @Input() stateKey: string;\n\n    @Input() stateStorage: string = 'session';\n\n    @Input() editMode: string = 'cell';\n\n    @Input() groupRowsBy: any;\n\n    @Input() groupRowsByOrder: number = 1;\n\n    @Input() minBufferPx: number;\n\n    @Input() maxBufferPx: number;\n\n    @Input() responsiveLayout: string = 'stack';\n\n    @Input() breakpoint: string = '960px';\n\n    @Output() onRowSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onRowUnselect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSort: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n    @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n    @Output() onRowExpand: EventEmitter<any> = new EventEmitter();\n\n    @Output() onRowCollapse: EventEmitter<any> = new EventEmitter();\n\n    @Output() onContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onColResize: EventEmitter<any> = new EventEmitter();\n\n    @Output() onColReorder: EventEmitter<any> = new EventEmitter();\n\n    @Output() onRowReorder: EventEmitter<any> = new EventEmitter();\n\n    @Output() onEditInit: EventEmitter<any> = new EventEmitter();\n\n    @Output() onEditComplete: EventEmitter<any> = new EventEmitter();\n\n    @Output() onEditCancel: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHeaderCheckboxToggle: EventEmitter<any> = new EventEmitter();\n\n    @Output() sortFunction: EventEmitter<any> = new EventEmitter();\n\n    @Output() firstChange: EventEmitter<number> = new EventEmitter();\n\n    @Output() rowsChange: EventEmitter<number> = new EventEmitter();\n\n    @Output() onStateSave: EventEmitter<any> = new EventEmitter();\n\n    @Output() onStateRestore: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @ViewChild('resizeHelper') resizeHelperViewChild: ElementRef;\n\n    @ViewChild('reorderIndicatorUp') reorderIndicatorUpViewChild: ElementRef;\n\n    @ViewChild('reorderIndicatorDown') reorderIndicatorDownViewChild: ElementRef;\n\n    @ViewChild('wrapper') wrapperViewChild: ElementRef;\n\n    @ViewChild('table') tableViewChild: ElementRef;\n\n    @ViewChild('tableHeader') tableHeaderViewChild: ElementRef;\n\n    @ViewChild(CdkVirtualScrollViewport) virtualScrollBody: CdkVirtualScrollViewport;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n    _value: any[] = [];\n\n    _columns: any[];\n\n    _totalRecords: number = 0;\n\n    _first: number = 0;\n\n    _rows: number;\n\n    filteredValue: any[];\n\n    headerTemplate: TemplateRef<any>;\n\n    headerGroupedTemplate: TemplateRef<any>;\n\n    bodyTemplate: TemplateRef<any>;\n\n    loadingBodyTemplate: TemplateRef<any>;\n\n    captionTemplate: TemplateRef<any>;\n\n    frozenRowsTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    footerGroupedTemplate: TemplateRef<any>;\n\n    summaryTemplate: TemplateRef<any>;\n\n    colGroupTemplate: TemplateRef<any>;\n\n    expandedRowTemplate: TemplateRef<any>;\n\n    groupHeaderTemplate: TemplateRef<any>;\n\n    groupFooterTemplate: TemplateRef<any>;\n\n    rowspanTemplate: TemplateRef<any>;\n\n    frozenExpandedRowTemplate: TemplateRef<any>;\n\n    frozenHeaderTemplate: TemplateRef<any>;\n\n    frozenBodyTemplate: TemplateRef<any>;\n\n    frozenFooterTemplate: TemplateRef<any>;\n\n    frozenColGroupTemplate: TemplateRef<any>;\n\n    emptyMessageTemplate: TemplateRef<any>;\n\n    paginatorLeftTemplate: TemplateRef<any>;\n\n    paginatorRightTemplate: TemplateRef<any>;\n\n    paginatorDropdownItemTemplate: TemplateRef<any>;\n\n    selectionKeys: any = {};\n\n    lastResizerHelperX: number;\n\n    reorderIconWidth: number;\n\n    reorderIconHeight: number;\n\n    draggedColumn: any;\n\n    draggedRowIndex: number;\n\n    droppedRowIndex: number;\n\n    rowDragging: boolean;\n\n    dropPosition: number;\n\n    editingCell: Element;\n\n    editingCellData: any;\n\n    editingCellField: any;\n\n    editingCellRowIndex: number;\n\n    selfClick: boolean;\n\n    documentEditListener: any;\n\n    _multiSortMeta: SortMeta[];\n\n    _sortField: string;\n\n    _sortOrder: number = 1;\n\n    preventSelectionSetterPropagation: boolean;\n\n    _selection: any;\n\n    anchorRowIndex: number;\n\n    rangeRowIndex: number;\n\n    filterTimeout: any;\n\n    initialized: boolean;\n\n    rowTouched: boolean;\n\n    restoringSort: boolean;\n\n    restoringFilter: boolean;\n\n    stateRestored: boolean;\n\n    columnOrderStateRestored: boolean;\n\n    columnWidthsState: string;\n\n    tableWidthState: string;\n\n    overlaySubscription: Subscription;\n\n    virtualScrollSubscription: Subscription;\n\n    resizeColumnElement;\n\n    columnResizing: boolean = false;\n\n    rowGroupHeaderStyleObject: any = {};\n\n    id: string = UniqueComponentId();\n\n    styleElement: any;\n\n    responsiveStyleElement: any;\n\n    constructor(public el: ElementRef, public zone: NgZone, public tableService: TableService, public cd: ChangeDetectorRef, public filterService: FilterService, public overlayService: OverlayService) {}\n\n    ngOnInit() {\n        if (this.lazy && this.lazyLoadOnInit) {\n            if (!this.virtualScroll) {\n                this.onLazyLoad.emit(this.createLazyLoadMetadata());\n            }\n\n            if (this.restoringFilter) {\n                this.restoringFilter = false;\n            }\n        }\n\n        if (this.responsiveLayout === 'stack' && !this.scrollable) {\n            this.createResponsiveStyle();\n        }\n\n        this.initialized = true;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'caption':\n                    this.captionTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'headergrouped':\n                    this.headerGroupedTemplate = item.template;\n                break;\n\n                case 'body':\n                    this.bodyTemplate = item.template;\n                break;\n\n                case 'loadingbody':\n                    this.loadingBodyTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                case 'footergrouped':\n                    this.footerGroupedTemplate = item.template;\n                break;\n\n                case 'summary':\n                    this.summaryTemplate = item.template;\n                break;\n\n                case 'colgroup':\n                    this.colGroupTemplate = item.template;\n                break;\n\n                case 'rowexpansion':\n                    this.expandedRowTemplate = item.template;\n                break;\n\n                case 'groupheader':\n                    this.groupHeaderTemplate = item.template;\n                break;\n\n                case 'rowspan':\n                    this.rowspanTemplate = item.template;\n                break;\n\n                case 'groupfooter':\n                    this.groupFooterTemplate = item.template;\n                break;\n\n                case 'frozenrows':\n                    this.frozenRowsTemplate = item.template;\n                break;\n\n                case 'frozenheader':\n                    this.frozenHeaderTemplate = item.template;\n                break;\n\n                case 'frozenbody':\n                    this.frozenBodyTemplate = item.template;\n                break;\n\n                case 'frozenfooter':\n                    this.frozenFooterTemplate = item.template;\n                break;\n\n                case 'frozencolgroup':\n                    this.frozenColGroupTemplate = item.template;\n                break;\n\n                case 'frozenrowexpansion':\n                    this.frozenExpandedRowTemplate = item.template;\n                break;\n\n                case 'emptymessage':\n                    this.emptyMessageTemplate = item.template;\n                break;\n\n                case 'paginatorleft':\n                    this.paginatorLeftTemplate = item.template;\n                break;\n\n                case 'paginatorright':\n                    this.paginatorRightTemplate = item.template;\n                break;\n\n                case 'paginatordropdownitem':\n                    this.paginatorDropdownItemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngAfterViewInit() {\n        if (this.isStateful() && this.resizableColumns) {\n            this.restoreColumnWidths();\n        }\n\n        if (this.scrollable && this.virtualScroll) {\n            this.virtualScrollSubscription =  this.virtualScrollBody.renderedRangeStream.subscribe(range => {\n                let top = range.start * this.virtualRowHeight * -1;\n                this.tableHeaderViewChild.nativeElement.style.top = top + 'px';\n            });\n        }\n    }\n\n    ngOnChanges(simpleChange: SimpleChanges) {\n        if (simpleChange.value) {\n            if (this.isStateful() && !this.stateRestored) {\n                this.restoreState();\n            }\n\n            this._value = simpleChange.value.currentValue;\n\n            if (!this.lazy) {\n                this.totalRecords = (this._value ? this._value.length : 0);\n\n                if (this.sortMode == 'single' && (this.sortField || this.groupRowsBy))\n                    this.sortSingle();\n                else if (this.sortMode == 'multiple' && (this.multiSortMeta || this.groupRowsBy))\n                    this.sortMultiple();\n                else if (this.hasFilter())       //sort already filters\n                    this._filter();\n            }\n\n            this.tableService.onValueChange(simpleChange.value.currentValue);\n        }\n\n        if (simpleChange.columns) {\n            this._columns = simpleChange.columns.currentValue;\n            this.tableService.onColumnsChange(simpleChange.columns.currentValue);\n\n            if (this._columns && this.isStateful() && this.reorderableColumns && !this.columnOrderStateRestored ) {\n                this.restoreColumnOrder();\n            }\n        }\n\n        if (simpleChange.sortField) {\n            this._sortField = simpleChange.sortField.currentValue;\n\n            //avoid triggering lazy load prior to lazy initialization at onInit\n            if ( !this.lazy || this.initialized ) {\n                if (this.sortMode === 'single') {\n                    this.sortSingle();\n                }\n            }\n        }\n\n        if (simpleChange.groupRowsBy) {\n            //avoid triggering lazy load prior to lazy initialization at onInit\n            if ( !this.lazy || this.initialized ) {\n                if (this.sortMode === 'single') {\n                    this.sortSingle();\n                }\n            }\n        }\n\n        if (simpleChange.sortOrder) {\n            this._sortOrder = simpleChange.sortOrder.currentValue;\n\n            //avoid triggering lazy load prior to lazy initialization at onInit\n            if ( !this.lazy || this.initialized ) {\n                if (this.sortMode === 'single') {\n                    this.sortSingle();\n                }\n            }\n        }\n\n        if (simpleChange.groupRowsByOrder) {\n            //avoid triggering lazy load prior to lazy initialization at onInit\n            if ( !this.lazy || this.initialized ) {\n                if (this.sortMode === 'single') {\n                    this.sortSingle();\n                }\n            }\n        }\n\n        if (simpleChange.multiSortMeta) {\n            this._multiSortMeta = simpleChange.multiSortMeta.currentValue;\n            if (this.sortMode === 'multiple' && (this.initialized || (!this.lazy && !this.virtualScroll))) {\n                this.sortMultiple();\n            }\n        }\n\n        if (simpleChange.selection) {\n            this._selection = simpleChange.selection.currentValue;\n\n            if (!this.preventSelectionSetterPropagation) {\n                this.updateSelectionKeys();\n                this.tableService.onSelectionChange();\n            }\n            this.preventSelectionSetterPropagation = false;\n        }\n    }\n\n    @Input() get value(): any[] {\n        return this._value;\n    }\n    set value(val: any[]) {\n        this._value = val;\n    }\n\n    @Input() get columns(): any[] {\n        return this._columns;\n    }\n    set columns(cols: any[]) {\n        this._columns = cols;\n    }\n\n    @Input() get first(): number {\n        return this._first;\n    }\n    set first(val: number) {\n        this._first = val;\n    }\n\n    @Input() get rows(): number {\n        return this._rows;\n    }\n    set rows(val: number) {\n        this._rows = val;\n    }\n\n    @Input() get totalRecords(): number {\n        return this._totalRecords;\n    }\n    set totalRecords(val: number) {\n        this._totalRecords = val;\n        this.tableService.onTotalRecordsChange(this._totalRecords);\n    }\n\n    @Input() get sortField(): string {\n        return this._sortField;\n    }\n\n    set sortField(val: string) {\n        this._sortField = val;\n    }\n\n    @Input() get sortOrder(): number {\n        return this._sortOrder;\n    }\n    set sortOrder(val: number) {\n        this._sortOrder = val;\n    }\n\n    @Input() get multiSortMeta(): SortMeta[] {\n        return this._multiSortMeta;\n    }\n\n    set multiSortMeta(val: SortMeta[]) {\n        this._multiSortMeta = val;\n    }\n\n    @Input() get selection(): any {\n        return this._selection;\n    }\n\n    set selection(val: any) {\n        this._selection = val;\n    }\n\n    get dataToRender() {\n        let data = this.filteredValue||this.value;\n        return data ? ((this.paginator && !this.lazy) ? (data.slice(this.first, this.first + this.rows)) : data) : [];\n    }\n\n    updateSelectionKeys() {\n        if (this.dataKey && this._selection) {\n            this.selectionKeys = {};\n            if (Array.isArray(this._selection)) {\n                for(let data of this._selection) {\n                    this.selectionKeys[String(ObjectUtils.resolveFieldData(data, this.dataKey))] = 1;\n                }\n            }\n            else {\n                this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection, this.dataKey))] = 1;\n            }\n        }\n    }\n\n    onPageChange(event) {\n        this.first = event.first;\n        this.rows = event.rows;\n\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n\n        this.firstChange.emit(this.first);\n        this.rowsChange.emit(this.rows);\n        this.tableService.onValueChange(this.value);\n\n        if (this.isStateful()) {\n            this.saveState();\n        }\n\n        this.anchorRowIndex = null;\n\n        if (this.scrollable) {\n            this.resetScrollTop();\n        }\n    }\n\n    sort(event) {\n        let originalEvent = event.originalEvent;\n\n        if (this.sortMode === 'single') {\n            this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;\n            this._sortField = event.field;\n\n            if (this.resetPageOnSort) {\n                this._first = 0;\n                this.firstChange.emit(this._first);\n\n                if (this.scrollable) {\n                    this.resetScrollTop();\n                }\n            }\n\n            this.sortSingle();\n        }\n        if (this.sortMode === 'multiple') {\n            let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n            let sortMeta = this.getSortMeta(event.field);\n\n            if (sortMeta) {\n                if (!metaKey) {\n                    this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];\n\n                    if (this.resetPageOnSort) {\n                        this._first = 0;\n                        this.firstChange.emit(this._first);\n\n                        if (this.scrollable) {\n                            this.resetScrollTop();\n                        }\n                    }\n                }\n                else {\n                    sortMeta.order = sortMeta.order * -1;\n                }\n            }\n            else {\n                if (!metaKey || !this.multiSortMeta) {\n                    this._multiSortMeta = [];\n\n                    if (this.resetPageOnSort) {\n                        this._first = 0;\n                        this.firstChange.emit(this._first);\n                    }\n                }\n                this._multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });\n            }\n\n            this.sortMultiple();\n        }\n\n        if (this.isStateful()) {\n            this.saveState();\n        }\n\n        this.anchorRowIndex = null;\n    }\n\n    sortSingle() {\n        let field = this.sortField || this.groupRowsBy;\n        let order = this.sortField ? this.sortOrder : this.groupRowsByOrder;\n        if (this.groupRowsBy && this.sortField && this.groupRowsBy !== this.sortField) {\n            this._multiSortMeta = [this.getGroupRowsMeta(), {field: this.sortField, order: this.sortOrder}];\n            this.sortMultiple();\n            return;\n        }\n\n        if (field && order) {\n            if (this.restoringSort) {\n                this.restoringSort = false;\n            }\n\n            if (this.lazy) {\n                this.onLazyLoad.emit(this.createLazyLoadMetadata());\n            }\n            else if (this.value) {\n                if (this.customSort) {\n                    this.sortFunction.emit({\n                        data: this.value,\n                        mode: this.sortMode,\n                        field: field,\n                        order: order\n                    });\n                }\n                else {\n                    this.value.sort((data1, data2) => {\n                        let value1 = ObjectUtils.resolveFieldData(data1, field);\n                        let value2 = ObjectUtils.resolveFieldData(data2, field);\n                        let result = null;\n\n                        if (value1 == null && value2 != null)\n                            result = -1;\n                        else if (value1 != null && value2 == null)\n                            result = 1;\n                        else if (value1 == null && value2 == null)\n                            result = 0;\n                        else if (typeof value1 === 'string' && typeof value2 === 'string')\n                            result = value1.localeCompare(value2);\n                        else\n                            result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n                        return (order * result);\n                    });\n\n                    this._value = [...this.value];\n                }\n\n                if (this.hasFilter()) {\n                    this._filter();\n                }\n            }\n\n            let sortMeta: SortMeta = {\n                field: field,\n                order: order\n            };\n\n            this.onSort.emit(sortMeta);\n            this.tableService.onSort(sortMeta);\n        }\n    }\n\n    sortMultiple() {\n        if (this.groupRowsBy) {\n            if (!this._multiSortMeta)\n                this._multiSortMeta = [this.getGroupRowsMeta()]\n            else if (this.multiSortMeta[0].field !== this.groupRowsBy)\n                this._multiSortMeta = [this.getGroupRowsMeta(), ...this._multiSortMeta]\n        }\n\n        if (this.multiSortMeta) {\n            if (this.lazy) {\n                this.onLazyLoad.emit(this.createLazyLoadMetadata());\n            }\n            else if (this.value) {\n                if (this.customSort) {\n                    this.sortFunction.emit({\n                        data: this.value,\n                        mode: this.sortMode,\n                        multiSortMeta: this.multiSortMeta\n                    });\n                }\n                else {\n                    this.value.sort((data1, data2) => {\n                        return this.multisortField(data1, data2, this.multiSortMeta, 0);\n                    });\n\n                    this._value = [...this.value];\n                }\n\n                if (this.hasFilter()) {\n                    this._filter();\n                }\n            }\n\n            this.onSort.emit({\n                multisortmeta: this.multiSortMeta\n            });\n            this.tableService.onSort(this.multiSortMeta);\n        }\n    }\n\n    multisortField(data1, data2, multiSortMeta, index) {\n        let value1 = ObjectUtils.resolveFieldData(data1, multiSortMeta[index].field);\n        let value2 = ObjectUtils.resolveFieldData(data2, multiSortMeta[index].field);\n        let result = null;\n\n        if (value1 == null && value2 != null)\n            result = -1;\n        else if (value1 != null && value2 == null)\n            result = 1;\n        else if (value1 == null && value2 == null)\n            result = 0;\n        else if (typeof value1 == 'string' || value1 instanceof String) {\n            if (value1.localeCompare && (value1 != value2)) {\n                return (multiSortMeta[index].order * value1.localeCompare(value2));\n            }\n        }\n        else {\n            result = (value1 < value2) ? -1 : 1;\n        }\n\n        if (value1 == value2) {\n            return (multiSortMeta.length - 1) > (index) ? (this.multisortField(data1, data2, multiSortMeta, index + 1)) : 0;\n        }\n\n        return (multiSortMeta[index].order * result);\n    }\n\n    getSortMeta(field: string) {\n        if (this.multiSortMeta && this.multiSortMeta.length) {\n            for (let i = 0; i < this.multiSortMeta.length; i++) {\n                if (this.multiSortMeta[i].field === field) {\n                    return this.multiSortMeta[i];\n                }\n            }\n        }\n\n        return null;\n    }\n\n    isSorted(field: string) {\n        if (this.sortMode === 'single') {\n            return (this.sortField && this.sortField === field);\n        }\n        else if (this.sortMode === 'multiple') {\n            let sorted = false;\n            if (this.multiSortMeta) {\n                for(let i = 0; i < this.multiSortMeta.length; i++) {\n                    if (this.multiSortMeta[i].field == field) {\n                        sorted = true;\n                        break;\n                    }\n                }\n            }\n            return sorted;\n        }\n    }\n\n    handleRowClick(event) {\n        let target = (<HTMLElement> event.originalEvent.target);\n        let targetNode = target.nodeName;\n        let parentNode = target.parentElement && target.parentElement.nodeName;\n        if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' ||\n            parentNode == 'INPUT' || parentNode == 'BUTTON' || parentNode == 'A' ||\n            (DomHandler.hasClass(event.originalEvent.target, 'p-clickable'))) {\n            return;\n        }\n\n        if (this.selectionMode) {\n            this.preventSelectionSetterPropagation = true;\n            if (this.isMultipleSelectionMode() && event.originalEvent.shiftKey && this.anchorRowIndex != null) {\n                DomHandler.clearSelection();\n                if (this.rangeRowIndex != null) {\n                    this.clearSelectionRange(event.originalEvent);\n                }\n\n                this.rangeRowIndex = event.rowIndex;\n                this.selectRange(event.originalEvent, event.rowIndex);\n            }\n            else {\n                let rowData = event.rowData;\n                let selected = this.isSelected(rowData);\n                let metaSelection = this.rowTouched ? false : this.metaKeySelection;\n                let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n                this.anchorRowIndex = event.rowIndex;\n                this.rangeRowIndex = event.rowIndex;\n\n                if (metaSelection) {\n                    let metaKey = event.originalEvent.metaKey||event.originalEvent.ctrlKey;\n\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this._selection = null;\n                            this.selectionKeys = {};\n                            this.selectionChange.emit(null);\n                        }\n                        else {\n                            let selectionIndex = this.findIndexInSelection(rowData);\n                            this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n                            this.selectionChange.emit(this.selection);\n                            if (dataKeyValue) {\n                                delete this.selectionKeys[dataKeyValue];\n                            }\n                        }\n\n                        this.onRowUnselect.emit({originalEvent: event.originalEvent, data: rowData, type: 'row'});\n                    }\n                    else {\n                        if (this.isSingleSelectionMode()) {\n                            this._selection = rowData;\n                            this.selectionChange.emit(rowData);\n                            if (dataKeyValue) {\n                                this.selectionKeys = {};\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                        else if (this.isMultipleSelectionMode()) {\n                            if (metaKey) {\n                                this._selection = this.selection||[];\n                            }\n                            else {\n                                this._selection = [];\n                                this.selectionKeys = {};\n                            }\n\n                            this._selection = [...this.selection,rowData];\n                            this.selectionChange.emit(this.selection);\n                            if (dataKeyValue) {\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n\n                        this.onRowSelect.emit({originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex});\n                    }\n                }\n                else {\n                    if (this.selectionMode === 'single') {\n                        if (selected) {\n                            this._selection = null;\n                            this.selectionKeys = {};\n                            this.selectionChange.emit(this.selection);\n                            this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n                        }\n                        else {\n                            this._selection = rowData;\n                            this.selectionChange.emit(this.selection);\n                            this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n                            if (dataKeyValue) {\n                                this.selectionKeys = {};\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                    }\n                    else if (this.selectionMode === 'multiple') {\n                        if (selected) {\n                            let selectionIndex = this.findIndexInSelection(rowData);\n                            this._selection = this.selection.filter((val, i) => i != selectionIndex);\n                            this.selectionChange.emit(this.selection);\n                            this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n                            if (dataKeyValue) {\n                                delete this.selectionKeys[dataKeyValue];\n                            }\n                        }\n                        else {\n                            this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n                            this.selectionChange.emit(this.selection);\n                            this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n                            if (dataKeyValue) {\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                    }\n                }\n            }\n\n            this.tableService.onSelectionChange();\n\n            if (this.isStateful()) {\n                this.saveState();\n            }\n        }\n\n        this.rowTouched = false;\n    }\n\n    handleRowTouchEnd(event) {\n        this.rowTouched = true;\n    }\n\n    handleRowRightClick(event) {\n        if (this.contextMenu) {\n            const rowData = event.rowData;\n\n            if (this.contextMenuSelectionMode === 'separate') {\n                this.contextMenuSelection = rowData;\n                this.contextMenuSelectionChange.emit(rowData);\n                this.onContextMenuSelect.emit({originalEvent: event.originalEvent, data: rowData, index: event.rowIndex});\n                this.contextMenu.show(event.originalEvent);\n                this.tableService.onContextMenu(rowData);\n            }\n            else if (this.contextMenuSelectionMode === 'joint') {\n                this.preventSelectionSetterPropagation = true;\n                let selected = this.isSelected(rowData);\n                let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n\n                if (!selected) {\n                    if (this.isSingleSelectionMode()) {\n                        this.selection = rowData;\n                        this.selectionChange.emit(rowData);\n\n                        if (dataKeyValue) {\n                            this.selectionKeys = {};\n                            this.selectionKeys[dataKeyValue] = 1;\n                        }\n                    }\n                    else if (this.isMultipleSelectionMode()) {\n                        this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n                        this.selectionChange.emit(this.selection);\n\n                        if (dataKeyValue) {\n                            this.selectionKeys[dataKeyValue] = 1;\n                        }\n                    }\n                }\n\n                this.tableService.onSelectionChange();\n                this.contextMenu.show(event.originalEvent);\n                this.onContextMenuSelect.emit({originalEvent: event, data: rowData, index: event.rowIndex});\n            }\n        }\n    }\n\n    selectRange(event: MouseEvent, rowIndex: number) {\n        let rangeStart, rangeEnd;\n\n        if (this.anchorRowIndex > rowIndex) {\n            rangeStart = rowIndex;\n            rangeEnd = this.anchorRowIndex;\n        }\n        else if (this.anchorRowIndex < rowIndex) {\n            rangeStart = this.anchorRowIndex;\n            rangeEnd = rowIndex;\n        }\n        else {\n            rangeStart = rowIndex;\n            rangeEnd = rowIndex;\n        }\n\n        if (this.lazy && this.paginator) {\n            rangeStart -= this.first;\n            rangeEnd -= this.first;\n        }\n\n        let rangeRowsData = [];\n        for(let i = rangeStart; i <= rangeEnd; i++) {\n            let rangeRowData = this.filteredValue ? this.filteredValue[i] : this.value[i];\n            if (!this.isSelected(rangeRowData)) {\n                rangeRowsData.push(rangeRowData);\n                this._selection = [...this.selection, rangeRowData];\n                let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n                if (dataKeyValue) {\n                    this.selectionKeys[dataKeyValue] = 1;\n                }\n            }\n        }\n        this.selectionChange.emit(this.selection);\n        this.onRowSelect.emit({originalEvent: event, data: rangeRowsData, type: 'row'});\n    }\n\n    clearSelectionRange(event: MouseEvent) {\n        let rangeStart, rangeEnd;\n\n        if (this.rangeRowIndex > this.anchorRowIndex) {\n            rangeStart = this.anchorRowIndex;\n            rangeEnd = this.rangeRowIndex;\n        }\n        else if (this.rangeRowIndex < this.anchorRowIndex) {\n            rangeStart = this.rangeRowIndex;\n            rangeEnd = this.anchorRowIndex;\n        }\n        else {\n            rangeStart = this.rangeRowIndex;\n            rangeEnd = this.rangeRowIndex;\n        }\n\n        for(let i = rangeStart; i <= rangeEnd; i++) {\n            let rangeRowData = this.value[i];\n            let selectionIndex = this.findIndexInSelection(rangeRowData);\n            this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n            let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n            if (dataKeyValue) {\n                delete this.selectionKeys[dataKeyValue];\n            }\n            this.onRowUnselect.emit({originalEvent: event, data: rangeRowData, type: 'row'});\n        }\n    }\n\n    isSelected(rowData) {\n        if (rowData && this.selection) {\n            if (this.dataKey) {\n                return this.selectionKeys[ObjectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;\n            }\n            else {\n                if (this.selection instanceof Array)\n                    return this.findIndexInSelection(rowData) > -1;\n                else\n                    return this.equals(rowData, this.selection);\n            }\n        }\n\n        return false;\n    }\n\n    findIndexInSelection(rowData: any) {\n        let index: number = -1;\n        if (this.selection && this.selection.length) {\n            for (let i = 0; i < this.selection.length; i++) {\n                if (this.equals(rowData, this.selection[i])) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n\n        return index;\n    }\n\n    toggleRowWithRadio(event: any, rowData:any) {\n        this.preventSelectionSetterPropagation = true;\n\n        if (this.selection != rowData) {\n            this._selection = rowData;\n            this.selectionChange.emit(this.selection);\n            this.onRowSelect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n\n            if (this.dataKey) {\n                this.selectionKeys = {};\n                this.selectionKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] = 1;\n            }\n        }\n        else {\n            this._selection = null;\n            this.selectionChange.emit(this.selection);\n            this.onRowUnselect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n        }\n\n        this.tableService.onSelectionChange();\n\n        if (this.isStateful()) {\n            this.saveState();\n        }\n    }\n\n    toggleRowWithCheckbox(event, rowData: any) {\n        this.selection = this.selection||[];\n        let selected = this.isSelected(rowData);\n        let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n        this.preventSelectionSetterPropagation = true;\n\n        if (selected) {\n            let selectionIndex = this.findIndexInSelection(rowData);\n            this._selection = this.selection.filter((val, i) => i != selectionIndex);\n            this.selectionChange.emit(this.selection);\n            this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n            if (dataKeyValue) {\n                delete this.selectionKeys[dataKeyValue];\n            }\n        }\n        else {\n            this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n            this.selectionChange.emit(this.selection);\n            this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n            if (dataKeyValue) {\n                this.selectionKeys[dataKeyValue] = 1;\n            }\n        }\n\n        this.tableService.onSelectionChange();\n\n        if (this.isStateful()) {\n            this.saveState();\n        }\n    }\n\n    toggleRowsWithCheckbox(event: Event, check: boolean) {\n        this._selection = check ? this.filteredValue ? this.filteredValue.slice(): this.value.slice() : [];\n        this.preventSelectionSetterPropagation = true;\n        this.updateSelectionKeys();\n        this.selectionChange.emit(this._selection);\n        this.tableService.onSelectionChange();\n        this.onHeaderCheckboxToggle.emit({originalEvent: event, checked: check});\n\n        if (this.isStateful()) {\n            this.saveState();\n        }\n    }\n\n    equals(data1, data2) {\n        return this.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, this.dataKey);\n    }\n\n    /* Legacy Filtering for custom elements */\n    filter(value: any, field: string, matchMode: string) {\n        if (this.filterTimeout) {\n            clearTimeout(this.filterTimeout);\n        }\n        if (!this.isFilterBlank(value)) {\n            this.filters[field] = { value: value, matchMode: matchMode };\n        } else if (this.filters[field]) {\n            delete this.filters[field];\n        }\n\n        this.filterTimeout = setTimeout(() => {\n            this._filter();\n            this.filterTimeout = null;\n        }, this.filterDelay);\n\n        this.anchorRowIndex = null;\n    }\n\n    filterGlobal(value, matchMode) {\n        this.filter(value, 'global', matchMode);\n    }\n\n    isFilterBlank(filter: any): boolean {\n        if (filter !== null && filter !== undefined) {\n            if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))\n                return true;\n            else\n                return false;\n        }\n        return true;\n    }\n\n    _filter() {\n        if (!this.restoringFilter) {\n            this.first = 0;\n            this.firstChange.emit(this.first);\n        }\n\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            if (!this.value) {\n                return;\n            }\n\n            if (!this.hasFilter()) {\n                this.filteredValue = null;\n                if (this.paginator) {\n                    this.totalRecords = this.value ? this.value.length : 0;\n                }\n            }\n            else {\n                let globalFilterFieldsArray;\n                if (this.filters['global']) {\n                    if (!this.columns && !this.globalFilterFields)\n                        throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');\n                    else\n                        globalFilterFieldsArray = this.globalFilterFields||this.columns;\n                }\n\n                this.filteredValue = [];\n\n                for (let i = 0; i < this.value.length; i++) {\n                    let localMatch = true;\n                    let globalMatch = false;\n                    let localFiltered = false;\n\n                    for (let prop in this.filters) {\n                        if (this.filters.hasOwnProperty(prop) && prop !== 'global') {\n                            localFiltered = true;\n                            let filterField = prop;\n                            let filterMeta = this.filters[filterField];\n\n                            if (Array.isArray(filterMeta)) {\n                                for (let meta of filterMeta) {\n                                    localMatch = this.executeLocalFilter(filterField, this.value[i], meta);\n\n                                    if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {\n                                        break;\n                                    }\n                                }\n                            }\n                            else {\n                                localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);\n                            }\n\n                            if (!localMatch) {\n                                break;\n                            }\n                        }\n                    }\n\n                    if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {\n                        for(let j = 0; j < globalFilterFieldsArray.length; j++) {\n                            let globalFilterField = globalFilterFieldsArray[j].field||globalFilterFieldsArray[j];\n                            globalMatch = this.filterService.filters[(<FilterMetadata> this.filters['global']).matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), (<FilterMetadata> this.filters['global']).value, this.filterLocale);\n\n                            if (globalMatch) {\n                                break;\n                            }\n                        }\n                    }\n\n                    let matches: boolean;\n                    if (this.filters['global']) {\n                        matches = localFiltered ? (localFiltered && localMatch && globalMatch) : globalMatch;\n                    }\n                    else {\n                        matches = localFiltered && localMatch;\n                    }\n\n                    if (matches) {\n                        this.filteredValue.push(this.value[i]);\n                    }\n                }\n\n                if (this.filteredValue.length === this.value.length) {\n                    this.filteredValue = null;\n                }\n\n                if (this.paginator) {\n                    this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;\n                }\n            }\n        }\n\n        this.onFilter.emit({\n            filters: this.filters,\n            filteredValue: this.filteredValue || this.value\n        });\n\n        this.tableService.onValueChange(this.value);\n\n        if (this.isStateful() && !this.restoringFilter) {\n            this.saveState();\n        }\n\n        if (this.restoringFilter) {\n            this.restoringFilter = false;\n        }\n\n        this.cd.markForCheck();\n\n        if (this.scrollable) {\n            this.resetScrollTop();\n        }\n    }\n\n    executeLocalFilter(field: string, rowData: any, filterMeta: FilterMetadata): boolean {\n        let filterValue = filterMeta.value;\n        let filterMatchMode = filterMeta.matchMode || FilterMatchMode.STARTS_WITH;\n        let dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);\n        let filterConstraint = this.filterService.filters[filterMatchMode];\n\n        return filterConstraint(dataFieldValue, filterValue, this.filterLocale);\n    }\n\n    hasFilter() {\n        let empty = true;\n        for (let prop in this.filters) {\n            if (this.filters.hasOwnProperty(prop)) {\n                empty = false;\n                break;\n            }\n        }\n\n        return !empty;\n    }\n\n    createLazyLoadMetadata(): any {\n        return {\n            first: this.first,\n            rows: this.rows,\n            sortField: this.sortField,\n            sortOrder: this.sortOrder,\n            filters: this.filters,\n            globalFilter: this.filters && this.filters['global'] ? (<FilterMetadata> this.filters['global']).value : null,\n            multiSortMeta: this.multiSortMeta\n        };\n    }\n\n    public clear() {\n        this._sortField = null;\n        this._sortOrder = this.defaultSortOrder;\n        this._multiSortMeta = null;\n        this.tableService.onSort(null);\n\n        this.filteredValue = null;\n        this.tableService.onResetChange();\n\n        this.first = 0;\n        this.firstChange.emit(this.first);\n\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            this.totalRecords = (this._value ? this._value.length : 0);\n        }\n    }\n\n    public reset() {\n        this.clear();\n    }\n\n    public exportCSV(options?: any) {\n        let data;\n        let csv = '';\n        let columns = this.frozenColumns ? [...this.frozenColumns, ...this.columns] : this.columns;\n\n        if (options && options.selectionOnly) {\n            data = this.selection || [];\n        }\n        else {\n            data = this.filteredValue || this.value;\n\n            if (this.frozenValue) {\n                data = data ? [...this.frozenValue, ...data] : this.frozenValue;\n            }\n        }\n\n        //headers\n        for (let i = 0; i < columns.length; i++) {\n            let column = columns[i];\n            if (column.exportable !== false && column.field) {\n                csv += '\"' + (column.header || column.field) + '\"';\n\n                if (i < (columns.length - 1)) {\n                    csv += this.csvSeparator;\n                }\n            }\n        }\n\n        //body\n        data.forEach((record, i) => {\n            csv += '\\n';\n            for (let i = 0; i < columns.length; i++) {\n                let column = columns[i];\n                if (column.exportable !== false && column.field) {\n                    let cellData = ObjectUtils.resolveFieldData(record, column.field);\n\n                    if (cellData != null) {\n                        if (this.exportFunction) {\n                            cellData = this.exportFunction({\n                                data: cellData,\n                                field: column.field\n                            });\n                        }\n                        else\n                            cellData = String(cellData).replace(/\"/g, '\"\"');\n                    }\n                    else\n                        cellData = '';\n\n                    csv += '\"' + cellData + '\"';\n\n                    if (i < (columns.length - 1)) {\n                        csv += this.csvSeparator;\n                    }\n                }\n            }\n        });\n\n        let blob = new Blob([csv], {\n            type: 'text/csv;charset=utf-8;'\n        });\n\n        let link = document.createElement(\"a\");\n        link.style.display = 'none';\n        document.body.appendChild(link);\n        if (link.download !== undefined) {\n            link.setAttribute('href', URL.createObjectURL(blob));\n            link.setAttribute('download', this.exportFilename + '.csv');\n            link.click();\n        }\n        else {\n            csv = 'data:text/csv;charset=utf-8,' + csv;\n            window.open(encodeURI(csv));\n        }\n        document.body.removeChild(link);\n    }\n\n    public resetScrollTop() {\n        if (this.virtualScroll)\n            this.scrollToVirtualIndex(0);\n        else\n            this.scrollTo({top: 0});\n    }\n\n    public scrollToVirtualIndex(index: number) {\n        if (this.virtualScrollBody) {\n            this.virtualScrollBody.scrollToIndex(index);\n        }\n    }\n\n    virtualScrollTimeout: any;\n\n    virtualPage: number;\n\n    onScrollIndexChange(index: number) {\n        if (this.lazy) {\n            if (this.virtualScrollTimeout) {\n                clearTimeout(this.virtualScrollTimeout);\n            }\n\n            this.virtualScrollTimeout = setTimeout(() => {\n                let page = Math.floor(index / this.rows);\n                let virtualScrollOffset = page === 0 ? 0 : (page - 1) * this.rows;\n                let virtualScrollChunkSize = page === 0 ? this.rows * 2 : this.rows * 3;\n\n                if (page !== this.virtualPage) {\n                    this.virtualPage = page;\n                    this.onLazyLoad.emit({\n                        first: virtualScrollOffset,\n                        rows: virtualScrollChunkSize,\n                        sortField: this.sortField,\n                        sortOrder: this.sortOrder,\n                        filters: this.filters,\n                        globalFilter: this.filters && this.filters['global'] ? (<FilterMetadata> this.filters['global']).value : null,\n                        multiSortMeta: this.multiSortMeta\n                    });\n                }\n            }, this.virtualScrollDelay);\n        }\n    }\n\n    public scrollTo(options) {\n        if (this.virtualScrollBody) {\n            this.virtualScrollBody.scrollTo(options);\n        }\n        else {\n            if (this.wrapperViewChild.nativeElement.scrollTo) {\n                this.wrapperViewChild.nativeElement.scrollTo(options);\n            }\n            else {\n                this.wrapperViewChild.nativeElement.scrollLeft = options.left;\n                this.wrapperViewChild.nativeElement.scrollTop = options.top;\n            }\n        }\n    }\n\n    updateEditingCell(cell, data, field, index) {\n        this.editingCell = cell;\n        this.editingCellData = data;\n        this.editingCellField = field;\n        this.editingCellRowIndex = index;\n        this.bindDocumentEditListener();\n    }\n\n    isEditingCellValid() {\n        return (this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0);\n    }\n\n    bindDocumentEditListener() {\n        if (!this.documentEditListener) {\n            this.documentEditListener = (event) => {\n                if (this.editingCell && !this.selfClick && this.isEditingCellValid()) {\n                    DomHandler.removeClass(this.editingCell, 'p-cell-editing');\n                    this.editingCell = null;\n                    this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData, originalEvent: event, index: this.editingCellRowIndex });\n                    this.editingCellField = null;\n                    this.editingCellData = null;\n                    this.editingCellRowIndex = null;\n                    this.unbindDocumentEditListener();\n                    this.cd.markForCheck();\n\n                    if (this.overlaySubscription) {\n                        this.overlaySubscription.unsubscribe();\n                    }\n                }\n\n                this.selfClick = false;\n            };\n\n            document.addEventListener('click', this.documentEditListener);\n        }\n    }\n\n    unbindDocumentEditListener() {\n        if (this.documentEditListener) {\n            document.removeEventListener('click', this.documentEditListener);\n            this.documentEditListener = null;\n        }\n    }\n\n    initRowEdit(rowData: any) {\n        let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n        this.editingRowKeys[dataKeyValue] = true;\n    }\n\n    saveRowEdit(rowData: any, rowElement: HTMLTableRowElement) {\n        if (DomHandler.find(rowElement, '.ng-invalid.ng-dirty').length === 0) {\n            let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n            delete this.editingRowKeys[dataKeyValue];\n        }\n    }\n\n    cancelRowEdit(rowData: any) {\n        let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n        delete this.editingRowKeys[dataKeyValue];\n    }\n\n    toggleRow(rowData: any, event?: Event) {\n        if (!this.dataKey) {\n            throw new Error('dataKey must be defined to use row expansion');\n        }\n\n        let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n\n        if (this.expandedRowKeys[dataKeyValue] != null) {\n            delete this.expandedRowKeys[dataKeyValue];\n            this.onRowCollapse.emit({\n                originalEvent: event,\n                data: rowData\n            });\n        }\n        else {\n            if (this.rowExpandMode === 'single') {\n                this.expandedRowKeys = {};\n            }\n\n            this.expandedRowKeys[dataKeyValue] = true;\n            this.onRowExpand.emit({\n                originalEvent: event,\n                data: rowData\n            });\n        }\n\n        if (event) {\n            event.preventDefault();\n        }\n\n        if (this.isStateful()) {\n            this.saveState();\n        }\n    }\n\n    isRowExpanded(rowData: any): boolean {\n        return this.expandedRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;\n    }\n\n    isRowEditing(rowData: any): boolean {\n        return this.editingRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;\n    }\n\n    isSingleSelectionMode() {\n        return this.selectionMode === 'single';\n    }\n\n    isMultipleSelectionMode() {\n        return this.selectionMode === 'multiple';\n    }\n\n    onColumnResizeBegin(event) {\n        let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n        this.resizeColumnElement = event.target.parentElement;\n        this.columnResizing = true;\n        this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);\n        this.onColumnResize(event);\n        event.preventDefault();\n    }\n\n    onColumnResize(event) {\n        let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n        DomHandler.addClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n        this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';\n        this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';\n        this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';\n\n        this.resizeHelperViewChild.nativeElement.style.display = 'block';\n    }\n\n    onColumnResizeEnd() {\n        let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;\n        let columnWidth = this.resizeColumnElement.offsetWidth;\n        let newColumnWidth = columnWidth + delta;\n        let minWidth = this.resizeColumnElement.style.minWidth||15;\n\n        if (newColumnWidth >= minWidth) {\n            if (this.columnResizeMode === 'fit') {\n                let nextColumn = this.resizeColumnElement.nextElementSibling;\n                let nextColumnWidth = nextColumn.offsetWidth - delta;\n\n                if (newColumnWidth > 15 && nextColumnWidth > 15) {\n                    if (!this.scrollable) {\n                        this.resizeColumnElement.style.width = newColumnWidth + 'px';\n                        if(nextColumn) {\n                            nextColumn.style.width = nextColumnWidth + 'px';\n                        }\n                    }\n                    else {\n                        this.resizeTableCells(newColumnWidth, nextColumnWidth);\n                    }\n                }\n            }\n            else if (this.columnResizeMode === 'expand') {\n                let tableWidth = this.tableViewChild.nativeElement.offsetWidth + delta;\n                this.tableViewChild.nativeElement.style.minWidth = tableWidth + 'px';\n                this.resizeColumnElement.style.width = newColumnWidth + 'px';\n\n                if (!this.scrollable)\n                    this.tableViewChild.nativeElement.style.width = tableWidth + 'px';\n                else\n                    this.resizeTableCells(newColumnWidth, null);\n            }\n\n            this.onColResize.emit({\n                element: this.resizeColumnElement,\n                delta: delta\n            });\n\n            if (this.isStateful()) {\n                this.saveState();\n            }\n        }\n\n        this.resizeHelperViewChild.nativeElement.style.display = 'none';\n        DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n    }\n\n    resizeTableCells(newColumnWidth, nextColumnWidth) {\n        let colIndex = DomHandler.index(this.resizeColumnElement);\n        let widths = [];\n        const tableHead = DomHandler.findSingle(this.containerViewChild.nativeElement, '.p-datatable-thead');\n        let headers = DomHandler.find(tableHead, 'tr > th');\n        headers.forEach(header => widths.push(DomHandler.getOuterWidth(header)));\n\n        this.destroyStyleElement();\n        this.createStyleElement();\n\n        let innerHTML = '';\n        widths.forEach((width,index) => {\n            let colWidth = index === colIndex ? newColumnWidth : (nextColumnWidth && index === colIndex + 1) ? nextColumnWidth : width;\n            innerHTML += `\n                #${this.id}-table > .p-datatable-thead > tr > th:nth-child(${index+1}) {\n                    flex: 0 0 ${colWidth}px !important;\n                }\n\n                #${this.id}-table > .p-datatable-tbody > tr > td:nth-child(${index+1}) {\n                    flex: 0 0 ${colWidth}px !important;\n                }\n            `\n        });\n        this.styleElement.innerHTML = innerHTML;\n    }\n\n    onColumnDragStart(event, columnElement) {\n        this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);\n        this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);\n        this.draggedColumn = columnElement;\n        event.dataTransfer.setData('text', 'b');    // For firefox\n    }\n\n    onColumnDragEnter(event, dropHeader) {\n        if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n            event.preventDefault();\n            let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);\n            let dropHeaderOffset = DomHandler.getOffset(dropHeader);\n\n            if (this.draggedColumn != dropHeader) {\n                let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');\n                let dropIndex = DomHandler.indexWithinGroup(dropHeader, 'preorderablecolumn');\n                let targetLeft = dropHeaderOffset.left - containerOffset.left;\n                let targetTop = containerOffset.top - dropHeaderOffset.top;\n                let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n\n                this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';\n                this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n\n                if (event.pageX > columnCenter) {\n                    this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n                    this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n                    this.dropPosition = 1;\n                }\n                else {\n                    this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n                    this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n                    this.dropPosition = -1;\n                }\n\n                if ((dropIndex - dragIndex === 1 && this.dropPosition === -1) || (dropIndex - dragIndex === -1 && this.dropPosition === 1)) {\n                    this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n                    this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n                }\n                else {\n                    this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';\n                    this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';\n                }\n            }\n            else {\n                event.dataTransfer.dropEffect = 'none';\n            }\n        }\n    }\n\n    onColumnDragLeave(event) {\n        if (this.reorderableColumns && this.draggedColumn) {\n            event.preventDefault();\n            this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n            this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n        }\n    }\n\n    onColumnDrop(event, dropColumn) {\n        event.preventDefault();\n        if (this.draggedColumn) {\n            let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');\n            let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'preorderablecolumn');\n            let allowDrop = (dragIndex != dropIndex);\n            if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {\n                allowDrop = false;\n            }\n\n            if (allowDrop && ((dropIndex < dragIndex && this.dropPosition === 1))) {\n                dropIndex = dropIndex + 1;\n            }\n\n            if (allowDrop && ((dropIndex > dragIndex && this.dropPosition === -1))) {\n                dropIndex = dropIndex - 1;\n            }\n\n            if (allowDrop) {\n                ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n\n                this.onColReorder.emit({\n                    dragIndex: dragIndex,\n                    dropIndex: dropIndex,\n                    columns: this.columns\n                });\n\n                if (this.isStateful()) {\n                    this.zone.runOutsideAngular(() => {\n                        setTimeout(() => {\n                            this.saveState();\n                        });\n                    });\n                }\n            }\n\n            this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n            this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n            this.draggedColumn.draggable = false;\n            this.draggedColumn = null;\n            this.dropPosition = null;\n        }\n    }\n\n    onRowDragStart(event, index) {\n        this.rowDragging = true;\n        this.draggedRowIndex = index;\n        event.dataTransfer.setData('text', 'b');    // For firefox\n    }\n\n    onRowDragOver(event, index, rowElement) {\n        if (this.rowDragging && this.draggedRowIndex !== index) {\n            let rowY = DomHandler.getOffset(rowElement).top + DomHandler.getWindowScrollTop();\n            let pageY = event.pageY;\n            let rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2;\n            let prevRowElement = rowElement.previousElementSibling;\n\n            if (pageY < rowMidY) {\n                DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');\n\n                this.droppedRowIndex = index;\n                if (prevRowElement)\n                    DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n                else\n                    DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n            }\n            else {\n                if (prevRowElement)\n                    DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n                else\n                    DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n\n                this.droppedRowIndex = index + 1;\n                DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom');\n            }\n        }\n    }\n\n    onRowDragLeave(event, rowElement) {\n        let prevRowElement = rowElement.previousElementSibling;\n        if (prevRowElement) {\n            DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n        }\n\n        DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');\n        DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-top');\n    }\n\n    onRowDragEnd(event) {\n        this.rowDragging = false;\n        this.draggedRowIndex = null;\n        this.droppedRowIndex = null;\n    }\n\n    onRowDrop(event, rowElement) {\n        if (this.droppedRowIndex != null) {\n            let dropIndex = (this.draggedRowIndex > this.droppedRowIndex) ? this.droppedRowIndex : (this.droppedRowIndex === 0) ? 0 : this.droppedRowIndex - 1;\n            ObjectUtils.reorderArray(this.value, this.draggedRowIndex, dropIndex);\n\n            this.onRowReorder.emit({\n                dragIndex: this.draggedRowIndex,\n                dropIndex: dropIndex\n            });\n        }\n        //cleanup\n        this.onRowDragLeave(event, rowElement);\n        this.onRowDragEnd(event);\n    }\n\n    isEmpty() {\n        let data = this.filteredValue||this.value;\n        return data == null || data.length == 0;\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    getStorage() {\n        switch(this.stateStorage) {\n            case 'local':\n                return window.localStorage;\n\n            case 'session':\n                return window.sessionStorage;\n\n            default:\n                throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n        }\n    }\n\n    isStateful() {\n        return this.stateKey != null;\n    }\n\n    saveState() {\n        const storage = this.getStorage();\n        let state: TableState = {};\n\n        if (this.paginator) {\n            state.first = this.first;\n            state.rows = this.rows;\n        }\n\n        if (this.sortField) {\n            state.sortField = this.sortField;\n            state.sortOrder = this.sortOrder;\n        }\n\n        if (this.multiSortMeta) {\n            state.multiSortMeta = this.multiSortMeta;\n        }\n\n        if (this.hasFilter()) {\n            state.filters = this.filters;\n        }\n\n        if (this.resizableColumns) {\n            this.saveColumnWidths(state);\n        }\n\n        if (this.reorderableColumns) {\n            this.saveColumnOrder(state);\n        }\n\n        if (this.selection) {\n            state.selection = this.selection;\n        }\n\n        if (Object.keys(this.expandedRowKeys).length) {\n            state.expandedRowKeys = this.expandedRowKeys;\n        }\n\n        storage.setItem(this.stateKey, JSON.stringify(state));\n        this.onStateSave.emit(state);\n    }\n\n    clearState() {\n        const storage = this.getStorage();\n\n        if (this.stateKey) {\n            storage.removeItem(this.stateKey);\n        }\n    }\n\n    restoreState() {\n        const storage = this.getStorage();\n        const stateString = storage.getItem(this.stateKey);\n        const dateFormat = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/;\n        const reviver = function(key, value) {\n            if (typeof value === \"string\" && dateFormat.test(value)) {\n                return new Date(value);\n            }\n\n            return value;\n        }\n\n        if (stateString) {\n            let state: TableState = JSON.parse(stateString, reviver);\n\n            if (this.paginator) {\n                if (this.first !== undefined) {\n                    this.first = state.first;\n                    this.firstChange.emit(this.first);\n                }\n\n                if (this.rows !== undefined) {\n                    this.rows = state.rows;\n                    this.rowsChange.emit(this.rows);\n                }\n            }\n\n            if (state.sortField) {\n                this.restoringSort = true;\n                this._sortField = state.sortField;\n                this._sortOrder = state.sortOrder;\n            }\n\n            if (state.multiSortMeta) {\n                this.restoringSort = true;\n                this._multiSortMeta = state.multiSortMeta;\n            }\n\n            if (state.filters) {\n                this.restoringFilter = true;\n                this.filters = state.filters;\n            }\n\n            if (this.resizableColumns) {\n                this.columnWidthsState = state.columnWidths;\n                this.tableWidthState = state.tableWidth;\n            }\n\n            if (state.expandedRowKeys) {\n                this.expandedRowKeys = state.expandedRowKeys;\n            }\n\n            if (state.selection) {\n                Promise.resolve(null).then(() => this.selectionChange.emit(state.selection));\n            }\n\n            this.stateRestored = true;\n\n            this.onStateRestore.emit(state);\n        }\n    }\n\n    saveColumnWidths(state) {\n        let widths = [];\n        let headers = DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-thead > tr > th');\n        headers.forEach(header => widths.push(DomHandler.getOuterWidth(header)));\n        state.columnWidths = widths.join(',');\n\n        if (this.columnResizeMode === 'expand') {\n            state.tableWidth =  DomHandler.getOuterWidth(this.tableViewChild.nativeElement) + 'px';\n        }\n    }\n\n    restoreColumnWidths() {\n        if (this.columnWidthsState) {\n            let widths = this.columnWidthsState.split(',');\n\n            if (this.columnResizeMode === 'expand' && this.tableWidthState) {\n                this.tableViewChild.nativeElement.style.width = this.tableWidthState;\n                this.tableViewChild.nativeElement.style.minWidth = this.tableWidthState;\n                this.containerViewChild.nativeElement.style.width = this.tableWidthState;\n            }\n\n            this.createStyleElement();\n\n            if (this.scrollable && widths && widths.length > 0) {\n                    let innerHTML = '';\n                    widths.forEach((width,index) => {\n                        innerHTML += `\n                            #${this.id}-table > .p-datatable-thead > tr > th:nth-child(${index+1}) {\n                                flex: 0 0 ${width}px;\n                            }\n\n                            #${this.id}-table > .p-datatable-tbody > tr > td:nth-child(${index+1}) {\n                                flex: 0 0 ${width}px;\n                            }\n                        `\n                    });\n                this.styleElement.innerHTML = innerHTML;\n            }\n            else {\n                DomHandler.find(this.tableViewChild.nativeElement, '.p-datatable-thead > tr > th').forEach((header, index) => {\n                    header.style.width = widths[index] + 'px';\n                });\n            }\n\n        }\n    }\n\n    saveColumnOrder(state) {\n        if (this.columns) {\n            let columnOrder: string[] = [];\n            this.columns.map(column => {\n                columnOrder.push(column.field||column.key)\n            });\n\n            state.columnOrder = columnOrder;\n        }\n    }\n\n    restoreColumnOrder() {\n        const storage = this.getStorage();\n        const stateString = storage.getItem(this.stateKey);\n        if (stateString) {\n            let state: TableState = JSON.parse(stateString);\n            let columnOrder = state.columnOrder;\n            if (columnOrder) {\n                let reorderedColumns = [];\n\n                columnOrder.map(key =>  {\n                    let col = this.findColumnByKey(key);\n                    if (col) {\n                        reorderedColumns.push(col)\n                    }\n                });\n                this.columnOrderStateRestored = true;\n                this.columns = reorderedColumns;\n            }\n        }\n    }\n\n    findColumnByKey(key) {\n        if (this.columns) {\n            for (let col of this.columns) {\n                if (col.key === key || col.field === key)\n                    return col;\n                else\n                    continue;\n            }\n        }\n        else {\n            return null;\n        }\n    }\n\n    createStyleElement() {\n        this.styleElement = document.createElement('style');\n        this.styleElement.type = 'text/css';\n        document.head.appendChild(this.styleElement);\n    }\n\n    getGroupRowsMeta() {\n        return {field: this.groupRowsBy, order: this.groupRowsByOrder};\n    }\n\n    createResponsiveStyle() {\n        if (!this.responsiveStyleElement) {\n            this.responsiveStyleElement = document.createElement('style');\n            this.responsiveStyleElement.type = 'text/css';\n            document.head.appendChild(this.responsiveStyleElement);\n\n            let innerHTML = `\n@media screen and (max-width: ${this.breakpoint}) {\n    #${this.id} .p-datatable-thead > tr > th,\n    #${this.id} .p-datatable-tfoot > tr > td {\n        display: none !important;\n    }\n\n    #${this.id} .p-datatable-tbody > tr > td {\n        display: flex;\n        width: 100% !important;\n        align-items: center;\n        justify-content: space-between;\n    }\n\n    #${this.id} .p-datatable-tbody > tr > td:not(:last-child) {\n        border: 0 none;\n    }\n\n    #${this.id}.p-datatable-gridlines .p-datatable-tbody > tr > td:last-child {\n        border-top: 0;\n        border-right: 0;\n        border-left: 0;\n    }\n\n    #${this.id} .p-datatable-tbody > tr > td > .p-column-title {\n        display: block;\n    }\n}\n`;\n\n            this.responsiveStyleElement.innerHTML = innerHTML;\n        }\n    }\n\n    destroyResponsiveStyle() {\n        if (this.responsiveStyleElement) {\n            document.head.removeChild(this.responsiveStyleElement);\n            this.responsiveStyleElement = null;\n        }\n    }\n\n    destroyStyleElement() {\n        if (this.styleElement) {\n            document.head.removeChild(this.styleElement);\n            this.styleElement = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.unbindDocumentEditListener();\n        this.editingCell = null;\n        this.initialized = null;\n\n        if (this.virtualScrollSubscription) {\n            this.virtualScrollSubscription.unsubscribe();\n        }\n\n        this.destroyStyleElement();\n        this.destroyResponsiveStyle();\n    }\n}\n\n@Component({\n    selector: '[pTableBody]',\n    template: `\n        <ng-container *ngIf=\"!dt.expandedRowTemplate && !dt.virtualScroll\">\n            <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"value\" [ngForTrackBy]=\"dt.rowTrackBy\">\n                <ng-container *ngIf=\"dt.groupHeaderTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupHeader(value, rowData, rowIndex)\" role=\"row\">\n                    <ng-container *ngTemplateOutlet=\"dt.groupHeaderTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}\"></ng-container>\n                </ng-container>\n                <ng-container *ngIf=\"dt.rowGroupMode !== 'rowspan'\">\n                    <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}\"></ng-container>\n                </ng-container>\n                <ng-container *ngIf=\"dt.rowGroupMode === 'rowspan'\">\n                    <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen, rowgroup: shouldRenderRowspan(value, rowData, rowIndex), rowspan: calculateRowGroupSize(value, rowData, rowIndex)}\"></ng-container>\n                </ng-container>\n                <ng-container *ngIf=\"dt.groupFooterTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupFooter(value, rowData, rowIndex)\" role=\"row\">\n                    <ng-container *ngTemplateOutlet=\"dt.groupFooterTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}\"></ng-container>\n                </ng-container>\n            </ng-template>\n        </ng-container>\n        <ng-container *ngIf=\"!dt.expandedRowTemplate && dt.virtualScroll\">\n            <ng-template cdkVirtualFor let-rowData let-rowIndex=\"index\" [cdkVirtualForOf]=\"value\" [cdkVirtualForTrackBy]=\"dt.rowTrackBy\" [cdkVirtualForTemplateCacheSize]=\"0\">\n                <ng-container *ngTemplateOutlet=\"rowData ? template: dt.loadingBodyTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}\"></ng-container>\n            </ng-template>\n        </ng-container>\n        <ng-container *ngIf=\"dt.expandedRowTemplate && !(frozen && dt.frozenExpandedRowTemplate)\">\n            <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"value\" [ngForTrackBy]=\"dt.rowTrackBy\">\n                <ng-container *ngIf=\"!dt.groupHeaderTemplate\">\n                    <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}\"></ng-container>\n                </ng-container>\n                <ng-container *ngIf=\"dt.groupHeaderTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupHeader(value, rowData, rowIndex)\" role=\"row\">\n                    <ng-container *ngTemplateOutlet=\"dt.groupHeaderTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}\"></ng-container>\n                </ng-container>\n                <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n                    <ng-container *ngTemplateOutlet=\"dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, frozen: frozen}\"></ng-container>\n                    <ng-container *ngIf=\"dt.groupFooterTemplate && dt.rowGroupMode === 'subheader' && shouldRenderRowGroupFooter(value, rowData, rowIndex)\" role=\"row\">\n                        <ng-container *ngTemplateOutlet=\"dt.groupFooterTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}\"></ng-container>\n                    </ng-container>\n                </ng-container>\n            </ng-template>\n        </ng-container>\n        <ng-container *ngIf=\"dt.frozenExpandedRowTemplate && frozen\">\n            <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"value\" [ngForTrackBy]=\"dt.rowTrackBy\">\n                <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData)), frozen: frozen}\"></ng-container>\n                <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n                    <ng-container *ngTemplateOutlet=\"dt.frozenExpandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, frozen: frozen}\"></ng-container>\n                </ng-container>\n            </ng-template>\n        </ng-container>\n        <ng-container *ngIf=\"dt.loading\">\n            <ng-container *ngTemplateOutlet=\"dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n        </ng-container>\n        <ng-container *ngIf=\"dt.isEmpty() && !dt.loading\">\n            <ng-container *ngTemplateOutlet=\"dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n        </ng-container>\n    `,\n    changeDetection: ChangeDetectionStrategy.Default,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TableBody implements AfterViewInit, OnDestroy {\n\n    @Input(\"pTableBody\") columns: any[];\n\n    @Input(\"pTableBodyTemplate\") template: TemplateRef<any>;\n\n    @Input() get value(): any[] {\n        return this._value;\n    }\n    set value(val: any[]) {\n        this._value = val;\n        if (this.frozenRows) {\n            this.updateFrozenRowStickyPosition();\n        }\n\n        if (this.dt.scrollable && this.dt.rowGroupMode === 'subheader') {\n            this.updateFrozenRowGroupHeaderStickyPosition();\n        }\n    }\n\n    @Input() frozen: boolean;\n\n    @Input() frozenRows: boolean;\n\n    subscription: Subscription;\n\n    _value: any[];\n\n    ngAfterViewInit() {\n        if (this.frozenRows) {\n            this.updateFrozenRowStickyPosition();\n        }\n\n        if (this.dt.scrollable && this.dt.rowGroupMode === 'subheader') {\n            this.updateFrozenRowGroupHeaderStickyPosition();\n        }\n    }\n\n    constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef, public el: ElementRef) {\n        this.subscription = this.dt.tableService.valueSource$.subscribe(() => {\n            if (this.dt.virtualScroll) {\n                this.cd.detectChanges();\n            }\n        });\n    }\n\n    shouldRenderRowGroupHeader(value, rowData, i) {\n        let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.dt.groupRowsBy);\n        let prevRowData = value[i - 1];\n        if (prevRowData) {\n            let previousRowFieldData = ObjectUtils.resolveFieldData(prevRowData, this.dt.groupRowsBy);\n            return currentRowFieldData !== previousRowFieldData;\n        }\n        else {\n            return true;\n        }\n    }\n\n    shouldRenderRowGroupFooter(value, rowData, i) {\n        let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.dt.groupRowsBy);\n        let nextRowData = value[i + 1];\n        if (nextRowData) {\n            let nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, this.dt.groupRowsBy);\n            return currentRowFieldData !== nextRowFieldData;\n        }\n        else {\n            return true;\n        }\n    }\n\n    shouldRenderRowspan(value, rowData, i) {\n        let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.dt.groupRowsBy);\n        let prevRowData = value[i - 1];\n        if (prevRowData) {\n            let previousRowFieldData = ObjectUtils.resolveFieldData(prevRowData, this.dt.groupRowsBy);\n            return currentRowFieldData !== previousRowFieldData;\n        }\n        else {\n            return true;\n        }\n    }\n\n    calculateRowGroupSize(value, rowData, index) {\n        let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.dt.groupRowsBy);\n        let nextRowFieldData = currentRowFieldData;\n        let groupRowSpan = 0;\n\n        while (currentRowFieldData === nextRowFieldData) {\n            groupRowSpan++;\n            let nextRowData = value[++index];\n            if (nextRowData) {\n                nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, this.dt.groupRowsBy);\n            }\n            else {\n                break;\n            }\n        }\n\n        return groupRowSpan === 1 ? null : groupRowSpan;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n    updateFrozenRowStickyPosition() {\n        this.el.nativeElement.style.top = DomHandler.getOuterHeight(this.el.nativeElement.previousElementSibling) + 'px';\n    }\n\n    updateFrozenRowGroupHeaderStickyPosition() {\n        if (this.el.nativeElement.previousElementSibling) {\n            let tableHeaderHeight = DomHandler.getOuterHeight(this.el.nativeElement.previousElementSibling);\n            this.dt.rowGroupHeaderStyleObject.top = tableHeaderHeight + 'px';\n        }\n    }\n}\n\n@Directive({\n    selector: '[pRowGroupHeader]',\n    host: {\n        'class': 'p-rowgroup-header p-element',\n        '[style.top]': \"getFrozenRowGroupHeaderStickyPosition\"\n    }\n})\nexport class RowGroupHeader {\n\n    constructor(public dt: Table) { }\n\n    get getFrozenRowGroupHeaderStickyPosition() {\n        return this.dt.rowGroupHeaderStyleObject ? this.dt.rowGroupHeaderStyleObject.top : '';\n    }\n }\n\n@Directive({\n    selector: '[pFrozenColumn]',\n    host: {\n        'class': 'p-element',\n        '[class.p-frozen-column]': 'frozen'\n    }\n})\nexport class FrozenColumn implements AfterViewInit {\n\n    @Input() get frozen(): boolean {\n        return this._frozen;\n    }\n\n    set frozen(val: boolean) {\n        this._frozen = val;\n        this.updateStickyPosition();\n    }\n\n    @Input() alignFrozen: string = \"left\";\n\n    constructor(private el: ElementRef) { }\n\n    ngAfterViewInit() {\n        this.updateStickyPosition();\n    }\n\n    _frozen: boolean = true;\n\n    updateStickyPosition() {\n        if (this._frozen) {\n            if (this.alignFrozen === 'right') {\n                let right = 0;\n                let next = this.el.nativeElement.nextElementSibling;\n                if (next) {\n                    right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right);\n                }\n                this.el.nativeElement.style.right = right + 'px';\n            }\n            else {\n                let left = 0;\n                let prev = this.el.nativeElement.previousElementSibling;\n                if (prev) {\n                    left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left);\n                }\n                this.el.nativeElement.style.left = left + 'px';\n            }\n\n            let filterRow = this.el.nativeElement.parentElement.nextElementSibling;\n\n            if (filterRow) {\n                let index = DomHandler.index(this.el.nativeElement);\n                if (filterRow.children && filterRow.children[index]) {\n                    filterRow.children[index].style.left = this.el.nativeElement.style.left;\n                    filterRow.children[index].style.right = this.el.nativeElement.style.right;\n                }\n            }\n        }\n    }\n}\n@Directive({\n    selector: '[pSortableColumn]',\n    host: {\n        'class': 'p-element',\n        '[class.p-sortable-column]': 'isEnabled()',\n        '[class.p-highlight]': 'sorted',\n        '[attr.tabindex]': 'isEnabled() ? \"0\" : null',\n        '[attr.role]': '\"columnheader\"',\n        '[attr.aria-sort]': 'sortOrder'\n    }\n})\nexport class SortableColumn implements OnInit, OnDestroy {\n\n    @Input(\"pSortableColumn\") field: string;\n\n    @Input() pSortableColumnDisabled: boolean;\n\n    sorted: boolean;\n\n    sortOrder: string;\n\n    subscription: Subscription;\n\n    constructor(public dt: Table) {\n        if (this.isEnabled()) {\n            this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {\n                this.updateSortState();\n            });\n        }\n    }\n\n    ngOnInit() {\n        if (this.isEnabled()) {\n            this.updateSortState();\n        }\n    }\n\n    updateSortState() {\n        this.sorted = this.dt.isSorted(this.field);\n        this.sortOrder = this.sorted ? (this.dt.sortOrder === 1 ? 'ascending' : 'descending') : 'none';\n    }\n\n    @HostListener('click', ['$event'])\n    onClick(event: MouseEvent) {\n        if (this.isEnabled() && !this.isFilterElement(<HTMLElement> event.target)) {\n            this.updateSortState();\n            this.dt.sort({\n                originalEvent: event,\n                field: this.field\n            });\n\n            DomHandler.clearSelection();\n        }\n    }\n\n    @HostListener('keydown.enter', ['$event'])\n    onEnterKey(event: MouseEvent) {\n        this.onClick(event);\n    }\n\n    isEnabled() {\n        return this.pSortableColumnDisabled !== true;\n    }\n\n    isFilterElement(element: HTMLElement) {\n        return DomHandler.hasClass(element, 'pi-filter-icon') || DomHandler.hasClass(element, 'p-column-filter-menu-button');\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n\n@Component({\n    selector: 'p-sortIcon',\n    template: `\n        <i class=\"p-sortable-column-icon pi pi-fw\" [ngClass]=\"{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}\"></i>\n        <span *ngIf=\"isMultiSorted()\" class=\"p-sortable-column-badge\">{{getBadgeValue()}}</span>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class SortIcon implements OnInit, OnDestroy {\n\n    @Input() field: string;\n\n    subscription: Subscription;\n\n    sortOrder: number;\n\n    constructor(public dt: Table, public cd: ChangeDetectorRef) {\n        this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {\n            this.updateSortState();\n        });\n    }\n\n    ngOnInit() {\n        this.updateSortState();\n    }\n\n    onClick(event){\n        event.preventDefault();\n    }\n\n    updateSortState() {\n        if (this.dt.sortMode === 'single') {\n            this.sortOrder = this.dt.isSorted(this.field) ? this.dt.sortOrder : 0;\n        }\n        else if (this.dt.sortMode === 'multiple') {\n            let sortMeta = this.dt.getSortMeta(this.field);\n            this.sortOrder = sortMeta ? sortMeta.order: 0;\n        }\n\n        this.cd.markForCheck();\n    }\n\n    getMultiSortMetaIndex() {\n        let multiSortMeta = this.dt._multiSortMeta;\n        let index = -1;\n\n        if (multiSortMeta && this.dt.sortMode === 'multiple' && (this.dt.showInitialSortBadge || multiSortMeta.length > 1)) {\n\n            for (let i = 0; i < multiSortMeta.length; i++) {\n                let meta = multiSortMeta[i];\n                if (meta.field === this.field || meta.field === this.field) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n\n        return index;\n    }\n\n    getBadgeValue() {\n        let index = this.getMultiSortMetaIndex();\n\n        return this.dt.groupRowsBy && index > -1 ? index : index + 1;\n    }\n\n    isMultiSorted() {\n        return this.dt.sortMode === 'multiple' && this.getMultiSortMetaIndex() > -1;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n}\n\n@Directive({\n    selector: '[pSelectableRow]',\n    host: {\n        'class': 'p-element',\n        '[class.p-selectable-row]': 'isEnabled()',\n        '[class.p-highlight]': 'selected',\n        '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n    }\n})\nexport class SelectableRow implements OnInit, OnDestroy {\n\n    @Input(\"pSelectableRow\") data: any;\n\n    @Input(\"pSelectableRowIndex\") index: number;\n\n    @Input() pSelectableRowDisabled: boolean;\n\n    selected: boolean;\n\n    subscription: Subscription;\n\n    constructor(public dt: Table, public tableService: TableService) {\n        if (this.isEnabled()) {\n            this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n                this.selected = this.dt.isSelected(this.data);\n            });\n        }\n    }\n\n    ngOnInit() {\n        if (this.isEnabled()) {\n            this.selected = this.dt.isSelected(this.data);\n        }\n    }\n\n    @HostListener('click', ['$event'])\n    onClick(event: Event) {\n        if (this.isEnabled()) {\n            this.dt.handleRowClick({\n                originalEvent: event,\n                rowData: this.data,\n                rowIndex: this.index\n            });\n        }\n    }\n\n    @HostListener('touchend', ['$event'])\n    onTouchEnd(event: Event) {\n        if (this.isEnabled()) {\n            this.dt.handleRowTouchEnd(event);\n        }\n    }\n\n    @HostListener('keydown.arrowdown', ['$event'])\n    onArrowDownKeyDown(event: KeyboardEvent) {\n        if (!this.isEnabled()) {\n            return;\n        }\n\n        const row = <HTMLTableRowElement>event.currentTarget;\n        const nextRow = this.findNextSelectableRow(row);\n\n        if (nextRow) {\n            nextRow.focus();\n        }\n\n        event.preventDefault();\n    }\n\n    @HostListener('keydown.arrowup', ['$event'])\n    onArrowUpKeyDown(event: KeyboardEvent) {\n        if (!this.isEnabled()) {\n            return;\n        }\n\n        const row = <HTMLTableRowElement>event.currentTarget;\n        const prevRow = this.findPrevSelectableRow(row);\n\n        if (prevRow) {\n            prevRow.focus();\n        }\n\n        event.preventDefault();\n    }\n\n    @HostListener('keydown.enter', ['$event'])\n    @HostListener('keydown.shift.enter', ['$event'])\n    @HostListener('keydown.meta.enter', ['$event'])\n    onEnterKeyDown(event: KeyboardEvent) {\n        if (!this.isEnabled()) {\n            return;\n        }\n\n        this.dt.handleRowClick({\n            originalEvent: event,\n            rowData: this.data,\n            rowIndex: this.index\n        });\n    }\n\n    @HostListener('keydown.pagedown')\n    @HostListener('keydown.pageup')\n    @HostListener('keydown.home')\n    @HostListener('keydown.end')\n    onPageDownKeyDown() {\n        if (this.dt.virtualScroll) {\n            this.dt.virtualScrollBody.elementRef.nativeElement.focus();\n        }\n    }\n\n    @HostListener('keydown.space')\n    onSpaceKeydown() {\n        if (this.dt.virtualScroll && !this.dt.editingCell) {\n            this.dt.virtualScrollBody.elementRef.nativeElement.focus();\n        }\n    }\n\n    findNextSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n        let nextRow = <HTMLTableRowElement> row.nextElementSibling;\n        if (nextRow) {\n            if (DomHandler.hasClass(nextRow, 'p-selectable-row'))\n                return nextRow;\n            else\n                return this.findNextSelectableRow(nextRow);\n        }\n        else {\n            return null;\n        }\n    }\n\n    findPrevSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n        let prevRow = <HTMLTableRowElement> row.previousElementSibling;\n        if (prevRow) {\n            if (DomHandler.hasClass(prevRow, 'p-selectable-row'))\n                return prevRow;\n            else\n                return this.findPrevSelectableRow(prevRow);\n        }\n        else {\n            return null;\n        }\n    }\n\n    isEnabled() {\n        return this.pSelectableRowDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Directive({\n    selector: '[pSelectableRowDblClick]',\n    host: {\n        'class': 'p-element',\n        '[class.p-selectable-row]': 'isEnabled()',\n        '[class.p-highlight]': 'selected'\n    }\n})\nexport class SelectableRowDblClick implements OnInit, OnDestroy {\n\n    @Input(\"pSelectableRowDblClick\") data: any;\n\n    @Input(\"pSelectableRowIndex\") index: number;\n\n    @Input() pSelectableRowDisabled: boolean;\n\n    selected: boolean;\n\n    subscription: Subscription;\n\n    constructor(public dt: Table, public tableService: TableService) {\n        if (this.isEnabled()) {\n            this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n                this.selected = this.dt.isSelected(this.data);\n            });\n        }\n    }\n\n    ngOnInit() {\n        if (this.isEnabled()) {\n            this.selected = this.dt.isSelected(this.data);\n        }\n    }\n\n    @HostListener('dblclick', ['$event'])\n    onClick(event: Event) {\n        if (this.isEnabled()) {\n            this.dt.handleRowClick({\n                originalEvent: event,\n                rowData: this.data,\n                rowIndex: this.index\n            });\n        }\n    }\n\n    isEnabled() {\n        return this.pSelectableRowDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Directive({\n    selector: '[pContextMenuRow]',\n    host: {\n        'class': 'p-element',\n        '[class.p-highlight-contextmenu]': 'selected',\n        '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n    }\n})\nexport class ContextMenuRow {\n\n    @Input(\"pContextMenuRow\") data: any;\n\n    @Input(\"pContextMenuRowIndex\") index: number;\n\n    @Input() pContextMenuRowDisabled: boolean;\n\n    selected: boolean;\n\n    subscription: Subscription;\n\n    constructor(public dt: Table, public tableService: TableService, private el: ElementRef) {\n        if (this.isEnabled()) {\n            this.subscription = this.dt.tableService.contextMenuSource$.subscribe((data) => {\n                this.selected = this.dt.equals(this.data, data);\n            });\n        }\n    }\n\n    @HostListener('contextmenu', ['$event'])\n    onContextMenu(event: Event) {\n        if (this.isEnabled()) {\n            this.dt.handleRowRightClick({\n                originalEvent: event,\n                rowData: this.data,\n                rowIndex: this.index\n            });\n\n            this.el.nativeElement.focus();\n            event.preventDefault();\n        }\n    }\n\n    isEnabled() {\n        return this.pContextMenuRowDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Directive({\n    selector: '[pRowToggler]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class RowToggler {\n\n    @Input('pRowToggler') data: any;\n\n    @Input() pRowTogglerDisabled: boolean;\n\n    constructor(public dt: Table) { }\n\n    @HostListener('click', ['$event'])\n    onClick(event: Event) {\n        if (this.isEnabled()) {\n            this.dt.toggleRow(this.data, event);\n            event.preventDefault();\n        }\n    }\n\n    isEnabled() {\n        return this.pRowTogglerDisabled !== true;\n    }\n}\n\n@Directive({\n    selector: '[pResizableColumn]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ResizableColumn implements AfterViewInit, OnDestroy {\n\n    @Input() pResizableColumnDisabled: boolean;\n\n    resizer: HTMLSpanElement;\n\n    resizerMouseDownListener: any;\n\n    documentMouseMoveListener: any;\n\n    documentMouseUpListener: any;\n\n    constructor(public dt: Table, public el: ElementRef, public zone: NgZone) { }\n\n    ngAfterViewInit() {\n        if (this.isEnabled()) {\n            DomHandler.addClass(this.el.nativeElement, 'p-resizable-column');\n            this.resizer = document.createElement('span');\n            this.resizer.className = 'p-column-resizer';\n            this.el.nativeElement.appendChild(this.resizer);\n\n            this.zone.runOutsideAngular(() => {\n                this.resizerMouseDownListener = this.onMouseDown.bind(this);\n                this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);\n            });\n        }\n    }\n\n    bindDocumentEvents() {\n        this.zone.runOutsideAngular(() => {\n            this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);\n            document.addEventListener('mousemove', this.documentMouseMoveListener);\n\n            this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);\n            document.addEventListener('mouseup', this.documentMouseUpListener);\n        });\n    }\n\n    unbindDocumentEvents() {\n        if (this.documentMouseMoveListener) {\n            document.removeEventListener('mousemove', this.documentMouseMoveListener);\n            this.documentMouseMoveListener = null;\n        }\n\n        if (this.documentMouseUpListener) {\n            document.removeEventListener('mouseup', this.documentMouseUpListener);\n            this.documentMouseUpListener = null;\n        }\n    }\n\n    onMouseDown(event: MouseEvent) {\n        if (event.which === 1) {\n            this.dt.onColumnResizeBegin(event);\n            this.bindDocumentEvents();\n        }\n    }\n\n    onDocumentMouseMove(event: MouseEvent) {\n        this.dt.onColumnResize(event);\n    }\n\n    onDocumentMouseUp(event: MouseEvent) {\n        this.dt.onColumnResizeEnd();\n        this.unbindDocumentEvents();\n    }\n\n    isEnabled() {\n        return this.pResizableColumnDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.resizerMouseDownListener) {\n            this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);\n        }\n\n        this.unbindDocumentEvents();\n    }\n}\n\n@Directive({\n    selector: '[pReorderableColumn]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ReorderableColumn implements AfterViewInit, OnDestroy {\n\n    @Input() pReorderableColumnDisabled: boolean;\n\n    dragStartListener: any;\n\n    dragOverListener: any;\n\n    dragEnterListener: any;\n\n    dragLeaveListener: any;\n\n    mouseDownListener: any;\n\n    constructor(public dt: Table, public el: ElementRef, public zone: NgZone) { }\n\n    ngAfterViewInit() {\n        if (this.isEnabled()) {\n            this.bindEvents();\n        }\n    }\n\n    bindEvents() {\n        this.zone.runOutsideAngular(() => {\n            this.mouseDownListener = this.onMouseDown.bind(this);\n            this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n            this.dragStartListener = this.onDragStart.bind(this);\n            this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n            this.dragOverListener = this.onDragEnter.bind(this);\n            this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n            this.dragEnterListener = this.onDragEnter.bind(this);\n            this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);\n\n            this.dragLeaveListener = this.onDragLeave.bind(this);\n            this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n        });\n    }\n\n    unbindEvents() {\n        if (this.mouseDownListener) {\n            document.removeEventListener('mousedown', this.mouseDownListener);\n            this.mouseDownListener = null;\n        }\n\n        if (this.dragOverListener) {\n            document.removeEventListener('dragover', this.dragOverListener);\n            this.dragOverListener = null;\n        }\n\n        if (this.dragEnterListener) {\n            document.removeEventListener('dragenter', this.dragEnterListener);\n            this.dragEnterListener = null;\n        }\n\n        if (this.dragEnterListener) {\n            document.removeEventListener('dragenter', this.dragEnterListener);\n            this.dragEnterListener = null;\n        }\n\n        if (this.dragLeaveListener) {\n            document.removeEventListener('dragleave', this.dragLeaveListener);\n            this.dragLeaveListener = null;\n        }\n    }\n\n    onMouseDown(event) {\n        if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer'))\n            this.el.nativeElement.draggable = false;\n        else\n            this.el.nativeElement.draggable = true;\n    }\n\n    onDragStart(event) {\n        this.dt.onColumnDragStart(event, this.el.nativeElement);\n    }\n\n    onDragOver(event) {\n        event.preventDefault();\n    }\n\n    onDragEnter(event) {\n        this.dt.onColumnDragEnter(event, this.el.nativeElement);\n    }\n\n    onDragLeave(event) {\n        this.dt.onColumnDragLeave(event);\n    }\n\n    @HostListener('drop', ['$event'])\n    onDrop(event) {\n        if (this.isEnabled()) {\n            this.dt.onColumnDrop(event, this.el.nativeElement);\n        }\n    }\n\n    isEnabled() {\n        return this.pReorderableColumnDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        this.unbindEvents();\n    }\n\n}\n\n@Directive({\n    selector: '[pEditableColumn]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class EditableColumn implements AfterViewInit, OnDestroy {\n\n    @Input(\"pEditableColumn\") data: any;\n\n    @Input(\"pEditableColumnField\") field: any;\n\n    @Input(\"pEditableColumnRowIndex\") rowIndex: number;\n\n    @Input() pEditableColumnDisabled: boolean;\n\n    @Input() pFocusCellSelector: string;\n\n    overlayEventListener;\n\n    constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n    ngAfterViewInit() {\n        if (this.isEnabled()) {\n            DomHandler.addClass(this.el.nativeElement, 'p-editable-column');\n        }\n    }\n\n    @HostListener('click', ['$event'])\n    onClick(event: MouseEvent) {\n        if (this.isEnabled()) {\n            this.dt.selfClick = true;\n\n            if (this.dt.editingCell) {\n                if (this.dt.editingCell !== this.el.nativeElement) {\n                    if (!this.dt.isEditingCellValid()) {\n                        return;\n                    }\n\n                    this.closeEditingCell(true, event);\n                    this.openCell();\n                }\n            }\n            else {\n                this.openCell();\n            }\n        }\n    }\n\n    openCell() {\n        this.dt.updateEditingCell(this.el.nativeElement, this.data, this.field, this.rowIndex);\n        DomHandler.addClass(this.el.nativeElement, 'p-cell-editing');\n        this.dt.onEditInit.emit({field: this.field, data: this.data, index: this.rowIndex});\n        this.zone.runOutsideAngular(() => {\n            setTimeout(() => {\n                let focusCellSelector = this.pFocusCellSelector || 'input, textarea, select';\n                let focusableElement = DomHandler.findSingle(this.el.nativeElement, focusCellSelector);\n\n                if (focusableElement) {\n                    focusableElement.focus();\n                }\n            }, 50);\n        });\n\n        this.overlayEventListener = (e) => {\n            if (this.el && this.el.nativeElement.contains(e.target)) {\n                this.dt.selfClick = true;\n            }\n        }\n\n        this.dt.overlaySubscription = this.dt.overlayService.clickObservable.subscribe(this.overlayEventListener);\n    }\n\n    closeEditingCell(completed, event) {\n        if (completed)\n            this.dt.onEditComplete.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.dt.editingCellRowIndex});\n        else\n            this.dt.onEditCancel.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.dt.editingCellRowIndex});\n\n        DomHandler.removeClass(this.dt.editingCell, 'p-cell-editing');\n        this.dt.editingCell = null;\n        this.dt.editingCellData = null;\n        this.dt.editingCellField = null;\n        this.dt.unbindDocumentEditListener();\n\n        if (this.dt.overlaySubscription) {\n            this.dt.overlaySubscription.unsubscribe();\n        }\n    }\n\n    @HostListener('keydown.enter', ['$event'])\n    onEnterKeyDown(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            if (this.dt.isEditingCellValid()) {\n                this.closeEditingCell(true, event);\n            }\n\n            event.preventDefault();\n        }\n    }\n\n    @HostListener('keydown.escape', ['$event'])\n    onEscapeKeyDown(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            if (this.dt.isEditingCellValid()) {\n                this.closeEditingCell(false, event);\n            }\n\n            event.preventDefault();\n        }\n    }\n\n    @HostListener('keydown.tab', ['$event'])\n    @HostListener('keydown.shift.tab', ['$event'])\n    @HostListener('keydown.meta.tab', ['$event'])\n    onShiftKeyDown(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            if (event.shiftKey)\n                this.moveToPreviousCell(event);\n            else{\n                this.moveToNextCell(event);\n            }\n        }\n    }\n    @HostListener('keydown.arrowdown', ['$event'])\n    onArrowDown(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            let currentCell = this.findCell(event.target);\n            if (currentCell) {\n                let cellIndex = DomHandler.index(currentCell);\n                let targetCell = this.findNextEditableColumnByIndex(currentCell, cellIndex);\n\n                if (targetCell) {\n                    if (this.dt.isEditingCellValid()) {\n                        this.closeEditingCell(true, event);\n                    }\n\n                    DomHandler.invokeElementMethod(event.target, 'blur');\n                    DomHandler.invokeElementMethod(targetCell, 'click');\n                }\n\n                event.preventDefault();\n            }\n        }\n    }\n\n    @HostListener('keydown.arrowup', ['$event'])\n    onArrowUp(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            let currentCell = this.findCell(event.target);\n            if (currentCell) {\n                let cellIndex = DomHandler.index(currentCell);\n                let targetCell = this.findPrevEditableColumnByIndex(currentCell, cellIndex);\n\n                if (targetCell) {\n                    if (this.dt.isEditingCellValid()) {\n                        this.closeEditingCell(true, event);\n                    }\n\n                    DomHandler.invokeElementMethod(event.target, 'blur');\n                    DomHandler.invokeElementMethod(targetCell, 'click');\n                }\n\n                event.preventDefault();\n            }\n        }\n    }\n\n    @HostListener('keydown.arrowleft', ['$event'])\n    onArrowLeft(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            this.moveToPreviousCell(event);\n        }\n    }\n\n    @HostListener('keydown.arrowright', ['$event'])\n    onArrowRight(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            this.moveToNextCell(event);\n        }\n    }\n\n    findCell(element) {\n        if (element) {\n            let cell = element;\n            while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {\n                cell = cell.parentElement;\n            }\n\n            return cell;\n        }\n        else {\n            return null;\n        }\n    }\n\n    moveToPreviousCell(event: KeyboardEvent) {\n        let currentCell = this.findCell(event.target);\n        if (currentCell) {\n            let targetCell = this.findPreviousEditableColumn(currentCell);\n\n            if (targetCell) {\n                if (this.dt.isEditingCellValid()) {\n                    this.closeEditingCell(true, event);\n                }\n\n                DomHandler.invokeElementMethod(event.target, 'blur');\n                DomHandler.invokeElementMethod(targetCell, 'click');\n                event.preventDefault();\n            }\n        }\n    }\n\n    moveToNextCell(event: KeyboardEvent) {\n        let currentCell = this.findCell(event.target);\n        if (currentCell) {\n            let targetCell = this.findNextEditableColumn(currentCell);\n\n            if (targetCell) {\n                if (this.dt.isEditingCellValid()) {\n                    this.closeEditingCell(true, event);\n                }\n\n                DomHandler.invokeElementMethod(event.target, 'blur');\n                DomHandler.invokeElementMethod(targetCell, 'click');\n                event.preventDefault();\n            }\n        }\n    }\n\n    findPreviousEditableColumn(cell: Element) {\n        let prevCell = cell.previousElementSibling;\n\n        if (!prevCell) {\n            let previousRow = cell.parentElement.previousElementSibling;\n            if (previousRow) {\n                prevCell = previousRow.lastElementChild;\n            }\n        }\n\n        if (prevCell) {\n            if (DomHandler.hasClass(prevCell, 'p-editable-column'))\n                return prevCell;\n            else\n                return this.findPreviousEditableColumn(prevCell);\n        }\n        else {\n            return null;\n        }\n    }\n\n    findNextEditableColumn(cell: Element) {\n        let nextCell = cell.nextElementSibling;\n\n        if (!nextCell) {\n            let nextRow = cell.parentElement.nextElementSibling;\n            if (nextRow) {\n                nextCell = nextRow.firstElementChild;\n            }\n        }\n\n        if (nextCell) {\n            if (DomHandler.hasClass(nextCell, 'p-editable-column'))\n                return nextCell;\n            else\n                return this.findNextEditableColumn(nextCell);\n        }\n        else {\n            return null;\n        }\n    }\n\n    findNextEditableColumnByIndex(cell: Element, index: number) {\n        let nextRow = cell.parentElement.nextElementSibling;\n\n        if (nextRow) {\n            let nextCell = nextRow.children[index];\n\n            if (nextCell && DomHandler.hasClass(nextCell, 'p-editable-column')) {\n                return nextCell;\n            }\n\n            return null;\n        }\n        else {\n            return null;\n        }\n    }\n\n    findPrevEditableColumnByIndex(cell: Element, index: number) {\n        let prevRow = cell.parentElement.previousElementSibling;\n\n        if (prevRow) {\n            let prevCell = prevRow.children[index];\n\n            if (prevCell && DomHandler.hasClass(prevCell, 'p-editable-column')) {\n                return prevCell;\n            }\n\n            return null;\n        }\n        else {\n            return null;\n        }\n    }\n\n    isEnabled() {\n        return this.pEditableColumnDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.dt.overlaySubscription) {\n            this.dt.overlaySubscription.unsubscribe();\n        }\n    }\n\n}\n\n@Directive({\n    selector: '[pEditableRow]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class EditableRow {\n\n    @Input(\"pEditableRow\") data: any;\n\n    @Input() pEditableRowDisabled: boolean;\n\n    constructor(public el: ElementRef) {}\n\n    isEnabled() {\n        return this.pEditableRowDisabled !== true;\n    }\n\n}\n\n@Directive({\n    selector: '[pInitEditableRow]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class InitEditableRow {\n\n    constructor(public dt: Table, public editableRow: EditableRow) {}\n\n    @HostListener('click', ['$event'])\n    onClick(event: Event) {\n        this.dt.initRowEdit(this.editableRow.data);\n        event.preventDefault();\n    }\n\n}\n\n@Directive({\n    selector: '[pSaveEditableRow]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class SaveEditableRow {\n\n    constructor(public dt: Table, public editableRow: EditableRow) {}\n\n    @HostListener('click', ['$event'])\n    onClick(event: Event) {\n        this.dt.saveRowEdit(this.editableRow.data, this.editableRow.el.nativeElement);\n        event.preventDefault();\n    }\n}\n\n@Directive({\n    selector: '[pCancelEditableRow]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class CancelEditableRow {\n\n    constructor(public dt: Table, public editableRow: EditableRow) {}\n\n    @HostListener('click', ['$event'])\n    onClick(event: Event) {\n        this.dt.cancelRowEdit(this.editableRow.data);\n        event.preventDefault();\n    }\n}\n\n@Component({\n    selector: 'p-cellEditor',\n    template: `\n        <ng-container *ngIf=\"editing\">\n            <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n        </ng-container>\n        <ng-container *ngIf=\"!editing\">\n            <ng-container *ngTemplateOutlet=\"outputTemplate\"></ng-container>\n        </ng-container>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class CellEditor implements AfterContentInit {\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n    inputTemplate: TemplateRef<any>;\n\n    outputTemplate: TemplateRef<any>;\n\n    constructor(public dt: Table, @Optional() public editableColumn: EditableColumn, @Optional() public editableRow: EditableRow) { }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'input':\n                    this.inputTemplate = item.template;\n                    break;\n\n                case 'output':\n                    this.outputTemplate = item.template;\n                    break;\n            }\n        });\n    }\n\n    get editing(): boolean {\n        return (this.dt.editingCell && this.editableColumn && this.dt.editingCell === this.editableColumn.el.nativeElement) ||\n                (this.editableRow && this.dt.editMode === 'row' && this.dt.isRowEditing(this.editableRow.data));\n    }\n\n}\n\n@Component({\n    selector: 'p-tableRadioButton',\n    template: `\n        <div class=\"p-radiobutton p-component\" (click)=\"onClick($event)\">\n            <div class=\"p-hidden-accessible\">\n                <input type=\"radio\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n                [disabled]=\"disabled\" [attr.aria-label]=\"ariaLabel\">\n            </div>\n            <div #box [ngClass]=\"{'p-radiobutton-box p-component':true, 'p-highlight':checked, 'p-disabled':disabled}\" role=\"radio\" [attr.aria-checked]=\"checked\">\n                <div class=\"p-radiobutton-icon\"></div>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TableRadioButton  {\n\n    @Input() disabled: boolean;\n\n    @Input() value: any;\n\n    @Input() index: number;\n\n    @Input() inputId: string;\n\n    @Input() name: string;\n\n    @Input() ariaLabel: string;\n\n    @ViewChild('box') boxViewChild: ElementRef;\n\n    checked: boolean;\n\n    subscription: Subscription;\n\n    constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n        this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n            this.checked = this.dt.isSelected(this.value);\n            this.cd.markForCheck();\n        });\n    }\n\n    ngOnInit() {\n        this.checked = this.dt.isSelected(this.value);\n    }\n\n    onClick(event: Event) {\n        if (!this.disabled) {\n            this.dt.toggleRowWithRadio({\n                originalEvent: event,\n                rowIndex: this.index\n            }, this.value);\n        }\n        DomHandler.clearSelection();\n    }\n\n    onFocus() {\n        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    onBlur() {\n        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Component({\n    selector: 'p-tableCheckbox',\n    template: `\n        <div class=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n            <div class=\"p-hidden-accessible\">\n                <input type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [disabled]=\"disabled\"\n                [attr.required]=\"required\" [attr.aria-label]=\"ariaLabel\">\n            </div>\n            <div #box [ngClass]=\"{'p-checkbox-box p-component':true,\n                'p-highlight':checked, 'p-disabled':disabled}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n                <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TableCheckbox  {\n\n    @Input() disabled: boolean;\n\n    @Input() value: any;\n\n    @Input() index: number;\n\n    @Input() inputId: string;\n\n    @Input() name: string;\n\n    @Input() required: boolean;\n\n    @Input() ariaLabel: string;\n\n    @ViewChild('box') boxViewChild: ElementRef;\n\n    checked: boolean;\n\n    subscription: Subscription;\n\n    constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n        this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n            this.checked = this.dt.isSelected(this.value);\n            this.cd.markForCheck();\n        });\n    }\n\n    ngOnInit() {\n        this.checked = this.dt.isSelected(this.value);\n    }\n\n    onClick(event: Event) {\n        if (!this.disabled) {\n            this.dt.toggleRowWithCheckbox({\n                originalEvent: event,\n                rowIndex: this.index\n            }, this.value);\n        }\n        DomHandler.clearSelection();\n    }\n\n    onFocus() {\n        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    onBlur() {\n        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Component({\n    selector: 'p-tableHeaderCheckbox',\n    template: `\n        <div class=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n            <div class=\"p-hidden-accessible\">\n                <input #cb type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n                [disabled]=\"isDisabled()\" [attr.aria-label]=\"ariaLabel\">\n            </div>\n            <div #box [ngClass]=\"{'p-checkbox-box':true,\n                'p-highlight':checked, 'p-disabled': isDisabled()}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n                <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TableHeaderCheckbox  {\n\n    @ViewChild('box') boxViewChild: ElementRef;\n\n    @Input() disabled: boolean;\n\n    @Input() inputId: string;\n\n    @Input() name: string;\n\n    @Input() ariaLabel: string;\n\n    checked: boolean;\n\n    selectionChangeSubscription: Subscription;\n\n    valueChangeSubscription: Subscription;\n\n    constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n        this.valueChangeSubscription = this.dt.tableService.valueSource$.subscribe(() => {\n            this.checked = this.updateCheckedState();\n        });\n\n        this.selectionChangeSubscription = this.dt.tableService.selectionSource$.subscribe(() => {\n            this.checked = this.updateCheckedState();\n        });\n    }\n\n    ngOnInit() {\n        this.checked = this.updateCheckedState();\n    }\n\n    onClick(event: Event) {\n        if (!this.disabled) {\n            if (this.dt.value && this.dt.value.length > 0) {\n                this.dt.toggleRowsWithCheckbox(event, !this.checked);\n            }\n        }\n\n        DomHandler.clearSelection();\n    }\n\n    onFocus() {\n        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    onBlur() {\n        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    isDisabled() {\n        return this.disabled || !this.dt.value || !this.dt.value.length;\n    }\n\n    ngOnDestroy() {\n        if (this.selectionChangeSubscription) {\n            this.selectionChangeSubscription.unsubscribe();\n        }\n\n        if (this.valueChangeSubscription) {\n            this.valueChangeSubscription.unsubscribe();\n        }\n    }\n\n    updateCheckedState() {\n        this.cd.markForCheck();\n        if (this.dt.filteredValue && !this.dt.lazy) {\n            const val = this.dt.filteredValue;\n            return (val && val.length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.isAllFilteredValuesChecked());\n        }\n        else {\n            const val = this.dt.value;\n            const length = this.dt.lazy ? this.dt._totalRecords : val ? val.length : 0;\n            return (val && length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.dt.selection.length === length);\n        }\n    }\n\n    isAllFilteredValuesChecked() {\n        if (!this.dt.filteredValue) {\n            return false;\n        }\n        else {\n            for (let rowData of this.dt.filteredValue) {\n                if (!this.dt.isSelected(rowData)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n}\n\n@Directive({\n    selector: '[pReorderableRowHandle]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ReorderableRowHandle implements AfterViewInit {\n\n    @Input(\"pReorderableRowHandle\") index: number;\n\n    constructor(public el: ElementRef) {}\n\n    ngAfterViewInit() {\n        DomHandler.addClass(this.el.nativeElement, 'p-datatable-reorderablerow-handle');\n    }\n}\n\n@Directive({\n    selector: '[pReorderableRow]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ReorderableRow implements AfterViewInit {\n\n    @Input(\"pReorderableRow\") index: number;\n\n    @Input() pReorderableRowDisabled: boolean;\n\n    mouseDownListener: any;\n\n    dragStartListener: any;\n\n    dragEndListener: any;\n\n    dragOverListener: any;\n\n    dragLeaveListener: any;\n\n    dropListener: any;\n\n    constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n    ngAfterViewInit() {\n        if (this.isEnabled()) {\n            this.el.nativeElement.droppable = true;\n            this.bindEvents();\n        }\n    }\n\n    bindEvents() {\n        this.zone.runOutsideAngular(() => {\n            this.mouseDownListener = this.onMouseDown.bind(this);\n            this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n            this.dragStartListener = this.onDragStart.bind(this);\n            this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n            this.dragEndListener = this.onDragEnd.bind(this);\n            this.el.nativeElement.addEventListener('dragend', this.dragEndListener);\n\n            this.dragOverListener = this.onDragOver.bind(this);\n            this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n            this.dragLeaveListener = this.onDragLeave.bind(this);\n            this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n        });\n    }\n\n    unbindEvents() {\n        if (this.mouseDownListener) {\n            document.removeEventListener('mousedown', this.mouseDownListener);\n            this.mouseDownListener = null;\n        }\n\n        if (this.dragStartListener) {\n            document.removeEventListener('dragstart', this.dragStartListener);\n            this.dragStartListener = null;\n        }\n\n        if (this.dragEndListener) {\n            document.removeEventListener('dragend', this.dragEndListener);\n            this.dragEndListener = null;\n        }\n\n        if (this.dragOverListener) {\n            document.removeEventListener('dragover', this.dragOverListener);\n            this.dragOverListener = null;\n        }\n\n        if (this.dragLeaveListener) {\n            document.removeEventListener('dragleave', this.dragLeaveListener);\n            this.dragLeaveListener = null;\n        }\n    }\n\n    onMouseDown(event) {\n        if (DomHandler.hasClass(event.target, 'p-datatable-reorderablerow-handle'))\n            this.el.nativeElement.draggable = true;\n        else\n            this.el.nativeElement.draggable = false;\n    }\n\n    onDragStart(event) {\n        this.dt.onRowDragStart(event, this.index);\n    }\n\n    onDragEnd(event) {\n        this.dt.onRowDragEnd(event);\n        this.el.nativeElement.draggable = false;\n    }\n\n    onDragOver(event) {\n        this.dt.onRowDragOver(event, this.index, this.el.nativeElement);\n        event.preventDefault();\n    }\n\n    onDragLeave(event) {\n        this.dt.onRowDragLeave(event, this.el.nativeElement);\n    }\n\n    isEnabled() {\n        return this.pReorderableRowDisabled !== true;\n    }\n\n    @HostListener('drop', ['$event'])\n    onDrop(event) {\n        if (this.isEnabled() && this.dt.rowDragging) {\n            this.dt.onRowDrop(event, this.el.nativeElement);\n        }\n\n        event.preventDefault()\n    }\n}\n\n@Component({\n    selector: 'p-columnFilterFormElement',\n    template: `\n        <ng-container *ngIf=\"filterTemplate; else builtInElement\">\n            <ng-container *ngTemplateOutlet=\"filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}\"></ng-container>\n        </ng-container>\n        <ng-template #builtInElement>\n            <ng-container [ngSwitch]=\"type\">\n                <input *ngSwitchCase=\"'text'\" type=\"text\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\"\n                    (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\">\n                <p-inputNumber *ngSwitchCase=\"'numeric'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" (onKeyDown)=\"onNumericInputKeyDown($event)\" [showButtons]=\"true\" [attr.placeholder]=\"placeholder\"\n                    [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\" [placeholder]=\"placeholder\"\n                    [mode]=\"currency ? 'currency' : 'decimal'\" [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-inputNumber>\n                <p-triStateCheckbox *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-triStateCheckbox>\n                <p-calendar *ngSwitchCase=\"'date'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-calendar>\n            </ng-container>\n        </ng-template>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ColumnFilterFormElement implements OnInit {\n\n    @Input() field: string;\n\n    @Input() type: string;\n\n    @Input() filterConstraint: FilterMetadata;\n\n    @Input() filterTemplate: TemplateRef<any>;\n\n    @Input() placeholder: string;\n\n    @Input() minFractionDigits: number\n\n    @Input() maxFractionDigits: number;\n\n    @Input() prefix: string;\n\n    @Input() suffix: string;\n\n    @Input() locale: string;\n\n    @Input() localeMatcher: string;\n\n    @Input() currency: string;\n\n    @Input() currencyDisplay: string;\n\n    @Input() useGrouping: boolean = true;\n\n    filterCallback: Function;\n\n    constructor(public dt: Table) {}\n\n    ngOnInit() {\n        this.filterCallback = value => {\n            this.filterConstraint.value = value;\n            this.dt._filter();\n        };\n    }\n\n    onModelChange(value: any) {\n        this.filterConstraint.value = value;\n\n        if (this.type === 'boolean' || value === '') {\n            this.dt._filter();\n        }\n    }\n\n    onTextInputEnterKeyDown(event: KeyboardEvent) {\n        this.dt._filter();\n        event.preventDefault();\n    }\n\n    onNumericInputKeyDown(event: KeyboardEvent) {\n        if (event.key === 'Enter') {\n            this.dt._filter();\n            event.preventDefault();\n        }\n    }\n}\n\n@Component({\n    selector: 'p-columnFilter',\n    template: `\n        <div class=\"p-column-filter\" [ngClass]=\"{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}\">\n            <p-columnFilterFormElement *ngIf=\"display === 'row'\" class=\"p-fluid\" [type]=\"type\" [field]=\"field\" [filterConstraint]=\"dt.filters[field]\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\" [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n                                    [locale]=\"locale\"  [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n            <button #icon *ngIf=\"showMenuButton\" type=\"button\" class=\"p-column-filter-menu-button p-link\" aria-haspopup=\"true\" [attr.aria-expanded]=\"overlayVisible\"\n                [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}\"\n                (click)=\"toggleMenu()\" (keydown)=\"onToggleButtonKeyDown($event)\"><span class=\"pi pi-filter-icon pi-filter\"></span></button>\n            <button #icon *ngIf=\"showClearButton && display === 'row'\" [ngClass]=\"{'p-hidden-space': !hasRowFilter()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\"><span class=\"pi pi-filter-slash\"></span></button>\n            <div *ngIf=\"showMenu && overlayVisible\" [ngClass]=\"{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}\" (click)=\"onContentClick()\"\n                [@overlayAnimation]=\"'visible'\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\" (keydown.escape)=\"onEscape()\">\n                <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: field}\"></ng-container>\n                <ul *ngIf=\"display === 'row'; else menu\" class=\"p-column-filter-row-items\">\n                    <li class=\"p-column-filter-row-item\" *ngFor=\"let matchMode of matchModes; let i = index;\" (click)=\"onRowMatchModeChange(matchMode.value)\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\n                        [ngClass]=\"{'p-highlight': isRowMatchModeSelected(matchMode.value)}\" [attr.tabindex]=\"i === 0 ? '0' : null\">{{matchMode.label}}</li>\n                    <li class=\"p-column-filter-separator\"></li>\n                    <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{noFilterLabel}}</li>\n                </ul>\n                <ng-template #menu>\n                    <div class=\"p-column-filter-operator\" *ngIf=\"isShowOperator\">\n                        <p-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"p-column-filter-operator-dropdown\"></p-dropdown>\n                    </div>\n                    <div class=\"p-column-filter-constraints\">\n                        <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"p-column-filter-constraint\">\n                            <p-dropdown  *ngIf=\"showMatchModes && matchModes\" [options]=\"matchModes\" [ngModel]=\"fieldConstraint.matchMode\" (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\" styleClass=\"p-column-filter-matchmode-dropdown\"></p-dropdown>\n                            <p-columnFilterFormElement [type]=\"type\" [field]=\"field\" [filterConstraint]=\"fieldConstraint\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\"\n                            [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n                            [locale]=\"locale\"  [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n                            <div>\n                                <button *ngIf=\"showRemoveIcon\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-column-filter-remove-button p-button-text p-button-danger p-button-sm\" (click)=\"removeConstraint(fieldConstraint)\" pRipple [label]=\"removeRuleButtonLabel\"></button>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"p-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\n                        <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" icon=\"pi pi-plus\" class=\"p-column-filter-add-button p-button-text p-button-sm\" (click)=\"addConstraint()\" pRipple></button>\n                    </div>\n                    <div class=\"p-column-filter-buttonbar\">\n                        <button *ngIf=\"showClearButton\" type=\"button\" pButton class=\"p-button-outlined\" (click)=\"clearFilter()\" [label]=\"clearButtonLabel\" pRipple></button>\n                        <button *ngIf=\"showApplyButton\" type=\"button\" pButton (click)=\"applyFilter()\" [label]=\"applyButtonLabel\" pRipple></button>\n                    </div>\n                </ng-template>\n                <ng-container *ngTemplateOutlet=\"footerTemplate; context: {$implicit: field}\"></ng-container>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('.12s cubic-bezier(0, 0, 0.2, 1)')\n            ]),\n            transition(':leave', [\n                animate('.1s linear', style({ opacity: 0 }))\n            ])\n        ])\n    ],\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ColumnFilter implements AfterContentInit {\n\n    @Input() field: string;\n\n    @Input() type: string = 'text';\n\n    @Input() display: string = 'row';\n\n    @Input() showMenu: boolean = true;\n\n    @Input() matchMode: string;\n\n    @Input() operator: string = FilterOperator.AND;\n\n    @Input() showOperator: boolean = true;\n\n    @Input() showClearButton: boolean = true;\n\n    @Input() showApplyButton: boolean = true;\n\n    @Input() showMatchModes: boolean = true;\n\n    @Input() showAddButton: boolean = true;\n\n    @Input() hideOnClear: boolean = false;\n\n    @Input() placeholder: string;\n\n    @Input() matchModeOptions: SelectItem[];\n\n    @Input() maxConstraints: number = 2;\n\n    @Input() minFractionDigits: number;\n\n    @Input() maxFractionDigits: number;\n\n    @Input() prefix: string;\n\n    @Input() suffix: string;\n\n    @Input() locale: string;\n\n    @Input() localeMatcher: string;\n\n    @Input() currency: string;\n\n    @Input() currencyDisplay: string;\n\n    @Input() useGrouping: boolean = true;\n\n    @ViewChild('icon') icon: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    constructor(public el: ElementRef, public dt: Table, public renderer: Renderer2, public config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    overlaySubscription: Subscription;\n\n    headerTemplate: TemplateRef<any>;\n\n    filterTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    operatorOptions: any[];\n\n    overlayVisible: boolean;\n\n    overlay: HTMLElement;\n\n    scrollHandler: any;\n\n    documentClickListener: any;\n\n    documentResizeListener: any;\n\n    matchModes: SelectItem[];\n\n    translationSubscription: Subscription;\n\n    resetSubscription: Subscription;\n\n    selfClick: boolean;\n\n    overlayEventListener;\n\n    ngOnInit() {\n        if (!this.dt.filters[this.field]) {\n            this.initFieldFilterConstraint();\n        }\n\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.generateMatchModeOptions();\n            this.generateOperatorOptions();\n        });\n\n        this.resetSubscription = this.dt.tableService.resetSource$.subscribe(() => {\n            this.clearFilter();\n        })\n\n        this.generateMatchModeOptions();\n        this.generateOperatorOptions();\n    }\n\n    generateMatchModeOptions() {\n        this.matchModes = this.matchModeOptions ||\n        this.config.filterMatchModeOptions[this.type]?.map(key => {\n            return {label: this.config.getTranslation(key), value: key}\n        });\n    }\n\n    generateOperatorOptions() {\n        this.operatorOptions = [\n            {label: this.config.getTranslation(TranslationKeys.MATCH_ALL), value: FilterOperator.AND},\n            {label: this.config.getTranslation(TranslationKeys.MATCH_ANY), value: FilterOperator.OR}\n        ];\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'filter':\n                    this.filterTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.filterTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    initFieldFilterConstraint() {\n        let defaultMatchMode = this.getDefaultMatchMode();\n        this.dt.filters[this.field] = this.display == 'row' ? {value: null, matchMode: defaultMatchMode} : [{value: null, matchMode: defaultMatchMode, operator: this.operator}];\n    }\n\n    onMenuMatchModeChange(value: any, filterMeta: FilterMetadata) {\n        filterMeta.matchMode = value;\n\n        if (!this.showApplyButton) {\n            this.dt._filter();\n        }\n    }\n\n    onRowMatchModeChange(matchMode: string) {\n        (<FilterMetadata> this.dt.filters[this.field]).matchMode = matchMode;\n        this.dt._filter();\n        this.hide();\n    }\n\n    onRowMatchModeKeyDown(event: KeyboardEvent) {\n        let item = <HTMLLIElement> event.target;\n\n        switch(event.key) {\n            case 'ArrowDown':\n                var nextItem = this.findNextItem(item);\n                if (nextItem) {\n                    item.removeAttribute('tabindex');\n                    nextItem.tabIndex = '0';\n                    nextItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'ArrowUp':\n                var prevItem = this.findPrevItem(item);\n                if (prevItem) {\n                    item.removeAttribute('tabindex');\n                    prevItem.tabIndex = '0';\n                    prevItem.focus();\n                }\n\n                event.preventDefault();\n            break;\n        }\n    }\n\n    onRowClearItemClick() {\n        this.clearFilter();\n        this.hide();\n    }\n\n    isRowMatchModeSelected(matchMode: string) {\n        return (<FilterMetadata> this.dt.filters[this.field]).matchMode === matchMode;\n    }\n\n    addConstraint() {\n        (<FilterMetadata[]> this.dt.filters[this.field]).push({value: null, matchMode: this.getDefaultMatchMode(), operator: this.getDefaultOperator()});\n        this.dt._filter();\n    }\n\n    removeConstraint(filterMeta: FilterMetadata) {\n        this.dt.filters[this.field] = (<FilterMetadata[]> this.dt.filters[this.field]).filter(meta => meta !== filterMeta);\n        this.dt._filter();\n    }\n\n    onOperatorChange(value) {\n        (<FilterMetadata[]> this.dt.filters[this.field]).forEach(filterMeta => {\n            filterMeta.operator = value;\n            this.operator = value;\n        });\n\n        if (!this.showApplyButton) {\n            this.dt._filter();\n        }\n    }\n\n    toggleMenu() {\n        this.overlayVisible = !this.overlayVisible;\n    }\n\n    onToggleButtonKeyDown(event: KeyboardEvent) {\n        switch(event.key) {\n            case 'Escape':\n            case 'Tab':\n                this.overlayVisible = false;\n            break;\n\n            case 'ArrowDown':\n                if (this.overlayVisible) {\n                    let focusable = DomHandler.getFocusableElements(this.overlay);\n                    if (focusable) {\n                        focusable[0].focus();\n                    }\n                    event.preventDefault();\n                }\n                else if (event.altKey) {\n                    this.overlayVisible = true;\n                    event.preventDefault();\n                }\n            break;\n        }\n    }\n\n    onEscape() {\n        this.overlayVisible = false;\n        this.icon.nativeElement.focus();\n    }\n\n    findNextItem(item: HTMLLIElement) {\n        let nextItem = <HTMLLIElement> item.nextElementSibling;\n\n        if (nextItem)\n            return DomHandler.hasClass(nextItem, 'p-column-filter-separator')  ? this.findNextItem(nextItem) : nextItem;\n        else\n            return item.parentElement.firstElementChild;\n    }\n\n    findPrevItem(item: HTMLLIElement) {\n        let prevItem = <HTMLLIElement> item.previousElementSibling;\n\n        if (prevItem)\n            return DomHandler.hasClass(prevItem, 'p-column-filter-separator')  ? this.findPrevItem(prevItem) : prevItem;\n        else\n        return item.parentElement.lastElementChild;\n    }\n\n    onContentClick() {\n        this.selfClick = true;\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n                this.overlay = event.element;\n\n                document.body.appendChild(this.overlay);\n                ZIndexUtils.set('overlay', this.overlay, this.config.zIndex.overlay);\n                DomHandler.absolutePosition(this.overlay, this.icon.nativeElement)\n                this.bindDocumentClickListener();\n                this.bindDocumentResizeListener();\n                this.bindScrollListener();\n\n                this.overlayEventListener = (e) => {\n                    if (this.overlay && this.overlay.contains(e.target)) {\n                        this.selfClick = true;\n                    }\n                }\n\n                this.overlaySubscription = this.overlayService.clickObservable.subscribe(this.overlayEventListener);\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n\n                if (this.overlaySubscription) {\n                    this.overlaySubscription.unsubscribe();\n                }\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'void':\n                ZIndexUtils.clear(event.element);\n            break;\n        }\n    }\n\n    getDefaultMatchMode(): string {\n        if (this.matchMode) {\n            return this.matchMode;\n        }\n        else {\n            if (this.type === 'text')\n                return FilterMatchMode.STARTS_WITH;\n            else if (this.type === 'numeric')\n                return FilterMatchMode.EQUALS;\n            else if (this.type === 'date')\n                return FilterMatchMode.DATE_IS;\n            else\n                return FilterMatchMode.CONTAINS;\n        }\n    }\n\n    getDefaultOperator(): string {\n        return this.dt.filters ? (<FilterMetadata[]> this.dt.filters[this.field])[0].operator: this.operator;\n    }\n\n    hasRowFilter() {\n        return this.dt.filters[this.field] && !this.dt.isFilterBlank((<FilterMetadata>this.dt.filters[this.field]).value);\n    }\n\n    get fieldConstraints(): FilterMetadata[] {\n        return this.dt.filters ? <FilterMetadata[]> this.dt.filters[this.field] : null;\n    }\n\n    get showRemoveIcon(): boolean {\n        return this.fieldConstraints ? this.fieldConstraints.length > 1 : false;\n    }\n\n    get showMenuButton(): boolean {\n        return this.showMenu && (this.display === 'row' ? this.type !== 'boolean': true);\n    }\n\n    get isShowOperator(): boolean {\n        return this.showOperator && this.type !== 'boolean';\n    }\n\n    get isShowAddConstraint(): boolean {\n        return this.showAddButton && this.type !== 'boolean' && (this.fieldConstraints && this.fieldConstraints.length < this.maxConstraints);\n    }\n\n    get applyButtonLabel(): string {\n        return this.config.getTranslation(TranslationKeys.APPLY);\n    }\n\n    get clearButtonLabel(): string {\n        return this.config.getTranslation(TranslationKeys.CLEAR);\n    }\n\n    get addRuleButtonLabel(): string {\n        return this.config.getTranslation(TranslationKeys.ADD_RULE);\n    }\n\n    get removeRuleButtonLabel(): string {\n        return this.config.getTranslation(TranslationKeys.REMOVE_RULE);\n    }\n\n    get noFilterLabel(): string {\n        return this.config.getTranslation(TranslationKeys.NO_FILTER);\n    }\n\n    hasFilter(): boolean {\n        let fieldFilter = this.dt.filters[this.field];\n        if (fieldFilter) {\n            if (Array.isArray(fieldFilter))\n                return !this.dt.isFilterBlank((<FilterMetadata[]> fieldFilter)[0].value);\n            else\n                return !this.dt.isFilterBlank(fieldFilter.value);\n        }\n\n        return false;\n    }\n\n    isOutsideClicked(event): boolean {\n        return !(this.overlay.isSameNode(event.target) || this.overlay.contains(event.target)\n            || this.icon.nativeElement.isSameNode(event.target) || this.icon.nativeElement.contains(event.target)\n            || DomHandler.hasClass(event.target, 'p-column-filter-add-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button')\n            || DomHandler.hasClass(event.target, 'p-column-filter-remove-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button'));\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', event => {\n                if (this.overlayVisible && !this.selfClick && this.isOutsideClicked(event)) {\n                    this.hide();\n                }\n\n                this.selfClick = false;\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n            this.selfClick = false;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = () => this.hide();\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    hide() {\n        this.overlayVisible = false;\n    }\n\n    onOverlayHide() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.overlay = null;\n    }\n\n    clearFilter() {\n        this.initFieldFilterConstraint();\n        this.dt._filter();\n        if (this.hideOnClear)\n            this.hide();\n    }\n\n    applyFilter() {\n        this.dt._filter();\n        this.hide();\n    }\n\n    ngOnDestroy() {\n        if (this.overlay) {\n            this.el.nativeElement.appendChild(this.overlay);\n            ZIndexUtils.clear(this.overlay);\n            this.onOverlayHide();\n        }\n\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n\n        if (this.resetSubscription) {\n            this.resetSubscription.unsubscribe();\n        }\n\n        if (this.overlaySubscription) {\n            this.overlaySubscription.unsubscribe();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,PaginatorModule,InputTextModule,DropdownModule,ScrollingModule,FormsModule,ButtonModule,SelectButtonModule,CalendarModule,InputNumberModule,TriStateCheckboxModule],\n    exports: [Table,SharedModule,SortableColumn,FrozenColumn,RowGroupHeader,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,SortIcon,\n            TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ScrollingModule,ColumnFilter],\n    declarations: [Table,SortableColumn,FrozenColumn,RowGroupHeader,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,TableBody,SortIcon,\n            TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ColumnFilter,ColumnFilterFormElement]\n})\nexport class TableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tabmenu.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tabmenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tabmenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,161 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i4 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import { DomHandler } from 'primeng/dom';
+import * as i2 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+
+class TabMenu {
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngAfterViewInit() {
+        this.updateInkBar();
+    }
+    ngAfterViewChecked() {
+        if (this.tabChanged) {
+            this.updateInkBar();
+            this.tabChanged = false;
+        }
+    }
+    itemClick(event, item) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        this.activeItem = item;
+        this.tabChanged = true;
+    }
+    updateInkBar() {
+        let tabHeader = DomHandler.findSingle(this.navbar.nativeElement, 'li.p-highlight');
+        if (tabHeader) {
+            this.inkbar.nativeElement.style.width = DomHandler.getWidth(tabHeader) + 'px';
+            this.inkbar.nativeElement.style.left = DomHandler.getOffset(tabHeader).left - DomHandler.getOffset(this.navbar.nativeElement).left + 'px';
+        }
+    }
+}
+TabMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
+TabMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TabMenu, selector: "p-tabMenu", inputs: { model: "model", activeItem: "activeItem", popup: "popup", style: "style", styleClass: "styleClass" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }, { propertyName: "inkbar", first: true, predicate: ["inkbar"], descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="'p-tabmenu p-component'" [ngStyle]="style" [class]="styleClass">
+            <ul #navbar class="p-tabmenu-nav p-reset" role="tablist">
+                <li *ngFor="let item of model; let i = index" role="tab" [ngStyle]="item.style" [class]="item.styleClass" [attr.aria-selected]="activeItem==item" [attr.aria-expanded]="activeItem==item"
+                    [ngClass]="{'p-tabmenuitem':true,'p-disabled':item.disabled,'p-highlight':activeItem==item,'p-hidden': item.visible === false}" pTooltip [tooltipOptions]="item.tooltipOptions">
+                    <a *ngIf="!item.routerLink" [attr.href]="item.url" class="p-menuitem-link" role="presentation" (click)="itemClick($event,item)" (keydown.enter)="itemClick($event,item)" [attr.tabindex]="item.disabled ? null : '0'"
+                        [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id" pRipple>
+                        <ng-container *ngIf="!itemTemplate">
+                            <span class="p-menuitem-icon" [ngClass]="item.icon" *ngIf="item.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+                            <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                        </ng-container>
+                        <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                    </a>
+                    <a *ngIf="item.routerLink" [routerLink]="item.routerLink" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}"
+                        role="presentation" class="p-menuitem-link" (click)="itemClick($event,item)" (keydown.enter)="itemClick($event,item)" [attr.tabindex]="item.disabled ? null : '0'"
+                        [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id"
+                        [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state" pRipple>
+                        <ng-container *ngIf="!itemTemplate">
+                            <span class="p-menuitem-icon" [ngClass]="item.icon" *ngIf="item.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+                            <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                        </ng-container>
+                        <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                    </a>
+                </li>
+                <li #inkbar class="p-tabmenu-ink-bar"></li>
+            </ul>
+        </div>
+    `, isInline: true, styles: [".p-tabmenu{overflow-x:auto}.p-tabmenu-nav{display:flex;margin:0;padding:0;list-style-type:none;flex-wrap:nowrap}.p-tabmenu-nav a{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;position:relative;text-decoration:none;overflow:hidden}.p-tabmenu-nav a:focus{z-index:1}.p-tabmenu-nav .p-menuitem-text{line-height:1}.p-tabmenu-ink-bar{display:none;z-index:1}.p-tabmenu::-webkit-scrollbar{display:none}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabMenu, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-tabMenu', template: `
+        <div [ngClass]="'p-tabmenu p-component'" [ngStyle]="style" [class]="styleClass">
+            <ul #navbar class="p-tabmenu-nav p-reset" role="tablist">
+                <li *ngFor="let item of model; let i = index" role="tab" [ngStyle]="item.style" [class]="item.styleClass" [attr.aria-selected]="activeItem==item" [attr.aria-expanded]="activeItem==item"
+                    [ngClass]="{'p-tabmenuitem':true,'p-disabled':item.disabled,'p-highlight':activeItem==item,'p-hidden': item.visible === false}" pTooltip [tooltipOptions]="item.tooltipOptions">
+                    <a *ngIf="!item.routerLink" [attr.href]="item.url" class="p-menuitem-link" role="presentation" (click)="itemClick($event,item)" (keydown.enter)="itemClick($event,item)" [attr.tabindex]="item.disabled ? null : '0'"
+                        [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id" pRipple>
+                        <ng-container *ngIf="!itemTemplate">
+                            <span class="p-menuitem-icon" [ngClass]="item.icon" *ngIf="item.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{item.label}}</span>
+                            <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                        </ng-container>
+                        <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                    </a>
+                    <a *ngIf="item.routerLink" [routerLink]="item.routerLink" [queryParams]="item.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="item.routerLinkActiveOptions||{exact:false}"
+                        role="presentation" class="p-menuitem-link" (click)="itemClick($event,item)" (keydown.enter)="itemClick($event,item)" [attr.tabindex]="item.disabled ? null : '0'"
+                        [attr.target]="item.target" [attr.title]="item.title" [attr.id]="item.id"
+                        [fragment]="item.fragment" [queryParamsHandling]="item.queryParamsHandling" [preserveFragment]="item.preserveFragment" [skipLocationChange]="item.skipLocationChange" [replaceUrl]="item.replaceUrl" [state]="item.state" pRipple>
+                        <ng-container *ngIf="!itemTemplate">
+                            <span class="p-menuitem-icon" [ngClass]="item.icon" *ngIf="item.icon"></span>
+                            <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlRouteLabel">{{item.label}}</span>
+                            <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="item.label"></span></ng-template>
+                        </ng-container>
+                        <ng-container *ngTemplateOutlet="itemTemplate; context: {$implicit: item, index: i}"></ng-container>
+                    </a>
+                </li>
+                <li #inkbar class="p-tabmenu-ink-bar"></li>
+            </ul>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-tabmenu{overflow-x:auto}.p-tabmenu-nav{display:flex;margin:0;padding:0;list-style-type:none;flex-wrap:nowrap}.p-tabmenu-nav a{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;position:relative;text-decoration:none;overflow:hidden}.p-tabmenu-nav a:focus{z-index:1}.p-tabmenu-nav .p-menuitem-text{line-height:1}.p-tabmenu-ink-bar{display:none;z-index:1}.p-tabmenu::-webkit-scrollbar{display:none}\n"] }]
+        }], propDecorators: { model: [{
+                type: Input
+            }], activeItem: [{
+                type: Input
+            }], popup: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], navbar: [{
+                type: ViewChild,
+                args: ['navbar']
+            }], inkbar: [{
+                type: ViewChild,
+                args: ['inkbar']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class TabMenuModule {
+}
+TabMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TabMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabMenuModule, declarations: [TabMenu], imports: [CommonModule, RouterModule, SharedModule, RippleModule, TooltipModule], exports: [TabMenu, RouterModule, SharedModule, TooltipModule] });
+TabMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabMenuModule, imports: [[CommonModule, RouterModule, SharedModule, RippleModule, TooltipModule], RouterModule, SharedModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabMenuModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, SharedModule, RippleModule, TooltipModule],
+                    exports: [TabMenu, RouterModule, SharedModule, TooltipModule],
+                    declarations: [TabMenu]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { TabMenu, TabMenuModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tabmenu.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tabmenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tabmenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-tabmenu.mjs","sources":["../../src/app/components/tabmenu/tabmenu.ts","../../src/app/components/tabmenu/primeng-tabmenu.ts"],"sourcesContent":["import {NgModule,Component,Input,ContentChildren,QueryList,AfterContentInit,AfterViewInit,AfterViewChecked,TemplateRef,ChangeDetectionStrategy, ViewEncapsulation, ViewChild, ElementRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MenuItem} from 'primeng/api';\nimport {RippleModule} from 'primeng/ripple';\nimport {PrimeTemplate, SharedModule} from 'primeng/api';\nimport {RouterModule} from '@angular/router';\nimport {DomHandler} from 'primeng/dom';\nimport {TooltipModule} from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-tabMenu',\n    template: `\n        <div [ngClass]=\"'p-tabmenu p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <ul #navbar class=\"p-tabmenu-nav p-reset\" role=\"tablist\">\n                <li *ngFor=\"let item of model; let i = index\" role=\"tab\" [ngStyle]=\"item.style\" [class]=\"item.styleClass\" [attr.aria-selected]=\"activeItem==item\" [attr.aria-expanded]=\"activeItem==item\"\n                    [ngClass]=\"{'p-tabmenuitem':true,'p-disabled':item.disabled,'p-highlight':activeItem==item,'p-hidden': item.visible === false}\" pTooltip [tooltipOptions]=\"item.tooltipOptions\">\n                    <a *ngIf=\"!item.routerLink\" [attr.href]=\"item.url\" class=\"p-menuitem-link\" role=\"presentation\" (click)=\"itemClick($event,item)\" (keydown.enter)=\"itemClick($event,item)\" [attr.tabindex]=\"item.disabled ? null : '0'\"\n                        [attr.target]=\"item.target\" [attr.title]=\"item.title\" [attr.id]=\"item.id\" pRipple>\n                        <ng-container *ngIf=\"!itemTemplate\">\n                            <span class=\"p-menuitem-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon\"></span>\n                            <span class=\"p-menuitem-text\" *ngIf=\"item.escape !== false; else htmlLabel\">{{item.label}}</span>\n                            <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n                        </ng-container>\n                        <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, index: i}\"></ng-container>\n                    </a>\n                    <a *ngIf=\"item.routerLink\" [routerLink]=\"item.routerLink\" [queryParams]=\"item.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" [routerLinkActiveOptions]=\"item.routerLinkActiveOptions||{exact:false}\"\n                        role=\"presentation\" class=\"p-menuitem-link\" (click)=\"itemClick($event,item)\" (keydown.enter)=\"itemClick($event,item)\" [attr.tabindex]=\"item.disabled ? null : '0'\"\n                        [attr.target]=\"item.target\" [attr.title]=\"item.title\" [attr.id]=\"item.id\"\n                        [fragment]=\"item.fragment\" [queryParamsHandling]=\"item.queryParamsHandling\" [preserveFragment]=\"item.preserveFragment\" [skipLocationChange]=\"item.skipLocationChange\" [replaceUrl]=\"item.replaceUrl\" [state]=\"item.state\" pRipple>\n                        <ng-container *ngIf=\"!itemTemplate\">\n                            <span class=\"p-menuitem-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon\"></span>\n                            <span class=\"p-menuitem-text\" *ngIf=\"item.escape !== false; else htmlRouteLabel\">{{item.label}}</span>\n                            <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"item.label\"></span></ng-template>\n                        </ng-container>\n                        <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, index: i}\"></ng-container>\n                    </a>\n                </li>\n                <li #inkbar class=\"p-tabmenu-ink-bar\"></li>\n            </ul>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./tabmenu.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TabMenu implements AfterContentInit,AfterViewInit,AfterViewChecked {\n\n    @Input() model: MenuItem[];\n\n    @Input() activeItem: MenuItem;\n\n    @Input() popup: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @ViewChild('navbar') navbar: ElementRef;\n\n    @ViewChild('inkbar') inkbar: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    itemTemplate: TemplateRef<any>;\n\n    tabChanged: boolean;\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngAfterViewInit() {\n        this.updateInkBar();\n    }\n\n    ngAfterViewChecked() {\n        if (this.tabChanged) {\n            this.updateInkBar();\n            this.tabChanged = false;\n        }\n    }\n\n    itemClick(event: Event, item: MenuItem) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        this.activeItem = item;\n        this.tabChanged = true;\n    }\n\n    updateInkBar() {\n        let tabHeader = DomHandler.findSingle(this.navbar.nativeElement, 'li.p-highlight');\n        if (tabHeader) {\n            this.inkbar.nativeElement.style.width = DomHandler.getWidth(tabHeader) + 'px';\n            this.inkbar.nativeElement.style.left = DomHandler.getOffset(tabHeader).left - DomHandler.getOffset(this.navbar.nativeElement).left + 'px';\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,SharedModule,RippleModule,TooltipModule],\n    exports: [TabMenu,RouterModule,SharedModule,TooltipModule],\n    declarations: [TabMenu]\n})\nexport class TabMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tabview.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tabview.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tabview.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,441 @@
+import * as i0 from '@angular/core';
+import { forwardRef, Component, Inject, Input, ContentChildren, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { DomHandler } from 'primeng/dom';
+
+let idx = 0;
+class TabPanel {
+    constructor(tabView, viewContainer, cd) {
+        this.viewContainer = viewContainer;
+        this.cd = cd;
+        this.cache = true;
+        this.tooltipPosition = 'top';
+        this.tooltipPositionStyle = 'absolute';
+        this.id = `p-tabpanel-${idx++}`;
+        this.tabView = tabView;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                default:
+                    this.contentTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    get selected() {
+        return this._selected;
+    }
+    set selected(val) {
+        this._selected = val;
+        if (!this.loaded) {
+            this.cd.detectChanges();
+        }
+        if (val)
+            this.loaded = true;
+    }
+    get disabled() {
+        return this._disabled;
+    }
+    ;
+    set disabled(disabled) {
+        this._disabled = disabled;
+        this.tabView.cd.markForCheck();
+    }
+    get header() {
+        return this._header;
+    }
+    set header(header) {
+        this._header = header;
+        this.tabView.cd.markForCheck();
+    }
+    get leftIcon() {
+        return this._leftIcon;
+    }
+    set leftIcon(leftIcon) {
+        this._leftIcon = leftIcon;
+        this.tabView.cd.markForCheck();
+    }
+    get rightIcon() {
+        return this._rightIcon;
+    }
+    set rightIcon(rightIcon) {
+        this._rightIcon = rightIcon;
+        this.tabView.cd.markForCheck();
+    }
+    ngOnDestroy() {
+        this.view = null;
+    }
+}
+TabPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabPanel, deps: [{ token: forwardRef(() => TabView) }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TabPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TabPanel, selector: "p-tabPanel", inputs: { closable: "closable", headerStyle: "headerStyle", headerStyleClass: "headerStyleClass", cache: "cache", tooltip: "tooltip", tooltipPosition: "tooltipPosition", tooltipPositionStyle: "tooltipPositionStyle", tooltipStyleClass: "tooltipStyleClass", selected: "selected", disabled: "disabled", header: "header", leftIcon: "leftIcon", rightIcon: "rightIcon" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [attr.id]="id" class="p-tabview-panel" [hidden]="!selected"
+            role="tabpanel" [attr.aria-hidden]="!selected" [attr.aria-labelledby]="id + '-label'" *ngIf="!closed">
+            <ng-content></ng-content>
+            <ng-container *ngIf="contentTemplate && (cache ? loaded : selected)">
+                <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+            </ng-container>
+        </div>
+    `, isInline: true, directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabPanel, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-tabPanel',
+                    template: `
+        <div [attr.id]="id" class="p-tabview-panel" [hidden]="!selected"
+            role="tabpanel" [attr.aria-hidden]="!selected" [attr.aria-labelledby]="id + '-label'" *ngIf="!closed">
+            <ng-content></ng-content>
+            <ng-container *ngIf="contentTemplate && (cache ? loaded : selected)">
+                <ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
+            </ng-container>
+        </div>
+    `,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: undefined, decorators: [{
+                    type: Inject,
+                    args: [forwardRef(() => TabView)]
+                }] }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { closable: [{
+                type: Input
+            }], headerStyle: [{
+                type: Input
+            }], headerStyleClass: [{
+                type: Input
+            }], cache: [{
+                type: Input
+            }], tooltip: [{
+                type: Input
+            }], tooltipPosition: [{
+                type: Input
+            }], tooltipPositionStyle: [{
+                type: Input
+            }], tooltipStyleClass: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], selected: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], header: [{
+                type: Input
+            }], leftIcon: [{
+                type: Input
+            }], rightIcon: [{
+                type: Input
+            }] } });
+class TabView {
+    constructor(el, cd) {
+        this.el = el;
+        this.cd = cd;
+        this.orientation = 'top';
+        this.onChange = new EventEmitter();
+        this.onClose = new EventEmitter();
+        this.activeIndexChange = new EventEmitter();
+        this.backwardIsDisabled = true;
+        this.forwardIsDisabled = false;
+    }
+    ngAfterContentInit() {
+        this.initTabs();
+        this.tabPanels.changes.subscribe(_ => {
+            this.initTabs();
+        });
+    }
+    ngAfterViewChecked() {
+        if (this.tabChanged) {
+            this.updateInkBar();
+            this.tabChanged = false;
+        }
+    }
+    initTabs() {
+        this.tabs = this.tabPanels.toArray();
+        let selectedTab = this.findSelectedTab();
+        if (!selectedTab && this.tabs.length) {
+            if (this.activeIndex != null && this.tabs.length > this.activeIndex)
+                this.tabs[this.activeIndex].selected = true;
+            else
+                this.tabs[0].selected = true;
+            this.tabChanged = true;
+        }
+        this.cd.markForCheck();
+    }
+    open(event, tab) {
+        if (tab.disabled) {
+            if (event) {
+                event.preventDefault();
+            }
+            return;
+        }
+        if (!tab.selected) {
+            let selectedTab = this.findSelectedTab();
+            if (selectedTab) {
+                selectedTab.selected = false;
+            }
+            this.tabChanged = true;
+            tab.selected = true;
+            let selectedTabIndex = this.findTabIndex(tab);
+            this.preventActiveIndexPropagation = true;
+            this.activeIndexChange.emit(selectedTabIndex);
+            this.onChange.emit({ originalEvent: event, index: selectedTabIndex });
+            this.updateScrollBar(selectedTabIndex);
+        }
+        if (event) {
+            event.preventDefault();
+        }
+    }
+    close(event, tab) {
+        if (this.controlClose) {
+            this.onClose.emit({
+                originalEvent: event,
+                index: this.findTabIndex(tab),
+                close: () => {
+                    this.closeTab(tab);
+                }
+            });
+        }
+        else {
+            this.closeTab(tab);
+            this.onClose.emit({
+                originalEvent: event,
+                index: this.findTabIndex(tab)
+            });
+        }
+        event.stopPropagation();
+    }
+    closeTab(tab) {
+        if (tab.disabled) {
+            return;
+        }
+        if (tab.selected) {
+            this.tabChanged = true;
+            tab.selected = false;
+            for (let i = 0; i < this.tabs.length; i++) {
+                let tabPanel = this.tabs[i];
+                if (!tabPanel.closed && !tab.disabled) {
+                    tabPanel.selected = true;
+                    break;
+                }
+            }
+        }
+        tab.closed = true;
+    }
+    findSelectedTab() {
+        for (let i = 0; i < this.tabs.length; i++) {
+            if (this.tabs[i].selected) {
+                return this.tabs[i];
+            }
+        }
+        return null;
+    }
+    findTabIndex(tab) {
+        let index = -1;
+        for (let i = 0; i < this.tabs.length; i++) {
+            if (this.tabs[i] == tab) {
+                index = i;
+                break;
+            }
+        }
+        return index;
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    get activeIndex() {
+        return this._activeIndex;
+    }
+    set activeIndex(val) {
+        this._activeIndex = val;
+        if (this.preventActiveIndexPropagation) {
+            this.preventActiveIndexPropagation = false;
+            return;
+        }
+        if (this.tabs && this.tabs.length && this._activeIndex != null && this.tabs.length > this._activeIndex) {
+            this.findSelectedTab().selected = false;
+            this.tabs[this._activeIndex].selected = true;
+            this.tabChanged = true;
+            this.updateScrollBar(val);
+        }
+    }
+    updateInkBar() {
+        let tabHeader = DomHandler.findSingle(this.navbar.nativeElement, 'li.p-highlight');
+        this.inkbar.nativeElement.style.width = DomHandler.getWidth(tabHeader) + 'px';
+        this.inkbar.nativeElement.style.left = DomHandler.getOffset(tabHeader).left - DomHandler.getOffset(this.navbar.nativeElement).left + 'px';
+    }
+    updateScrollBar(index) {
+        let tabHeader = this.navbar.nativeElement.children[index];
+        tabHeader.scrollIntoView({ block: 'nearest' });
+    }
+    updateButtonState() {
+        const content = this.content.nativeElement;
+        const { scrollLeft, scrollWidth } = content;
+        const width = DomHandler.getWidth(content);
+        this.backwardIsDisabled = scrollLeft === 0;
+        this.forwardIsDisabled = scrollLeft === scrollWidth - width;
+    }
+    onScroll(event) {
+        this.scrollable && this.updateButtonState();
+        event.preventDefault();
+    }
+    getVisibleButtonWidths() {
+        return [this.prevBtn?.nativeElement, this.nextBtn?.nativeElement].reduce((acc, el) => el ? acc + DomHandler.getWidth(el) : acc, 0);
+    }
+    navBackward() {
+        const content = this.content.nativeElement;
+        const width = DomHandler.getWidth(content) - this.getVisibleButtonWidths();
+        const pos = content.scrollLeft - width;
+        content.scrollLeft = pos <= 0 ? 0 : pos;
+    }
+    navForward() {
+        const content = this.content.nativeElement;
+        const width = DomHandler.getWidth(content) - this.getVisibleButtonWidths();
+        const pos = content.scrollLeft + width;
+        const lastPos = content.scrollWidth - width;
+        content.scrollLeft = pos >= lastPos ? lastPos : pos;
+    }
+}
+TabView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabView, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TabView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TabView, selector: "p-tabView", inputs: { orientation: "orientation", style: "style", styleClass: "styleClass", controlClose: "controlClose", scrollable: "scrollable", activeIndex: "activeIndex" }, outputs: { onChange: "onChange", onClose: "onClose", activeIndexChange: "activeIndexChange" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "tabPanels", predicate: TabPanel }], viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }, { propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }, { propertyName: "prevBtn", first: true, predicate: ["prevBtn"], descendants: true }, { propertyName: "nextBtn", first: true, predicate: ["nextBtn"], descendants: true }, { propertyName: "inkbar", first: true, predicate: ["inkbar"], descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="{'p-tabview p-component': true, 'p-tabview-scrollable': scrollable}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-tabview-nav-container">
+                <button *ngIf="scrollable && !backwardIsDisabled" #prevBtn class="p-tabview-nav-prev p-tabview-nav-btn p-link" (click)="navBackward()" type="button" pRipple>
+                    <span class="pi pi-chevron-left"></span>
+                </button>
+                <div #content class="p-tabview-nav-content" (scroll)="onScroll($event)">
+                    <ul #navbar class="p-tabview-nav" role="tablist">
+                        <ng-template ngFor let-tab [ngForOf]="tabs">
+                            <li role="presentation" [ngClass]="{'p-highlight': tab.selected, 'p-disabled': tab.disabled}" [ngStyle]="tab.headerStyle" [class]="tab.headerStyleClass" *ngIf="!tab.closed">
+                                <a role="tab" class="p-tabview-nav-link" [attr.id]="tab.id + '-label'" [attr.aria-selected]="tab.selected" [attr.aria-controls]="tab.id" [pTooltip]="tab.tooltip" [tooltipPosition]="tab.tooltipPosition"
+                                    [attr.aria-selected]="tab.selected" [positionStyle]="tab.tooltipPositionStyle" [tooltipStyleClass]="tab.tooltipStyleClass"
+                                    (click)="open($event,tab)" (keydown.enter)="open($event,tab)" pRipple [attr.tabindex]="tab.disabled ? null : '0'">
+                                    <ng-container *ngIf="!tab.headerTemplate">
+                                        <span class="p-tabview-left-icon" [ngClass]="tab.leftIcon" *ngIf="tab.leftIcon"></span>
+                                        <span class="p-tabview-title">{{tab.header}}</span>
+                                        <span class="p-tabview-right-icon" [ngClass]="tab.rightIcon" *ngIf="tab.rightIcon"></span>
+                                    </ng-container>
+                                    <ng-container *ngTemplateOutlet="tab.headerTemplate"></ng-container>
+                                    <span *ngIf="tab.closable" class="p-tabview-close pi pi-times" (click)="close($event,tab)"></span>
+                                </a>
+                            </li>
+                        </ng-template>
+                        <li #inkbar class="p-tabview-ink-bar"></li>
+                    </ul>
+                </div>
+                <button *ngIf="scrollable && !forwardIsDisabled" #nextBtn class="p-tabview-nav-next p-tabview-nav-btn p-link" (click)="navForward()" type="button" pRipple>
+                    <span class="pi pi-chevron-right"></span>
+                </button>
+            </div>
+            <div class="p-tabview-panels">
+                <ng-content></ng-content>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-tabview-nav-container{position:relative}.p-tabview-scrollable .p-tabview-nav-container{overflow:hidden}.p-tabview-nav-content{overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scrollbar-width:none;-ms-scroll-chaining:contain auto;overscroll-behavior:contain auto}.p-tabview-nav{display:flex;margin:0;padding:0;list-style-type:none;flex:1 1 auto}.p-tabview-nav-link{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;position:relative;text-decoration:none;overflow:hidden}.p-tabview-ink-bar{display:none;z-index:1}.p-tabview-nav-link:focus{z-index:1}.p-tabview-title{line-height:1;white-space:nowrap}.p-tabview-nav-btn{position:absolute;top:0;z-index:2;height:100%;display:flex;align-items:center;justify-content:center}.p-tabview-nav-prev{left:0}.p-tabview-nav-next{right:0}.p-tabview-nav-content::-webkit-scrollbar{display:none}.p-tabview-close{z-index:1}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.Ripple, selector: "[pRipple]" }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabView, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-tabView', template: `
+        <div [ngClass]="{'p-tabview p-component': true, 'p-tabview-scrollable': scrollable}" [ngStyle]="style" [class]="styleClass">
+            <div class="p-tabview-nav-container">
+                <button *ngIf="scrollable && !backwardIsDisabled" #prevBtn class="p-tabview-nav-prev p-tabview-nav-btn p-link" (click)="navBackward()" type="button" pRipple>
+                    <span class="pi pi-chevron-left"></span>
+                </button>
+                <div #content class="p-tabview-nav-content" (scroll)="onScroll($event)">
+                    <ul #navbar class="p-tabview-nav" role="tablist">
+                        <ng-template ngFor let-tab [ngForOf]="tabs">
+                            <li role="presentation" [ngClass]="{'p-highlight': tab.selected, 'p-disabled': tab.disabled}" [ngStyle]="tab.headerStyle" [class]="tab.headerStyleClass" *ngIf="!tab.closed">
+                                <a role="tab" class="p-tabview-nav-link" [attr.id]="tab.id + '-label'" [attr.aria-selected]="tab.selected" [attr.aria-controls]="tab.id" [pTooltip]="tab.tooltip" [tooltipPosition]="tab.tooltipPosition"
+                                    [attr.aria-selected]="tab.selected" [positionStyle]="tab.tooltipPositionStyle" [tooltipStyleClass]="tab.tooltipStyleClass"
+                                    (click)="open($event,tab)" (keydown.enter)="open($event,tab)" pRipple [attr.tabindex]="tab.disabled ? null : '0'">
+                                    <ng-container *ngIf="!tab.headerTemplate">
+                                        <span class="p-tabview-left-icon" [ngClass]="tab.leftIcon" *ngIf="tab.leftIcon"></span>
+                                        <span class="p-tabview-title">{{tab.header}}</span>
+                                        <span class="p-tabview-right-icon" [ngClass]="tab.rightIcon" *ngIf="tab.rightIcon"></span>
+                                    </ng-container>
+                                    <ng-container *ngTemplateOutlet="tab.headerTemplate"></ng-container>
+                                    <span *ngIf="tab.closable" class="p-tabview-close pi pi-times" (click)="close($event,tab)"></span>
+                                </a>
+                            </li>
+                        </ng-template>
+                        <li #inkbar class="p-tabview-ink-bar"></li>
+                    </ul>
+                </div>
+                <button *ngIf="scrollable && !forwardIsDisabled" #nextBtn class="p-tabview-nav-next p-tabview-nav-btn p-link" (click)="navForward()" type="button" pRipple>
+                    <span class="pi pi-chevron-right"></span>
+                </button>
+            </div>
+            <div class="p-tabview-panels">
+                <ng-content></ng-content>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-tabview-nav-container{position:relative}.p-tabview-scrollable .p-tabview-nav-container{overflow:hidden}.p-tabview-nav-content{overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scrollbar-width:none;-ms-scroll-chaining:contain auto;overscroll-behavior:contain auto}.p-tabview-nav{display:flex;margin:0;padding:0;list-style-type:none;flex:1 1 auto}.p-tabview-nav-link{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;position:relative;text-decoration:none;overflow:hidden}.p-tabview-ink-bar{display:none;z-index:1}.p-tabview-nav-link:focus{z-index:1}.p-tabview-title{line-height:1;white-space:nowrap}.p-tabview-nav-btn{position:absolute;top:0;z-index:2;height:100%;display:flex;align-items:center;justify-content:center}.p-tabview-nav-prev{left:0}.p-tabview-nav-next{right:0}.p-tabview-nav-content::-webkit-scrollbar{display:none}.p-tabview-close{z-index:1}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { orientation: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], controlClose: [{
+                type: Input
+            }], scrollable: [{
+                type: Input
+            }], content: [{
+                type: ViewChild,
+                args: ['content']
+            }], navbar: [{
+                type: ViewChild,
+                args: ['navbar']
+            }], prevBtn: [{
+                type: ViewChild,
+                args: ['prevBtn']
+            }], nextBtn: [{
+                type: ViewChild,
+                args: ['nextBtn']
+            }], inkbar: [{
+                type: ViewChild,
+                args: ['inkbar']
+            }], tabPanels: [{
+                type: ContentChildren,
+                args: [TabPanel]
+            }], onChange: [{
+                type: Output
+            }], onClose: [{
+                type: Output
+            }], activeIndexChange: [{
+                type: Output
+            }], activeIndex: [{
+                type: Input
+            }] } });
+class TabViewModule {
+}
+TabViewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TabViewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabViewModule, declarations: [TabView, TabPanel], imports: [CommonModule, SharedModule, TooltipModule, RippleModule], exports: [TabView, TabPanel, SharedModule] });
+TabViewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabViewModule, imports: [[CommonModule, SharedModule, TooltipModule, RippleModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TabViewModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, SharedModule, TooltipModule, RippleModule],
+                    exports: [TabView, TabPanel, SharedModule],
+                    declarations: [TabView, TabPanel]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { TabPanel, TabView, TabViewModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tabview.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tabview.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tabview.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-tabview.mjs","sources":["../../src/app/components/tabview/tabview.ts","../../src/app/components/tabview/primeng-tabview.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,Input,Output,EventEmitter,AfterContentInit,\n        ContentChildren,QueryList,TemplateRef,EmbeddedViewRef,ViewContainerRef,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation, ViewChild, AfterViewChecked, forwardRef, Inject} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TooltipModule} from 'primeng/tooltip';\nimport {RippleModule} from 'primeng/ripple';\nimport {SharedModule,PrimeTemplate} from 'primeng/api';\nimport {BlockableUI} from 'primeng/api';\nimport {DomHandler} from 'primeng/dom';\n\nlet idx: number = 0;\n\n@Component({\n    selector: 'p-tabPanel',\n    template: `\n        <div [attr.id]=\"id\" class=\"p-tabview-panel\" [hidden]=\"!selected\"\n            role=\"tabpanel\" [attr.aria-hidden]=\"!selected\" [attr.aria-labelledby]=\"id + '-label'\" *ngIf=\"!closed\">\n            <ng-content></ng-content>\n            <ng-container *ngIf=\"contentTemplate && (cache ? loaded : selected)\">\n                <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n            </ng-container>\n        </div>\n    `,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TabPanel implements AfterContentInit,OnDestroy {\n\n    @Input() closable: boolean;\n\n    @Input() headerStyle: any;\n\n    @Input() headerStyleClass: string;\n\n    @Input() cache: boolean = true;\n\n    @Input() tooltip: any;\n\n    @Input() tooltipPosition: string = 'top';\n\n    @Input() tooltipPositionStyle: string = 'absolute';\n\n    @Input() tooltipStyleClass: string;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    closed: boolean;\n\n    view: EmbeddedViewRef<any>;\n\n    _selected: boolean;\n\n    _disabled: boolean;\n\n    _header: string;\n\n    _leftIcon: string;\n\n    _rightIcon: string;\n\n    loaded: boolean;\n\n    id: string = `p-tabpanel-${idx++}`;\n\n    contentTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    tabView: TabView;\n\n    constructor(@Inject(forwardRef(() => TabView)) tabView, public viewContainer: ViewContainerRef, public cd: ChangeDetectorRef) {\n        this.tabView = tabView as TabView;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                default:\n                    this.contentTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    @Input() get selected(): boolean {\n        return this._selected;\n    }\n\n    set selected(val: boolean) {\n        this._selected = val;\n\n        if (!this.loaded) {\n            this.cd.detectChanges();\n        }\n\n        if (val)\n            this.loaded = true;\n    }\n\n    @Input() get disabled(): boolean {\n        return this._disabled;\n    };\n\n    set disabled(disabled: boolean) {\n        this._disabled = disabled;\n        this.tabView.cd.markForCheck();\n    }\n\n    @Input() get header(): string {\n        return this._header;\n    }\n\n    set header(header: string) {\n        this._header = header;\n        this.tabView.cd.markForCheck();\n    }\n\n    @Input() get leftIcon(): string {\n        return this._leftIcon;\n    }\n\n    set leftIcon(leftIcon :string) {\n        this._leftIcon = leftIcon;\n        this.tabView.cd.markForCheck();\n    }\n\n    @Input() get rightIcon(): string {\n        return this._rightIcon;\n    }\n\n    set rightIcon(rightIcon :string) {\n        this._rightIcon = rightIcon;\n        this.tabView.cd.markForCheck();\n    }\n\n    ngOnDestroy() {\n        this.view = null;\n    }\n}\n\n@Component({\n    selector: 'p-tabView',\n    template: `\n        <div [ngClass]=\"{'p-tabview p-component': true, 'p-tabview-scrollable': scrollable}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-tabview-nav-container\">\n                <button *ngIf=\"scrollable && !backwardIsDisabled\" #prevBtn class=\"p-tabview-nav-prev p-tabview-nav-btn p-link\" (click)=\"navBackward()\" type=\"button\" pRipple>\n                    <span class=\"pi pi-chevron-left\"></span>\n                </button>\n                <div #content class=\"p-tabview-nav-content\" (scroll)=\"onScroll($event)\">\n                    <ul #navbar class=\"p-tabview-nav\" role=\"tablist\">\n                        <ng-template ngFor let-tab [ngForOf]=\"tabs\">\n                            <li role=\"presentation\" [ngClass]=\"{'p-highlight': tab.selected, 'p-disabled': tab.disabled}\" [ngStyle]=\"tab.headerStyle\" [class]=\"tab.headerStyleClass\" *ngIf=\"!tab.closed\">\n                                <a role=\"tab\" class=\"p-tabview-nav-link\" [attr.id]=\"tab.id + '-label'\" [attr.aria-selected]=\"tab.selected\" [attr.aria-controls]=\"tab.id\" [pTooltip]=\"tab.tooltip\" [tooltipPosition]=\"tab.tooltipPosition\"\n                                    [attr.aria-selected]=\"tab.selected\" [positionStyle]=\"tab.tooltipPositionStyle\" [tooltipStyleClass]=\"tab.tooltipStyleClass\"\n                                    (click)=\"open($event,tab)\" (keydown.enter)=\"open($event,tab)\" pRipple [attr.tabindex]=\"tab.disabled ? null : '0'\">\n                                    <ng-container *ngIf=\"!tab.headerTemplate\">\n                                        <span class=\"p-tabview-left-icon\" [ngClass]=\"tab.leftIcon\" *ngIf=\"tab.leftIcon\"></span>\n                                        <span class=\"p-tabview-title\">{{tab.header}}</span>\n                                        <span class=\"p-tabview-right-icon\" [ngClass]=\"tab.rightIcon\" *ngIf=\"tab.rightIcon\"></span>\n                                    </ng-container>\n                                    <ng-container *ngTemplateOutlet=\"tab.headerTemplate\"></ng-container>\n                                    <span *ngIf=\"tab.closable\" class=\"p-tabview-close pi pi-times\" (click)=\"close($event,tab)\"></span>\n                                </a>\n                            </li>\n                        </ng-template>\n                        <li #inkbar class=\"p-tabview-ink-bar\"></li>\n                    </ul>\n                </div>\n                <button *ngIf=\"scrollable && !forwardIsDisabled\" #nextBtn class=\"p-tabview-nav-next p-tabview-nav-btn p-link\" (click)=\"navForward()\" type=\"button\" pRipple>\n                    <span class=\"pi pi-chevron-right\"></span>\n                </button>\n            </div>\n            <div class=\"p-tabview-panels\">\n                <ng-content></ng-content>\n            </div>\n        </div>\n    `,\n   changeDetection: ChangeDetectionStrategy.OnPush,\n   encapsulation: ViewEncapsulation.None,\n   styleUrls: ['./tabview.css'],\n   host: {\n    'class': 'p-element'\n}\n})\nexport class TabView implements AfterContentInit,AfterViewChecked,BlockableUI {\n\n    @Input() orientation: string = 'top';\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() controlClose: boolean;\n\n    @Input() scrollable: boolean;\n\n    @ViewChild('content') content: ElementRef;\n\n    @ViewChild('navbar') navbar: ElementRef;\n\n    @ViewChild('prevBtn') prevBtn: ElementRef;\n\n    @ViewChild('nextBtn') nextBtn: ElementRef;\n\n    @ViewChild('inkbar') inkbar: ElementRef;\n\n    @ContentChildren(TabPanel) tabPanels: QueryList<TabPanel>;\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClose: EventEmitter<any> = new EventEmitter();\n\n    @Output() activeIndexChange: EventEmitter<number> = new EventEmitter();\n\n    initialized: boolean;\n\n    tabs: TabPanel[];\n\n    _activeIndex: number;\n\n    preventActiveIndexPropagation: boolean;\n\n    tabChanged: boolean;\n\n    backwardIsDisabled: boolean = true;\n\n    forwardIsDisabled: boolean = false;\n\n    constructor(public el: ElementRef, public cd: ChangeDetectorRef) {}\n\n    ngAfterContentInit() {\n        this.initTabs();\n\n        this.tabPanels.changes.subscribe(_ => {\n            this.initTabs();\n        });\n    }\n\n    ngAfterViewChecked() {\n        if (this.tabChanged) {\n            this.updateInkBar();\n            this.tabChanged = false;\n        }\n    }\n\n    initTabs(): void {\n        this.tabs = this.tabPanels.toArray();\n        let selectedTab: TabPanel = this.findSelectedTab();\n        if (!selectedTab && this.tabs.length) {\n            if (this.activeIndex != null && this.tabs.length > this.activeIndex)\n                this.tabs[this.activeIndex].selected = true;\n            else\n                this.tabs[0].selected = true;\n\n            this.tabChanged = true;\n        }\n\n        this.cd.markForCheck();\n    }\n\n    open(event: Event, tab: TabPanel) {\n        if (tab.disabled) {\n            if (event) {\n                event.preventDefault();\n            }\n            return;\n        }\n\n        if (!tab.selected) {\n            let selectedTab: TabPanel = this.findSelectedTab();\n            if (selectedTab) {\n                selectedTab.selected = false\n            }\n\n            this.tabChanged = true;\n            tab.selected = true;\n            let selectedTabIndex = this.findTabIndex(tab);\n            this.preventActiveIndexPropagation = true;\n            this.activeIndexChange.emit(selectedTabIndex);\n            this.onChange.emit({originalEvent: event, index: selectedTabIndex});\n\n            this.updateScrollBar(selectedTabIndex);\n        }\n\n        if (event) {\n            event.preventDefault();\n        }\n    }\n\n    close(event: Event, tab: TabPanel) {\n        if (this.controlClose) {\n            this.onClose.emit({\n                originalEvent: event,\n                index: this.findTabIndex(tab),\n                close: () => {\n                    this.closeTab(tab);\n                }}\n            );\n        }\n        else {\n            this.closeTab(tab);\n            this.onClose.emit({\n                originalEvent: event,\n                index: this.findTabIndex(tab)\n            });\n        }\n\n        event.stopPropagation();\n    }\n\n    closeTab(tab: TabPanel) {\n        if (tab.disabled) {\n            return;\n        }\n        if (tab.selected) {\n            this.tabChanged = true;\n            tab.selected = false;\n            for(let i = 0; i < this.tabs.length; i++) {\n                let tabPanel = this.tabs[i];\n                if (!tabPanel.closed&&!tab.disabled) {\n                    tabPanel.selected = true;\n                    break;\n                }\n            }\n        }\n\n        tab.closed = true;\n    }\n\n    findSelectedTab() {\n        for(let i = 0; i < this.tabs.length; i++) {\n            if (this.tabs[i].selected) {\n                return this.tabs[i];\n            }\n        }\n        return null;\n    }\n\n    findTabIndex(tab: TabPanel) {\n        let index = -1;\n        for(let i = 0; i < this.tabs.length; i++) {\n            if (this.tabs[i] == tab) {\n                index = i;\n                break;\n            }\n        }\n        return index;\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    @Input() get activeIndex(): number {\n        return this._activeIndex;\n    }\n\n    set activeIndex(val:number) {\n        this._activeIndex = val;\n        if (this.preventActiveIndexPropagation) {\n            this.preventActiveIndexPropagation = false;\n            return;\n        }\n\n        if (this.tabs && this.tabs.length && this._activeIndex != null && this.tabs.length > this._activeIndex) {\n            this.findSelectedTab().selected = false;\n            this.tabs[this._activeIndex].selected = true;\n            this.tabChanged = true;\n\n            this.updateScrollBar(val);\n        }\n    }\n\n    updateInkBar() {\n        let tabHeader = DomHandler.findSingle(this.navbar.nativeElement, 'li.p-highlight');\n        this.inkbar.nativeElement.style.width = DomHandler.getWidth(tabHeader) + 'px';\n        this.inkbar.nativeElement.style.left =  DomHandler.getOffset(tabHeader).left - DomHandler.getOffset(this.navbar.nativeElement).left + 'px';\n    }\n\n    updateScrollBar(index) {\n        let tabHeader = this.navbar.nativeElement.children[index];\n        tabHeader.scrollIntoView({ block: 'nearest' })\n    }\n\n    updateButtonState() {\n        const content = this.content.nativeElement;\n        const { scrollLeft, scrollWidth } = content;\n        const width = DomHandler.getWidth(content);\n\n        this.backwardIsDisabled = scrollLeft === 0;\n        this.forwardIsDisabled = scrollLeft === scrollWidth - width;\n    }\n\n    onScroll(event) {\n        this.scrollable && this.updateButtonState();\n\n        event.preventDefault();\n    }\n\n    getVisibleButtonWidths() {\n        return [this.prevBtn?.nativeElement, this.nextBtn?.nativeElement].reduce((acc, el) => el ? acc + DomHandler.getWidth(el) : acc, 0);\n    }\n\n    navBackward() {\n        const content = this.content.nativeElement;\n        const width = DomHandler.getWidth(content) - this.getVisibleButtonWidths();\n        const pos = content.scrollLeft - width;\n        content.scrollLeft = pos <= 0 ? 0 : pos;\n    }\n\n    navForward() {\n        const content = this.content.nativeElement;\n        const width = DomHandler.getWidth(content) - this.getVisibleButtonWidths();\n        const pos = content.scrollLeft + width;\n        const lastPos = content.scrollWidth - width;\n\n        content.scrollLeft = pos >= lastPos ? lastPos : pos;\n    }\n}\n\n\n@NgModule({\n    imports: [CommonModule,SharedModule,TooltipModule,RippleModule],\n    exports: [TabView,TabPanel,SharedModule],\n    declarations: [TabView,TabPanel]\n})\nexport class TabViewModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tag.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tag.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tag.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,68 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+
+class Tag {
+    containerClass() {
+        return {
+            'p-tag p-component': true,
+            'p-tag-info': this.severity === 'info',
+            'p-tag-success': this.severity === 'success',
+            'p-tag-warning': this.severity === 'warning',
+            'p-tag-danger': this.severity === 'danger',
+            'p-tag-rounded': this.rounded
+        };
+    }
+}
+Tag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Tag, deps: [], target: i0.ɵɵFactoryTarget.Component });
+Tag.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Tag, selector: "p-tag", inputs: { styleClass: "styleClass", style: "style", severity: "severity", value: "value", icon: "icon", rounded: "rounded" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <span [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+            <ng-content></ng-content>
+            <span class="p-tag-icon" [ngClass]="icon" *ngIf="icon"></span>
+            <span class="p-tag-value">{{value}}</span>
+        </span>
+    `, isInline: true, styles: [".p-tag{display:inline-flex;align-items:center;justify-content:center}.p-tag-icon,.p-tag-value,.p-tag-icon.pi{line-height:1.5}.p-tag.p-tag-rounded{border-radius:10rem}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Tag, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-tag', template: `
+        <span [ngClass]="containerClass()" [class]="styleClass" [ngStyle]="style">
+            <ng-content></ng-content>
+            <span class="p-tag-icon" [ngClass]="icon" *ngIf="icon"></span>
+            <span class="p-tag-value">{{value}}</span>
+        </span>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-tag{display:inline-flex;align-items:center;justify-content:center}.p-tag-icon,.p-tag-value,.p-tag-icon.pi{line-height:1.5}.p-tag.p-tag-rounded{border-radius:10rem}\n"] }]
+        }], propDecorators: { styleClass: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], severity: [{
+                type: Input
+            }], value: [{
+                type: Input
+            }], icon: [{
+                type: Input
+            }], rounded: [{
+                type: Input
+            }] } });
+class TagModule {
+}
+TagModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TagModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TagModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TagModule, declarations: [Tag], imports: [CommonModule], exports: [Tag] });
+TagModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TagModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TagModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Tag],
+                    declarations: [Tag]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Tag, TagModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tag.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tag.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tag.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-tag.mjs","sources":["../../src/app/components/tag/tag.ts","../../src/app/components/tag/primeng-tag.ts"],"sourcesContent":["import { NgModule, Component, ChangeDetectionStrategy, ViewEncapsulation, Input} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'p-tag',\n    template: `\n        <span [ngClass]=\"containerClass()\" [class]=\"styleClass\" [ngStyle]=\"style\">\n            <ng-content></ng-content>\n            <span class=\"p-tag-icon\" [ngClass]=\"icon\" *ngIf=\"icon\"></span>\n            <span class=\"p-tag-value\">{{value}}</span>\n        </span>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./tag.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Tag {\n\n    @Input() styleClass: string;\n\n    @Input() style: any;\n\n    @Input() severity: string;\n\n    @Input() value: string;\n\n    @Input() icon: string;\n\n    @Input() rounded: boolean;\n\n\n    containerClass() {\n        return {\n            'p-tag p-component': true,\n            'p-tag-info': this.severity === 'info',\n            'p-tag-success': this.severity === 'success',\n            'p-tag-warning': this.severity === 'warning',\n            'p-tag-danger': this.severity === 'danger',\n            'p-tag-rounded': this.rounded\n        };\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Tag],\n    declarations: [Tag]\n})\nexport class TagModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;MAmBa,GAAG;IAeZ,cAAc;QACV,OAAO;YACH,mBAAmB,EAAE,IAAI;YACzB,YAAY,EAAE,IAAI,CAAC,QAAQ,KAAK,MAAM;YACtC,eAAe,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC5C,eAAe,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC5C,cAAc,EAAE,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAC1C,eAAe,EAAE,IAAI,CAAC,OAAO;SAChC,CAAC;KACL;;gGAxBQ,GAAG;oFAAH,GAAG,kNAdF;;;;;;KAMT;2FAQQ,GAAG;kBAhBf,SAAS;+BACI,OAAO,YACP;;;;;;KAMT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;8BAIQ,UAAU;sBAAlB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,OAAO;sBAAf,KAAK;;MAoBG,SAAS;;sGAAT,SAAS;uGAAT,SAAS,iBAhCT,GAAG,aA4BF,YAAY,aA5Bb,GAAG;uGAgCH,SAAS,YAJT,CAAC,YAAY,CAAC;2FAId,SAAS;kBALrB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,GAAG,CAAC;oBACd,YAAY,EAAE,CAAC,GAAG,CAAC;iBACtB;;;AClDD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-terminal.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-terminal.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-terminal.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,142 @@
+import * as i0 from '@angular/core';
+import { Injectable, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, NgModule } from '@angular/core';
+import * as i3 from '@angular/forms';
+import { FormsModule } from '@angular/forms';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler } from 'primeng/dom';
+import { Subject } from 'rxjs';
+
+class TerminalService {
+    constructor() {
+        this.commandSource = new Subject();
+        this.responseSource = new Subject();
+        this.commandHandler = this.commandSource.asObservable();
+        this.responseHandler = this.responseSource.asObservable();
+    }
+    sendCommand(command) {
+        if (command) {
+            this.commandSource.next(command);
+        }
+    }
+    sendResponse(response) {
+        if (response) {
+            this.responseSource.next(response);
+        }
+    }
+}
+TerminalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TerminalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+TerminalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TerminalService });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TerminalService, decorators: [{
+            type: Injectable
+        }] });
+
+class Terminal {
+    constructor(el, terminalService, cd) {
+        this.el = el;
+        this.terminalService = terminalService;
+        this.cd = cd;
+        this.commands = [];
+        this.subscription = terminalService.responseHandler.subscribe(response => {
+            this.commands[this.commands.length - 1].response = response;
+            this.commandProcessed = true;
+        });
+    }
+    ngAfterViewInit() {
+        this.container = DomHandler.find(this.el.nativeElement, '.p-terminal')[0];
+    }
+    ngAfterViewChecked() {
+        if (this.commandProcessed) {
+            this.container.scrollTop = this.container.scrollHeight;
+            this.commandProcessed = false;
+        }
+    }
+    set response(value) {
+        if (value) {
+            this.commands[this.commands.length - 1].response = value;
+            this.commandProcessed = true;
+        }
+    }
+    handleCommand(event) {
+        if (event.keyCode == 13) {
+            this.commands.push({ text: this.command });
+            this.terminalService.sendCommand(this.command);
+            this.command = '';
+        }
+    }
+    focus(element) {
+        element.focus();
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+Terminal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Terminal, deps: [{ token: i0.ElementRef }, { token: TerminalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+Terminal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Terminal, selector: "p-terminal", inputs: { welcomeMessage: "welcomeMessage", prompt: "prompt", style: "style", styleClass: "styleClass", response: "response" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="'p-terminal p-component'" [ngStyle]="style" [class]="styleClass" (click)="focus(in)">
+            <div *ngIf="welcomeMessage">{{welcomeMessage}}</div>
+            <div class="p-terminal-content">
+                <div *ngFor="let command of commands">
+                    <span class="p-terminal-prompt">{{prompt}}</span>
+                    <span class="p-terminal-command">{{command.text}}</span>
+                    <div class="p-terminal-response">{{command.response}}</div>
+                </div>
+            </div>
+            <div class="p-terminal-prompt-container">
+                <span class="p-terminal-content-prompt">{{prompt}}</span>
+                <input #in type="text" [(ngModel)]="command" class="p-terminal-input" autocomplete="off" (keydown)="handleCommand($event)" autofocus>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-terminal{height:18rem;overflow:auto}.p-terminal-prompt-container{display:flex;align-items:center}.p-terminal-input{flex:1 1 auto;border:0 none;background-color:transparent;color:inherit;padding:0;outline:0 none}.p-terminal-input::-ms-clear{display:none}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Terminal, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-terminal', template: `
+        <div [ngClass]="'p-terminal p-component'" [ngStyle]="style" [class]="styleClass" (click)="focus(in)">
+            <div *ngIf="welcomeMessage">{{welcomeMessage}}</div>
+            <div class="p-terminal-content">
+                <div *ngFor="let command of commands">
+                    <span class="p-terminal-prompt">{{prompt}}</span>
+                    <span class="p-terminal-command">{{command.text}}</span>
+                    <div class="p-terminal-response">{{command.response}}</div>
+                </div>
+            </div>
+            <div class="p-terminal-prompt-container">
+                <span class="p-terminal-content-prompt">{{prompt}}</span>
+                <input #in type="text" [(ngModel)]="command" class="p-terminal-input" autocomplete="off" (keydown)="handleCommand($event)" autofocus>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-terminal{height:18rem;overflow:auto}.p-terminal-prompt-container{display:flex;align-items:center}.p-terminal-input{flex:1 1 auto;border:0 none;background-color:transparent;color:inherit;padding:0;outline:0 none}.p-terminal-input::-ms-clear{display:none}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: TerminalService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { welcomeMessage: [{
+                type: Input
+            }], prompt: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], response: [{
+                type: Input
+            }] } });
+class TerminalModule {
+}
+TerminalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TerminalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TerminalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TerminalModule, declarations: [Terminal], imports: [CommonModule, FormsModule], exports: [Terminal] });
+TerminalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TerminalModule, imports: [[CommonModule, FormsModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TerminalModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, FormsModule],
+                    exports: [Terminal],
+                    declarations: [Terminal]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Terminal, TerminalModule, TerminalService };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-terminal.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-terminal.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-terminal.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-terminal.mjs","sources":["../../src/app/components/terminal/terminalservice.ts","../../src/app/components/terminal/terminal.ts","../../src/app/components/terminal/primeng-terminal.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class TerminalService {\n    \n    private commandSource = new Subject<string>();\n    private responseSource = new Subject<string>();\n    \n    commandHandler = this.commandSource.asObservable();\n    responseHandler = this.responseSource.asObservable();\n    \n    sendCommand(command: string) {\n        if (command) {\n            this.commandSource.next(command);\n        }\n    }\n    \n    sendResponse(response: string) {\n        if (response) {\n            this.responseSource.next(response);\n        }\n    }\n}","import {NgModule,Component,AfterViewInit,AfterViewChecked,OnDestroy,Input,ElementRef,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\nimport {TerminalService} from './terminalservice';\nimport {Subscription}   from 'rxjs';\n\n@Component({\n    selector: 'p-terminal',\n    template: `\n        <div [ngClass]=\"'p-terminal p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\" (click)=\"focus(in)\">\n            <div *ngIf=\"welcomeMessage\">{{welcomeMessage}}</div>\n            <div class=\"p-terminal-content\">\n                <div *ngFor=\"let command of commands\">\n                    <span class=\"p-terminal-prompt\">{{prompt}}</span>\n                    <span class=\"p-terminal-command\">{{command.text}}</span>\n                    <div class=\"p-terminal-response\">{{command.response}}</div>\n                </div>\n            </div>\n            <div class=\"p-terminal-prompt-container\">\n                <span class=\"p-terminal-content-prompt\">{{prompt}}</span>\n                <input #in type=\"text\" [(ngModel)]=\"command\" class=\"p-terminal-input\" autocomplete=\"off\" (keydown)=\"handleCommand($event)\" autofocus>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./terminal.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Terminal implements AfterViewInit,AfterViewChecked,OnDestroy {\n\n    @Input() welcomeMessage: string;\n\n    @Input() prompt: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    commands: any[] = [];\n\n    command: string;\n\n    container: Element;\n\n    commandProcessed: boolean;\n\n    subscription: Subscription;\n\n    constructor(public el: ElementRef, public terminalService: TerminalService, public cd: ChangeDetectorRef) {\n        this.subscription = terminalService.responseHandler.subscribe(response => {\n            this.commands[this.commands.length - 1].response = response;\n            this.commandProcessed = true;\n        });\n    }\n\n    ngAfterViewInit() {\n        this.container = DomHandler.find(this.el.nativeElement, '.p-terminal')[0];\n    }\n\n    ngAfterViewChecked() {\n        if (this.commandProcessed) {\n            this.container.scrollTop = this.container.scrollHeight;\n            this.commandProcessed = false;\n        }\n    }\n\n    @Input()\n    set response(value: string) {\n        if (value) {\n            this.commands[this.commands.length - 1].response = value;\n            this.commandProcessed = true;\n        }\n    }\n\n    handleCommand(event: KeyboardEvent) {\n        if (event.keyCode == 13) {\n            this.commands.push({text: this.command});\n            this.terminalService.sendCommand(this.command);\n            this.command = '';\n        }\n    }\n\n    focus(element: HTMLElement) {\n        element.focus();\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,FormsModule],\n    exports: [Terminal],\n    declarations: [Terminal]\n})\nexport class TerminalModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tieredmenu.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tieredmenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tieredmenu.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,494 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ViewEncapsulation, Input, Output, ChangeDetectionStrategy, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import * as i4 from '@angular/router';
+import { RouterModule } from '@angular/router';
+import * as i3 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { trigger, transition, style, animate } from '@angular/animations';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i2 from 'primeng/tooltip';
+import { TooltipModule } from 'primeng/tooltip';
+import * as i5 from 'primeng/api';
+
+class TieredMenuSub {
+    constructor(el, renderer, cd) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.leafClick = new EventEmitter();
+        this.keydownItem = new EventEmitter();
+        this.menuHoverActive = false;
+    }
+    get parentActive() {
+        return this._parentActive;
+    }
+    set parentActive(value) {
+        if (!this.root) {
+            this._parentActive = value;
+            if (!value)
+                this.activeItem = null;
+        }
+    }
+    onItemClick(event, item) {
+        if (item.disabled) {
+            event.preventDefault();
+            return;
+        }
+        if (!item.url && !item.routerLink) {
+            event.preventDefault();
+        }
+        if (item.command) {
+            item.command({
+                originalEvent: event,
+                item: item
+            });
+        }
+        if (item.items) {
+            if (this.activeItem && item === this.activeItem) {
+                this.activeItem = null;
+                this.unbindDocumentClickListener();
+            }
+            else {
+                this.activeItem = item;
+                if (this.root) {
+                    this.bindDocumentClickListener();
+                }
+            }
+        }
+        if (!item.items) {
+            this.onLeafClick();
+        }
+    }
+    onItemMouseEnter(event, item) {
+        if (item.disabled || this.mobileActive) {
+            event.preventDefault();
+            return;
+        }
+        if (this.root) {
+            if (this.activeItem || this.autoDisplay || this.popup) {
+                this.activeItem = item;
+                this.bindDocumentClickListener();
+            }
+        }
+        else {
+            this.activeItem = item;
+            this.bindDocumentClickListener();
+        }
+    }
+    onLeafClick() {
+        this.activeItem = null;
+        if (this.root) {
+            this.unbindDocumentClickListener();
+        }
+        this.leafClick.emit();
+    }
+    onItemKeyDown(event, item) {
+        let listItem = event.currentTarget.parentElement;
+        switch (event.key) {
+            case 'ArrowDown':
+                var nextItem = this.findNextItem(listItem);
+                if (nextItem) {
+                    nextItem.children[0].focus();
+                }
+                event.preventDefault();
+                break;
+            case 'ArrowUp':
+                var prevItem = this.findPrevItem(listItem);
+                if (prevItem) {
+                    prevItem.children[0].focus();
+                }
+                event.preventDefault();
+                break;
+            case 'ArrowRight':
+                if (item.items) {
+                    this.activeItem = item;
+                    if (this.root) {
+                        this.bindDocumentClickListener();
+                    }
+                    setTimeout(() => {
+                        listItem.children[1].children[0].children[0].children[0].focus();
+                    }, 50);
+                }
+                event.preventDefault();
+                break;
+            default:
+                break;
+        }
+        this.keydownItem.emit({
+            originalEvent: event,
+            element: listItem
+        });
+    }
+    findNextItem(item) {
+        let nextItem = item.nextElementSibling;
+        if (nextItem)
+            return DomHandler.hasClass(nextItem, 'p-disabled') || !DomHandler.hasClass(nextItem, 'p-menuitem') ? this.findNextItem(nextItem) : nextItem;
+        else
+            return null;
+    }
+    findPrevItem(item) {
+        let prevItem = item.previousElementSibling;
+        if (prevItem)
+            return DomHandler.hasClass(prevItem, 'p-disabled') || !DomHandler.hasClass(prevItem, 'p-menuitem') ? this.findPrevItem(prevItem) : prevItem;
+        else
+            return null;
+    }
+    onChildItemKeyDown(event) {
+        if (event.originalEvent.key === 'ArrowLeft') {
+            this.activeItem = null;
+            if (this.root) {
+                this.unbindDocumentClickListener();
+            }
+            event.element.parentElement.parentElement.parentElement.children[0].focus();
+        }
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            this.documentClickListener = (event) => {
+                if (this.el && !this.el.nativeElement.contains(event.target)) {
+                    this.activeItem = null;
+                    this.cd.markForCheck();
+                    this.unbindDocumentClickListener();
+                }
+            };
+            document.addEventListener('click', this.documentClickListener);
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            document.removeEventListener('click', this.documentClickListener);
+            this.documentClickListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.unbindDocumentClickListener();
+    }
+}
+TieredMenuSub.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TieredMenuSub, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TieredMenuSub.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TieredMenuSub, selector: "p-tieredMenuSub", inputs: { item: "item", root: "root", autoDisplay: "autoDisplay", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", mobileActive: "mobileActive", popup: "popup", parentActive: "parentActive" }, outputs: { leafClick: "leafClick", keydownItem: "keydownItem" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <ul [ngClass]="{'p-submenu-list': !root}">
+            <ng-template ngFor let-child [ngForOf]="(root ? item : item.items)">
+                <li *ngIf="child.separator" class="p-menu-separator" [ngClass]="{'p-hidden': child.visible === false}">
+                <li *ngIf="!child.separator" #listItem [ngClass]="{'p-menuitem':true, 'p-menuitem-active': child === activeItem, 'p-hidden': child.visible === false}" [ngStyle]="child.style" [class]="child.styleClass" pTooltip [tooltipOptions]="child.tooltipOptions">
+                    <a *ngIf="!child.routerLink" (keydown)="onItemKeyDown($event, child)" [attr.href]="child.url" [attr.data-automationid]="child.automationId" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id"
+                         (click)="onItemClick($event, child)" (mouseenter)="onItemMouseEnter($event,child)"
+                         [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}"
+                         [attr.tabindex]="child.disabled ? null : '0'" [attr.aria-haspopup]="item.items != null" [attr.aria-expanded]="item === activeItem" pRipple>
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlLabel">{{child.label}}</span>
+                        <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <a *ngIf="child.routerLink" (keydown)="onItemKeyDown($event, child)" [routerLink]="child.routerLink" [attr.data-automationid]="child.automationId" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}"
+                        [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" [attr.tabindex]="child.disabled ? null : '0'" role="menuitem"
+                        (click)="onItemClick($event, child)" (mouseenter)="onItemMouseEnter($event,child)"  [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}"
+                        [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state" pRipple>
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <p-tieredMenuSub (keydownItem)="onChildItemKeyDown($event)" [parentActive]="child === activeItem" [item]="child" *ngIf="child.items" [mobileActive]="mobileActive" [autoDisplay]="autoDisplay" (leafClick)="onLeafClick()" [popup]="popup"></p-tieredMenuSub>
+                </li>
+            </ng-template>
+        </ul>
+    `, isInline: true, components: [{ type: TieredMenuSub, selector: "p-tieredMenuSub", inputs: ["item", "root", "autoDisplay", "autoZIndex", "baseZIndex", "mobileActive", "popup", "parentActive"], outputs: ["leafClick", "keydownItem"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.Ripple, selector: "[pRipple]" }, { type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TieredMenuSub, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-tieredMenuSub',
+                    template: `
+        <ul [ngClass]="{'p-submenu-list': !root}">
+            <ng-template ngFor let-child [ngForOf]="(root ? item : item.items)">
+                <li *ngIf="child.separator" class="p-menu-separator" [ngClass]="{'p-hidden': child.visible === false}">
+                <li *ngIf="!child.separator" #listItem [ngClass]="{'p-menuitem':true, 'p-menuitem-active': child === activeItem, 'p-hidden': child.visible === false}" [ngStyle]="child.style" [class]="child.styleClass" pTooltip [tooltipOptions]="child.tooltipOptions">
+                    <a *ngIf="!child.routerLink" (keydown)="onItemKeyDown($event, child)" [attr.href]="child.url" [attr.data-automationid]="child.automationId" [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id"
+                         (click)="onItemClick($event, child)" (mouseenter)="onItemMouseEnter($event,child)"
+                         [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}"
+                         [attr.tabindex]="child.disabled ? null : '0'" [attr.aria-haspopup]="item.items != null" [attr.aria-expanded]="item === activeItem" pRipple>
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlLabel">{{child.label}}</span>
+                        <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <a *ngIf="child.routerLink" (keydown)="onItemKeyDown($event, child)" [routerLink]="child.routerLink" [attr.data-automationid]="child.automationId" [queryParams]="child.queryParams" [routerLinkActive]="'p-menuitem-link-active'" [routerLinkActiveOptions]="child.routerLinkActiveOptions||{exact:false}"
+                        [attr.target]="child.target" [attr.title]="child.title" [attr.id]="child.id" [attr.tabindex]="child.disabled ? null : '0'" role="menuitem"
+                        (click)="onItemClick($event, child)" (mouseenter)="onItemMouseEnter($event,child)"  [ngClass]="{'p-menuitem-link':true,'p-disabled':child.disabled}"
+                        [fragment]="child.fragment" [queryParamsHandling]="child.queryParamsHandling" [preserveFragment]="child.preserveFragment" [skipLocationChange]="child.skipLocationChange" [replaceUrl]="child.replaceUrl" [state]="child.state" pRipple>
+                        <span class="p-menuitem-icon" *ngIf="child.icon" [ngClass]="child.icon"></span>
+                        <span class="p-menuitem-text" *ngIf="child.escape !== false; else htmlRouteLabel">{{child.label}}</span>
+                        <ng-template #htmlRouteLabel><span class="p-menuitem-text" [innerHTML]="child.label"></span></ng-template>
+                        <span class="p-submenu-icon pi pi-angle-right" *ngIf="child.items"></span>
+                    </a>
+                    <p-tieredMenuSub (keydownItem)="onChildItemKeyDown($event)" [parentActive]="child === activeItem" [item]="child" *ngIf="child.items" [mobileActive]="mobileActive" [autoDisplay]="autoDisplay" (leafClick)="onLeafClick()" [popup]="popup"></p-tieredMenuSub>
+                </li>
+            </ng-template>
+        </ul>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{
+                type: Input
+            }], root: [{
+                type: Input
+            }], autoDisplay: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], mobileActive: [{
+                type: Input
+            }], popup: [{
+                type: Input
+            }], parentActive: [{
+                type: Input
+            }], leafClick: [{
+                type: Output
+            }], keydownItem: [{
+                type: Output
+            }] } });
+class TieredMenu {
+    constructor(el, renderer, cd, config, overlayService) {
+        this.el = el;
+        this.renderer = renderer;
+        this.cd = cd;
+        this.config = config;
+        this.overlayService = overlayService;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+    }
+    toggle(event) {
+        if (this.visible)
+            this.hide();
+        else
+            this.show(event);
+        this.preventDocumentDefault = true;
+    }
+    show(event) {
+        this.target = event.currentTarget;
+        this.visible = true;
+        this.parentActive = true;
+        this.preventDocumentDefault = true;
+        this.cd.markForCheck();
+    }
+    onOverlayClick(event) {
+        if (this.popup) {
+            this.overlayService.add({
+                originalEvent: event,
+                target: this.el.nativeElement
+            });
+        }
+        this.preventDocumentDefault = true;
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                if (this.popup) {
+                    this.container = event.element;
+                    this.moveOnTop();
+                    this.appendOverlay();
+                    DomHandler.absolutePosition(this.container, this.target);
+                    this.bindDocumentClickListener();
+                    this.bindDocumentResizeListener();
+                    this.bindScrollListener();
+                }
+                break;
+            case 'void':
+                this.onOverlayHide();
+                break;
+        }
+    }
+    onOverlayAnimationEnd(event) {
+        switch (event.toState) {
+            case 'void':
+                ZIndexUtils.clear(event.element);
+                break;
+        }
+    }
+    appendOverlay() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.container);
+            else
+                DomHandler.appendChild(this.container, this.appendTo);
+        }
+    }
+    restoreOverlayAppend() {
+        if (this.container && this.appendTo) {
+            this.el.nativeElement.appendChild(this.container);
+        }
+    }
+    moveOnTop() {
+        if (this.autoZIndex) {
+            ZIndexUtils.set('menu', this.container, this.baseZIndex + this.config.zIndex.menu);
+        }
+    }
+    hide() {
+        this.visible = false;
+        this.parentActive = false;
+        this.cd.markForCheck();
+    }
+    onWindowResize() {
+        this.hide();
+    }
+    onLeafClick() {
+        if (this.popup) {
+            this.hide();
+        }
+        this.unbindDocumentClickListener();
+    }
+    bindDocumentClickListener() {
+        if (!this.documentClickListener) {
+            const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
+            this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {
+                if (!this.preventDocumentDefault && this.popup) {
+                    this.hide();
+                }
+                this.preventDocumentDefault = false;
+            });
+        }
+    }
+    unbindDocumentClickListener() {
+        if (this.documentClickListener) {
+            this.documentClickListener();
+            this.documentClickListener = null;
+        }
+    }
+    bindDocumentResizeListener() {
+        this.documentResizeListener = this.onWindowResize.bind(this);
+        window.addEventListener('resize', this.documentResizeListener);
+    }
+    unbindDocumentResizeListener() {
+        if (this.documentResizeListener) {
+            window.removeEventListener('resize', this.documentResizeListener);
+            this.documentResizeListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {
+                if (this.visible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    onOverlayHide() {
+        this.unbindDocumentClickListener();
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.preventDocumentDefault = false;
+        this.target = null;
+    }
+    ngOnDestroy() {
+        if (this.popup) {
+            if (this.scrollHandler) {
+                this.scrollHandler.destroy();
+                this.scrollHandler = null;
+            }
+            if (this.container && this.autoZIndex) {
+                ZIndexUtils.clear(this.container);
+            }
+            this.restoreOverlayAppend();
+            this.onOverlayHide();
+        }
+    }
+}
+TieredMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TieredMenu, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.PrimeNGConfig }, { token: i5.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+TieredMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TieredMenu, selector: "p-tieredMenu", inputs: { model: "model", popup: "popup", style: "style", styleClass: "styleClass", appendTo: "appendTo", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", autoDisplay: "autoDisplay", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <div [ngClass]="{'p-tieredmenu p-component':true, 'p-tieredmenu-overlay':popup}" [class]="styleClass" [ngStyle]="style" (click)="onOverlayClick($event)"
+            [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="popup !== true"
+            (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)" *ngIf="!popup || visible">
+            <p-tieredMenuSub [item]="model" root="root" [parentActive]="parentActive" [baseZIndex]="baseZIndex" [autoZIndex]="autoZIndex" (leafClick)="onLeafClick()"
+                [autoDisplay]="autoDisplay" [popup]="popup"></p-tieredMenuSub>
+        </div>
+    `, isInline: true, styles: [".p-tieredmenu-overlay{position:absolute;top:0;left:0}.p-tieredmenu ul{margin:0;padding:0;list-style:none}.p-tieredmenu .p-submenu-list{position:absolute;min-width:100%;z-index:1;display:none}.p-tieredmenu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-tieredmenu .p-menuitem-text{line-height:1}.p-tieredmenu .p-menuitem{position:relative}.p-tieredmenu .p-menuitem-link .p-submenu-icon{margin-left:auto}.p-tieredmenu .p-menuitem-active>p-tieredmenusub>.p-submenu-list{display:block;left:100%;top:0}\n"], components: [{ type: TieredMenuSub, selector: "p-tieredMenuSub", inputs: ["item", "root", "autoDisplay", "autoZIndex", "baseZIndex", "mobileActive", "popup", "parentActive"], outputs: ["leafClick", "keydownItem"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TieredMenu, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-tieredMenu', template: `
+        <div [ngClass]="{'p-tieredmenu p-component':true, 'p-tieredmenu-overlay':popup}" [class]="styleClass" [ngStyle]="style" (click)="onOverlayClick($event)"
+            [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="popup !== true"
+            (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)" *ngIf="!popup || visible">
+            <p-tieredMenuSub [item]="model" root="root" [parentActive]="parentActive" [baseZIndex]="baseZIndex" [autoZIndex]="autoZIndex" (leafClick)="onLeafClick()"
+                [autoDisplay]="autoDisplay" [popup]="popup"></p-tieredMenuSub>
+        </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-tieredmenu-overlay{position:absolute;top:0;left:0}.p-tieredmenu ul{margin:0;padding:0;list-style:none}.p-tieredmenu .p-submenu-list{position:absolute;min-width:100%;z-index:1;display:none}.p-tieredmenu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-tieredmenu .p-menuitem-text{line-height:1}.p-tieredmenu .p-menuitem{position:relative}.p-tieredmenu .p-menuitem-link .p-submenu-icon{margin-left:auto}.p-tieredmenu .p-menuitem-active>p-tieredmenusub>.p-submenu-list{display:block;left:100%;top:0}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i5.PrimeNGConfig }, { type: i5.OverlayService }]; }, propDecorators: { model: [{
+                type: Input
+            }], popup: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], autoDisplay: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }] } });
+class TieredMenuModule {
+}
+TieredMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TieredMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TieredMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TieredMenuModule, declarations: [TieredMenu, TieredMenuSub], imports: [CommonModule, RouterModule, RippleModule, TooltipModule], exports: [TieredMenu, RouterModule, TooltipModule] });
+TieredMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TieredMenuModule, imports: [[CommonModule, RouterModule, RippleModule, TooltipModule], RouterModule, TooltipModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TieredMenuModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RouterModule, RippleModule, TooltipModule],
+                    exports: [TieredMenu, RouterModule, TooltipModule],
+                    declarations: [TieredMenu, TieredMenuSub]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { TieredMenu, TieredMenuModule, TieredMenuSub };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tieredmenu.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tieredmenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tieredmenu.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-tieredmenu.mjs","sources":["../../src/app/components/tieredmenu/tieredmenu.ts","../../src/app/components/tieredmenu/primeng-tieredmenu.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, Input, Renderer2, OnDestroy,ChangeDetectorRef, ChangeDetectionStrategy, ViewEncapsulation, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ConnectedOverlayScrollHandler, DomHandler } from 'primeng/dom';\nimport { MenuItem, OverlayService, PrimeNGConfig } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from 'primeng/ripple';\nimport { animate, style, transition, trigger, AnimationEvent } from '@angular/animations';\nimport { ZIndexUtils } from 'primeng/utils';\nimport { TooltipModule } from 'primeng/tooltip';\n\n@Component({\n    selector: 'p-tieredMenuSub',\n    template: `\n        <ul [ngClass]=\"{'p-submenu-list': !root}\">\n            <ng-template ngFor let-child [ngForOf]=\"(root ? item : item.items)\">\n                <li *ngIf=\"child.separator\" class=\"p-menu-separator\" [ngClass]=\"{'p-hidden': child.visible === false}\">\n                <li *ngIf=\"!child.separator\" #listItem [ngClass]=\"{'p-menuitem':true, 'p-menuitem-active': child === activeItem, 'p-hidden': child.visible === false}\" [ngStyle]=\"child.style\" [class]=\"child.styleClass\" pTooltip [tooltipOptions]=\"child.tooltipOptions\">\n                    <a *ngIf=\"!child.routerLink\" (keydown)=\"onItemKeyDown($event, child)\" [attr.href]=\"child.url\" [attr.data-automationid]=\"child.automationId\" [attr.target]=\"child.target\" [attr.title]=\"child.title\" [attr.id]=\"child.id\"\n                         (click)=\"onItemClick($event, child)\" (mouseenter)=\"onItemMouseEnter($event,child)\"\n                         [ngClass]=\"{'p-menuitem-link':true,'p-disabled':child.disabled}\"\n                         [attr.tabindex]=\"child.disabled ? null : '0'\" [attr.aria-haspopup]=\"item.items != null\" [attr.aria-expanded]=\"item === activeItem\" pRipple>\n                        <span class=\"p-menuitem-icon\" *ngIf=\"child.icon\" [ngClass]=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlLabel\">{{child.label}}</span>\n                        <ng-template #htmlLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                        <span class=\"p-submenu-icon pi pi-angle-right\" *ngIf=\"child.items\"></span>\n                    </a>\n                    <a *ngIf=\"child.routerLink\" (keydown)=\"onItemKeyDown($event, child)\" [routerLink]=\"child.routerLink\" [attr.data-automationid]=\"child.automationId\" [queryParams]=\"child.queryParams\" [routerLinkActive]=\"'p-menuitem-link-active'\" [routerLinkActiveOptions]=\"child.routerLinkActiveOptions||{exact:false}\"\n                        [attr.target]=\"child.target\" [attr.title]=\"child.title\" [attr.id]=\"child.id\" [attr.tabindex]=\"child.disabled ? null : '0'\" role=\"menuitem\"\n                        (click)=\"onItemClick($event, child)\" (mouseenter)=\"onItemMouseEnter($event,child)\"  [ngClass]=\"{'p-menuitem-link':true,'p-disabled':child.disabled}\"\n                        [fragment]=\"child.fragment\" [queryParamsHandling]=\"child.queryParamsHandling\" [preserveFragment]=\"child.preserveFragment\" [skipLocationChange]=\"child.skipLocationChange\" [replaceUrl]=\"child.replaceUrl\" [state]=\"child.state\" pRipple>\n                        <span class=\"p-menuitem-icon\" *ngIf=\"child.icon\" [ngClass]=\"child.icon\"></span>\n                        <span class=\"p-menuitem-text\" *ngIf=\"child.escape !== false; else htmlRouteLabel\">{{child.label}}</span>\n                        <ng-template #htmlRouteLabel><span class=\"p-menuitem-text\" [innerHTML]=\"child.label\"></span></ng-template>\n                        <span class=\"p-submenu-icon pi pi-angle-right\" *ngIf=\"child.items\"></span>\n                    </a>\n                    <p-tieredMenuSub (keydownItem)=\"onChildItemKeyDown($event)\" [parentActive]=\"child === activeItem\" [item]=\"child\" *ngIf=\"child.items\" [mobileActive]=\"mobileActive\" [autoDisplay]=\"autoDisplay\" (leafClick)=\"onLeafClick()\" [popup]=\"popup\"></p-tieredMenuSub>\n                </li>\n            </ng-template>\n        </ul>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TieredMenuSub implements OnDestroy {\n\n    @Input() item: MenuItem;\n\n    @Input() root: boolean;\n\n    @Input() autoDisplay: boolean;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() mobileActive: boolean;\n\n    @Input() popup: boolean;\n\n    @Input() get parentActive():boolean\n    {\n        return this._parentActive;\n    }\n    set parentActive(value) {\n        if (!this.root) {\n            this._parentActive = value;\n\n            if (!value)\n                this.activeItem = null;\n        }\n    }\n\n    @Output() leafClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() keydownItem: EventEmitter<any> = new EventEmitter();\n\n    _parentActive: boolean;\n\n    documentClickListener: any;\n\n    menuHoverActive: boolean = false;\n\n    activeItem: any;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, private cd: ChangeDetectorRef) { }\n\n    onItemClick(event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        if (!item.url && !item.routerLink) {\n            event.preventDefault();\n        }\n\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n\n        if (item.items) {\n            if (this.activeItem && item === this.activeItem) {\n                this.activeItem = null;\n                this.unbindDocumentClickListener();\n            }\n            else {\n                this.activeItem = item;\n                if (this.root) {\n                    this.bindDocumentClickListener();\n                }\n            }\n        }\n\n        if (!item.items) {\n            this.onLeafClick();\n        }\n    }\n\n    onItemMouseEnter(event, item) {\n        if (item.disabled || this.mobileActive) {\n            event.preventDefault();\n            return;\n        }\n\n        if (this.root) {\n            if (this.activeItem || this.autoDisplay || this.popup) {\n                this.activeItem = item;\n                this.bindDocumentClickListener();\n            }\n        }\n        else {\n            this.activeItem = item;\n            this.bindDocumentClickListener();\n        }\n    }\n\n    onLeafClick() {\n        this.activeItem = null;\n        if (this.root) {\n            this.unbindDocumentClickListener();\n        }\n\n        this.leafClick.emit();\n    }\n\n    onItemKeyDown(event, item) {\n        let listItem = event.currentTarget.parentElement;\n\n        switch (event.key) {\n            case 'ArrowDown':\n                var nextItem = this.findNextItem(listItem);\n                if (nextItem) {\n                    nextItem.children[0].focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'ArrowUp':\n                var prevItem = this.findPrevItem(listItem);\n                if (prevItem) {\n                    prevItem.children[0].focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            case 'ArrowRight':\n                if (item.items) {\n                    this.activeItem = item;\n\n                    if (this.root) {\n                        this.bindDocumentClickListener();\n                    }\n\n                    setTimeout(() => {\n                        listItem.children[1].children[0].children[0].children[0].focus();\n                    }, 50);\n                }\n\n                event.preventDefault();\n            break;\n\n            default:\n            break;\n        }\n\n        this.keydownItem.emit({\n            originalEvent: event,\n            element: listItem\n        });\n    }\n\n    findNextItem(item) {\n        let nextItem = item.nextElementSibling;\n\n        if (nextItem)\n            return DomHandler.hasClass(nextItem, 'p-disabled') || !DomHandler.hasClass(nextItem, 'p-menuitem') ? this.findNextItem(nextItem) : nextItem;\n        else\n            return null;\n    }\n\n    findPrevItem(item) {\n        let prevItem = item.previousElementSibling;\n\n        if (prevItem)\n            return DomHandler.hasClass(prevItem, 'p-disabled') || !DomHandler.hasClass(prevItem, 'p-menuitem') ? this.findPrevItem(prevItem) : prevItem;\n        else\n            return null;\n    }\n\n    onChildItemKeyDown(event) {\n        if (event.originalEvent.key === 'ArrowLeft') {\n            this.activeItem = null;\n\n            if (this.root) {\n                this.unbindDocumentClickListener();\n            }\n\n            event.element.parentElement.parentElement.parentElement.children[0].focus();\n        }\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            this.documentClickListener = (event) => {\n                if (this.el && !this.el.nativeElement.contains(event.target)) {\n                    this.activeItem = null;\n                    this.cd.markForCheck();\n                    this.unbindDocumentClickListener();\n                }\n            };\n\n            document.addEventListener('click', this.documentClickListener);\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            document.removeEventListener('click', this.documentClickListener);\n            this.documentClickListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.unbindDocumentClickListener();\n    }\n}\n\n@Component({\n    selector: 'p-tieredMenu',\n    template: `\n        <div [ngClass]=\"{'p-tieredmenu p-component':true, 'p-tieredmenu-overlay':popup}\" [class]=\"styleClass\" [ngStyle]=\"style\" (click)=\"onOverlayClick($event)\"\n            [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" [@.disabled]=\"popup !== true\"\n            (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\" *ngIf=\"!popup || visible\">\n            <p-tieredMenuSub [item]=\"model\" root=\"root\" [parentActive]=\"parentActive\" [baseZIndex]=\"baseZIndex\" [autoZIndex]=\"autoZIndex\" (leafClick)=\"onLeafClick()\"\n                [autoDisplay]=\"autoDisplay\" [popup]=\"popup\"></p-tieredMenuSub>\n        </div>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./tieredmenu.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TieredMenu implements OnDestroy {\n\n    @Input() model: MenuItem[];\n\n    @Input() popup: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() appendTo: any;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() autoDisplay: boolean;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    parentActive: boolean;\n\n    container: HTMLDivElement;\n\n    documentClickListener: any;\n\n    documentResizeListener: any;\n\n    preventDocumentDefault: boolean;\n\n    scrollHandler: any;\n\n    target: any;\n\n    visible: boolean;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    toggle(event) {\n        if (this.visible)\n            this.hide();\n        else\n            this.show(event);\n\n        this.preventDocumentDefault = true;\n    }\n\n    show(event) {\n        this.target = event.currentTarget;\n        this.visible = true;\n        this.parentActive = true;\n        this.preventDocumentDefault = true;\n        this.cd.markForCheck();\n    }\n\n    onOverlayClick(event) {\n        if (this.popup) {\n            this.overlayService.add({\n                originalEvent: event,\n                target: this.el.nativeElement\n            });\n        }\n\n        this.preventDocumentDefault = true;\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'visible':\n                if (this.popup) {\n                    this.container = event.element;\n                    this.moveOnTop();\n                    this.appendOverlay();\n                    DomHandler.absolutePosition(this.container, this.target);\n                    this.bindDocumentClickListener();\n                    this.bindDocumentResizeListener();\n                    this.bindScrollListener();\n                }\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                ZIndexUtils.clear(event.element);\n            break;\n        }\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.container);\n            else\n                DomHandler.appendChild(this.container, this.appendTo);\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.container && this.appendTo) {\n            this.el.nativeElement.appendChild(this.container);\n        }\n    }\n\n    moveOnTop() {\n        if (this.autoZIndex) {\n            ZIndexUtils.set('menu', this.container, this.baseZIndex + this.config.zIndex.menu);\n        }\n    }\n\n    hide() {\n        this.visible = false;\n        this.parentActive = false;\n        this.cd.markForCheck();\n    }\n\n    onWindowResize() {\n        this.hide();\n    }\n\n    onLeafClick() {\n        if (this.popup) {\n            this.hide();\n        }\n\n        this.unbindDocumentClickListener();\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {\n                if (!this.preventDocumentDefault && this.popup) {\n                    this.hide();\n                }\n\n                this.preventDocumentDefault = false;\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, () => {\n                if (this.visible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    onOverlayHide() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.preventDocumentDefault = false;\n        this.target = null;\n    }\n\n    ngOnDestroy() {\n        if (this.popup) {\n            if (this.scrollHandler) {\n                this.scrollHandler.destroy();\n                this.scrollHandler = null;\n            }\n\n            if (this.container && this.autoZIndex) {\n                ZIndexUtils.clear(this.container);\n            }\n\n            this.restoreOverlayAppend();\n            this.onOverlayHide();\n        }\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule,RouterModule,RippleModule,TooltipModule],\n    exports: [TieredMenu,RouterModule,TooltipModule],\n    declarations: [TieredMenu,TieredMenuSub]\n})\nexport class TieredMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-timeline.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-timeline.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-timeline.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,125 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+
+class Timeline {
+    constructor(el) {
+        this.el = el;
+        this.align = 'left';
+        this.layout = 'vertical';
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'content':
+                    this.contentTemplate = item.template;
+                    break;
+                case 'opposite':
+                    this.oppositeTemplate = item.template;
+                    break;
+                case 'marker':
+                    this.markerTemplate = item.template;
+                    break;
+            }
+        });
+    }
+}
+Timeline.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Timeline, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+Timeline.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Timeline, selector: "p-timeline", inputs: { value: "value", style: "style", styleClass: "styleClass", align: "align", layout: "layout" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="{'p-timeline p-component': true,
+                'p-timeline-left': align === 'left',
+                'p-timeline-right': align === 'right',
+                'p-timeline-top': align === 'top',
+                'p-timeline-bottom': align === 'bottom',
+                'p-timeline-alternate': align === 'alternate',
+                'p-timeline-vertical': layout === 'vertical',
+                'p-timeline-horizontal': layout === 'horizontal'}">
+            <div *ngFor="let event of value; let last=last" class="p-timeline-event">
+                <div class="p-timeline-event-opposite">
+                    <ng-container *ngTemplateOutlet="oppositeTemplate; context: {$implicit: event}"></ng-container>
+                </div>
+                <div class="p-timeline-event-separator">
+                    <ng-container *ngIf="markerTemplate; else marker">
+                        <ng-container *ngTemplateOutlet="markerTemplate; context: {$implicit: event}"></ng-container>
+                    </ng-container>
+                    <ng-template #marker>
+                        <div class="p-timeline-event-marker"></div>
+                    </ng-template>
+                    <div *ngIf="!last" class="p-timeline-event-connector"></div>
+                </div>
+                <div class="p-timeline-event-content">
+                    <ng-container *ngTemplateOutlet="contentTemplate; context: {$implicit: event}"></ng-container>
+                </div>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-timeline{display:flex;flex-grow:1;flex-direction:column}.p-timeline-left .p-timeline-event-opposite{text-align:right}.p-timeline-left .p-timeline-event-content{text-align:left}.p-timeline-right .p-timeline-event{flex-direction:row-reverse}.p-timeline-right .p-timeline-event-opposite{text-align:left}.p-timeline-right .p-timeline-event-content{text-align:right}.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even){flex-direction:row-reverse}.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-opposite{text-align:right}.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-content,.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-opposite{text-align:left}.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-content{text-align:right}.p-timeline-event{display:flex;position:relative;min-height:70px}.p-timeline-event:last-child{min-height:0}.p-timeline-event-opposite,.p-timeline-event-content{flex:1;padding:0 1rem}.p-timeline-event-separator{flex:0;display:flex;align-items:center;flex-direction:column}.p-timeline-event-marker{display:flex;align-self:baseline}.p-timeline-event-connector{flex-grow:1}.p-timeline-horizontal{flex-direction:row}.p-timeline-horizontal .p-timeline-event{flex-direction:column;flex:1}.p-timeline-horizontal .p-timeline-event:last-child{flex:0}.p-timeline-horizontal .p-timeline-event-separator{flex-direction:row}.p-timeline-horizontal .p-timeline-event-connector{width:100%}.p-timeline-bottom .p-timeline-event,.p-timeline-horizontal.p-timeline-alternate .p-timeline-event:nth-child(even){flex-direction:column-reverse}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Timeline, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-timeline', template: `
+        <div [class]="styleClass" [ngStyle]="style" [ngClass]="{'p-timeline p-component': true,
+                'p-timeline-left': align === 'left',
+                'p-timeline-right': align === 'right',
+                'p-timeline-top': align === 'top',
+                'p-timeline-bottom': align === 'bottom',
+                'p-timeline-alternate': align === 'alternate',
+                'p-timeline-vertical': layout === 'vertical',
+                'p-timeline-horizontal': layout === 'horizontal'}">
+            <div *ngFor="let event of value; let last=last" class="p-timeline-event">
+                <div class="p-timeline-event-opposite">
+                    <ng-container *ngTemplateOutlet="oppositeTemplate; context: {$implicit: event}"></ng-container>
+                </div>
+                <div class="p-timeline-event-separator">
+                    <ng-container *ngIf="markerTemplate; else marker">
+                        <ng-container *ngTemplateOutlet="markerTemplate; context: {$implicit: event}"></ng-container>
+                    </ng-container>
+                    <ng-template #marker>
+                        <div class="p-timeline-event-marker"></div>
+                    </ng-template>
+                    <div *ngIf="!last" class="p-timeline-event-connector"></div>
+                </div>
+                <div class="p-timeline-event-content">
+                    <ng-container *ngTemplateOutlet="contentTemplate; context: {$implicit: event}"></ng-container>
+                </div>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-timeline{display:flex;flex-grow:1;flex-direction:column}.p-timeline-left .p-timeline-event-opposite{text-align:right}.p-timeline-left .p-timeline-event-content{text-align:left}.p-timeline-right .p-timeline-event{flex-direction:row-reverse}.p-timeline-right .p-timeline-event-opposite{text-align:left}.p-timeline-right .p-timeline-event-content{text-align:right}.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even){flex-direction:row-reverse}.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-opposite{text-align:right}.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-content,.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-opposite{text-align:left}.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-content{text-align:right}.p-timeline-event{display:flex;position:relative;min-height:70px}.p-timeline-event:last-child{min-height:0}.p-timeline-event-opposite,.p-timeline-event-content{flex:1;padding:0 1rem}.p-timeline-event-separator{flex:0;display:flex;align-items:center;flex-direction:column}.p-timeline-event-marker{display:flex;align-self:baseline}.p-timeline-event-connector{flex-grow:1}.p-timeline-horizontal{flex-direction:row}.p-timeline-horizontal .p-timeline-event{flex-direction:column;flex:1}.p-timeline-horizontal .p-timeline-event:last-child{flex:0}.p-timeline-horizontal .p-timeline-event-separator{flex-direction:row}.p-timeline-horizontal .p-timeline-event-connector{width:100%}.p-timeline-bottom .p-timeline-event,.p-timeline-horizontal.p-timeline-alternate .p-timeline-event:nth-child(even){flex-direction:column-reverse}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { value: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], align: [{
+                type: Input
+            }], layout: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class TimelineModule {
+}
+TimelineModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TimelineModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TimelineModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TimelineModule, declarations: [Timeline], imports: [CommonModule], exports: [Timeline, SharedModule] });
+TimelineModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TimelineModule, imports: [[CommonModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TimelineModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Timeline, SharedModule],
+                    declarations: [Timeline]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Timeline, TimelineModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-timeline.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-timeline.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-timeline.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-timeline.mjs","sources":["../../src/app/components/timeline/timeline.ts","../../src/app/components/timeline/primeng-timeline.ts"],"sourcesContent":["import {NgModule ,Component, Input, ElementRef, ChangeDetectionStrategy, ViewEncapsulation, AfterContentInit, ContentChildren, QueryList, TemplateRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BlockableUI, PrimeTemplate, SharedModule} from 'primeng/api';\n\n@Component({\n    selector: 'p-timeline',\n    template: `\n        <div [class]=\"styleClass\" [ngStyle]=\"style\" [ngClass]=\"{'p-timeline p-component': true,\n                'p-timeline-left': align === 'left',\n                'p-timeline-right': align === 'right',\n                'p-timeline-top': align === 'top',\n                'p-timeline-bottom': align === 'bottom',\n                'p-timeline-alternate': align === 'alternate',\n                'p-timeline-vertical': layout === 'vertical',\n                'p-timeline-horizontal': layout === 'horizontal'}\">\n            <div *ngFor=\"let event of value; let last=last\" class=\"p-timeline-event\">\n                <div class=\"p-timeline-event-opposite\">\n                    <ng-container *ngTemplateOutlet=\"oppositeTemplate; context: {$implicit: event}\"></ng-container>\n                </div>\n                <div class=\"p-timeline-event-separator\">\n                    <ng-container *ngIf=\"markerTemplate; else marker\">\n                        <ng-container *ngTemplateOutlet=\"markerTemplate; context: {$implicit: event}\"></ng-container>\n                    </ng-container>\n                    <ng-template #marker>\n                        <div class=\"p-timeline-event-marker\"></div>\n                    </ng-template>\n                    <div *ngIf=\"!last\" class=\"p-timeline-event-connector\"></div>\n                </div>\n                <div class=\"p-timeline-event-content\">\n                    <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: event}\"></ng-container>\n                </div>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./timeline.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Timeline implements AfterContentInit, BlockableUI {\n\n    @Input() value: any[];\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() align: string = 'left';\n\n    @Input() layout: string = 'vertical';\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    contentTemplate: TemplateRef<any>;\n\n    oppositeTemplate: TemplateRef<any>;\n\n    markerTemplate: TemplateRef<any>;\n\n    constructor(private el: ElementRef) {}\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                break;\n\n                case 'opposite':\n                    this.oppositeTemplate = item.template;\n                break;\n\n                case 'marker':\n                    this.markerTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Timeline, SharedModule],\n    declarations: [Timeline]\n})\nexport class TimelineModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;MAyCa,QAAQ;IAoBjB,YAAoB,EAAc;QAAd,OAAE,GAAF,EAAE,CAAY;QAZzB,UAAK,GAAW,MAAM,CAAC;QAEvB,WAAM,GAAW,UAAU,CAAC;KAUC;IAEtC,mBAAmB;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC5C;IAED,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAO,IAAI,CAAC,OAAO,EAAE;gBACjB,KAAK,SAAS;oBACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACzC,MAAM;gBAEN,KAAK,UAAU;oBACX,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC1C,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;;qGA1CQ,QAAQ;yFAAR,QAAQ,2NAYA,aAAa,6BA/CpB;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2BT;2FAQQ,QAAQ;kBArCpB,SAAS;+BACI,YAAY,YACZ;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2BT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;iGAIQ,KAAK;sBAAb,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,MAAM;sBAAd,KAAK;gBAE0B,SAAS;sBAAxC,eAAe;uBAAC,aAAa;;MAuCrB,cAAc;;2GAAd,cAAc;4GAAd,cAAc,iBAnDd,QAAQ,aA+CP,YAAY,aA/Cb,QAAQ,EAgDG,YAAY;4GAGvB,cAAc,YAJd,CAAC,YAAY,CAAC,EACH,YAAY;2FAGvB,cAAc;kBAL1B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;oBACjC,YAAY,EAAE,CAAC,QAAQ,CAAC;iBAC3B;;;AC3FD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-toast.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-toast.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-toast.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,394 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, ViewChild, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/api';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { UniqueComponentId, ZIndexUtils } from 'primeng/utils';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { trigger, state, style, transition, animate, query, animateChild } from '@angular/animations';
+
+class ToastItem {
+    constructor(zone) {
+        this.zone = zone;
+        this.onClose = new EventEmitter();
+    }
+    ngAfterViewInit() {
+        this.initTimeout();
+    }
+    initTimeout() {
+        if (!this.message.sticky) {
+            this.zone.runOutsideAngular(() => {
+                this.timeout = setTimeout(() => {
+                    this.onClose.emit({
+                        index: this.index,
+                        message: this.message
+                    });
+                }, this.message.life || 3000);
+            });
+        }
+    }
+    clearTimeout() {
+        if (this.timeout) {
+            clearTimeout(this.timeout);
+            this.timeout = null;
+        }
+    }
+    onMouseEnter() {
+        this.clearTimeout();
+    }
+    onMouseLeave() {
+        this.initTimeout();
+    }
+    onCloseIconClick(event) {
+        this.clearTimeout();
+        this.onClose.emit({
+            index: this.index,
+            message: this.message
+        });
+        event.preventDefault();
+    }
+    ngOnDestroy() {
+        this.clearTimeout();
+    }
+}
+ToastItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToastItem, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
+ToastItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ToastItem, selector: "p-toastItem", inputs: { message: "message", index: "index", template: "template", showTransformOptions: "showTransformOptions", hideTransformOptions: "hideTransformOptions", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onClose: "onClose" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: `
+        <div #container [attr.id]="message.id" [class]="message.styleClass" [ngClass]="['p-toast-message-' + message.severity, 'p-toast-message']" [@messageState]="{value: 'visible', params: {showTransformParams: showTransformOptions, hideTransformParams: hideTransformOptions, showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+                (mouseenter)="onMouseEnter()" (mouseleave)="onMouseLeave()">
+            <div class="p-toast-message-content" role="alert" aria-live="assertive" aria-atomic="true"  [ngClass]="message.contentStyleClass">
+                <ng-container *ngIf="!template">
+                    <span [class]="'p-toast-message-icon pi' + (message.icon ? ' ' + message.icon : '')" [ngClass]="{'pi-info-circle': message.severity == 'info', 'pi-exclamation-triangle': message.severity == 'warn',
+                        'pi-times-circle': message.severity == 'error', 'pi-check' :message.severity == 'success'}"></span>
+                    <div class="p-toast-message-text">
+                        <div class="p-toast-summary">{{message.summary}}</div>
+                        <div class="p-toast-detail">{{message.detail}}</div>
+                    </div>
+                </ng-container>
+                <ng-container *ngTemplateOutlet="template; context: {$implicit: message}"></ng-container>
+                <button type="button" class="p-toast-icon-close p-link" (click)="onCloseIconClick($event)" (keydown.enter)="onCloseIconClick($event)" *ngIf="message.closable !== false" pRipple>
+                    <span class="p-toast-icon-close-icon pi pi-times"></span>
+                </button>
+            </div>
+        </div>
+    `, isInline: true, directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.Ripple, selector: "[pRipple]" }], animations: [
+        trigger('messageState', [
+            state('visible', style({
+                transform: 'translateY(0)',
+                opacity: 1
+            })),
+            transition('void => *', [
+                style({ transform: '{{showTransformParams}}', opacity: 0 }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition('* => void', [
+                animate(('{{hideTransitionParams}}'), style({
+                    height: 0,
+                    opacity: 0,
+                    transform: '{{hideTransformParams}}'
+                }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToastItem, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-toastItem',
+                    template: `
+        <div #container [attr.id]="message.id" [class]="message.styleClass" [ngClass]="['p-toast-message-' + message.severity, 'p-toast-message']" [@messageState]="{value: 'visible', params: {showTransformParams: showTransformOptions, hideTransformParams: hideTransformOptions, showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}"
+                (mouseenter)="onMouseEnter()" (mouseleave)="onMouseLeave()">
+            <div class="p-toast-message-content" role="alert" aria-live="assertive" aria-atomic="true"  [ngClass]="message.contentStyleClass">
+                <ng-container *ngIf="!template">
+                    <span [class]="'p-toast-message-icon pi' + (message.icon ? ' ' + message.icon : '')" [ngClass]="{'pi-info-circle': message.severity == 'info', 'pi-exclamation-triangle': message.severity == 'warn',
+                        'pi-times-circle': message.severity == 'error', 'pi-check' :message.severity == 'success'}"></span>
+                    <div class="p-toast-message-text">
+                        <div class="p-toast-summary">{{message.summary}}</div>
+                        <div class="p-toast-detail">{{message.detail}}</div>
+                    </div>
+                </ng-container>
+                <ng-container *ngTemplateOutlet="template; context: {$implicit: message}"></ng-container>
+                <button type="button" class="p-toast-icon-close p-link" (click)="onCloseIconClick($event)" (keydown.enter)="onCloseIconClick($event)" *ngIf="message.closable !== false" pRipple>
+                    <span class="p-toast-icon-close-icon pi pi-times"></span>
+                </button>
+            </div>
+        </div>
+    `,
+                    animations: [
+                        trigger('messageState', [
+                            state('visible', style({
+                                transform: 'translateY(0)',
+                                opacity: 1
+                            })),
+                            transition('void => *', [
+                                style({ transform: '{{showTransformParams}}', opacity: 0 }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition('* => void', [
+                                animate(('{{hideTransitionParams}}'), style({
+                                    height: 0,
+                                    opacity: 0,
+                                    transform: '{{hideTransformParams}}'
+                                }))
+                            ])
+                        ])
+                    ],
+                    encapsulation: ViewEncapsulation.None,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { message: [{
+                type: Input
+            }], index: [{
+                type: Input
+            }], template: [{
+                type: Input
+            }], showTransformOptions: [{
+                type: Input
+            }], hideTransformOptions: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], onClose: [{
+                type: Output
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }] } });
+class Toast {
+    constructor(messageService, cd, config) {
+        this.messageService = messageService;
+        this.cd = cd;
+        this.config = config;
+        this.autoZIndex = true;
+        this.baseZIndex = 0;
+        this.position = 'top-right';
+        this.preventOpenDuplicates = false;
+        this.preventDuplicates = false;
+        this.showTransformOptions = 'translateY(100%)';
+        this.hideTransformOptions = 'translateY(-100%)';
+        this.showTransitionOptions = '300ms ease-out';
+        this.hideTransitionOptions = '250ms ease-in';
+        this.onClose = new EventEmitter();
+        this.id = UniqueComponentId();
+    }
+    ngOnInit() {
+        this.messageSubscription = this.messageService.messageObserver.subscribe(messages => {
+            if (messages) {
+                if (messages instanceof Array) {
+                    const filteredMessages = messages.filter(m => this.canAdd(m));
+                    this.add(filteredMessages);
+                }
+                else if (this.canAdd(messages)) {
+                    this.add([messages]);
+                }
+            }
+        });
+        this.clearSubscription = this.messageService.clearObserver.subscribe(key => {
+            if (key) {
+                if (this.key === key) {
+                    this.messages = null;
+                }
+            }
+            else {
+                this.messages = null;
+            }
+            this.cd.markForCheck();
+        });
+    }
+    ngAfterViewInit() {
+        if (this.breakpoints) {
+            this.createStyle();
+        }
+    }
+    add(messages) {
+        this.messages = this.messages ? [...this.messages, ...messages] : [...messages];
+        if (this.preventDuplicates) {
+            this.messagesArchieve = this.messagesArchieve ? [...this.messagesArchieve, ...messages] : [...messages];
+        }
+        this.cd.markForCheck();
+    }
+    canAdd(message) {
+        let allow = this.key === message.key;
+        if (allow && this.preventOpenDuplicates) {
+            allow = !this.containsMessage(this.messages, message);
+        }
+        if (allow && this.preventDuplicates) {
+            allow = !this.containsMessage(this.messagesArchieve, message);
+        }
+        return allow;
+    }
+    containsMessage(collection, message) {
+        if (!collection) {
+            return false;
+        }
+        return collection.find(m => {
+            return ((m.summary === message.summary) && (m.detail == message.detail) && (m.severity === message.severity));
+        }) != null;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'message':
+                    this.template = item.template;
+                    break;
+                default:
+                    this.template = item.template;
+                    break;
+            }
+        });
+    }
+    onMessageClose(event) {
+        this.messages.splice(event.index, 1);
+        this.onClose.emit({
+            message: event.message
+        });
+        this.cd.detectChanges();
+    }
+    onAnimationStart(event) {
+        if (event.fromState === 'void') {
+            this.containerViewChild.nativeElement.setAttribute(this.id, '');
+            if (this.autoZIndex) {
+                ZIndexUtils.set('modal', this.containerViewChild.nativeElement, this.baseZIndex || this.config.zIndex.modal);
+            }
+        }
+    }
+    onAnimationEnd(event) {
+        if (event.toState === 'void') {
+            if (this.autoZIndex) {
+                ZIndexUtils.clear(this.containerViewChild.nativeElement);
+            }
+        }
+    }
+    createStyle() {
+        if (!this.styleElement) {
+            this.styleElement = document.createElement('style');
+            this.styleElement.type = 'text/css';
+            document.head.appendChild(this.styleElement);
+            let innerHTML = '';
+            for (let breakpoint in this.breakpoints) {
+                let breakpointStyle = '';
+                for (let styleProp in this.breakpoints[breakpoint]) {
+                    breakpointStyle += styleProp + ':' + this.breakpoints[breakpoint][styleProp] + ' !important;';
+                }
+                innerHTML += `
+                    @media screen and (max-width: ${breakpoint}) {
+                        .p-toast[${this.id}] {
+                           ${breakpointStyle}
+                        }
+                    }
+                `;
+            }
+            this.styleElement.innerHTML = innerHTML;
+        }
+    }
+    destroyStyle() {
+        if (this.styleElement) {
+            document.head.removeChild(this.styleElement);
+            this.styleElement = null;
+        }
+    }
+    ngOnDestroy() {
+        if (this.messageSubscription) {
+            this.messageSubscription.unsubscribe();
+        }
+        if (this.containerViewChild && this.autoZIndex) {
+            ZIndexUtils.clear(this.containerViewChild.nativeElement);
+        }
+        if (this.clearSubscription) {
+            this.clearSubscription.unsubscribe();
+        }
+        this.destroyStyle();
+    }
+}
+Toast.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Toast, deps: [{ token: i3.MessageService }, { token: i0.ChangeDetectorRef }, { token: i3.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+Toast.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Toast, selector: "p-toast", inputs: { key: "key", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", style: "style", styleClass: "styleClass", position: "position", preventOpenDuplicates: "preventOpenDuplicates", preventDuplicates: "preventDuplicates", showTransformOptions: "showTransformOptions", hideTransformOptions: "hideTransformOptions", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", breakpoints: "breakpoints" }, outputs: { onClose: "onClose" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: `
+        <div #container [ngClass]="'p-toast p-component p-toast-' + position" [ngStyle]="style" [class]="styleClass">
+            <p-toastItem *ngFor="let msg of messages; let i=index" [message]="msg" [index]="i" (onClose)="onMessageClose($event)"
+                    [template]="template" @toastAnimation (@toastAnimation.start)="onAnimationStart($event)" (@toastAnimation.done)="onAnimationEnd($event)"
+                    [showTransformOptions]="showTransformOptions" [hideTransformOptions]="hideTransformOptions"
+                    [showTransitionOptions]="showTransitionOptions" [hideTransitionOptions]="hideTransitionOptions"></p-toastItem>
+        </div>
+    `, isInline: true, styles: [".p-toast{position:fixed;width:25rem}.p-toast-message{overflow:hidden}.p-toast-message-content{display:flex;align-items:flex-start}.p-toast-message-text{flex:1 1 auto}.p-toast-top-right{top:20px;right:20px}.p-toast-top-left{top:20px;left:20px}.p-toast-bottom-left{bottom:20px;left:20px}.p-toast-bottom-right{bottom:20px;right:20px}.p-toast-top-center{top:20px;left:50%;transform:translate(-50%)}.p-toast-bottom-center{bottom:20px;left:50%;transform:translate(-50%)}.p-toast-center{left:50%;top:50%;min-width:20vw;transform:translate(-50%,-50%)}.p-toast-icon-close{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-toast-icon-close.p-link{cursor:pointer}\n"], components: [{ type: ToastItem, selector: "p-toastItem", inputs: ["message", "index", "template", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClose"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [
+        trigger('toastAnimation', [
+            transition(':enter, :leave', [
+                query('@*', animateChild())
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Toast, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-toast', template: `
+        <div #container [ngClass]="'p-toast p-component p-toast-' + position" [ngStyle]="style" [class]="styleClass">
+            <p-toastItem *ngFor="let msg of messages; let i=index" [message]="msg" [index]="i" (onClose)="onMessageClose($event)"
+                    [template]="template" @toastAnimation (@toastAnimation.start)="onAnimationStart($event)" (@toastAnimation.done)="onAnimationEnd($event)"
+                    [showTransformOptions]="showTransformOptions" [hideTransformOptions]="hideTransformOptions"
+                    [showTransitionOptions]="showTransitionOptions" [hideTransitionOptions]="hideTransitionOptions"></p-toastItem>
+        </div>
+    `, animations: [
+                        trigger('toastAnimation', [
+                            transition(':enter, :leave', [
+                                query('@*', animateChild())
+                            ])
+                        ])
+                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-toast{position:fixed;width:25rem}.p-toast-message{overflow:hidden}.p-toast-message-content{display:flex;align-items:flex-start}.p-toast-message-text{flex:1 1 auto}.p-toast-top-right{top:20px;right:20px}.p-toast-top-left{top:20px;left:20px}.p-toast-bottom-left{bottom:20px;left:20px}.p-toast-bottom-right{bottom:20px;right:20px}.p-toast-top-center{top:20px;left:50%;transform:translate(-50%)}.p-toast-bottom-center{bottom:20px;left:50%;transform:translate(-50%)}.p-toast-center{left:50%;top:50%;min-width:20vw;transform:translate(-50%,-50%)}.p-toast-icon-close{display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-toast-icon-close.p-link{cursor:pointer}\n"] }]
+        }], ctorParameters: function () { return [{ type: i3.MessageService }, { type: i0.ChangeDetectorRef }, { type: i3.PrimeNGConfig }]; }, propDecorators: { key: [{
+                type: Input
+            }], autoZIndex: [{
+                type: Input
+            }], baseZIndex: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], position: [{
+                type: Input
+            }], preventOpenDuplicates: [{
+                type: Input
+            }], preventDuplicates: [{
+                type: Input
+            }], showTransformOptions: [{
+                type: Input
+            }], hideTransformOptions: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], breakpoints: [{
+                type: Input
+            }], onClose: [{
+                type: Output
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class ToastModule {
+}
+ToastModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToastModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ToastModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToastModule, declarations: [Toast, ToastItem], imports: [CommonModule, RippleModule], exports: [Toast, SharedModule] });
+ToastModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToastModule, imports: [[CommonModule, RippleModule], SharedModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToastModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule],
+                    exports: [Toast, SharedModule],
+                    declarations: [Toast, ToastItem]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Toast, ToastItem, ToastModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-toast.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-toast.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-toast.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-toast.mjs","sources":["../../src/app/components/toast/toast.ts","../../src/app/components/toast/primeng-toast.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,OnInit,AfterViewInit,AfterContentInit,OnDestroy,ElementRef,ViewChild,EventEmitter,ContentChildren,QueryList,TemplateRef,ChangeDetectionStrategy, NgZone, ChangeDetectorRef, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {Message, PrimeNGConfig} from 'primeng/api';\nimport {DomHandler} from 'primeng/dom';\nimport {PrimeTemplate,SharedModule} from 'primeng/api';\nimport {MessageService} from 'primeng/api';\nimport {UniqueComponentId} from 'primeng/utils';\nimport {RippleModule} from 'primeng/ripple';\nimport {Subscription} from 'rxjs';\nimport {trigger,state,style,transition,animate,query,animateChild,AnimationEvent} from '@angular/animations';\nimport { ZIndexUtils } from 'primeng/utils';\n\n@Component({\n    selector: 'p-toastItem',\n    template: `\n        <div #container [attr.id]=\"message.id\" [class]=\"message.styleClass\" [ngClass]=\"['p-toast-message-' + message.severity, 'p-toast-message']\" [@messageState]=\"{value: 'visible', params: {showTransformParams: showTransformOptions, hideTransformParams: hideTransformOptions, showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\"\n                (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n            <div class=\"p-toast-message-content\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\"  [ngClass]=\"message.contentStyleClass\">\n                <ng-container *ngIf=\"!template\">\n                    <span [class]=\"'p-toast-message-icon pi' + (message.icon ? ' ' + message.icon : '')\" [ngClass]=\"{'pi-info-circle': message.severity == 'info', 'pi-exclamation-triangle': message.severity == 'warn',\n                        'pi-times-circle': message.severity == 'error', 'pi-check' :message.severity == 'success'}\"></span>\n                    <div class=\"p-toast-message-text\">\n                        <div class=\"p-toast-summary\">{{message.summary}}</div>\n                        <div class=\"p-toast-detail\">{{message.detail}}</div>\n                    </div>\n                </ng-container>\n                <ng-container *ngTemplateOutlet=\"template; context: {$implicit: message}\"></ng-container>\n                <button type=\"button\" class=\"p-toast-icon-close p-link\" (click)=\"onCloseIconClick($event)\" (keydown.enter)=\"onCloseIconClick($event)\" *ngIf=\"message.closable !== false\" pRipple>\n                    <span class=\"p-toast-icon-close-icon pi pi-times\"></span>\n                </button>\n            </div>\n        </div>\n    `,\n    animations: [\n        trigger('messageState', [\n            state('visible', style({\n                transform: 'translateY(0)',\n                opacity: 1\n            })),\n            transition('void => *', [\n                style({transform: '{{showTransformParams}}', opacity: 0}),\n                animate('{{showTransitionParams}}')\n            ]),\n            transition('* => void', [\n                animate(('{{hideTransitionParams}}'), style({\n                    height: 0,\n                    opacity: 0,\n                    transform: '{{hideTransformParams}}'\n                }))\n            ])\n        ])\n    ],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ToastItem implements AfterViewInit, OnDestroy {\n\n    @Input() message: Message;\n\n    @Input() index: number;\n\n    @Input() template: TemplateRef<any>;\n\n    @Input() showTransformOptions: string;\n\n    @Input() hideTransformOptions: string;\n\n    @Input() showTransitionOptions: string;\n\n    @Input() hideTransitionOptions: string;\n\n    @Output() onClose: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    timeout: any;\n\n    constructor(private zone: NgZone) {}\n\n    ngAfterViewInit() {\n        this.initTimeout();\n    }\n\n    initTimeout() {\n        if (!this.message.sticky) {\n            this.zone.runOutsideAngular(() => {\n                this.timeout = setTimeout(() => {\n                    this.onClose.emit({\n                        index: this.index,\n                        message: this.message\n                    });\n                }, this.message.life || 3000);\n            });\n        }\n    }\n\n    clearTimeout() {\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n            this.timeout = null;\n        }\n    }\n\n    onMouseEnter() {\n        this.clearTimeout();\n    }\n\n    onMouseLeave() {\n        this.initTimeout();\n    }\n\n    onCloseIconClick(event) {\n        this.clearTimeout();\n\n        this.onClose.emit({\n            index: this.index,\n            message: this.message\n        });\n\n        event.preventDefault();\n    }\n\n    ngOnDestroy() {\n        this.clearTimeout();\n    }\n}\n\n@Component({\n    selector: 'p-toast',\n    template: `\n        <div #container [ngClass]=\"'p-toast p-component p-toast-' + position\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <p-toastItem *ngFor=\"let msg of messages; let i=index\" [message]=\"msg\" [index]=\"i\" (onClose)=\"onMessageClose($event)\"\n                    [template]=\"template\" @toastAnimation (@toastAnimation.start)=\"onAnimationStart($event)\" (@toastAnimation.done)=\"onAnimationEnd($event)\"\n                    [showTransformOptions]=\"showTransformOptions\" [hideTransformOptions]=\"hideTransformOptions\"\n                    [showTransitionOptions]=\"showTransitionOptions\" [hideTransitionOptions]=\"hideTransitionOptions\"></p-toastItem>\n        </div>\n    `,\n    animations: [\n        trigger('toastAnimation', [\n            transition(':enter, :leave', [\n                query('@*', animateChild())\n            ])\n        ])\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./toast.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Toast implements OnInit,AfterContentInit,OnDestroy {\n\n    @Input() key: string;\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() position: string = 'top-right';\n\n    @Input() preventOpenDuplicates: boolean = false;\n\n    @Input() preventDuplicates: boolean = false;\n\n    @Input() showTransformOptions: string = 'translateY(100%)';\n\n    @Input() hideTransformOptions: string = 'translateY(-100%)';\n\n    @Input() showTransitionOptions: string = '300ms ease-out';\n\n    @Input() hideTransitionOptions: string = '250ms ease-in';\n\n    @Input() breakpoints: any;\n\n    @Output() onClose: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    messageSubscription: Subscription;\n\n    clearSubscription: Subscription;\n\n    messages: Message[];\n\n    messagesArchieve: Message[];\n\n    template: TemplateRef<any>;\n\n    constructor(public messageService: MessageService, private cd: ChangeDetectorRef, public config: PrimeNGConfig) {}\n\n    styleElement: any;\n\n    id: string = UniqueComponentId();\n\n    ngOnInit() {\n        this.messageSubscription = this.messageService.messageObserver.subscribe(messages => {\n            if (messages) {\n                if (messages instanceof Array) {\n                    const filteredMessages = messages.filter(m => this.canAdd(m));\n                    this.add(filteredMessages);\n                }\n                else if (this.canAdd(messages)) {\n                    this.add([messages]);\n                }\n            }\n        });\n\n        this.clearSubscription = this.messageService.clearObserver.subscribe(key => {\n            if (key) {\n                if (this.key === key) {\n                    this.messages = null;\n                }\n            }\n            else {\n                this.messages = null;\n            }\n\n            this.cd.markForCheck();\n        });\n    }\n\n    ngAfterViewInit() {\n        if (this.breakpoints) {\n            this.createStyle();\n        }\n    }\n\n    add(messages: Message[]): void {\n        this.messages = this.messages ? [...this.messages, ...messages] : [...messages];\n\n        if (this.preventDuplicates) {\n            this.messagesArchieve = this.messagesArchieve ? [...this.messagesArchieve, ...messages] : [...messages];\n        }\n\n        this.cd.markForCheck();\n    }\n\n    canAdd(message: Message): boolean {\n        let allow = this.key === message.key;\n\n        if (allow && this.preventOpenDuplicates) {\n            allow = !this.containsMessage(this.messages, message);\n        }\n\n        if (allow && this.preventDuplicates) {\n            allow = !this.containsMessage(this.messagesArchieve, message);\n        }\n\n        return allow;\n    }\n\n    containsMessage(collection: Message[], message: Message): boolean {\n        if (!collection) {\n            return false;\n        }\n\n        return collection.find(m => {\n           return ((m.summary === message.summary) && (m.detail == message.detail) && (m.severity === message.severity));\n        }) != null;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'message':\n                    this.template = item.template;\n                break;\n\n                default:\n                    this.template = item.template;\n                break;\n            }\n        });\n    }\n\n    onMessageClose(event) {\n        this.messages.splice(event.index, 1);\n\n        this.onClose.emit({\n            message: event.message\n        });\n\n        this.cd.detectChanges();\n    }\n\n    onAnimationStart(event: AnimationEvent) {\n        if (event.fromState === 'void') {\n            this.containerViewChild.nativeElement.setAttribute(this.id, '');\n\n            if (this.autoZIndex) {\n                ZIndexUtils.set('modal', this.containerViewChild.nativeElement, this.baseZIndex || this.config.zIndex.modal);\n            }\n        }\n    }\n\n    onAnimationEnd(event: AnimationEvent) {\n        if (event.toState === 'void') {\n            if (this.autoZIndex) {\n                ZIndexUtils.clear(this.containerViewChild.nativeElement);\n            }\n        }\n    }\n\n    createStyle() {\n        if (!this.styleElement) {\n            this.styleElement = document.createElement('style');\n            this.styleElement.type = 'text/css';\n            document.head.appendChild(this.styleElement);\n            let innerHTML = '';\n            for (let breakpoint in this.breakpoints) {\n                let breakpointStyle = '';\n                for (let styleProp in this.breakpoints[breakpoint]) {\n                    breakpointStyle += styleProp + ':' + this.breakpoints[breakpoint][styleProp] + ' !important;';\n                }\n                innerHTML += `\n                    @media screen and (max-width: ${breakpoint}) {\n                        .p-toast[${this.id}] {\n                           ${breakpointStyle}\n                        }\n                    }\n                `\n            }\n\n            this.styleElement.innerHTML = innerHTML;\n        }\n    }\n\n    destroyStyle() {\n        if (this.styleElement) {\n            document.head.removeChild(this.styleElement);\n            this.styleElement = null;\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.messageSubscription) {\n            this.messageSubscription.unsubscribe();\n        }\n\n        if (this.containerViewChild && this.autoZIndex) {\n            ZIndexUtils.clear(this.containerViewChild.nativeElement);\n        }\n\n        if (this.clearSubscription) {\n            this.clearSubscription.unsubscribe();\n        }\n\n        this.destroyStyle();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RippleModule],\n    exports: [Toast,SharedModule],\n    declarations: [Toast,ToastItem]\n})\nexport class ToastModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-togglebutton.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-togglebutton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-togglebutton.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,125 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, Input, Output, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i1 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const TOGGLEBUTTON_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => ToggleButton),
+    multi: true
+};
+class ToggleButton {
+    constructor(cd) {
+        this.cd = cd;
+        this.iconPos = 'left';
+        this.onChange = new EventEmitter();
+        this.checked = false;
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    toggle(event) {
+        if (!this.disabled) {
+            this.checked = !this.checked;
+            this.onModelChange(this.checked);
+            this.onModelTouched();
+            this.onChange.emit({
+                originalEvent: event,
+                checked: this.checked
+            });
+            this.cd.markForCheck();
+        }
+    }
+    onBlur() {
+        this.onModelTouched();
+    }
+    writeValue(value) {
+        this.checked = value;
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    get hasOnLabel() {
+        return this.onLabel && this.onLabel.length > 0;
+    }
+    get hasOffLabel() {
+        return this.onLabel && this.onLabel.length > 0;
+    }
+}
+ToggleButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToggleButton, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+ToggleButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: ToggleButton, selector: "p-toggleButton", inputs: { onLabel: "onLabel", offLabel: "offLabel", onIcon: "onIcon", offIcon: "offIcon", ariaLabelledBy: "ariaLabelledBy", disabled: "disabled", style: "style", styleClass: "styleClass", inputId: "inputId", tabindex: "tabindex", iconPos: "iconPos" }, outputs: { onChange: "onChange" }, host: { classAttribute: "p-element" }, providers: [TOGGLEBUTTON_VALUE_ACCESSOR], ngImport: i0, template: `
+        <div [ngClass]="{'p-button p-togglebutton p-component': true, 'p-button-icon-only': (onIcon && offIcon && !hasOnLabel && !hasOffLabel),'p-highlight': checked,'p-disabled':disabled}"
+                        [ngStyle]="style" [class]="styleClass" (click)="toggle($event)" (keydown.enter)="toggle($event)"
+                        [attr.tabindex]="disabled ? null : '0'" role="checkbox" [attr.aria-checked]="checked" pRipple>
+            <span *ngIf="onIcon||offIcon" [class]="checked ? this.onIcon : this.offIcon"
+                [ngClass]="{'p-button-icon': true, 'p-button-icon-left': (iconPos === 'left'), 'p-button-icon-right': (iconPos === 'right')}"></span>
+            <span class="p-button-label">{{checked ? hasOnLabel ? onLabel : '' : hasOffLabel ? offLabel : ''}}</span>
+        </div>
+    `, isInline: true, styles: [".p-button{margin:0;display:inline-flex;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center;overflow:hidden;position:relative}.p-button-label{flex:1 1 auto}.p-button-icon-right{order:1}.p-button:disabled{cursor:default}.p-button-icon-only{justify-content:center}.p-button-icon-only .p-button-label{visibility:hidden;width:0;flex:0 0 auto}.p-button-vertical{flex-direction:column}.p-button-icon-bottom{order:2}.p-buttonset .p-button{margin:0}.p-buttonset .p-button:not(:last-child){border-right:0 none}.p-buttonset .p-button:not(:first-of-type):not(:last-of-type){border-radius:0}.p-buttonset .p-button:first-of-type{border-top-right-radius:0;border-bottom-right-radius:0}.p-buttonset .p-button:last-of-type{border-top-left-radius:0;border-bottom-left-radius:0}.p-buttonset .p-button:focus{position:relative;z-index:1}.p-button-label{transition:all .2s}\n"], directives: [{ type: i1.Ripple, selector: "[pRipple]" }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToggleButton, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-toggleButton', template: `
+        <div [ngClass]="{'p-button p-togglebutton p-component': true, 'p-button-icon-only': (onIcon && offIcon && !hasOnLabel && !hasOffLabel),'p-highlight': checked,'p-disabled':disabled}"
+                        [ngStyle]="style" [class]="styleClass" (click)="toggle($event)" (keydown.enter)="toggle($event)"
+                        [attr.tabindex]="disabled ? null : '0'" role="checkbox" [attr.aria-checked]="checked" pRipple>
+            <span *ngIf="onIcon||offIcon" [class]="checked ? this.onIcon : this.offIcon"
+                [ngClass]="{'p-button-icon': true, 'p-button-icon-left': (iconPos === 'left'), 'p-button-icon-right': (iconPos === 'right')}"></span>
+            <span class="p-button-label">{{checked ? hasOnLabel ? onLabel : '' : hasOffLabel ? offLabel : ''}}</span>
+        </div>
+    `, providers: [TOGGLEBUTTON_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-button{margin:0;display:inline-flex;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center;overflow:hidden;position:relative}.p-button-label{flex:1 1 auto}.p-button-icon-right{order:1}.p-button:disabled{cursor:default}.p-button-icon-only{justify-content:center}.p-button-icon-only .p-button-label{visibility:hidden;width:0;flex:0 0 auto}.p-button-vertical{flex-direction:column}.p-button-icon-bottom{order:2}.p-buttonset .p-button{margin:0}.p-buttonset .p-button:not(:last-child){border-right:0 none}.p-buttonset .p-button:not(:first-of-type):not(:last-of-type){border-radius:0}.p-buttonset .p-button:first-of-type{border-top-right-radius:0;border-bottom-right-radius:0}.p-buttonset .p-button:last-of-type{border-top-left-radius:0;border-bottom-left-radius:0}.p-buttonset .p-button:focus{position:relative;z-index:1}.p-button-label{transition:all .2s}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { onLabel: [{
+                type: Input
+            }], offLabel: [{
+                type: Input
+            }], onIcon: [{
+                type: Input
+            }], offIcon: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], iconPos: [{
+                type: Input
+            }], onChange: [{
+                type: Output
+            }] } });
+class ToggleButtonModule {
+}
+ToggleButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToggleButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ToggleButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToggleButtonModule, declarations: [ToggleButton], imports: [CommonModule, RippleModule], exports: [ToggleButton] });
+ToggleButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToggleButtonModule, imports: [[CommonModule, RippleModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToggleButtonModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule],
+                    exports: [ToggleButton],
+                    declarations: [ToggleButton]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { TOGGLEBUTTON_VALUE_ACCESSOR, ToggleButton, ToggleButtonModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-togglebutton.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-togglebutton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-togglebutton.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-togglebutton.mjs","sources":["../../src/app/components/togglebutton/togglebutton.ts","../../src/app/components/togglebutton/primeng-togglebutton.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,EventEmitter,forwardRef,ChangeDetectionStrategy,ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {RippleModule} from 'primeng/ripple';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const TOGGLEBUTTON_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => ToggleButton),\n  multi: true\n};\n\n@Component({\n    selector: 'p-toggleButton',\n    template: `\n        <div [ngClass]=\"{'p-button p-togglebutton p-component': true, 'p-button-icon-only': (onIcon && offIcon && !hasOnLabel && !hasOffLabel),'p-highlight': checked,'p-disabled':disabled}\"\n                        [ngStyle]=\"style\" [class]=\"styleClass\" (click)=\"toggle($event)\" (keydown.enter)=\"toggle($event)\"\n                        [attr.tabindex]=\"disabled ? null : '0'\" role=\"checkbox\" [attr.aria-checked]=\"checked\" pRipple>\n            <span *ngIf=\"onIcon||offIcon\" [class]=\"checked ? this.onIcon : this.offIcon\"\n                [ngClass]=\"{'p-button-icon': true, 'p-button-icon-left': (iconPos === 'left'), 'p-button-icon-right': (iconPos === 'right')}\"></span>\n            <span class=\"p-button-label\">{{checked ? hasOnLabel ? onLabel : '' : hasOffLabel ? offLabel : ''}}</span>\n        </div>\n    `,\n    providers: [TOGGLEBUTTON_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styleUrls: ['../button/button.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class ToggleButton implements ControlValueAccessor {\n\n    @Input() onLabel: string;\n\n    @Input() offLabel: string;\n\n    @Input() onIcon: string;\n\n    @Input() offIcon: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() disabled: boolean;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() inputId: string;\n\n    @Input() tabindex: number;\n\n    @Input() iconPos: string = 'left';\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    checked: boolean = false;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    constructor(public cd: ChangeDetectorRef) { }\n\n    toggle(event: Event) {\n        if (!this.disabled) {\n            this.checked = !this.checked;\n            this.onModelChange(this.checked);\n            this.onModelTouched();\n            this.onChange.emit({\n                originalEvent: event,\n                checked: this.checked\n            });\n\n            this.cd.markForCheck();\n        }\n    }\n\n    onBlur() {\n        this.onModelTouched();\n    }\n\n    writeValue(value: any) : void {\n        this.checked = value;\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    get hasOnLabel():boolean {\n        return this.onLabel && this.onLabel.length > 0;\n    }\n\n    get hasOffLabel():boolean {\n        return this.onLabel && this.onLabel.length > 0;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RippleModule],\n    exports: [ToggleButton],\n    declarations: [ToggleButton]\n})\nexport class ToggleButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;MAKa,2BAA2B,GAAQ;IAC9C,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;IAC3C,KAAK,EAAE,IAAI;EACX;MAoBW,YAAY;IAgCrB,YAAmB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QAV/B,YAAO,GAAW,MAAM,CAAC;QAExB,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE3D,YAAO,GAAY,KAAK,CAAC;QAEzB,kBAAa,GAAa,SAAQ,CAAC;QAEnC,mBAAc,GAAa,SAAQ,CAAC;KAES;IAE7C,MAAM,CAAC,KAAY;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACf,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;SAC1B;KACJ;IAED,MAAM;QACF,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;IAED,UAAU,CAAC,KAAU;QACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,EAAY;QACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KAC3B;IAED,iBAAiB,CAAC,EAAY;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC5B;IAED,gBAAgB,CAAC,GAAY;QACzB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;KAClD;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;KAClD;;yGA5EQ,YAAY;6FAAZ,YAAY,+WAPV,CAAC,2BAA2B,CAAC,0BAT9B;;;;;;;;KAQT;2FAQQ,YAAY;kBAlBxB,SAAS;+BACI,gBAAgB,YAChB;;;;;;;;KAQT,aACU,CAAC,2BAA2B,CAAC,mBACvB,uBAAuB,CAAC,MAAM,QAEzC;wBACF,OAAO,EAAE,WAAW;qBACvB;wGAIQ,OAAO;sBAAf,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,MAAM;sBAAd,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEI,QAAQ;sBAAjB,MAAM;;MA4DE,kBAAkB;;+GAAlB,kBAAkB;gHAAlB,kBAAkB,iBApFlB,YAAY,aAgFX,YAAY,EAAC,YAAY,aAhF1B,YAAY;gHAoFZ,kBAAkB,YAJlB,CAAC,YAAY,EAAC,YAAY,CAAC;2FAI3B,kBAAkB;kBAL9B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAC,YAAY,CAAC;oBACpC,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,YAAY,CAAC;iBAC/B;;;AChHD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-toolbar.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-toolbar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-toolbar.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,80 @@
+import * as i0 from '@angular/core';
+import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { PrimeTemplate } from 'primeng/api';
+
+class Toolbar {
+    constructor(el) {
+        this.el = el;
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'left':
+                    this.leftTemplate = item.template;
+                    break;
+                case 'right':
+                    this.rightTemplate = item.template;
+                    break;
+            }
+        });
+    }
+}
+Toolbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Toolbar, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+Toolbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Toolbar, selector: "p-toolbar", inputs: { style: "style", styleClass: "styleClass" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <div [ngClass]="'p-toolbar p-component'" [ngStyle]="style" [class]="styleClass" role="toolbar">
+            <ng-content></ng-content>
+            <div class="p-toolbar-group-left" *ngIf="leftTemplate">
+                <ng-container *ngTemplateOutlet="leftTemplate"></ng-container>
+            </div>
+            <div class="p-toolbar-group-right" *ngIf="rightTemplate">
+                <ng-container *ngTemplateOutlet="rightTemplate"></ng-container>
+            </div>
+        </div>
+    `, isInline: true, styles: [".p-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap}.p-toolbar-group-left,.p-toolbar-group-right{display:flex;align-items:center}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Toolbar, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-toolbar', template: `
+        <div [ngClass]="'p-toolbar p-component'" [ngStyle]="style" [class]="styleClass" role="toolbar">
+            <ng-content></ng-content>
+            <div class="p-toolbar-group-left" *ngIf="leftTemplate">
+                <ng-container *ngTemplateOutlet="leftTemplate"></ng-container>
+            </div>
+            <div class="p-toolbar-group-right" *ngIf="rightTemplate">
+                <ng-container *ngTemplateOutlet="rightTemplate"></ng-container>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap}.p-toolbar-group-left,.p-toolbar-group-right{display:flex;align-items:center}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class ToolbarModule {
+}
+ToolbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToolbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+ToolbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToolbarModule, declarations: [Toolbar], imports: [CommonModule], exports: [Toolbar] });
+ToolbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToolbarModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ToolbarModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Toolbar],
+                    declarations: [Toolbar]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Toolbar, ToolbarModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-toolbar.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-toolbar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-toolbar.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-toolbar.mjs","sources":["../../src/app/components/toolbar/toolbar.ts","../../src/app/components/toolbar/primeng-toolbar.ts"],"sourcesContent":["import {NgModule,Component,Input,ElementRef,ChangeDetectionStrategy, ViewEncapsulation, AfterContentInit, ContentChildren, QueryList, TemplateRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {BlockableUI, PrimeTemplate} from 'primeng/api';\n\n@Component({\n    selector: 'p-toolbar',\n    template: `\n        <div [ngClass]=\"'p-toolbar p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\" role=\"toolbar\">\n            <ng-content></ng-content>\n            <div class=\"p-toolbar-group-left\" *ngIf=\"leftTemplate\">\n                <ng-container *ngTemplateOutlet=\"leftTemplate\"></ng-container>\n            </div>\n            <div class=\"p-toolbar-group-right\" *ngIf=\"rightTemplate\">\n                <ng-container *ngTemplateOutlet=\"rightTemplate\"></ng-container>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./toolbar.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Toolbar implements AfterContentInit,BlockableUI {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    leftTemplate: TemplateRef<any>;\n\n    rightTemplate: TemplateRef<any>;\n\n    constructor(private el: ElementRef) {}\n\n    getBlockableElement(): HTMLElement {\n      return this.el.nativeElement.children[0];\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'left':\n                    this.leftTemplate = item.template;\n                break;\n\n                case 'right':\n                    this.rightTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Toolbar],\n    declarations: [Toolbar]\n})\nexport class ToolbarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;MAwBa,OAAO;IAYhB,YAAoB,EAAc;QAAd,OAAE,GAAF,EAAE,CAAY;KAAI;IAEtC,mBAAmB;QACjB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC1C;IAED,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAO,IAAI,CAAC,OAAO,EAAE;gBACjB,KAAK,MAAM;oBACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACtC,MAAM;gBAEN,KAAK,OAAO;oBACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACvC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;;oGA9BQ,OAAO;wFAAP,OAAO,wKAMC,aAAa,6BAxBpB;;;;;;;;;;KAUT;2FAQQ,OAAO;kBApBnB,SAAS;+BACI,WAAW,YACX;;;;;;;;;;KAUT,mBACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,QAE/B;wBACF,OAAO,EAAE,WAAW;qBACvB;iGAIQ,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAE0B,SAAS;sBAAxC,eAAe;uBAAC,aAAa;;MAiCrB,aAAa;;0GAAb,aAAa;2GAAb,aAAa,iBAvCb,OAAO,aAmCN,YAAY,aAnCb,OAAO;2GAuCP,aAAa,YAJb,CAAC,YAAY,CAAC;2FAId,aAAa;kBALzB,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,YAAY,EAAE,CAAC,OAAO,CAAC;iBAC1B;;;AC9DD;;;;;;"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tooltip.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tooltip.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tooltip.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,481 @@
+import * as i0 from '@angular/core';
+import { Directive, Input, NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import { ZIndexUtils } from 'primeng/utils';
+import * as i1 from 'primeng/api';
+
+class Tooltip {
+    constructor(el, zone, config) {
+        this.el = el;
+        this.zone = zone;
+        this.config = config;
+        this.escape = true;
+        this._tooltipOptions = {
+            tooltipPosition: 'right',
+            tooltipEvent: 'hover',
+            appendTo: 'body',
+            tooltipZIndex: 'auto',
+            escape: false,
+            positionTop: 0,
+            positionLeft: 0
+        };
+    }
+    get disabled() {
+        return this._disabled;
+    }
+    set disabled(val) {
+        this._disabled = val;
+        this.deactivate();
+    }
+    ngAfterViewInit() {
+        this.zone.runOutsideAngular(() => {
+            if (this.getOption('tooltipEvent') === 'hover') {
+                this.mouseEnterListener = this.onMouseEnter.bind(this);
+                this.mouseLeaveListener = this.onMouseLeave.bind(this);
+                this.clickListener = this.onClick.bind(this);
+                this.el.nativeElement.addEventListener('mouseenter', this.mouseEnterListener);
+                this.el.nativeElement.addEventListener('mouseleave', this.mouseLeaveListener);
+                this.el.nativeElement.addEventListener('click', this.clickListener);
+            }
+            else if (this.getOption('tooltipEvent') === 'focus') {
+                this.focusListener = this.onFocus.bind(this);
+                this.blurListener = this.onBlur.bind(this);
+                this.el.nativeElement.addEventListener('focus', this.focusListener);
+                this.el.nativeElement.addEventListener('blur', this.blurListener);
+            }
+        });
+    }
+    ngOnChanges(simpleChange) {
+        if (simpleChange.tooltipPosition) {
+            this.setOption({ tooltipPosition: simpleChange.tooltipPosition.currentValue });
+        }
+        if (simpleChange.tooltipEvent) {
+            this.setOption({ tooltipEvent: simpleChange.tooltipEvent.currentValue });
+        }
+        if (simpleChange.appendTo) {
+            this.setOption({ appendTo: simpleChange.appendTo.currentValue });
+        }
+        if (simpleChange.positionStyle) {
+            this.setOption({ positionStyle: simpleChange.positionStyle.currentValue });
+        }
+        if (simpleChange.tooltipStyleClass) {
+            this.setOption({ tooltipStyleClass: simpleChange.tooltipStyleClass.currentValue });
+        }
+        if (simpleChange.tooltipZIndex) {
+            this.setOption({ tooltipZIndex: simpleChange.tooltipZIndex.currentValue });
+        }
+        if (simpleChange.escape) {
+            this.setOption({ escape: simpleChange.escape.currentValue });
+        }
+        if (simpleChange.showDelay) {
+            this.setOption({ showDelay: simpleChange.showDelay.currentValue });
+        }
+        if (simpleChange.hideDelay) {
+            this.setOption({ hideDelay: simpleChange.hideDelay.currentValue });
+        }
+        if (simpleChange.life) {
+            this.setOption({ life: simpleChange.life.currentValue });
+        }
+        if (simpleChange.positionTop) {
+            this.setOption({ positionTop: simpleChange.positionTop.currentValue });
+        }
+        if (simpleChange.positionLeft) {
+            this.setOption({ positionLeft: simpleChange.positionLeft.currentValue });
+        }
+        if (simpleChange.disabled) {
+            this.setOption({ disabled: simpleChange.disabled.currentValue });
+        }
+        if (simpleChange.text) {
+            this.setOption({ tooltipLabel: simpleChange.text.currentValue });
+            if (this.active) {
+                if (simpleChange.text.currentValue) {
+                    if (this.container && this.container.offsetParent) {
+                        this.updateText();
+                        this.align();
+                    }
+                    else {
+                        this.show();
+                    }
+                }
+                else {
+                    this.hide();
+                }
+            }
+        }
+        if (simpleChange.tooltipOptions) {
+            this._tooltipOptions = { ...this._tooltipOptions, ...simpleChange.tooltipOptions.currentValue };
+            this.deactivate();
+            if (this.active) {
+                if (this.getOption('tooltipLabel')) {
+                    if (this.container && this.container.offsetParent) {
+                        this.updateText();
+                        this.align();
+                    }
+                    else {
+                        this.show();
+                    }
+                }
+                else {
+                    this.hide();
+                }
+            }
+        }
+    }
+    onMouseEnter(e) {
+        if (!this.container && !this.showTimeout) {
+            this.activate();
+        }
+    }
+    onMouseLeave(e) {
+        this.deactivate();
+    }
+    onFocus(e) {
+        this.activate();
+    }
+    onBlur(e) {
+        this.deactivate();
+    }
+    onClick(e) {
+        this.deactivate();
+    }
+    activate() {
+        this.active = true;
+        this.clearHideTimeout();
+        if (this.getOption('showDelay'))
+            this.showTimeout = setTimeout(() => { this.show(); }, this.getOption('showDelay'));
+        else
+            this.show();
+        if (this.getOption('life')) {
+            let duration = this.getOption('showDelay') ? this.getOption('life') + this.getOption('showDelay') : this.getOption('life');
+            this.hideTimeout = setTimeout(() => { this.hide(); }, duration);
+        }
+    }
+    deactivate() {
+        this.active = false;
+        this.clearShowTimeout();
+        if (this.getOption('hideDelay')) {
+            this.clearHideTimeout(); //life timeout
+            this.hideTimeout = setTimeout(() => { this.hide(); }, this.getOption('hideDelay'));
+        }
+        else {
+            this.hide();
+        }
+    }
+    create() {
+        if (this.container) {
+            this.clearHideTimeout();
+            this.remove();
+        }
+        this.container = document.createElement('div');
+        let tooltipArrow = document.createElement('div');
+        tooltipArrow.className = 'p-tooltip-arrow';
+        this.container.appendChild(tooltipArrow);
+        this.tooltipText = document.createElement('div');
+        this.tooltipText.className = 'p-tooltip-text';
+        this.updateText();
+        if (this.getOption('positionStyle')) {
+            this.container.style.position = this.getOption('positionStyle');
+        }
+        this.container.appendChild(this.tooltipText);
+        if (this.getOption('appendTo') === 'body')
+            document.body.appendChild(this.container);
+        else if (this.getOption('appendTo') === 'target')
+            DomHandler.appendChild(this.container, this.el.nativeElement);
+        else
+            DomHandler.appendChild(this.container, this.getOption('appendTo'));
+        this.container.style.display = 'inline-block';
+    }
+    show() {
+        if (!this.getOption('tooltipLabel') || this.getOption('disabled')) {
+            return;
+        }
+        this.create();
+        this.align();
+        DomHandler.fadeIn(this.container, 250);
+        if (this.getOption('tooltipZIndex') === 'auto')
+            ZIndexUtils.set('tooltip', this.container, this.config.zIndex.tooltip);
+        else
+            this.container.style.zIndex = this.getOption('tooltipZIndex');
+        this.bindDocumentResizeListener();
+        this.bindScrollListener();
+    }
+    hide() {
+        if (this.getOption('tooltipZIndex') === 'auto') {
+            ZIndexUtils.clear(this.container);
+        }
+        this.remove();
+    }
+    updateText() {
+        if (this.getOption('escape')) {
+            this.tooltipText.innerHTML = '';
+            this.tooltipText.appendChild(document.createTextNode(this.getOption('tooltipLabel')));
+        }
+        else {
+            this.tooltipText.innerHTML = this.getOption('tooltipLabel');
+        }
+    }
+    align() {
+        let position = this.getOption('tooltipPosition');
+        switch (position) {
+            case 'top':
+                this.alignTop();
+                if (this.isOutOfBounds()) {
+                    this.alignBottom();
+                    if (this.isOutOfBounds()) {
+                        this.alignRight();
+                        if (this.isOutOfBounds()) {
+                            this.alignLeft();
+                        }
+                    }
+                }
+                break;
+            case 'bottom':
+                this.alignBottom();
+                if (this.isOutOfBounds()) {
+                    this.alignTop();
+                    if (this.isOutOfBounds()) {
+                        this.alignRight();
+                        if (this.isOutOfBounds()) {
+                            this.alignLeft();
+                        }
+                    }
+                }
+                break;
+            case 'left':
+                this.alignLeft();
+                if (this.isOutOfBounds()) {
+                    this.alignRight();
+                    if (this.isOutOfBounds()) {
+                        this.alignTop();
+                        if (this.isOutOfBounds()) {
+                            this.alignBottom();
+                        }
+                    }
+                }
+                break;
+            case 'right':
+                this.alignRight();
+                if (this.isOutOfBounds()) {
+                    this.alignLeft();
+                    if (this.isOutOfBounds()) {
+                        this.alignTop();
+                        if (this.isOutOfBounds()) {
+                            this.alignBottom();
+                        }
+                    }
+                }
+                break;
+        }
+    }
+    getHostOffset() {
+        if (this.getOption('appendTo') === 'body' || this.getOption('appendTo') === 'target') {
+            let offset = this.el.nativeElement.getBoundingClientRect();
+            let targetLeft = offset.left + DomHandler.getWindowScrollLeft();
+            let targetTop = offset.top + DomHandler.getWindowScrollTop();
+            return { left: targetLeft, top: targetTop };
+        }
+        else {
+            return { left: 0, top: 0 };
+        }
+    }
+    alignRight() {
+        this.preAlign('right');
+        let hostOffset = this.getHostOffset();
+        let left = hostOffset.left + DomHandler.getOuterWidth(this.el.nativeElement);
+        let top = hostOffset.top + (DomHandler.getOuterHeight(this.el.nativeElement) - DomHandler.getOuterHeight(this.container)) / 2;
+        this.container.style.left = left + this.getOption('positionLeft') + 'px';
+        this.container.style.top = top + this.getOption('positionTop') + 'px';
+    }
+    alignLeft() {
+        this.preAlign('left');
+        let hostOffset = this.getHostOffset();
+        let left = hostOffset.left - DomHandler.getOuterWidth(this.container);
+        let top = hostOffset.top + (DomHandler.getOuterHeight(this.el.nativeElement) - DomHandler.getOuterHeight(this.container)) / 2;
+        this.container.style.left = left + this.getOption('positionLeft') + 'px';
+        this.container.style.top = top + this.getOption('positionTop') + 'px';
+    }
+    alignTop() {
+        this.preAlign('top');
+        let hostOffset = this.getHostOffset();
+        let left = hostOffset.left + (DomHandler.getOuterWidth(this.el.nativeElement) - DomHandler.getOuterWidth(this.container)) / 2;
+        let top = hostOffset.top - DomHandler.getOuterHeight(this.container);
+        this.container.style.left = left + this.getOption('positionLeft') + 'px';
+        this.container.style.top = top + this.getOption('positionTop') + 'px';
+    }
+    alignBottom() {
+        this.preAlign('bottom');
+        let hostOffset = this.getHostOffset();
+        let left = hostOffset.left + (DomHandler.getOuterWidth(this.el.nativeElement) - DomHandler.getOuterWidth(this.container)) / 2;
+        let top = hostOffset.top + DomHandler.getOuterHeight(this.el.nativeElement);
+        this.container.style.left = left + this.getOption('positionLeft') + 'px';
+        this.container.style.top = top + this.getOption('positionTop') + 'px';
+    }
+    setOption(option) {
+        this._tooltipOptions = { ...this._tooltipOptions, ...option };
+    }
+    getOption(option) {
+        return this._tooltipOptions[option];
+    }
+    preAlign(position) {
+        this.container.style.left = -999 + 'px';
+        this.container.style.top = -999 + 'px';
+        let defaultClassName = 'p-tooltip p-component p-tooltip-' + position;
+        this.container.className = this.getOption('tooltipStyleClass') ? defaultClassName + ' ' + this.getOption('tooltipStyleClass') : defaultClassName;
+    }
+    isOutOfBounds() {
+        let offset = this.container.getBoundingClientRect();
+        let targetTop = offset.top;
+        let targetLeft = offset.left;
+        let width = DomHandler.getOuterWidth(this.container);
+        let height = DomHandler.getOuterHeight(this.container);
+        let viewport = DomHandler.getViewport();
+        return (targetLeft + width > viewport.width) || (targetLeft < 0) || (targetTop < 0) || (targetTop + height > viewport.height);
+    }
+    onWindowResize(e) {
+        this.hide();
+    }
+    bindDocumentResizeListener() {
+        this.zone.runOutsideAngular(() => {
+            this.resizeListener = this.onWindowResize.bind(this);
+            window.addEventListener('resize', this.resizeListener);
+        });
+    }
+    unbindDocumentResizeListener() {
+        if (this.resizeListener) {
+            window.removeEventListener('resize', this.resizeListener);
+            this.resizeListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.el.nativeElement, () => {
+                if (this.container) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    unbindEvents() {
+        if (this.getOption('tooltipEvent') === 'hover') {
+            this.el.nativeElement.removeEventListener('mouseenter', this.mouseEnterListener);
+            this.el.nativeElement.removeEventListener('mouseleave', this.mouseLeaveListener);
+            this.el.nativeElement.removeEventListener('click', this.clickListener);
+        }
+        else if (this.getOption('tooltipEvent') === 'focus') {
+            this.el.nativeElement.removeEventListener('focus', this.focusListener);
+            this.el.nativeElement.removeEventListener('blur', this.blurListener);
+        }
+        this.unbindDocumentResizeListener();
+    }
+    remove() {
+        if (this.container && this.container.parentElement) {
+            if (this.getOption('appendTo') === 'body')
+                document.body.removeChild(this.container);
+            else if (this.getOption('appendTo') === 'target')
+                this.el.nativeElement.removeChild(this.container);
+            else
+                DomHandler.removeChild(this.container, this.getOption('appendTo'));
+        }
+        this.unbindDocumentResizeListener();
+        this.unbindScrollListener();
+        this.clearTimeouts();
+        this.container = null;
+        this.scrollHandler = null;
+    }
+    clearShowTimeout() {
+        if (this.showTimeout) {
+            clearTimeout(this.showTimeout);
+            this.showTimeout = null;
+        }
+    }
+    clearHideTimeout() {
+        if (this.hideTimeout) {
+            clearTimeout(this.hideTimeout);
+            this.hideTimeout = null;
+        }
+    }
+    clearTimeouts() {
+        this.clearShowTimeout();
+        this.clearHideTimeout();
+    }
+    ngOnDestroy() {
+        this.unbindEvents();
+        if (this.container) {
+            ZIndexUtils.clear(this.container);
+        }
+        this.remove();
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+    }
+}
+Tooltip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Tooltip, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Directive });
+Tooltip.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: Tooltip, selector: "[pTooltip]", inputs: { tooltipPosition: "tooltipPosition", tooltipEvent: "tooltipEvent", appendTo: "appendTo", positionStyle: "positionStyle", tooltipStyleClass: "tooltipStyleClass", tooltipZIndex: "tooltipZIndex", escape: "escape", showDelay: "showDelay", hideDelay: "hideDelay", life: "life", positionTop: "positionTop", positionLeft: "positionLeft", text: ["pTooltip", "text"], disabled: ["tooltipDisabled", "disabled"], tooltipOptions: "tooltipOptions" }, host: { classAttribute: "p-element" }, usesOnChanges: true, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Tooltip, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[pTooltip]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.PrimeNGConfig }]; }, propDecorators: { tooltipPosition: [{
+                type: Input
+            }], tooltipEvent: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], positionStyle: [{
+                type: Input
+            }], tooltipStyleClass: [{
+                type: Input
+            }], tooltipZIndex: [{
+                type: Input
+            }], escape: [{
+                type: Input
+            }], showDelay: [{
+                type: Input
+            }], hideDelay: [{
+                type: Input
+            }], life: [{
+                type: Input
+            }], positionTop: [{
+                type: Input
+            }], positionLeft: [{
+                type: Input
+            }], text: [{
+                type: Input,
+                args: ['pTooltip']
+            }], disabled: [{
+                type: Input,
+                args: ["tooltipDisabled"]
+            }], tooltipOptions: [{
+                type: Input
+            }] } });
+class TooltipModule {
+}
+TooltipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TooltipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TooltipModule, declarations: [Tooltip], imports: [CommonModule], exports: [Tooltip] });
+TooltipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TooltipModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TooltipModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [Tooltip],
+                    declarations: [Tooltip]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Tooltip, TooltipModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tooltip.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tooltip.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tooltip.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-tooltip.mjs","sources":["../../src/app/components/tooltip/tooltip.ts","../../src/app/components/tooltip/primeng-tooltip.ts"],"sourcesContent":["import { NgModule, Directive, ElementRef, AfterViewInit, OnDestroy, Input, NgZone, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { ZIndexUtils } from 'primeng/utils'\nimport { PrimeNGConfig } from 'primeng/api';\n\nexport interface TooltipOptions {\n    tooltipLabel?: string;\n    tooltipPosition?: string;\n    tooltipEvent?: string;\n    appendTo?: any;\n    positionStyle?: string;\n    tooltipStyleClass?: string;\n    tooltipZIndex?: string;\n    escape?: boolean;\n    disabled?: boolean;\n    showDelay?: number;\n    hideDelay?: number;\n    positionTop?: number;\n    positionLeft?: number;\n    life?: number;\n}\n\n@Directive({\n    selector: '[pTooltip]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Tooltip implements AfterViewInit, OnDestroy {\n\n    @Input() tooltipPosition: string;\n\n    @Input() tooltipEvent: string;\n\n    @Input() appendTo: any;\n\n    @Input() positionStyle: string;\n\n    @Input() tooltipStyleClass: string;\n\n    @Input() tooltipZIndex: string;\n\n    @Input() escape: boolean = true;\n\n    @Input() showDelay: number;\n\n    @Input() hideDelay: number;\n\n    @Input() life: number;\n\n    @Input() positionTop: number;\n\n    @Input() positionLeft: number;\n\n    @Input('pTooltip') text: string;\n\n    @Input(\"tooltipDisabled\") get disabled(): boolean {\n        return this._disabled;\n    }\n    set disabled(val:boolean) {\n        this._disabled = val;\n        this.deactivate();\n    }\n\n    @Input() tooltipOptions: TooltipOptions;\n\n    _tooltipOptions: TooltipOptions = {\n        tooltipPosition: 'right',\n        tooltipEvent: 'hover',\n        appendTo: 'body',\n        tooltipZIndex: 'auto',\n        escape: false,\n        positionTop: 0,\n        positionLeft: 0\n    }\n\n    _disabled: boolean;\n\n    container: any;\n\n    styleClass: string;\n\n    tooltipText: any;\n\n    showTimeout: any;\n\n    hideTimeout: any;\n\n    active: boolean;\n\n    mouseEnterListener: Function;\n\n    mouseLeaveListener: Function;\n\n    clickListener: Function;\n\n    focusListener: Function;\n\n    blurListener: Function;\n\n    scrollHandler: any;\n\n    resizeListener: any;\n\n    constructor(public el: ElementRef, public zone: NgZone, public config: PrimeNGConfig) { }\n\n    ngAfterViewInit() {\n        this.zone.runOutsideAngular(() => {\n            if (this.getOption('tooltipEvent') === 'hover') {\n                this.mouseEnterListener = this.onMouseEnter.bind(this);\n                this.mouseLeaveListener = this.onMouseLeave.bind(this);\n                this.clickListener = this.onClick.bind(this);\n                this.el.nativeElement.addEventListener('mouseenter', this.mouseEnterListener);\n                this.el.nativeElement.addEventListener('mouseleave', this.mouseLeaveListener);\n                this.el.nativeElement.addEventListener('click', this.clickListener);\n            }\n            else if (this.getOption('tooltipEvent') === 'focus') {\n                this.focusListener = this.onFocus.bind(this);\n                this.blurListener = this.onBlur.bind(this);\n                this.el.nativeElement.addEventListener('focus', this.focusListener);\n                this.el.nativeElement.addEventListener('blur', this.blurListener);\n            }\n        });\n    }\n\n    ngOnChanges(simpleChange: SimpleChanges) {\n        if (simpleChange.tooltipPosition) {\n            this.setOption({tooltipPosition: simpleChange.tooltipPosition.currentValue});\n        }\n\n        if (simpleChange.tooltipEvent) {\n            this.setOption({tooltipEvent: simpleChange.tooltipEvent.currentValue});\n        }\n\n        if (simpleChange.appendTo) {\n            this.setOption({appendTo: simpleChange.appendTo.currentValue});\n        }\n\n        if (simpleChange.positionStyle) {\n            this.setOption({positionStyle: simpleChange.positionStyle.currentValue});\n        }\n\n        if (simpleChange.tooltipStyleClass) {\n            this.setOption({tooltipStyleClass: simpleChange.tooltipStyleClass.currentValue});\n        }\n\n        if (simpleChange.tooltipZIndex) {\n            this.setOption({tooltipZIndex: simpleChange.tooltipZIndex.currentValue});\n        }\n\n        if (simpleChange.escape) {\n            this.setOption({escape: simpleChange.escape.currentValue});\n        }\n\n        if (simpleChange.showDelay) {\n            this.setOption({showDelay: simpleChange.showDelay.currentValue});\n        }\n\n        if (simpleChange.hideDelay) {\n            this.setOption({hideDelay: simpleChange.hideDelay.currentValue});\n        }\n\n        if (simpleChange.life) {\n            this.setOption({life: simpleChange.life.currentValue});\n        }\n\n        if (simpleChange.positionTop) {\n            this.setOption({positionTop: simpleChange.positionTop.currentValue});\n        }\n\n        if (simpleChange.positionLeft) {\n            this.setOption({positionLeft: simpleChange.positionLeft.currentValue});\n        }\n\n        if (simpleChange.disabled) {\n            this.setOption({disabled: simpleChange.disabled.currentValue});\n        }\n\n        if (simpleChange.text) {\n            this.setOption({tooltipLabel: simpleChange.text.currentValue});\n\n            if (this.active) {\n                if (simpleChange.text.currentValue) {\n                    if (this.container && this.container.offsetParent) {\n                        this.updateText();\n                        this.align();\n                    }\n                    else {\n                        this.show();\n                    }\n                }\n                else {\n                    this.hide();\n                }\n            }\n        }\n\n        if (simpleChange.tooltipOptions) {\n            this._tooltipOptions = {...this._tooltipOptions, ...simpleChange.tooltipOptions.currentValue};\n            this.deactivate();\n\n            if (this.active) {\n                if (this.getOption('tooltipLabel')) {\n                    if (this.container && this.container.offsetParent) {\n                        this.updateText();\n                        this.align();\n                    }\n                    else {\n                        this.show();\n                    }\n                }\n                else {\n                    this.hide();\n                }\n            }\n        }\n    }\n\n    onMouseEnter(e: Event) {\n        if (!this.container && !this.showTimeout) {\n            this.activate();\n        }\n    }\n\n    onMouseLeave(e: Event) {\n        this.deactivate();\n    }\n\n    onFocus(e: Event) {\n        this.activate();\n    }\n\n    onBlur(e: Event) {\n        this.deactivate();\n    }\n\n    onClick(e: Event) {\n        this.deactivate();\n    }\n\n    activate() {\n        this.active = true;\n        this.clearHideTimeout();\n\n        if (this.getOption('showDelay'))\n            this.showTimeout = setTimeout(() => { this.show() }, this.getOption('showDelay'));\n        else\n            this.show();\n\n        if (this.getOption('life')) {\n            let duration = this.getOption('showDelay') ? this.getOption('life') + this.getOption('showDelay') : this.getOption('life');\n            this.hideTimeout = setTimeout(() => { this.hide() }, duration);\n        }\n    }\n\n    deactivate() {\n        this.active = false;\n        this.clearShowTimeout();\n\n        if (this.getOption('hideDelay')) {\n            this.clearHideTimeout();    //life timeout\n            this.hideTimeout = setTimeout(() => { this.hide() }, this.getOption('hideDelay'));\n        }\n        else {\n            this.hide();\n        }\n    }\n\n    create() {\n        if (this.container) {\n            this.clearHideTimeout();\n            this.remove();\n        }\n\n        this.container = document.createElement('div');\n\n        let tooltipArrow = document.createElement('div');\n        tooltipArrow.className = 'p-tooltip-arrow';\n        this.container.appendChild(tooltipArrow);\n\n        this.tooltipText = document.createElement('div');\n        this.tooltipText.className = 'p-tooltip-text';\n\n        this.updateText();\n\n        if (this.getOption('positionStyle')) {\n            this.container.style.position = this.getOption('positionStyle');\n        }\n\n        this.container.appendChild(this.tooltipText);\n\n        if (this.getOption('appendTo') === 'body')\n            document.body.appendChild(this.container);\n        else if (this.getOption('appendTo') === 'target')\n            DomHandler.appendChild(this.container, this.el.nativeElement);\n        else\n            DomHandler.appendChild(this.container, this.getOption('appendTo'));\n\n        this.container.style.display = 'inline-block';\n    }\n\n    show() {\n        if (!this.getOption('tooltipLabel') || this.getOption('disabled')) {\n            return;\n        }\n\n        this.create();\n        this.align();\n        DomHandler.fadeIn(this.container, 250);\n\n        if (this.getOption('tooltipZIndex') === 'auto')\n            ZIndexUtils.set('tooltip', this.container, this.config.zIndex.tooltip);\n        else\n            this.container.style.zIndex = this.getOption('tooltipZIndex');\n\n        this.bindDocumentResizeListener();\n        this.bindScrollListener();\n    }\n\n    hide() {\n        if (this.getOption('tooltipZIndex') === 'auto') {\n            ZIndexUtils.clear(this.container);\n        }\n\n        this.remove();\n    }\n\n    updateText() {\n        if (this.getOption('escape')) {\n            this.tooltipText.innerHTML = '';\n            this.tooltipText.appendChild(document.createTextNode(this.getOption('tooltipLabel')));\n        }\n        else {\n            this.tooltipText.innerHTML = this.getOption('tooltipLabel');\n        }\n    }\n\n    align() {\n        let position = this.getOption('tooltipPosition');\n\n        switch (position) {\n            case 'top':\n                this.alignTop();\n                if (this.isOutOfBounds()) {\n                    this.alignBottom();\n                    if (this.isOutOfBounds()) {\n                        this.alignRight();\n\n                        if (this.isOutOfBounds()) {\n                            this.alignLeft();\n                        }\n                    }\n                }\n                break;\n\n            case 'bottom':\n                this.alignBottom();\n                if (this.isOutOfBounds()) {\n                    this.alignTop();\n                    if (this.isOutOfBounds()) {\n                        this.alignRight();\n\n                        if (this.isOutOfBounds()) {\n                            this.alignLeft();\n                        }\n                    }\n                }\n                break;\n\n            case 'left':\n                this.alignLeft();\n                if (this.isOutOfBounds()) {\n                    this.alignRight();\n\n                    if (this.isOutOfBounds()) {\n                        this.alignTop();\n\n                        if (this.isOutOfBounds()) {\n                            this.alignBottom();\n                        }\n                    }\n                }\n                break;\n\n            case 'right':\n                this.alignRight();\n                if (this.isOutOfBounds()) {\n                    this.alignLeft();\n\n                    if (this.isOutOfBounds()) {\n                        this.alignTop();\n\n                        if (this.isOutOfBounds()) {\n                            this.alignBottom();\n                        }\n                    }\n                }\n                break;\n        }\n    }\n\n    getHostOffset() {\n        if (this.getOption('appendTo') === 'body' || this.getOption('appendTo') === 'target') {\n            let offset = this.el.nativeElement.getBoundingClientRect();\n            let targetLeft = offset.left + DomHandler.getWindowScrollLeft();\n            let targetTop = offset.top + DomHandler.getWindowScrollTop();\n\n            return { left: targetLeft, top: targetTop };\n        }\n        else {\n            return { left: 0, top: 0 };\n        }\n    }\n\n    alignRight() {\n        this.preAlign('right');\n        let hostOffset = this.getHostOffset();\n        let left = hostOffset.left + DomHandler.getOuterWidth(this.el.nativeElement);\n        let top = hostOffset.top + (DomHandler.getOuterHeight(this.el.nativeElement) - DomHandler.getOuterHeight(this.container)) / 2;\n        this.container.style.left = left + this.getOption('positionLeft') + 'px';\n        this.container.style.top = top + this.getOption('positionTop') + 'px';\n    }\n\n    alignLeft() {\n        this.preAlign('left');\n        let hostOffset = this.getHostOffset();\n        let left = hostOffset.left - DomHandler.getOuterWidth(this.container);\n        let top = hostOffset.top + (DomHandler.getOuterHeight(this.el.nativeElement) - DomHandler.getOuterHeight(this.container)) / 2;\n        this.container.style.left = left + this.getOption('positionLeft') + 'px';\n        this.container.style.top = top + this.getOption('positionTop') + 'px';\n    }\n\n    alignTop() {\n        this.preAlign('top');\n        let hostOffset = this.getHostOffset();\n        let left = hostOffset.left + (DomHandler.getOuterWidth(this.el.nativeElement) - DomHandler.getOuterWidth(this.container)) / 2;\n        let top = hostOffset.top - DomHandler.getOuterHeight(this.container);\n        this.container.style.left = left + this.getOption('positionLeft') + 'px';\n        this.container.style.top = top + this.getOption('positionTop') + 'px';\n    }\n\n    alignBottom() {\n        this.preAlign('bottom');\n        let hostOffset = this.getHostOffset();\n        let left = hostOffset.left + (DomHandler.getOuterWidth(this.el.nativeElement) - DomHandler.getOuterWidth(this.container)) / 2;\n        let top = hostOffset.top + DomHandler.getOuterHeight(this.el.nativeElement);\n        this.container.style.left = left + this.getOption('positionLeft') + 'px';\n        this.container.style.top = top + this.getOption('positionTop') + 'px';\n    }\n\n    setOption(option: TooltipOptions) {\n        this._tooltipOptions = {...this._tooltipOptions, ...option}\n    }\n\n    getOption(option: string) {\n        return this._tooltipOptions[option];\n    }\n\n    preAlign(position: string) {\n        this.container.style.left = -999 + 'px';\n        this.container.style.top = -999 + 'px';\n\n        let defaultClassName = 'p-tooltip p-component p-tooltip-' + position;\n        this.container.className = this.getOption('tooltipStyleClass') ? defaultClassName + ' ' + this.getOption('tooltipStyleClass') : defaultClassName;\n    }\n\n    isOutOfBounds(): boolean {\n        let offset = this.container.getBoundingClientRect();\n        let targetTop = offset.top;\n        let targetLeft = offset.left;\n        let width = DomHandler.getOuterWidth(this.container);\n        let height = DomHandler.getOuterHeight(this.container);\n        let viewport = DomHandler.getViewport();\n\n        return (targetLeft + width > viewport.width) || (targetLeft < 0) || (targetTop < 0) || (targetTop + height > viewport.height);\n    }\n\n    onWindowResize(e: Event) {\n        this.hide();\n    }\n\n    bindDocumentResizeListener() {\n        this.zone.runOutsideAngular(() => {\n            this.resizeListener = this.onWindowResize.bind(this);\n            window.addEventListener('resize', this.resizeListener);\n        });\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.resizeListener) {\n            window.removeEventListener('resize', this.resizeListener);\n            this.resizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.el.nativeElement, () => {\n                if (this.container) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    unbindEvents() {\n        if (this.getOption('tooltipEvent') === 'hover') {\n            this.el.nativeElement.removeEventListener('mouseenter', this.mouseEnterListener);\n            this.el.nativeElement.removeEventListener('mouseleave', this.mouseLeaveListener);\n            this.el.nativeElement.removeEventListener('click', this.clickListener);\n        }\n        else if (this.getOption('tooltipEvent') === 'focus') {\n            this.el.nativeElement.removeEventListener('focus', this.focusListener);\n            this.el.nativeElement.removeEventListener('blur', this.blurListener);\n        }\n\n        this.unbindDocumentResizeListener();\n    }\n\n    remove() {\n        if (this.container && this.container.parentElement) {\n            if (this.getOption('appendTo') === 'body')\n                document.body.removeChild(this.container);\n            else if (this.getOption('appendTo') === 'target')\n                this.el.nativeElement.removeChild(this.container);\n            else\n                DomHandler.removeChild(this.container, this.getOption('appendTo'));\n        }\n\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.clearTimeouts();\n        this.container = null;\n        this.scrollHandler = null;\n    }\n\n    clearShowTimeout() {\n        if (this.showTimeout) {\n            clearTimeout(this.showTimeout);\n            this.showTimeout = null;\n        }\n    }\n\n    clearHideTimeout() {\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n    }\n\n    clearTimeouts() {\n        this.clearShowTimeout();\n        this.clearHideTimeout();\n    }\n\n    ngOnDestroy() {\n        this.unbindEvents();\n\n        if (this.container) {\n            ZIndexUtils.clear(this.container);\n        }\n\n        this.remove();\n\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Tooltip],\n    declarations: [Tooltip]\n})\nexport class TooltipModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tree.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tree.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tree.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1272 @@
+import * as i0 from '@angular/core';
+import { forwardRef, Component, ViewEncapsulation, Inject, Input, EventEmitter, ChangeDetectionStrategy, Optional, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';
+import * as i4 from '@angular/cdk/scrolling';
+import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import * as i3 from 'primeng/api';
+import { TranslationKeys, PrimeTemplate, SharedModule } from 'primeng/api';
+import { ObjectUtils } from 'primeng/utils';
+import { DomHandler } from 'primeng/dom';
+import * as i2 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+
+class UITreeNode {
+    constructor(tree) {
+        this.tree = tree;
+    }
+    ngOnInit() {
+        this.node.parent = this.parentNode;
+        if (this.parentNode) {
+            this.tree.syncNodeOption(this.node, this.tree.value, 'parent', this.tree.getNodeWithKey(this.parentNode.key, this.tree.value));
+        }
+    }
+    getIcon() {
+        let icon;
+        if (this.node.icon)
+            icon = this.node.icon;
+        else
+            icon = this.node.expanded && this.node.children && this.node.children.length ? this.node.expandedIcon : this.node.collapsedIcon;
+        return UITreeNode.ICON_CLASS + ' ' + icon;
+    }
+    isLeaf() {
+        return this.tree.isNodeLeaf(this.node);
+    }
+    toggle(event) {
+        if (this.node.expanded)
+            this.collapse(event);
+        else
+            this.expand(event);
+    }
+    expand(event) {
+        this.node.expanded = true;
+        if (this.tree.virtualScroll) {
+            this.tree.updateSerializedValue();
+        }
+        this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });
+    }
+    collapse(event) {
+        this.node.expanded = false;
+        if (this.tree.virtualScroll) {
+            this.tree.updateSerializedValue();
+        }
+        this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });
+    }
+    onNodeClick(event) {
+        this.tree.onNodeClick(event, this.node);
+    }
+    onNodeKeydown(event) {
+        if (event.which === 13) {
+            this.tree.onNodeClick(event, this.node);
+        }
+    }
+    onNodeTouchEnd() {
+        this.tree.onNodeTouchEnd();
+    }
+    onNodeRightClick(event) {
+        this.tree.onNodeRightClick(event, this.node);
+    }
+    isSelected() {
+        return this.tree.isSelected(this.node);
+    }
+    onDropPoint(event, position) {
+        event.preventDefault();
+        let dragNode = this.tree.dragNode;
+        let dragNodeIndex = this.tree.dragNodeIndex;
+        let dragNodeScope = this.tree.dragNodeScope;
+        let isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? (position === 1 || dragNodeIndex !== this.index - 1) : true;
+        if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {
+            let dropParams = { ...this.createDropPointEventMetadata(position) };
+            if (this.tree.validateDrop) {
+                this.tree.onNodeDrop.emit({
+                    originalEvent: event,
+                    dragNode: dragNode,
+                    dropNode: this.node,
+                    index: this.index,
+                    accept: () => {
+                        this.processPointDrop(dropParams);
+                    }
+                });
+            }
+            else {
+                this.processPointDrop(dropParams);
+                this.tree.onNodeDrop.emit({
+                    originalEvent: event,
+                    dragNode: dragNode,
+                    dropNode: this.node,
+                    index: this.index
+                });
+            }
+        }
+        this.draghoverPrev = false;
+        this.draghoverNext = false;
+    }
+    processPointDrop(event) {
+        let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.tree.value;
+        event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);
+        let dropIndex = this.index;
+        if (event.position < 0) {
+            dropIndex = (event.dragNodeSubNodes === newNodeList) ? ((event.dragNodeIndex > event.index) ? event.index : event.index - 1) : event.index;
+            newNodeList.splice(dropIndex, 0, event.dragNode);
+        }
+        else {
+            dropIndex = newNodeList.length;
+            newNodeList.push(event.dragNode);
+        }
+        this.tree.dragDropService.stopDrag({
+            node: event.dragNode,
+            subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
+            index: event.dragNodeIndex
+        });
+    }
+    createDropPointEventMetadata(position) {
+        return {
+            dragNode: this.tree.dragNode,
+            dragNodeIndex: this.tree.dragNodeIndex,
+            dragNodeSubNodes: this.tree.dragNodeSubNodes,
+            dropNode: this.node,
+            index: this.index,
+            position: position
+        };
+    }
+    onDropPointDragOver(event) {
+        event.dataTransfer.dropEffect = 'move';
+        event.preventDefault();
+    }
+    onDropPointDragEnter(event, position) {
+        if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
+            if (position < 0)
+                this.draghoverPrev = true;
+            else
+                this.draghoverNext = true;
+        }
+    }
+    onDropPointDragLeave(event) {
+        this.draghoverPrev = false;
+        this.draghoverNext = false;
+    }
+    onDragStart(event) {
+        if (this.tree.draggableNodes && this.node.draggable !== false) {
+            event.dataTransfer.setData("text", "data");
+            this.tree.dragDropService.startDrag({
+                tree: this,
+                node: this.node,
+                subNodes: this.node.parent ? this.node.parent.children : this.tree.value,
+                index: this.index,
+                scope: this.tree.draggableScope
+            });
+        }
+        else {
+            event.preventDefault();
+        }
+    }
+    onDragStop(event) {
+        this.tree.dragDropService.stopDrag({
+            node: this.node,
+            subNodes: this.node.parent ? this.node.parent.children : this.tree.value,
+            index: this.index
+        });
+    }
+    onDropNodeDragOver(event) {
+        event.dataTransfer.dropEffect = 'move';
+        if (this.tree.droppableNodes) {
+            event.preventDefault();
+            event.stopPropagation();
+        }
+    }
+    onDropNode(event) {
+        if (this.tree.droppableNodes && this.node.droppable !== false) {
+            let dragNode = this.tree.dragNode;
+            if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {
+                let dropParams = { ...this.createDropNodeEventMetadata() };
+                if (this.tree.validateDrop) {
+                    this.tree.onNodeDrop.emit({
+                        originalEvent: event,
+                        dragNode: dragNode,
+                        dropNode: this.node,
+                        index: this.index,
+                        accept: () => {
+                            this.processNodeDrop(dropParams);
+                        }
+                    });
+                }
+                else {
+                    this.processNodeDrop(dropParams);
+                    this.tree.onNodeDrop.emit({
+                        originalEvent: event,
+                        dragNode: dragNode,
+                        dropNode: this.node,
+                        index: this.index
+                    });
+                }
+            }
+        }
+        event.preventDefault();
+        event.stopPropagation();
+        this.draghoverNode = false;
+    }
+    createDropNodeEventMetadata() {
+        return {
+            dragNode: this.tree.dragNode,
+            dragNodeIndex: this.tree.dragNodeIndex,
+            dragNodeSubNodes: this.tree.dragNodeSubNodes,
+            dropNode: this.node
+        };
+    }
+    processNodeDrop(event) {
+        let dragNodeIndex = event.dragNodeIndex;
+        event.dragNodeSubNodes.splice(dragNodeIndex, 1);
+        if (event.dropNode.children)
+            event.dropNode.children.push(event.dragNode);
+        else
+            event.dropNode.children = [event.dragNode];
+        this.tree.dragDropService.stopDrag({
+            node: event.dragNode,
+            subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
+            index: dragNodeIndex
+        });
+    }
+    onDropNodeDragEnter(event) {
+        if (this.tree.droppableNodes && this.node.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
+            this.draghoverNode = true;
+        }
+    }
+    onDropNodeDragLeave(event) {
+        if (this.tree.droppableNodes) {
+            let rect = event.currentTarget.getBoundingClientRect();
+            if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {
+                this.draghoverNode = false;
+            }
+        }
+    }
+    onKeyDown(event) {
+        const nodeElement = event.target.parentElement.parentElement;
+        if (nodeElement.nodeName !== 'P-TREENODE' || (this.tree.contextMenu && this.tree.contextMenu.containerViewChild.nativeElement.style.display === 'block')) {
+            return;
+        }
+        switch (event.which) {
+            //down arrow
+            case 40:
+                const listElement = (this.tree.droppableNodes) ? nodeElement.children[1].children[1] : nodeElement.children[0].children[1];
+                if (listElement && listElement.children.length > 0) {
+                    this.focusNode(listElement.children[0]);
+                }
+                else {
+                    const nextNodeElement = nodeElement.nextElementSibling;
+                    if (nextNodeElement) {
+                        this.focusNode(nextNodeElement);
+                    }
+                    else {
+                        let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement);
+                        if (nextSiblingAncestor) {
+                            this.focusNode(nextSiblingAncestor);
+                        }
+                    }
+                }
+                event.preventDefault();
+                break;
+            //up arrow
+            case 38:
+                if (nodeElement.previousElementSibling) {
+                    this.focusNode(this.findLastVisibleDescendant(nodeElement.previousElementSibling));
+                }
+                else {
+                    let parentNodeElement = this.getParentNodeElement(nodeElement);
+                    if (parentNodeElement) {
+                        this.focusNode(parentNodeElement);
+                    }
+                }
+                event.preventDefault();
+                break;
+            //right arrow
+            case 39:
+                if (!this.node.expanded && !this.tree.isNodeLeaf(this.node)) {
+                    this.expand(event);
+                }
+                event.preventDefault();
+                break;
+            //left arrow
+            case 37:
+                if (this.node.expanded) {
+                    this.collapse(event);
+                }
+                else {
+                    let parentNodeElement = this.getParentNodeElement(nodeElement);
+                    if (parentNodeElement) {
+                        this.focusNode(parentNodeElement);
+                    }
+                }
+                event.preventDefault();
+                break;
+            //enter
+            case 13:
+                this.tree.onNodeClick(event, this.node);
+                event.preventDefault();
+                break;
+            default:
+                //no op
+                break;
+        }
+    }
+    findNextSiblingOfAncestor(nodeElement) {
+        let parentNodeElement = this.getParentNodeElement(nodeElement);
+        if (parentNodeElement) {
+            if (parentNodeElement.nextElementSibling)
+                return parentNodeElement.nextElementSibling;
+            else
+                return this.findNextSiblingOfAncestor(parentNodeElement);
+        }
+        else {
+            return null;
+        }
+    }
+    findLastVisibleDescendant(nodeElement) {
+        const listElement = Array.from(nodeElement.children).find(el => DomHandler.hasClass(el, 'p-treenode'));
+        const childrenListElement = listElement.children[1];
+        if (childrenListElement && childrenListElement.children.length > 0) {
+            const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];
+            return this.findLastVisibleDescendant(lastChildElement);
+        }
+        else {
+            return nodeElement;
+        }
+    }
+    getParentNodeElement(nodeElement) {
+        const parentNodeElement = nodeElement.parentElement.parentElement.parentElement;
+        return parentNodeElement.tagName === 'P-TREENODE' ? parentNodeElement : null;
+    }
+    focusNode(element) {
+        if (this.tree.droppableNodes)
+            element.children[1].children[0].focus();
+        else
+            element.children[0].children[0].focus();
+    }
+}
+UITreeNode.ICON_CLASS = 'p-treenode-icon ';
+UITreeNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: UITreeNode, deps: [{ token: forwardRef(() => Tree) }], target: i0.ɵɵFactoryTarget.Component });
+UITreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: UITreeNode, selector: "p-treeNode", inputs: { rowNode: "rowNode", node: "node", parentNode: "parentNode", root: "root", index: "index", firstChild: "firstChild", lastChild: "lastChild", level: "level", indentation: "indentation" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <ng-template [ngIf]="node">
+            <li *ngIf="tree.droppableNodes" class="p-treenode-droppoint" [ngClass]="{'p-treenode-droppoint-active':draghoverPrev}"
+            (drop)="onDropPoint($event,-1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,-1)" (dragleave)="onDropPointDragLeave($event)"></li>
+            <li *ngIf="!tree.horizontal" [ngClass]="['p-treenode',node.styleClass||'', isLeaf() ? 'p-treenode-leaf': '']">
+                <div class="p-treenode-content" [style.paddingLeft]="(level * indentation)  + 'rem'" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)" (touchend)="onNodeTouchEnd()"
+                    (drop)="onDropNode($event)" (dragover)="onDropNodeDragOver($event)" (dragenter)="onDropNodeDragEnter($event)" (dragleave)="onDropNodeDragLeave($event)"
+                    [draggable]="tree.draggableNodes" (dragstart)="onDragStart($event)" (dragend)="onDragStop($event)" [attr.tabindex]="0"
+                    [ngClass]="{'p-treenode-selectable':tree.selectionMode && node.selectable !== false,'p-treenode-dragover':draghoverNode, 'p-highlight':isSelected()}" role="treeitem"
+                    (keydown)="onKeyDown($event)" [attr.aria-posinset]="this.index + 1" [attr.aria-expanded]="this.node.expanded" [attr.aria-selected]="isSelected()" [attr.aria-label]="node.label">
+                    <button type="button" [attr.aria-label]="tree.togglerAriaLabel" class="p-tree-toggler p-link" (click)="toggle($event)" pRipple tabindex="-1">
+                        <span class="p-tree-toggler-icon pi pi-fw" [ngClass]="{'pi-chevron-right':!node.expanded,'pi-chevron-down':node.expanded}"></span>
+                    </button>
+                    <div class="p-checkbox p-component" [ngClass]="{'p-checkbox-disabled': node.selectable === false}" *ngIf="tree.selectionMode == 'checkbox'" [attr.aria-checked]="isSelected()">
+                        <div class="p-checkbox-box" [ngClass]="{'p-highlight': isSelected(), 'p-indeterminate': node.partialSelected}">
+                            <span class="p-checkbox-icon pi" [ngClass]="{'pi-check':isSelected(),'pi-minus':node.partialSelected}"></span>
+                        </div>
+                    </div>
+                    <span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span>
+                    <span class="p-treenode-label">
+                            <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>
+                            <span *ngIf="tree.getTemplateForNode(node)">
+                                <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
+                            </span>
+                    </span>
+                </div>
+                <ul class="p-treenode-children" style="display: none;" *ngIf="!tree.virtualScroll && node.children && node.expanded" [style.display]="node.expanded ? 'block' : 'none'" role="group">
+                    <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; let index=index; trackBy: tree.trackBy" [node]="childNode" [parentNode]="node"
+                        [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [style.height.px]="tree.virtualNodeHeight" [level]="level + 1"></p-treeNode>
+                </ul>
+            </li>
+            <li *ngIf="tree.droppableNodes&&lastChild" class="p-treenode-droppoint" [ngClass]="{'p-treenode-droppoint-active':draghoverNext}"
+            (drop)="onDropPoint($event,1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,1)" (dragleave)="onDropPointDragLeave($event)"></li>
+            <table *ngIf="tree.horizontal" [class]="node.styleClass">
+                <tbody>
+                    <tr>
+                        <td class="p-treenode-connector" *ngIf="!root">
+                            <table class="p-treenode-connector-table">
+                                <tbody>
+                                    <tr>
+                                        <td [ngClass]="{'p-treenode-connector-line':!firstChild}"></td>
+                                    </tr>
+                                    <tr>
+                                        <td [ngClass]="{'p-treenode-connector-line':!lastChild}"></td>
+                                    </tr>
+                                </tbody>
+                            </table>
+                        </td>
+                        <td class="p-treenode" [ngClass]="{'p-treenode-collapsed':!node.expanded}">
+                            <div class="p-treenode-content" tabindex="0" [ngClass]="{'p-treenode-selectable':tree.selectionMode,'p-highlight':isSelected()}" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)"
+                                (touchend)="onNodeTouchEnd()" (keydown)="onNodeKeydown($event)">
+                                <span [attr.aria-label]="tree.togglerAriaLabel" class="p-tree-toggler pi pi-fw" [ngClass]="{'pi-plus':!node.expanded,'pi-minus':node.expanded}" *ngIf="!isLeaf()" (click)="toggle($event)"></span>
+                                <span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span>
+                                <span class="p-treenode-label">
+                                    <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>
+                                    <span *ngIf="tree.getTemplateForNode(node)">
+                                        <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
+                                    </span>
+                                </span>
+                            </div>
+                        </td>
+                        <td class="p-treenode-children-container" *ngIf="node.children && node.expanded" [style.display]="node.expanded ? 'table-cell' : 'none'">
+                            <div class="p-treenode-children">
+                                <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; trackBy: tree.trackBy" [node]="childNode"
+                                        [firstChild]="firstChild" [lastChild]="lastChild"></p-treeNode>
+                            </div>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </ng-template>
+    `, isInline: true, components: [{ type: UITreeNode, selector: "p-treeNode", inputs: ["rowNode", "node", "parentNode", "root", "index", "firstChild", "lastChild", "level", "indentation"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.Ripple, selector: "[pRipple]" }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: UITreeNode, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-treeNode',
+                    template: `
+        <ng-template [ngIf]="node">
+            <li *ngIf="tree.droppableNodes" class="p-treenode-droppoint" [ngClass]="{'p-treenode-droppoint-active':draghoverPrev}"
+            (drop)="onDropPoint($event,-1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,-1)" (dragleave)="onDropPointDragLeave($event)"></li>
+            <li *ngIf="!tree.horizontal" [ngClass]="['p-treenode',node.styleClass||'', isLeaf() ? 'p-treenode-leaf': '']">
+                <div class="p-treenode-content" [style.paddingLeft]="(level * indentation)  + 'rem'" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)" (touchend)="onNodeTouchEnd()"
+                    (drop)="onDropNode($event)" (dragover)="onDropNodeDragOver($event)" (dragenter)="onDropNodeDragEnter($event)" (dragleave)="onDropNodeDragLeave($event)"
+                    [draggable]="tree.draggableNodes" (dragstart)="onDragStart($event)" (dragend)="onDragStop($event)" [attr.tabindex]="0"
+                    [ngClass]="{'p-treenode-selectable':tree.selectionMode && node.selectable !== false,'p-treenode-dragover':draghoverNode, 'p-highlight':isSelected()}" role="treeitem"
+                    (keydown)="onKeyDown($event)" [attr.aria-posinset]="this.index + 1" [attr.aria-expanded]="this.node.expanded" [attr.aria-selected]="isSelected()" [attr.aria-label]="node.label">
+                    <button type="button" [attr.aria-label]="tree.togglerAriaLabel" class="p-tree-toggler p-link" (click)="toggle($event)" pRipple tabindex="-1">
+                        <span class="p-tree-toggler-icon pi pi-fw" [ngClass]="{'pi-chevron-right':!node.expanded,'pi-chevron-down':node.expanded}"></span>
+                    </button>
+                    <div class="p-checkbox p-component" [ngClass]="{'p-checkbox-disabled': node.selectable === false}" *ngIf="tree.selectionMode == 'checkbox'" [attr.aria-checked]="isSelected()">
+                        <div class="p-checkbox-box" [ngClass]="{'p-highlight': isSelected(), 'p-indeterminate': node.partialSelected}">
+                            <span class="p-checkbox-icon pi" [ngClass]="{'pi-check':isSelected(),'pi-minus':node.partialSelected}"></span>
+                        </div>
+                    </div>
+                    <span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span>
+                    <span class="p-treenode-label">
+                            <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>
+                            <span *ngIf="tree.getTemplateForNode(node)">
+                                <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
+                            </span>
+                    </span>
+                </div>
+                <ul class="p-treenode-children" style="display: none;" *ngIf="!tree.virtualScroll && node.children && node.expanded" [style.display]="node.expanded ? 'block' : 'none'" role="group">
+                    <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; let index=index; trackBy: tree.trackBy" [node]="childNode" [parentNode]="node"
+                        [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [style.height.px]="tree.virtualNodeHeight" [level]="level + 1"></p-treeNode>
+                </ul>
+            </li>
+            <li *ngIf="tree.droppableNodes&&lastChild" class="p-treenode-droppoint" [ngClass]="{'p-treenode-droppoint-active':draghoverNext}"
+            (drop)="onDropPoint($event,1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,1)" (dragleave)="onDropPointDragLeave($event)"></li>
+            <table *ngIf="tree.horizontal" [class]="node.styleClass">
+                <tbody>
+                    <tr>
+                        <td class="p-treenode-connector" *ngIf="!root">
+                            <table class="p-treenode-connector-table">
+                                <tbody>
+                                    <tr>
+                                        <td [ngClass]="{'p-treenode-connector-line':!firstChild}"></td>
+                                    </tr>
+                                    <tr>
+                                        <td [ngClass]="{'p-treenode-connector-line':!lastChild}"></td>
+                                    </tr>
+                                </tbody>
+                            </table>
+                        </td>
+                        <td class="p-treenode" [ngClass]="{'p-treenode-collapsed':!node.expanded}">
+                            <div class="p-treenode-content" tabindex="0" [ngClass]="{'p-treenode-selectable':tree.selectionMode,'p-highlight':isSelected()}" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)"
+                                (touchend)="onNodeTouchEnd()" (keydown)="onNodeKeydown($event)">
+                                <span [attr.aria-label]="tree.togglerAriaLabel" class="p-tree-toggler pi pi-fw" [ngClass]="{'pi-plus':!node.expanded,'pi-minus':node.expanded}" *ngIf="!isLeaf()" (click)="toggle($event)"></span>
+                                <span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span>
+                                <span class="p-treenode-label">
+                                    <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>
+                                    <span *ngIf="tree.getTemplateForNode(node)">
+                                        <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
+                                    </span>
+                                </span>
+                            </div>
+                        </td>
+                        <td class="p-treenode-children-container" *ngIf="node.children && node.expanded" [style.display]="node.expanded ? 'table-cell' : 'none'">
+                            <div class="p-treenode-children">
+                                <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; trackBy: tree.trackBy" [node]="childNode"
+                                        [firstChild]="firstChild" [lastChild]="lastChild"></p-treeNode>
+                            </div>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </ng-template>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: undefined, decorators: [{
+                    type: Inject,
+                    args: [forwardRef(() => Tree)]
+                }] }]; }, propDecorators: { rowNode: [{
+                type: Input
+            }], node: [{
+                type: Input
+            }], parentNode: [{
+                type: Input
+            }], root: [{
+                type: Input
+            }], index: [{
+                type: Input
+            }], firstChild: [{
+                type: Input
+            }], lastChild: [{
+                type: Input
+            }], level: [{
+                type: Input
+            }], indentation: [{
+                type: Input
+            }] } });
+class Tree {
+    constructor(el, dragDropService, config) {
+        this.el = el;
+        this.dragDropService = dragDropService;
+        this.config = config;
+        this.selectionChange = new EventEmitter();
+        this.onNodeSelect = new EventEmitter();
+        this.onNodeUnselect = new EventEmitter();
+        this.onNodeExpand = new EventEmitter();
+        this.onNodeCollapse = new EventEmitter();
+        this.onNodeContextMenuSelect = new EventEmitter();
+        this.onNodeDrop = new EventEmitter();
+        this.layout = 'vertical';
+        this.metaKeySelection = true;
+        this.propagateSelectionUp = true;
+        this.propagateSelectionDown = true;
+        this.loadingIcon = 'pi pi-spinner';
+        this.emptyMessage = '';
+        this.filterBy = 'label';
+        this.filterMode = 'lenient';
+        this.indentation = 1.5;
+        this.trackBy = (index, item) => item;
+        this.onFilter = new EventEmitter();
+    }
+    ngOnInit() {
+        if (this.droppableNodes) {
+            this.dragStartSubscription = this.dragDropService.dragStart$.subscribe(event => {
+                this.dragNodeTree = event.tree;
+                this.dragNode = event.node;
+                this.dragNodeSubNodes = event.subNodes;
+                this.dragNodeIndex = event.index;
+                this.dragNodeScope = event.scope;
+            });
+            this.dragStopSubscription = this.dragDropService.dragStop$.subscribe(event => {
+                this.dragNodeTree = null;
+                this.dragNode = null;
+                this.dragNodeSubNodes = null;
+                this.dragNodeIndex = null;
+                this.dragNodeScope = null;
+                this.dragHover = false;
+            });
+        }
+    }
+    ngOnChanges(simpleChange) {
+        if (simpleChange.value) {
+            this.updateSerializedValue();
+        }
+        if (simpleChange.scrollHeight && this.virtualScrollBody) {
+            this.virtualScrollBody.ngOnInit();
+        }
+    }
+    get horizontal() {
+        return this.layout == 'horizontal';
+    }
+    get emptyMessageLabel() {
+        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
+    }
+    ngAfterContentInit() {
+        if (this.templates.length) {
+            this.templateMap = {};
+        }
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'empty':
+                    this.emptyMessageTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.templateMap[item.name] = item.template;
+                    break;
+            }
+        });
+    }
+    updateSerializedValue() {
+        this.serializedValue = [];
+        this.serializeNodes(null, this.getRootNode(), 0, true);
+    }
+    serializeNodes(parent, nodes, level, visible) {
+        if (nodes && nodes.length) {
+            for (let node of nodes) {
+                node.parent = parent;
+                const rowNode = {
+                    node: node,
+                    parent: parent,
+                    level: level,
+                    visible: visible && (parent ? parent.expanded : true)
+                };
+                this.serializedValue.push(rowNode);
+                if (rowNode.visible && node.expanded) {
+                    this.serializeNodes(node, node.children, level + 1, rowNode.visible);
+                }
+            }
+        }
+    }
+    onNodeClick(event, node) {
+        let eventTarget = event.target;
+        if (DomHandler.hasClass(eventTarget, 'p-tree-toggler') || DomHandler.hasClass(eventTarget, 'p-tree-toggler-icon')) {
+            return;
+        }
+        else if (this.selectionMode) {
+            if (node.selectable === false) {
+                return;
+            }
+            if (this.hasFilteredNodes()) {
+                node = this.getNodeWithKey(node.key, this.value);
+                if (!node) {
+                    return;
+                }
+            }
+            let index = this.findIndexInSelection(node);
+            let selected = (index >= 0);
+            if (this.isCheckboxSelectionMode()) {
+                if (selected) {
+                    if (this.propagateSelectionDown)
+                        this.propagateDown(node, false);
+                    else
+                        this.selection = this.selection.filter((val, i) => i != index);
+                    if (this.propagateSelectionUp && node.parent) {
+                        this.propagateUp(node.parent, false);
+                    }
+                    this.selectionChange.emit(this.selection);
+                    this.onNodeUnselect.emit({ originalEvent: event, node: node });
+                }
+                else {
+                    if (this.propagateSelectionDown)
+                        this.propagateDown(node, true);
+                    else
+                        this.selection = [...this.selection || [], node];
+                    if (this.propagateSelectionUp && node.parent) {
+                        this.propagateUp(node.parent, true);
+                    }
+                    this.selectionChange.emit(this.selection);
+                    this.onNodeSelect.emit({ originalEvent: event, node: node });
+                }
+            }
+            else {
+                let metaSelection = this.nodeTouched ? false : this.metaKeySelection;
+                if (metaSelection) {
+                    let metaKey = (event.metaKey || event.ctrlKey);
+                    if (selected && metaKey) {
+                        if (this.isSingleSelectionMode()) {
+                            this.selectionChange.emit(null);
+                        }
+                        else {
+                            this.selection = this.selection.filter((val, i) => i != index);
+                            this.selectionChange.emit(this.selection);
+                        }
+                        this.onNodeUnselect.emit({ originalEvent: event, node: node });
+                    }
+                    else {
+                        if (this.isSingleSelectionMode()) {
+                            this.selectionChange.emit(node);
+                        }
+                        else if (this.isMultipleSelectionMode()) {
+                            this.selection = (!metaKey) ? [] : this.selection || [];
+                            this.selection = [...this.selection, node];
+                            this.selectionChange.emit(this.selection);
+                        }
+                        this.onNodeSelect.emit({ originalEvent: event, node: node });
+                    }
+                }
+                else {
+                    if (this.isSingleSelectionMode()) {
+                        if (selected) {
+                            this.selection = null;
+                            this.onNodeUnselect.emit({ originalEvent: event, node: node });
+                        }
+                        else {
+                            this.selection = node;
+                            this.onNodeSelect.emit({ originalEvent: event, node: node });
+                        }
+                    }
+                    else {
+                        if (selected) {
+                            this.selection = this.selection.filter((val, i) => i != index);
+                            this.onNodeUnselect.emit({ originalEvent: event, node: node });
+                        }
+                        else {
+                            this.selection = [...this.selection || [], node];
+                            this.onNodeSelect.emit({ originalEvent: event, node: node });
+                        }
+                    }
+                    this.selectionChange.emit(this.selection);
+                }
+            }
+        }
+        this.nodeTouched = false;
+    }
+    onNodeTouchEnd() {
+        this.nodeTouched = true;
+    }
+    onNodeRightClick(event, node) {
+        if (this.contextMenu) {
+            let eventTarget = event.target;
+            if (eventTarget.className && eventTarget.className.indexOf('p-tree-toggler') === 0) {
+                return;
+            }
+            else {
+                let index = this.findIndexInSelection(node);
+                let selected = (index >= 0);
+                if (!selected) {
+                    if (this.isSingleSelectionMode())
+                        this.selectionChange.emit(node);
+                    else
+                        this.selectionChange.emit([node]);
+                }
+                this.contextMenu.show(event);
+                this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });
+            }
+        }
+    }
+    findIndexInSelection(node) {
+        let index = -1;
+        if (this.selectionMode && this.selection) {
+            if (this.isSingleSelectionMode()) {
+                let areNodesEqual = (this.selection.key && this.selection.key === node.key) || this.selection == node;
+                index = areNodesEqual ? 0 : -1;
+            }
+            else {
+                for (let i = 0; i < this.selection.length; i++) {
+                    let selectedNode = this.selection[i];
+                    let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;
+                    if (areNodesEqual) {
+                        index = i;
+                        break;
+                    }
+                }
+            }
+        }
+        return index;
+    }
+    syncNodeOption(node, parentNodes, option, value) {
+        // to synchronize the node option between the filtered nodes and the original nodes(this.value)
+        const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;
+        if (_node) {
+            _node[option] = value || node[option];
+        }
+    }
+    hasFilteredNodes() {
+        return this.filter && this.filteredNodes && this.filteredNodes.length;
+    }
+    getNodeWithKey(key, nodes) {
+        for (let node of nodes) {
+            if (node.key === key) {
+                return node;
+            }
+            if (node.children) {
+                let matchedNode = this.getNodeWithKey(key, node.children);
+                if (matchedNode) {
+                    return matchedNode;
+                }
+            }
+        }
+    }
+    propagateUp(node, select) {
+        if (node.children && node.children.length) {
+            let selectedCount = 0;
+            let childPartialSelected = false;
+            for (let child of node.children) {
+                if (this.isSelected(child)) {
+                    selectedCount++;
+                }
+                else if (child.partialSelected) {
+                    childPartialSelected = true;
+                }
+            }
+            if (select && selectedCount == node.children.length) {
+                this.selection = [...this.selection || [], node];
+                node.partialSelected = false;
+            }
+            else {
+                if (!select) {
+                    let index = this.findIndexInSelection(node);
+                    if (index >= 0) {
+                        this.selection = this.selection.filter((val, i) => i != index);
+                    }
+                }
+                if (childPartialSelected || selectedCount > 0 && selectedCount != node.children.length)
+                    node.partialSelected = true;
+                else
+                    node.partialSelected = false;
+            }
+            this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
+        }
+        let parent = node.parent;
+        if (parent) {
+            this.propagateUp(parent, select);
+        }
+    }
+    propagateDown(node, select) {
+        let index = this.findIndexInSelection(node);
+        if (select && index == -1) {
+            this.selection = [...this.selection || [], node];
+        }
+        else if (!select && index > -1) {
+            this.selection = this.selection.filter((val, i) => i != index);
+        }
+        node.partialSelected = false;
+        this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
+        if (node.children && node.children.length) {
+            for (let child of node.children) {
+                this.propagateDown(child, select);
+            }
+        }
+    }
+    isSelected(node) {
+        return this.findIndexInSelection(node) != -1;
+    }
+    isSingleSelectionMode() {
+        return this.selectionMode && this.selectionMode == 'single';
+    }
+    isMultipleSelectionMode() {
+        return this.selectionMode && this.selectionMode == 'multiple';
+    }
+    isCheckboxSelectionMode() {
+        return this.selectionMode && this.selectionMode == 'checkbox';
+    }
+    isNodeLeaf(node) {
+        return node.leaf == false ? false : !(node.children && node.children.length);
+    }
+    getRootNode() {
+        return this.filteredNodes ? this.filteredNodes : this.value;
+    }
+    getTemplateForNode(node) {
+        if (this.templateMap)
+            return node.type ? this.templateMap[node.type] : this.templateMap['default'];
+        else
+            return null;
+    }
+    onDragOver(event) {
+        if (this.droppableNodes && (!this.value || this.value.length === 0)) {
+            event.dataTransfer.dropEffect = 'move';
+            event.preventDefault();
+        }
+    }
+    onDrop(event) {
+        if (this.droppableNodes && (!this.value || this.value.length === 0)) {
+            event.preventDefault();
+            let dragNode = this.dragNode;
+            if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
+                let dragNodeIndex = this.dragNodeIndex;
+                this.value = this.value || [];
+                if (this.validateDrop) {
+                    this.onNodeDrop.emit({
+                        originalEvent: event,
+                        dragNode: dragNode,
+                        dropNode: null,
+                        index: dragNodeIndex,
+                        accept: () => {
+                            this.processTreeDrop(dragNode, dragNodeIndex);
+                        }
+                    });
+                }
+                else {
+                    this.onNodeDrop.emit({
+                        originalEvent: event,
+                        dragNode: dragNode,
+                        dropNode: null,
+                        index: dragNodeIndex
+                    });
+                    this.processTreeDrop(dragNode, dragNodeIndex);
+                }
+            }
+        }
+    }
+    processTreeDrop(dragNode, dragNodeIndex) {
+        this.dragNodeSubNodes.splice(dragNodeIndex, 1);
+        this.value.push(dragNode);
+        this.dragDropService.stopDrag({
+            node: dragNode
+        });
+    }
+    onDragEnter() {
+        if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
+            this.dragHover = true;
+        }
+    }
+    onDragLeave(event) {
+        if (this.droppableNodes) {
+            let rect = event.currentTarget.getBoundingClientRect();
+            if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {
+                this.dragHover = false;
+            }
+        }
+    }
+    allowDrop(dragNode, dropNode, dragNodeScope) {
+        if (!dragNode) {
+            //prevent random html elements to be dragged
+            return false;
+        }
+        else if (this.isValidDragScope(dragNodeScope)) {
+            let allow = true;
+            if (dropNode) {
+                if (dragNode === dropNode) {
+                    allow = false;
+                }
+                else {
+                    let parent = dropNode.parent;
+                    while (parent != null) {
+                        if (parent === dragNode) {
+                            allow = false;
+                            break;
+                        }
+                        parent = parent.parent;
+                    }
+                }
+            }
+            return allow;
+        }
+        else {
+            return false;
+        }
+    }
+    isValidDragScope(dragScope) {
+        let dropScope = this.droppableScope;
+        if (dropScope) {
+            if (typeof dropScope === 'string') {
+                if (typeof dragScope === 'string')
+                    return dropScope === dragScope;
+                else if (dragScope instanceof Array)
+                    return dragScope.indexOf(dropScope) != -1;
+            }
+            else if (dropScope instanceof Array) {
+                if (typeof dragScope === 'string') {
+                    return dropScope.indexOf(dragScope) != -1;
+                }
+                else if (dragScope instanceof Array) {
+                    for (let s of dropScope) {
+                        for (let ds of dragScope) {
+                            if (s === ds) {
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+        else {
+            return true;
+        }
+    }
+    _filter(value) {
+        let filterValue = value;
+        if (filterValue === '') {
+            this.filteredNodes = null;
+        }
+        else {
+            this.filteredNodes = [];
+            const searchFields = this.filterBy.split(',');
+            const filterText = ObjectUtils.removeAccents(filterValue).toLocaleLowerCase(this.filterLocale);
+            const isStrictMode = this.filterMode === 'strict';
+            for (let node of this.value) {
+                let copyNode = { ...node };
+                let paramsWithoutNode = { searchFields, filterText, isStrictMode };
+                if ((isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||
+                    (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {
+                    this.filteredNodes.push(copyNode);
+                }
+            }
+        }
+        this.updateSerializedValue();
+        this.onFilter.emit({
+            filter: filterValue,
+            filteredValue: this.filteredNodes
+        });
+    }
+    resetFilter() {
+        this.filteredNodes = null;
+        if (this.filterViewChild && this.filterViewChild.nativeElement) {
+            this.filterViewChild.nativeElement.value = '';
+        }
+    }
+    findFilteredNodes(node, paramsWithoutNode) {
+        if (node) {
+            let matched = false;
+            if (node.children) {
+                let childNodes = [...node.children];
+                node.children = [];
+                for (let childNode of childNodes) {
+                    let copyChildNode = { ...childNode };
+                    if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {
+                        matched = true;
+                        node.children.push(copyChildNode);
+                    }
+                }
+            }
+            if (matched) {
+                node.expanded = true;
+                return true;
+            }
+        }
+    }
+    isFilterMatched(node, { searchFields, filterText, isStrictMode }) {
+        let matched = false;
+        for (let field of searchFields) {
+            let fieldValue = ObjectUtils.removeAccents(String(ObjectUtils.resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale);
+            if (fieldValue.indexOf(filterText) > -1) {
+                matched = true;
+            }
+        }
+        if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {
+            matched = this.findFilteredNodes(node, { searchFields, filterText, isStrictMode }) || matched;
+        }
+        return matched;
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    ngOnDestroy() {
+        if (this.dragStartSubscription) {
+            this.dragStartSubscription.unsubscribe();
+        }
+        if (this.dragStopSubscription) {
+            this.dragStopSubscription.unsubscribe();
+        }
+    }
+}
+Tree.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Tree, deps: [{ token: i0.ElementRef }, { token: i3.TreeDragDropService, optional: true }, { token: i3.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component });
+Tree.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: Tree, selector: "p-tree", inputs: { value: "value", selectionMode: "selectionMode", selection: "selection", style: "style", styleClass: "styleClass", contextMenu: "contextMenu", layout: "layout", draggableScope: "draggableScope", droppableScope: "droppableScope", draggableNodes: "draggableNodes", droppableNodes: "droppableNodes", metaKeySelection: "metaKeySelection", propagateSelectionUp: "propagateSelectionUp", propagateSelectionDown: "propagateSelectionDown", loading: "loading", loadingIcon: "loadingIcon", emptyMessage: "emptyMessage", ariaLabel: "ariaLabel", togglerAriaLabel: "togglerAriaLabel", ariaLabelledBy: "ariaLabelledBy", validateDrop: "validateDrop", filter: "filter", filterBy: "filterBy", filterMode: "filterMode", filterPlaceholder: "filterPlaceholder", filterLocale: "filterLocale", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", virtualNodeHeight: "virtualNodeHeight", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", indentation: "indentation", trackBy: "trackBy" }, outputs: { selectionChange: "selectionChange", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onNodeExpand: "onNodeExpand", onNodeCollapse: "onNodeCollapse", onNodeContextMenuSelect: "onNodeContextMenuSelect", onNodeDrop: "onNodeDrop", onFilter: "onFilter" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "virtualScrollBody", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
+        <div [ngClass]="{'p-tree p-component':true,'p-tree-selectable':selectionMode,
+                'p-treenode-dragover':dragHover,'p-tree-loading': loading, 'p-tree-flex-scrollable': scrollHeight === 'flex'}"
+            [ngStyle]="style" [class]="styleClass" *ngIf="!horizontal"
+            (drop)="onDrop($event)" (dragover)="onDragOver($event)" (dragenter)="onDragEnter()" (dragleave)="onDragLeave($event)">
+            <div class="p-tree-loading-overlay p-component-overlay" *ngIf="loading">
+                <i [class]="'p-tree-loading-icon pi-spin ' + loadingIcon"></i>
+            </div>
+            <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            <div *ngIf="filter" class="p-tree-filter-container">
+                <input #filter type="text" autocomplete="off" class="p-tree-filter p-inputtext p-component" [attr.placeholder]="filterPlaceholder"
+                    (keydown.enter)="$event.preventDefault()" (input)="_filter($event.target.value)">
+                    <span class="p-tree-filter-icon pi pi-search"></span>
+            </div>
+            <ng-container *ngIf="!virtualScroll; else virtualScrollList">
+                <div class="p-tree-wrapper" [style.max-height]="scrollHeight">
+                    <ul class="p-tree-container" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
+                        <p-treeNode *ngFor="let node of getRootNode(); let firstChild=first;let lastChild=last; let index=index; trackBy: trackBy" [node]="node"
+                                    [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [level]="0"></p-treeNode>
+                    </ul>
+                </div>
+            </ng-container>
+            <ng-template #virtualScrollList>
+                <cdk-virtual-scroll-viewport class="p-tree-wrapper" [style.height]="scrollHeight" [itemSize]="virtualNodeHeight" [minBufferPx]="minBufferPx" [maxBufferPx]="maxBufferPx">
+                    <ul class="p-tree-container" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
+                        <p-treeNode *cdkVirtualFor="let rowNode of serializedValue; let firstChild=first; let lastChild=last; let index=index; trackBy: trackBy; templateCacheSize: 0"  [level]="rowNode.level"
+                                    [rowNode]="rowNode" [node]="rowNode.node" [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [style.height.px]="virtualNodeHeight" [indentation]="indentation"></p-treeNode>
+                    </ul>
+                </cdk-virtual-scroll-viewport>
+            </ng-template>
+            <div class="p-tree-empty-message" *ngIf="!loading && (getRootNode() == null || getRootNode().length === 0)">
+                <ng-container *ngIf="!emptyMessageTemplate; else emptyFilter">
+                    {{emptyMessageLabel}}
+                </ng-container>
+                <ng-container #emptyFilter *ngTemplateOutlet="emptyMessageTemplate"></ng-container>
+            </div>
+            <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+        </div>
+        <div [ngClass]="{'p-tree p-tree-horizontal p-component':true,'p-tree-selectable':selectionMode}"  [ngStyle]="style" [class]="styleClass" *ngIf="horizontal">
+            <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            <div class="p-tree-loading-mask p-component-overlay" *ngIf="loading">
+                <i [class]="'p-tree-loading-icon pi-spin ' + loadingIcon"></i>
+            </div>
+            <table *ngIf="value&&value[0]">
+                <p-treeNode [node]="value[0]" [root]="true"></p-treeNode>
+            </table>
+            <div class="p-tree-empty-message" *ngIf="!loading && (getRootNode() == null || getRootNode().length === 0)">
+                <ng-container *ngIf="!emptyMessageTemplate; else emptyFilter">
+                    {{emptyMessageLabel}}
+                </ng-container>
+                <ng-container #emptyFilter *ngTemplateOutlet="emptyMessageTemplate"></ng-container>
+            </div>
+            <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+        </div>
+    `, isInline: true, styles: [".p-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}.p-treenode-children{margin:0;padding:0;list-style-type:none}.p-tree-wrapper{overflow:auto}.p-treenode-selectable{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-tree-toggler{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-treenode-leaf>.p-treenode-content .p-tree-toggler{visibility:hidden}.p-treenode-content{display:flex;align-items:center}.p-tree-filter{width:100%}.p-tree-filter-container{position:relative;display:block;width:100%}.p-tree-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-tree-loading{position:relative;min-height:4rem}.p-tree .p-tree-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}.p-tree-flex-scrollable{display:flex;flex:1;height:100%;flex-direction:column}.p-tree-flex-scrollable .p-tree-wrapper{flex:1}.p-tree .p-treenode-droppoint{height:4px;list-style-type:none}.p-tree .p-treenode-droppoint-active{border:0 none}.p-tree-horizontal{width:auto;padding-left:0;padding-right:0;overflow:auto}.p-tree.p-tree-horizontal table,.p-tree.p-tree-horizontal tr,.p-tree.p-tree-horizontal td{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.p-tree-horizontal .p-treenode-content{font-weight:normal;padding:.4em 1em .4em .2em;display:flex;align-items:center}.p-tree-horizontal .p-treenode-parent .p-treenode-content{font-weight:normal;white-space:nowrap}.p-tree.p-tree-horizontal .p-treenode{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-x scroll center center transparent;padding:.25rem 2.5rem}.p-tree.p-tree-horizontal .p-treenode.p-treenode-leaf,.p-tree.p-tree-horizontal .p-treenode.p-treenode-collapsed{padding-right:0}.p-tree.p-tree-horizontal .p-treenode-children{padding:0;margin:0}.p-tree.p-tree-horizontal .p-treenode-connector{width:1px}.p-tree.p-tree-horizontal .p-treenode-connector-table{height:100%;width:1px}.p-tree.p-tree-horizontal .p-treenode-connector-line{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-y scroll 0 0 transparent;width:1px}.p-tree.p-tree-horizontal table{height:0}\n"], components: [{ type: UITreeNode, selector: "p-treeNode", inputs: ["rowNode", "node", "parentNode", "root", "index", "firstChild", "lastChild", "level", "indentation"] }, { type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i4.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Tree, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-tree', template: `
+        <div [ngClass]="{'p-tree p-component':true,'p-tree-selectable':selectionMode,
+                'p-treenode-dragover':dragHover,'p-tree-loading': loading, 'p-tree-flex-scrollable': scrollHeight === 'flex'}"
+            [ngStyle]="style" [class]="styleClass" *ngIf="!horizontal"
+            (drop)="onDrop($event)" (dragover)="onDragOver($event)" (dragenter)="onDragEnter()" (dragleave)="onDragLeave($event)">
+            <div class="p-tree-loading-overlay p-component-overlay" *ngIf="loading">
+                <i [class]="'p-tree-loading-icon pi-spin ' + loadingIcon"></i>
+            </div>
+            <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            <div *ngIf="filter" class="p-tree-filter-container">
+                <input #filter type="text" autocomplete="off" class="p-tree-filter p-inputtext p-component" [attr.placeholder]="filterPlaceholder"
+                    (keydown.enter)="$event.preventDefault()" (input)="_filter($event.target.value)">
+                    <span class="p-tree-filter-icon pi pi-search"></span>
+            </div>
+            <ng-container *ngIf="!virtualScroll; else virtualScrollList">
+                <div class="p-tree-wrapper" [style.max-height]="scrollHeight">
+                    <ul class="p-tree-container" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
+                        <p-treeNode *ngFor="let node of getRootNode(); let firstChild=first;let lastChild=last; let index=index; trackBy: trackBy" [node]="node"
+                                    [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [level]="0"></p-treeNode>
+                    </ul>
+                </div>
+            </ng-container>
+            <ng-template #virtualScrollList>
+                <cdk-virtual-scroll-viewport class="p-tree-wrapper" [style.height]="scrollHeight" [itemSize]="virtualNodeHeight" [minBufferPx]="minBufferPx" [maxBufferPx]="maxBufferPx">
+                    <ul class="p-tree-container" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
+                        <p-treeNode *cdkVirtualFor="let rowNode of serializedValue; let firstChild=first; let lastChild=last; let index=index; trackBy: trackBy; templateCacheSize: 0"  [level]="rowNode.level"
+                                    [rowNode]="rowNode" [node]="rowNode.node" [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [style.height.px]="virtualNodeHeight" [indentation]="indentation"></p-treeNode>
+                    </ul>
+                </cdk-virtual-scroll-viewport>
+            </ng-template>
+            <div class="p-tree-empty-message" *ngIf="!loading && (getRootNode() == null || getRootNode().length === 0)">
+                <ng-container *ngIf="!emptyMessageTemplate; else emptyFilter">
+                    {{emptyMessageLabel}}
+                </ng-container>
+                <ng-container #emptyFilter *ngTemplateOutlet="emptyMessageTemplate"></ng-container>
+            </div>
+            <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+        </div>
+        <div [ngClass]="{'p-tree p-tree-horizontal p-component':true,'p-tree-selectable':selectionMode}"  [ngStyle]="style" [class]="styleClass" *ngIf="horizontal">
+            <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            <div class="p-tree-loading-mask p-component-overlay" *ngIf="loading">
+                <i [class]="'p-tree-loading-icon pi-spin ' + loadingIcon"></i>
+            </div>
+            <table *ngIf="value&&value[0]">
+                <p-treeNode [node]="value[0]" [root]="true"></p-treeNode>
+            </table>
+            <div class="p-tree-empty-message" *ngIf="!loading && (getRootNode() == null || getRootNode().length === 0)">
+                <ng-container *ngIf="!emptyMessageTemplate; else emptyFilter">
+                    {{emptyMessageLabel}}
+                </ng-container>
+                <ng-container #emptyFilter *ngTemplateOutlet="emptyMessageTemplate"></ng-container>
+            </div>
+            <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}.p-treenode-children{margin:0;padding:0;list-style-type:none}.p-tree-wrapper{overflow:auto}.p-treenode-selectable{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-tree-toggler{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-treenode-leaf>.p-treenode-content .p-tree-toggler{visibility:hidden}.p-treenode-content{display:flex;align-items:center}.p-tree-filter{width:100%}.p-tree-filter-container{position:relative;display:block;width:100%}.p-tree-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.p-tree-loading{position:relative;min-height:4rem}.p-tree .p-tree-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}.p-tree-flex-scrollable{display:flex;flex:1;height:100%;flex-direction:column}.p-tree-flex-scrollable .p-tree-wrapper{flex:1}.p-tree .p-treenode-droppoint{height:4px;list-style-type:none}.p-tree .p-treenode-droppoint-active{border:0 none}.p-tree-horizontal{width:auto;padding-left:0;padding-right:0;overflow:auto}.p-tree.p-tree-horizontal table,.p-tree.p-tree-horizontal tr,.p-tree.p-tree-horizontal td{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.p-tree-horizontal .p-treenode-content{font-weight:normal;padding:.4em 1em .4em .2em;display:flex;align-items:center}.p-tree-horizontal .p-treenode-parent .p-treenode-content{font-weight:normal;white-space:nowrap}.p-tree.p-tree-horizontal .p-treenode{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-x scroll center center transparent;padding:.25rem 2.5rem}.p-tree.p-tree-horizontal .p-treenode.p-treenode-leaf,.p-tree.p-tree-horizontal .p-treenode.p-treenode-collapsed{padding-right:0}.p-tree.p-tree-horizontal .p-treenode-children{padding:0;margin:0}.p-tree.p-tree-horizontal .p-treenode-connector{width:1px}.p-tree.p-tree-horizontal .p-treenode-connector-table{height:100%;width:1px}.p-tree.p-tree-horizontal .p-treenode-connector-line{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-y scroll 0 0 transparent;width:1px}.p-tree.p-tree-horizontal table{height:0}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i3.TreeDragDropService, decorators: [{
+                    type: Optional
+                }] }, { type: i3.PrimeNGConfig }]; }, propDecorators: { value: [{
+                type: Input
+            }], selectionMode: [{
+                type: Input
+            }], selection: [{
+                type: Input
+            }], selectionChange: [{
+                type: Output
+            }], onNodeSelect: [{
+                type: Output
+            }], onNodeUnselect: [{
+                type: Output
+            }], onNodeExpand: [{
+                type: Output
+            }], onNodeCollapse: [{
+                type: Output
+            }], onNodeContextMenuSelect: [{
+                type: Output
+            }], onNodeDrop: [{
+                type: Output
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], contextMenu: [{
+                type: Input
+            }], layout: [{
+                type: Input
+            }], draggableScope: [{
+                type: Input
+            }], droppableScope: [{
+                type: Input
+            }], draggableNodes: [{
+                type: Input
+            }], droppableNodes: [{
+                type: Input
+            }], metaKeySelection: [{
+                type: Input
+            }], propagateSelectionUp: [{
+                type: Input
+            }], propagateSelectionDown: [{
+                type: Input
+            }], loading: [{
+                type: Input
+            }], loadingIcon: [{
+                type: Input
+            }], emptyMessage: [{
+                type: Input
+            }], ariaLabel: [{
+                type: Input
+            }], togglerAriaLabel: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], validateDrop: [{
+                type: Input
+            }], filter: [{
+                type: Input
+            }], filterBy: [{
+                type: Input
+            }], filterMode: [{
+                type: Input
+            }], filterPlaceholder: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], scrollHeight: [{
+                type: Input
+            }], virtualScroll: [{
+                type: Input
+            }], virtualNodeHeight: [{
+                type: Input
+            }], minBufferPx: [{
+                type: Input
+            }], maxBufferPx: [{
+                type: Input
+            }], indentation: [{
+                type: Input
+            }], trackBy: [{
+                type: Input
+            }], onFilter: [{
+                type: Output
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], virtualScrollBody: [{
+                type: ViewChild,
+                args: [CdkVirtualScrollViewport]
+            }], filterViewChild: [{
+                type: ViewChild,
+                args: ['filter']
+            }] } });
+class TreeModule {
+}
+TreeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TreeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeModule, declarations: [Tree, UITreeNode], imports: [CommonModule, ScrollingModule, RippleModule], exports: [Tree, SharedModule, ScrollingModule] });
+TreeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeModule, imports: [[CommonModule, ScrollingModule, RippleModule], SharedModule, ScrollingModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ScrollingModule, RippleModule],
+                    exports: [Tree, SharedModule, ScrollingModule],
+                    declarations: [Tree, UITreeNode]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { Tree, TreeModule, UITreeNode };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tree.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tree.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tree.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-tree.mjs","sources":["../../src/app/components/tree/tree.ts","../../src/app/components/tree/primeng-tree.ts"],"sourcesContent":["import {NgModule,Component,Input,AfterContentInit,OnDestroy,Output,EventEmitter,OnInit,OnChanges,\n    ContentChildren,QueryList,TemplateRef,Inject,ElementRef,forwardRef,ChangeDetectionStrategy,SimpleChanges, ViewEncapsulation, ViewChild} from '@angular/core';\nimport {CdkVirtualScrollViewport, ScrollingModule} from '@angular/cdk/scrolling';\nimport {Optional} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PrimeNGConfig, TranslationKeys, TreeNode} from 'primeng/api';\nimport {SharedModule} from 'primeng/api';\nimport {PrimeTemplate} from 'primeng/api';\nimport {TreeDragDropService} from 'primeng/api';\nimport {Subscription} from 'rxjs';\nimport {BlockableUI} from 'primeng/api';\nimport {ObjectUtils} from 'primeng/utils';\nimport {DomHandler} from 'primeng/dom';\nimport {RippleModule} from 'primeng/ripple';\n\n@Component({\n    selector: 'p-treeNode',\n    template: `\n        <ng-template [ngIf]=\"node\">\n            <li *ngIf=\"tree.droppableNodes\" class=\"p-treenode-droppoint\" [ngClass]=\"{'p-treenode-droppoint-active':draghoverPrev}\"\n            (drop)=\"onDropPoint($event,-1)\" (dragover)=\"onDropPointDragOver($event)\" (dragenter)=\"onDropPointDragEnter($event,-1)\" (dragleave)=\"onDropPointDragLeave($event)\"></li>\n            <li *ngIf=\"!tree.horizontal\" [ngClass]=\"['p-treenode',node.styleClass||'', isLeaf() ? 'p-treenode-leaf': '']\">\n                <div class=\"p-treenode-content\" [style.paddingLeft]=\"(level * indentation)  + 'rem'\" (click)=\"onNodeClick($event)\" (contextmenu)=\"onNodeRightClick($event)\" (touchend)=\"onNodeTouchEnd()\"\n                    (drop)=\"onDropNode($event)\" (dragover)=\"onDropNodeDragOver($event)\" (dragenter)=\"onDropNodeDragEnter($event)\" (dragleave)=\"onDropNodeDragLeave($event)\"\n                    [draggable]=\"tree.draggableNodes\" (dragstart)=\"onDragStart($event)\" (dragend)=\"onDragStop($event)\" [attr.tabindex]=\"0\"\n                    [ngClass]=\"{'p-treenode-selectable':tree.selectionMode && node.selectable !== false,'p-treenode-dragover':draghoverNode, 'p-highlight':isSelected()}\" role=\"treeitem\"\n                    (keydown)=\"onKeyDown($event)\" [attr.aria-posinset]=\"this.index + 1\" [attr.aria-expanded]=\"this.node.expanded\" [attr.aria-selected]=\"isSelected()\" [attr.aria-label]=\"node.label\">\n                    <button type=\"button\" [attr.aria-label]=\"tree.togglerAriaLabel\" class=\"p-tree-toggler p-link\" (click)=\"toggle($event)\" pRipple tabindex=\"-1\">\n                        <span class=\"p-tree-toggler-icon pi pi-fw\" [ngClass]=\"{'pi-chevron-right':!node.expanded,'pi-chevron-down':node.expanded}\"></span>\n                    </button>\n                    <div class=\"p-checkbox p-component\" [ngClass]=\"{'p-checkbox-disabled': node.selectable === false}\" *ngIf=\"tree.selectionMode == 'checkbox'\" [attr.aria-checked]=\"isSelected()\">\n                        <div class=\"p-checkbox-box\" [ngClass]=\"{'p-highlight': isSelected(), 'p-indeterminate': node.partialSelected}\">\n                            <span class=\"p-checkbox-icon pi\" [ngClass]=\"{'pi-check':isSelected(),'pi-minus':node.partialSelected}\"></span>\n                        </div>\n                    </div>\n                    <span [class]=\"getIcon()\" *ngIf=\"node.icon||node.expandedIcon||node.collapsedIcon\"></span>\n                    <span class=\"p-treenode-label\">\n                            <span *ngIf=\"!tree.getTemplateForNode(node)\">{{node.label}}</span>\n                            <span *ngIf=\"tree.getTemplateForNode(node)\">\n                                <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: {$implicit: node}\"></ng-container>\n                            </span>\n                    </span>\n                </div>\n                <ul class=\"p-treenode-children\" style=\"display: none;\" *ngIf=\"!tree.virtualScroll && node.children && node.expanded\" [style.display]=\"node.expanded ? 'block' : 'none'\" role=\"group\">\n                    <p-treeNode *ngFor=\"let childNode of node.children;let firstChild=first;let lastChild=last; let index=index; trackBy: tree.trackBy\" [node]=\"childNode\" [parentNode]=\"node\"\n                        [firstChild]=\"firstChild\" [lastChild]=\"lastChild\" [index]=\"index\" [style.height.px]=\"tree.virtualNodeHeight\" [level]=\"level + 1\"></p-treeNode>\n                </ul>\n            </li>\n            <li *ngIf=\"tree.droppableNodes&&lastChild\" class=\"p-treenode-droppoint\" [ngClass]=\"{'p-treenode-droppoint-active':draghoverNext}\"\n            (drop)=\"onDropPoint($event,1)\" (dragover)=\"onDropPointDragOver($event)\" (dragenter)=\"onDropPointDragEnter($event,1)\" (dragleave)=\"onDropPointDragLeave($event)\"></li>\n            <table *ngIf=\"tree.horizontal\" [class]=\"node.styleClass\">\n                <tbody>\n                    <tr>\n                        <td class=\"p-treenode-connector\" *ngIf=\"!root\">\n                            <table class=\"p-treenode-connector-table\">\n                                <tbody>\n                                    <tr>\n                                        <td [ngClass]=\"{'p-treenode-connector-line':!firstChild}\"></td>\n                                    </tr>\n                                    <tr>\n                                        <td [ngClass]=\"{'p-treenode-connector-line':!lastChild}\"></td>\n                                    </tr>\n                                </tbody>\n                            </table>\n                        </td>\n                        <td class=\"p-treenode\" [ngClass]=\"{'p-treenode-collapsed':!node.expanded}\">\n                            <div class=\"p-treenode-content\" tabindex=\"0\" [ngClass]=\"{'p-treenode-selectable':tree.selectionMode,'p-highlight':isSelected()}\" (click)=\"onNodeClick($event)\" (contextmenu)=\"onNodeRightClick($event)\"\n                                (touchend)=\"onNodeTouchEnd()\" (keydown)=\"onNodeKeydown($event)\">\n                                <span [attr.aria-label]=\"tree.togglerAriaLabel\" class=\"p-tree-toggler pi pi-fw\" [ngClass]=\"{'pi-plus':!node.expanded,'pi-minus':node.expanded}\" *ngIf=\"!isLeaf()\" (click)=\"toggle($event)\"></span>\n                                <span [class]=\"getIcon()\" *ngIf=\"node.icon||node.expandedIcon||node.collapsedIcon\"></span>\n                                <span class=\"p-treenode-label\">\n                                    <span *ngIf=\"!tree.getTemplateForNode(node)\">{{node.label}}</span>\n                                    <span *ngIf=\"tree.getTemplateForNode(node)\">\n                                        <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: {$implicit: node}\"></ng-container>\n                                    </span>\n                                </span>\n                            </div>\n                        </td>\n                        <td class=\"p-treenode-children-container\" *ngIf=\"node.children && node.expanded\" [style.display]=\"node.expanded ? 'table-cell' : 'none'\">\n                            <div class=\"p-treenode-children\">\n                                <p-treeNode *ngFor=\"let childNode of node.children;let firstChild=first;let lastChild=last; trackBy: tree.trackBy\" [node]=\"childNode\"\n                                        [firstChild]=\"firstChild\" [lastChild]=\"lastChild\"></p-treeNode>\n                            </div>\n                        </td>\n                    </tr>\n                </tbody>\n            </table>\n        </ng-template>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class UITreeNode implements OnInit {\n\n    static ICON_CLASS: string = 'p-treenode-icon ';\n\n    @Input() rowNode: any;\n\n    @Input() node: TreeNode;\n\n    @Input() parentNode: TreeNode;\n\n    @Input() root: boolean;\n\n    @Input() index: number;\n\n    @Input() firstChild: boolean;\n\n    @Input() lastChild: boolean;\n\n    @Input() level: number;\n\n    @Input() indentation: number;\n\n    tree: Tree;\n\n    constructor(@Inject(forwardRef(() => Tree)) tree) {\n        this.tree = tree as Tree;\n    }\n\n    draghoverPrev: boolean;\n\n    draghoverNext: boolean;\n\n    draghoverNode: boolean\n\n    ngOnInit() {\n        this.node.parent = this.parentNode;\n\n        if (this.parentNode) {\n            this.tree.syncNodeOption(this.node, this.tree.value, 'parent', this.tree.getNodeWithKey(this.parentNode.key, this.tree.value));\n        }\n    }\n\n    getIcon() {\n        let icon: string;\n\n        if (this.node.icon)\n            icon = this.node.icon;\n        else\n            icon = this.node.expanded && this.node.children && this.node.children.length ? this.node.expandedIcon : this.node.collapsedIcon;\n\n        return UITreeNode.ICON_CLASS + ' ' + icon;\n    }\n\n    isLeaf() {\n        return this.tree.isNodeLeaf(this.node);\n    }\n\n    toggle(event: Event) {\n        if (this.node.expanded)\n            this.collapse(event);\n        else\n            this.expand(event);\n    }\n\n    expand(event: Event) {\n        this.node.expanded = true;\n        if (this.tree.virtualScroll) {\n            this.tree.updateSerializedValue();\n        }\n        this.tree.onNodeExpand.emit({originalEvent: event, node: this.node});\n    }\n\n    collapse(event: Event) {\n        this.node.expanded = false;\n        if (this.tree.virtualScroll) {\n            this.tree.updateSerializedValue();\n        }\n        this.tree.onNodeCollapse.emit({originalEvent: event, node: this.node});\n    }\n\n    onNodeClick(event: MouseEvent) {\n        this.tree.onNodeClick(event, this.node);\n    }\n\n    onNodeKeydown(event: KeyboardEvent) {\n        if (event.which === 13) {\n            this.tree.onNodeClick(event, this.node);\n        }\n    }\n\n    onNodeTouchEnd() {\n        this.tree.onNodeTouchEnd();\n    }\n\n    onNodeRightClick(event: MouseEvent) {\n        this.tree.onNodeRightClick(event, this.node);\n    }\n\n    isSelected() {\n        return this.tree.isSelected(this.node);\n    }\n\n    onDropPoint(event: Event, position: number) {\n        event.preventDefault();\n        let dragNode = this.tree.dragNode;\n        let dragNodeIndex = this.tree.dragNodeIndex;\n        let dragNodeScope = this.tree.dragNodeScope;\n        let isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? (position === 1 || dragNodeIndex !== this.index - 1) : true;\n\n        if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {\n            let dropParams = {...this.createDropPointEventMetadata(position)};\n\n            if (this.tree.validateDrop) {\n                this.tree.onNodeDrop.emit({\n                    originalEvent: event,\n                    dragNode: dragNode,\n                    dropNode: this.node,\n                    index: this.index,\n                    accept: () => {\n                        this.processPointDrop(dropParams);\n                    }\n                });\n            }\n            else {\n                this.processPointDrop(dropParams);\n                this.tree.onNodeDrop.emit({\n                    originalEvent: event,\n                    dragNode: dragNode,\n                    dropNode: this.node,\n                    index: this.index\n                });\n            }\n        }\n\n        this.draghoverPrev = false;\n        this.draghoverNext = false;\n    }\n\n    processPointDrop(event) {\n        let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.tree.value;\n        event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);\n        let dropIndex = this.index;\n\n        if (event.position < 0) {\n            dropIndex = (event.dragNodeSubNodes === newNodeList) ? ((event.dragNodeIndex > event.index) ? event.index : event.index - 1) : event.index;\n            newNodeList.splice(dropIndex, 0, event.dragNode);\n        }\n        else {\n            dropIndex = newNodeList.length;\n            newNodeList.push(event.dragNode);\n        }\n\n        this.tree.dragDropService.stopDrag({\n            node: event.dragNode,\n            subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,\n            index: event.dragNodeIndex\n        });\n    }\n\n    createDropPointEventMetadata(position) {\n        return {\n            dragNode: this.tree.dragNode,\n            dragNodeIndex:  this.tree.dragNodeIndex,\n            dragNodeSubNodes: this.tree.dragNodeSubNodes,\n            dropNode: this.node,\n            index: this.index,\n            position: position\n        };\n    }\n\n    onDropPointDragOver(event) {\n        event.dataTransfer.dropEffect = 'move';\n        event.preventDefault();\n    }\n\n    onDropPointDragEnter(event: Event, position: number) {\n        if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {\n            if (position < 0)\n                this.draghoverPrev = true;\n            else\n                this.draghoverNext = true;\n        }\n    }\n\n    onDropPointDragLeave(event: Event) {\n        this.draghoverPrev = false;\n        this.draghoverNext = false;\n    }\n\n    onDragStart(event) {\n        if (this.tree.draggableNodes && this.node.draggable !== false) {\n            event.dataTransfer.setData(\"text\", \"data\");\n\n            this.tree.dragDropService.startDrag({\n                tree: this,\n                node: this.node,\n                subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n                index: this.index,\n                scope: this.tree.draggableScope\n            });\n        }\n        else {\n            event.preventDefault();\n        }\n    }\n\n    onDragStop(event) {\n        this.tree.dragDropService.stopDrag({\n            node: this.node,\n            subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n            index: this.index\n        });\n    }\n\n    onDropNodeDragOver(event) {\n        event.dataTransfer.dropEffect = 'move';\n        if (this.tree.droppableNodes) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n\n    onDropNode(event) {\n        if (this.tree.droppableNodes && this.node.droppable !== false) {\n            let dragNode = this.tree.dragNode;\n\n            if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {\n                let dropParams = {...this.createDropNodeEventMetadata()};\n\n                if (this.tree.validateDrop) {\n                    this.tree.onNodeDrop.emit({\n                        originalEvent: event,\n                        dragNode: dragNode,\n                        dropNode: this.node,\n                        index: this.index,\n                        accept: () => {\n                            this.processNodeDrop(dropParams);\n                        }\n                    });\n                }\n                else {\n                    this.processNodeDrop(dropParams);\n                    this.tree.onNodeDrop.emit({\n                        originalEvent: event,\n                        dragNode: dragNode,\n                        dropNode: this.node,\n                        index: this.index\n                    });\n                }\n            }\n        }\n\n        event.preventDefault();\n        event.stopPropagation();\n        this.draghoverNode = false;\n    }\n\n    createDropNodeEventMetadata() {\n        return {\n            dragNode: this.tree.dragNode,\n            dragNodeIndex:  this.tree.dragNodeIndex,\n            dragNodeSubNodes: this.tree.dragNodeSubNodes,\n            dropNode: this.node\n        };\n    }\n\n    processNodeDrop(event) {\n        let dragNodeIndex = event.dragNodeIndex;\n        event.dragNodeSubNodes.splice(dragNodeIndex, 1);\n\n        if (event.dropNode.children)\n            event.dropNode.children.push(event.dragNode);\n        else\n            event.dropNode.children = [event.dragNode];\n\n        this.tree.dragDropService.stopDrag({\n            node: event.dragNode,\n            subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,\n            index: dragNodeIndex\n        });\n    }\n\n    onDropNodeDragEnter(event) {\n        if (this.tree.droppableNodes && this.node.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {\n            this.draghoverNode = true;\n        }\n    }\n\n    onDropNodeDragLeave(event) {\n        if (this.tree.droppableNodes) {\n            let rect = event.currentTarget.getBoundingClientRect();\n            if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {\n               this.draghoverNode = false;\n            }\n        }\n    }\n\n    onKeyDown(event: KeyboardEvent) {\n        const nodeElement = (<HTMLDivElement> event.target).parentElement.parentElement;\n\n        if (nodeElement.nodeName !== 'P-TREENODE' || (this.tree.contextMenu && this.tree.contextMenu.containerViewChild.nativeElement.style.display === 'block')) {\n            return;\n        }\n\n        switch (event.which) {\n            //down arrow\n            case 40:\n                const listElement = (this.tree.droppableNodes) ? nodeElement.children[1].children[1] : nodeElement.children[0].children[1];\n                if (listElement && listElement.children.length > 0) {\n                    this.focusNode(listElement.children[0]);\n                }\n                else {\n                    const nextNodeElement = nodeElement.nextElementSibling;\n                    if (nextNodeElement) {\n                        this.focusNode(nextNodeElement);\n                    }\n                    else {\n                        let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement);\n                        if (nextSiblingAncestor) {\n                            this.focusNode(nextSiblingAncestor);\n                        }\n                    }\n                }\n\n                event.preventDefault();\n            break;\n\n            //up arrow\n            case 38:\n                if (nodeElement.previousElementSibling) {\n                    this.focusNode(this.findLastVisibleDescendant(nodeElement.previousElementSibling));\n                }\n                else {\n                    let parentNodeElement = this.getParentNodeElement(nodeElement);\n                    if (parentNodeElement) {\n                        this.focusNode(parentNodeElement);\n                    }\n                }\n\n                event.preventDefault();\n            break;\n\n            //right arrow\n            case 39:\n                if (!this.node.expanded && !this.tree.isNodeLeaf(this.node)) {\n                    this.expand(event);\n                }\n\n                event.preventDefault();\n            break;\n\n            //left arrow\n            case 37:\n                if (this.node.expanded) {\n                    this.collapse(event);\n                }\n                else {\n                    let parentNodeElement = this.getParentNodeElement(nodeElement);\n                    if (parentNodeElement) {\n                        this.focusNode(parentNodeElement);\n                    }\n                }\n\n                event.preventDefault();\n            break;\n\n            //enter\n            case 13:\n                this.tree.onNodeClick(event, this.node);\n                event.preventDefault();\n            break;\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n    findNextSiblingOfAncestor(nodeElement) {\n        let parentNodeElement = this.getParentNodeElement(nodeElement);\n        if (parentNodeElement) {\n            if (parentNodeElement.nextElementSibling)\n                return parentNodeElement.nextElementSibling;\n            else\n                return this.findNextSiblingOfAncestor(parentNodeElement);\n        }\n        else {\n            return null;\n        }\n    }\n\n    findLastVisibleDescendant(nodeElement) {\n        const listElement = <HTMLElement> Array.from(nodeElement.children).find(el => DomHandler.hasClass(el, 'p-treenode'));\n        const childrenListElement = listElement.children[1];\n        if (childrenListElement && childrenListElement.children.length > 0) {\n            const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];\n\n            return this.findLastVisibleDescendant(lastChildElement);\n        }\n        else {\n            return nodeElement;\n        }\n    }\n\n    getParentNodeElement(nodeElement) {\n        const parentNodeElement = nodeElement.parentElement.parentElement.parentElement;\n\n        return parentNodeElement.tagName === 'P-TREENODE' ? parentNodeElement : null;\n    }\n\n    focusNode(element) {\n        if (this.tree.droppableNodes)\n            element.children[1].children[0].focus();\n        else\n            element.children[0].children[0].focus();\n    }\n}\n\n@Component({\n    selector: 'p-tree',\n    template: `\n        <div [ngClass]=\"{'p-tree p-component':true,'p-tree-selectable':selectionMode,\n                'p-treenode-dragover':dragHover,'p-tree-loading': loading, 'p-tree-flex-scrollable': scrollHeight === 'flex'}\"\n            [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"!horizontal\"\n            (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\" (dragenter)=\"onDragEnter()\" (dragleave)=\"onDragLeave($event)\">\n            <div class=\"p-tree-loading-overlay p-component-overlay\" *ngIf=\"loading\">\n                <i [class]=\"'p-tree-loading-icon pi-spin ' + loadingIcon\"></i>\n            </div>\n            <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n            <div *ngIf=\"filter\" class=\"p-tree-filter-container\">\n                <input #filter type=\"text\" autocomplete=\"off\" class=\"p-tree-filter p-inputtext p-component\" [attr.placeholder]=\"filterPlaceholder\"\n                    (keydown.enter)=\"$event.preventDefault()\" (input)=\"_filter($event.target.value)\">\n                    <span class=\"p-tree-filter-icon pi pi-search\"></span>\n            </div>\n            <ng-container *ngIf=\"!virtualScroll; else virtualScrollList\">\n                <div class=\"p-tree-wrapper\" [style.max-height]=\"scrollHeight\">\n                    <ul class=\"p-tree-container\" *ngIf=\"getRootNode()\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\n                        <p-treeNode *ngFor=\"let node of getRootNode(); let firstChild=first;let lastChild=last; let index=index; trackBy: trackBy\" [node]=\"node\"\n                                    [firstChild]=\"firstChild\" [lastChild]=\"lastChild\" [index]=\"index\" [level]=\"0\"></p-treeNode>\n                    </ul>\n                </div>\n            </ng-container>\n            <ng-template #virtualScrollList>\n                <cdk-virtual-scroll-viewport class=\"p-tree-wrapper\" [style.height]=\"scrollHeight\" [itemSize]=\"virtualNodeHeight\" [minBufferPx]=\"minBufferPx\" [maxBufferPx]=\"maxBufferPx\">\n                    <ul class=\"p-tree-container\" *ngIf=\"getRootNode()\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\n                        <p-treeNode *cdkVirtualFor=\"let rowNode of serializedValue; let firstChild=first; let lastChild=last; let index=index; trackBy: trackBy; templateCacheSize: 0\"  [level]=\"rowNode.level\"\n                                    [rowNode]=\"rowNode\" [node]=\"rowNode.node\" [firstChild]=\"firstChild\" [lastChild]=\"lastChild\" [index]=\"index\" [style.height.px]=\"virtualNodeHeight\" [indentation]=\"indentation\"></p-treeNode>\n                    </ul>\n                </cdk-virtual-scroll-viewport>\n            </ng-template>\n            <div class=\"p-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\n                <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\">\n                    {{emptyMessageLabel}}\n                </ng-container>\n                <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n            </div>\n            <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n        </div>\n        <div [ngClass]=\"{'p-tree p-tree-horizontal p-component':true,'p-tree-selectable':selectionMode}\"  [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"horizontal\">\n            <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n            <div class=\"p-tree-loading-mask p-component-overlay\" *ngIf=\"loading\">\n                <i [class]=\"'p-tree-loading-icon pi-spin ' + loadingIcon\"></i>\n            </div>\n            <table *ngIf=\"value&&value[0]\">\n                <p-treeNode [node]=\"value[0]\" [root]=\"true\"></p-treeNode>\n            </table>\n            <div class=\"p-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\n                <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\">\n                    {{emptyMessageLabel}}\n                </ng-container>\n                <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\n            </div>\n            <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.Default,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./tree.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class Tree implements OnInit,AfterContentInit,OnChanges,OnDestroy,BlockableUI {\n\n    @Input() value: TreeNode[];\n\n    @Input() selectionMode: string;\n\n    @Input() selection: any;\n\n    @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeUnselect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeExpand: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeCollapse: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeDrop: EventEmitter<any> = new EventEmitter();\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() contextMenu: any;\n\n    @Input() layout: string = 'vertical';\n\n    @Input() draggableScope: any;\n\n    @Input() droppableScope: any;\n\n    @Input() draggableNodes: boolean;\n\n    @Input() droppableNodes: boolean;\n\n    @Input() metaKeySelection: boolean = true;\n\n    @Input() propagateSelectionUp: boolean = true;\n\n    @Input() propagateSelectionDown: boolean = true;\n\n    @Input() loading: boolean;\n\n    @Input() loadingIcon: string = 'pi pi-spinner';\n\n    @Input() emptyMessage: string = '';\n\n    @Input() ariaLabel: string;\n\n    @Input() togglerAriaLabel: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() validateDrop: boolean;\n\n    @Input() filter: boolean;\n\n    @Input() filterBy: string = 'label';\n\n    @Input() filterMode: string = 'lenient';\n\n    @Input() filterPlaceholder: string;\n\n    @Input() filterLocale: string;\n\n    @Input() scrollHeight: string;\n\n    @Input() virtualScroll: boolean;\n\n    @Input() virtualNodeHeight: string;\n\n    @Input() minBufferPx: number;\n\n    @Input() maxBufferPx: number;\n\n    @Input() indentation: number = 1.5;\n\n    @Input() trackBy: Function = (index: number, item: any) => item;\n\n    @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @ViewChild(CdkVirtualScrollViewport) virtualScrollBody: CdkVirtualScrollViewport;\n\n    @ViewChild('filter') filterViewChild: ElementRef;\n\n    serializedValue: any[];\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    emptyMessageTemplate: TemplateRef<any>;\n\n    public templateMap: any;\n\n    public nodeTouched: boolean;\n\n    public dragNodeTree: Tree;\n\n    public dragNode: TreeNode;\n\n    public dragNodeSubNodes: TreeNode[];\n\n    public dragNodeIndex: number;\n\n    public dragNodeScope: any;\n\n    public dragHover: boolean;\n\n    public dragStartSubscription: Subscription;\n\n    public dragStopSubscription: Subscription;\n\n    public filteredNodes: TreeNode[];\n\n    constructor(public el: ElementRef, @Optional() public dragDropService: TreeDragDropService, public config: PrimeNGConfig) {}\n\n    ngOnInit() {\n        if (this.droppableNodes) {\n            this.dragStartSubscription = this.dragDropService.dragStart$.subscribe(\n              event => {\n                this.dragNodeTree = event.tree;\n                this.dragNode = event.node;\n                this.dragNodeSubNodes = event.subNodes;\n                this.dragNodeIndex = event.index;\n                this.dragNodeScope = event.scope;\n            });\n\n            this.dragStopSubscription = this.dragDropService.dragStop$.subscribe(\n              event => {\n                this.dragNodeTree = null;\n                this.dragNode = null;\n                this.dragNodeSubNodes = null;\n                this.dragNodeIndex = null;\n                this.dragNodeScope = null;\n                this.dragHover = false;\n            });\n        }\n    }\n\n    ngOnChanges(simpleChange: SimpleChanges) {\n        if (simpleChange.value) {\n            this.updateSerializedValue();\n        }\n\n        if (simpleChange.scrollHeight && this.virtualScrollBody) {\n            this.virtualScrollBody.ngOnInit();\n        }\n    }\n\n    get horizontal(): boolean {\n        return this.layout == 'horizontal';\n    }\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    ngAfterContentInit() {\n        if (this.templates.length) {\n            this.templateMap = {};\n        }\n\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyMessageTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.templateMap[item.name] = item.template;\n                break;\n            }\n        });\n    }\n\n    updateSerializedValue() {\n        this.serializedValue = [];\n        this.serializeNodes(null, this.getRootNode(), 0, true);\n    }\n\n    serializeNodes(parent, nodes, level, visible) {\n        if (nodes && nodes.length) {\n            for(let node of nodes) {\n                node.parent = parent;\n                const rowNode = {\n                    node: node,\n                    parent: parent,\n                    level: level,\n                    visible: visible && (parent ? parent.expanded : true)\n                };\n                this.serializedValue.push(rowNode);\n\n                if (rowNode.visible && node.expanded) {\n                    this.serializeNodes(node, node.children, level + 1, rowNode.visible);\n                }\n            }\n        }\n    }\n\n    onNodeClick(event, node: TreeNode) {\n        let eventTarget = (<Element> event.target);\n\n        if (DomHandler.hasClass(eventTarget, 'p-tree-toggler') || DomHandler.hasClass(eventTarget, 'p-tree-toggler-icon')) {\n            return;\n        }\n        else if (this.selectionMode) {\n            if (node.selectable === false) {\n                return;\n            }\n\n            if (this.hasFilteredNodes()) {\n                node = this.getNodeWithKey(node.key, this.value);\n\n                if (!node) {\n                    return;\n                }\n            }\n\n            let index = this.findIndexInSelection(node);\n            let selected = (index >= 0);\n\n            if (this.isCheckboxSelectionMode()) {\n                if (selected) {\n                    if (this.propagateSelectionDown)\n                        this.propagateDown(node, false);\n                    else\n                        this.selection = this.selection.filter((val,i) => i!=index);\n\n                    if (this.propagateSelectionUp && node.parent) {\n                        this.propagateUp(node.parent, false);\n                    }\n\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeUnselect.emit({originalEvent: event, node: node});\n                }\n                else {\n                    if (this.propagateSelectionDown)\n                        this.propagateDown(node, true);\n                    else\n                        this.selection = [...this.selection||[],node];\n\n                    if (this.propagateSelectionUp && node.parent) {\n                        this.propagateUp(node.parent, true);\n                    }\n\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeSelect.emit({originalEvent: event, node: node});\n                }\n            }\n            else {\n                let metaSelection = this.nodeTouched ? false : this.metaKeySelection;\n\n                if (metaSelection) {\n                    let metaKey = (event.metaKey||event.ctrlKey);\n\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(null);\n                        }\n                        else {\n                            this.selection = this.selection.filter((val,i) => i!=index);\n                            this.selectionChange.emit(this.selection);\n                        }\n\n                        this.onNodeUnselect.emit({originalEvent: event, node: node});\n                    }\n                    else {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(node);\n                        }\n                        else if (this.isMultipleSelectionMode()) {\n                            this.selection = (!metaKey) ? [] : this.selection||[];\n                            this.selection = [...this.selection,node];\n                            this.selectionChange.emit(this.selection);\n                        }\n\n                        this.onNodeSelect.emit({originalEvent: event, node: node});\n                    }\n                }\n                else {\n                    if (this.isSingleSelectionMode()) {\n                        if (selected) {\n                            this.selection = null;\n                            this.onNodeUnselect.emit({originalEvent: event, node: node});\n                        }\n                        else {\n                            this.selection = node;\n                            this.onNodeSelect.emit({originalEvent: event, node: node});\n                        }\n                    }\n                    else {\n                        if (selected) {\n                            this.selection = this.selection.filter((val,i) => i!=index);\n                            this.onNodeUnselect.emit({originalEvent: event, node: node});\n                        }\n                        else {\n                            this.selection = [...this.selection||[],node];\n                            this.onNodeSelect.emit({originalEvent: event, node: node});\n                        }\n                    }\n\n                    this.selectionChange.emit(this.selection);\n                }\n            }\n        }\n\n        this.nodeTouched = false;\n    }\n\n    onNodeTouchEnd() {\n        this.nodeTouched = true;\n    }\n\n    onNodeRightClick(event: MouseEvent, node: TreeNode) {\n        if (this.contextMenu) {\n            let eventTarget = (<Element> event.target);\n\n            if (eventTarget.className && eventTarget.className.indexOf('p-tree-toggler') === 0) {\n                return;\n            }\n            else {\n                let index = this.findIndexInSelection(node);\n                let selected = (index >= 0);\n\n                if (!selected) {\n                    if (this.isSingleSelectionMode())\n                        this.selectionChange.emit(node);\n                    else\n                        this.selectionChange.emit([node]);\n                }\n\n                this.contextMenu.show(event);\n                this.onNodeContextMenuSelect.emit({originalEvent: event, node: node});\n            }\n        }\n    }\n\n    findIndexInSelection(node: TreeNode) {\n        let index: number = -1;\n\n        if (this.selectionMode && this.selection) {\n            if (this.isSingleSelectionMode()) {\n                let areNodesEqual = (this.selection.key && this.selection.key === node.key) || this.selection == node;\n                index = areNodesEqual ? 0 : - 1;\n            }\n            else {\n                for(let i = 0; i  < this.selection.length; i++) {\n                    let selectedNode = this.selection[i];\n                    let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;\n                    if (areNodesEqual) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n\n        return index;\n    }\n\n    syncNodeOption(node, parentNodes, option, value?: any) {\n        // to synchronize the node option between the filtered nodes and the original nodes(this.value)\n        const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;\n        if (_node) {\n            _node[option] = value||node[option];\n        }\n    }\n\n    hasFilteredNodes() {\n        return this.filter && this.filteredNodes && this.filteredNodes.length;\n    }\n\n    getNodeWithKey(key: string, nodes: TreeNode[]) {\n        for (let node of nodes) {\n            if (node.key === key) {\n                return node;\n            }\n\n            if (node.children) {\n                let matchedNode = this.getNodeWithKey(key, node.children);\n                if (matchedNode) {\n                    return matchedNode;\n                }\n            }\n        }\n    }\n\n    propagateUp(node: TreeNode, select: boolean) {\n        if (node.children && node.children.length) {\n            let selectedCount: number = 0;\n            let childPartialSelected: boolean = false;\n            for(let child of node.children) {\n                if (this.isSelected(child)) {\n                    selectedCount++;\n                }\n                else if (child.partialSelected) {\n                    childPartialSelected = true;\n                }\n            }\n\n            if (select && selectedCount == node.children.length) {\n                this.selection = [...this.selection||[],node];\n                node.partialSelected = false;\n            }\n            else {\n                if (!select) {\n                    let index = this.findIndexInSelection(node);\n                    if (index >= 0) {\n                        this.selection = this.selection.filter((val,i) => i!=index);\n                    }\n                }\n\n                if (childPartialSelected || selectedCount > 0 && selectedCount != node.children.length)\n                    node.partialSelected = true;\n                else\n                    node.partialSelected = false;\n            }\n\n            this.syncNodeOption(node, this.filteredNodes, 'partialSelected');\n        }\n\n        let parent = node.parent;\n        if (parent) {\n            this.propagateUp(parent, select);\n        }\n    }\n\n    propagateDown(node: TreeNode, select: boolean) {\n        let index = this.findIndexInSelection(node);\n\n        if (select && index == -1) {\n            this.selection = [...this.selection||[],node];\n        }\n        else if (!select && index > -1) {\n            this.selection = this.selection.filter((val,i) => i!=index);\n        }\n\n        node.partialSelected = false;\n\n        this.syncNodeOption(node, this.filteredNodes, 'partialSelected');\n\n        if (node.children && node.children.length) {\n            for(let child of node.children) {\n                this.propagateDown(child, select);\n            }\n        }\n    }\n\n    isSelected(node: TreeNode) {\n        return this.findIndexInSelection(node) != -1;\n    }\n\n    isSingleSelectionMode() {\n        return this.selectionMode && this.selectionMode == 'single';\n    }\n\n    isMultipleSelectionMode() {\n        return this.selectionMode && this.selectionMode == 'multiple';\n    }\n\n    isCheckboxSelectionMode() {\n        return this.selectionMode && this.selectionMode == 'checkbox';\n    }\n\n    isNodeLeaf(node) {\n        return node.leaf == false ? false : !(node.children && node.children.length);\n    }\n\n    getRootNode() {\n        return this.filteredNodes ? this.filteredNodes : this.value;\n    }\n\n    getTemplateForNode(node: TreeNode): TemplateRef<any> {\n        if (this.templateMap)\n            return node.type ? this.templateMap[node.type] : this.templateMap['default'];\n        else\n            return null;\n    }\n\n    onDragOver(event) {\n        if (this.droppableNodes && (!this.value || this.value.length === 0)) {\n            event.dataTransfer.dropEffect = 'move';\n            event.preventDefault();\n        }\n    }\n\n    onDrop(event) {\n        if (this.droppableNodes && (!this.value || this.value.length === 0)) {\n            event.preventDefault();\n            let dragNode = this.dragNode;\n\n            if (this.allowDrop(dragNode, null, this.dragNodeScope)) {\n                let dragNodeIndex = this.dragNodeIndex;\n                this.value = this.value||[];\n\n                if (this.validateDrop) {\n                    this.onNodeDrop.emit({\n                        originalEvent: event,\n                        dragNode: dragNode,\n                        dropNode: null,\n                        index: dragNodeIndex,\n                        accept: () => {\n                            this.processTreeDrop(dragNode, dragNodeIndex);\n                        }\n                    });\n                }\n                else {\n                    this.onNodeDrop.emit({\n                        originalEvent: event,\n                        dragNode: dragNode,\n                        dropNode: null,\n                        index: dragNodeIndex\n                    });\n\n                    this.processTreeDrop(dragNode, dragNodeIndex);\n                }\n            }\n        }\n    }\n\n    processTreeDrop(dragNode, dragNodeIndex) {\n        this.dragNodeSubNodes.splice(dragNodeIndex, 1);\n        this.value.push(dragNode);\n        this.dragDropService.stopDrag({\n            node: dragNode\n        });\n    }\n\n    onDragEnter() {\n        if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {\n            this.dragHover = true;\n        }\n    }\n\n    onDragLeave(event) {\n        if (this.droppableNodes) {\n            let rect = event.currentTarget.getBoundingClientRect();\n            if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {\n               this.dragHover = false;\n            }\n        }\n    }\n\n    allowDrop(dragNode: TreeNode, dropNode: TreeNode, dragNodeScope: any): boolean {\n        if (!dragNode) {\n            //prevent random html elements to be dragged\n            return false;\n        }\n        else if (this.isValidDragScope(dragNodeScope)) {\n            let allow: boolean = true;\n            if (dropNode) {\n                if (dragNode === dropNode) {\n                    allow = false;\n                }\n                else {\n                    let parent = dropNode.parent;\n                    while(parent != null) {\n                        if (parent === dragNode) {\n                            allow = false;\n                            break;\n                        }\n                        parent = parent.parent;\n                    }\n                }\n            }\n\n            return allow;\n        }\n        else {\n            return false;\n        }\n    }\n\n    isValidDragScope(dragScope: any): boolean {\n        let dropScope = this.droppableScope;\n\n        if (dropScope) {\n            if (typeof dropScope === 'string') {\n                if (typeof dragScope === 'string')\n                    return dropScope === dragScope;\n                else if (dragScope instanceof Array)\n                    return (<Array<any>>dragScope).indexOf(dropScope) != -1;\n            }\n            else if (dropScope instanceof Array) {\n                if (typeof dragScope === 'string') {\n                    return (<Array<any>>dropScope).indexOf(dragScope) != -1;\n                }\n                else if (dragScope instanceof Array) {\n                    for(let s of dropScope) {\n                        for(let ds of dragScope) {\n                            if (s === ds) {\n                                return true;\n                            }\n                        }\n                    }\n                }\n            }\n            return false;\n        }\n        else {\n            return true;\n        }\n    }\n\n    _filter(value) {\n        let filterValue = value;\n        if (filterValue === '') {\n            this.filteredNodes = null;\n        }\n        else {\n            this.filteredNodes = [];\n            const searchFields: string[] = this.filterBy.split(',');\n            const filterText = ObjectUtils.removeAccents(filterValue).toLocaleLowerCase(this.filterLocale);\n            const isStrictMode = this.filterMode === 'strict';\n            for(let node of this.value) {\n                let copyNode = {...node};\n                let paramsWithoutNode = {searchFields, filterText, isStrictMode};\n                if ((isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||\n                    (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {\n                    this.filteredNodes.push(copyNode);\n                }\n            }\n        }\n\n        this.updateSerializedValue();\n        this.onFilter.emit({\n            filter: filterValue,\n            filteredValue: this.filteredNodes\n        });\n    }\n\n    resetFilter() {\n        this.filteredNodes = null;\n\n        if (this.filterViewChild && this.filterViewChild.nativeElement) {\n            this.filterViewChild.nativeElement.value = '';\n        }\n    }\n\n    findFilteredNodes(node, paramsWithoutNode) {\n        if (node) {\n            let matched = false;\n            if (node.children) {\n                let childNodes = [...node.children];\n                node.children = [];\n                for (let childNode of childNodes) {\n                    let copyChildNode = {...childNode};\n                    if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n                        matched = true;\n                        node.children.push(copyChildNode);\n                    }\n                }\n            }\n\n            if (matched) {\n                node.expanded = true;\n                return true;\n            }\n        }\n    }\n\n    isFilterMatched(node, {searchFields, filterText, isStrictMode}) {\n        let matched = false;\n        for(let field of searchFields) {\n            let fieldValue = ObjectUtils.removeAccents(String(ObjectUtils.resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale);\n            if (fieldValue.indexOf(filterText) > -1) {\n                matched = true;\n            }\n        }\n\n        if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {\n            matched = this.findFilteredNodes(node, {searchFields, filterText, isStrictMode}) || matched;\n        }\n\n        return matched;\n    }\n\n    getBlockableElement(): HTMLElement {\n      return this.el.nativeElement.children[0];\n    }\n\n    ngOnDestroy() {\n        if (this.dragStartSubscription) {\n            this.dragStartSubscription.unsubscribe();\n        }\n\n        if (this.dragStopSubscription) {\n            this.dragStopSubscription.unsubscribe();\n        }\n    }\n}\n@NgModule({\n    imports: [CommonModule,ScrollingModule,RippleModule],\n    exports: [Tree,SharedModule,ScrollingModule],\n    declarations: [Tree,UITreeNode]\n})\nexport class TreeModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-treeselect.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-treeselect.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-treeselect.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,604 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChildren, ViewChild, Output, NgModule } from '@angular/core';
+import * as i3 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { RippleModule } from 'primeng/ripple';
+import * as i1 from 'primeng/api';
+import { TranslationKeys, PrimeTemplate, SharedModule } from 'primeng/api';
+import { trigger, transition, style, animate } from '@angular/animations';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
+import * as i2 from 'primeng/tree';
+import { TreeModule } from 'primeng/tree';
+import { ZIndexUtils } from 'primeng/utils';
+
+const TREESELECT_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => TreeSelect),
+    multi: true
+};
+class TreeSelect {
+    constructor(config, cd, el, overlayService) {
+        this.config = config;
+        this.cd = cd;
+        this.el = el;
+        this.overlayService = overlayService;
+        this.type = "button";
+        this.scrollHeight = "400px";
+        this.metaKeySelection = true;
+        this.display = "comma";
+        this.selectionMode = "single";
+        this.propagateSelectionDown = true;
+        this.propagateSelectionUp = true;
+        this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
+        this.hideTransitionOptions = '.1s linear';
+        this.onNodeExpand = new EventEmitter();
+        this.onNodeCollapse = new EventEmitter();
+        this.onShow = new EventEmitter();
+        this.onHide = new EventEmitter();
+        this.onNodeUnselect = new EventEmitter();
+        this.onNodeSelect = new EventEmitter();
+        this.expandedNodes = [];
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    get options() {
+        return this._options;
+    }
+    ;
+    set options(options) {
+        this._options = options;
+        this.updateTreeState();
+    }
+    ngOnInit() {
+        this.updateTreeState();
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'value':
+                    this.valueTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'empty':
+                    this.emptyTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.valueTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    onOverlayAnimationStart(event) {
+        switch (event.toState) {
+            case 'visible':
+                this.overlayEl = event.element;
+                this.onOverlayEnter();
+                break;
+        }
+    }
+    onOverlayAnimationDone(event) {
+        switch (event.toState) {
+            case 'void':
+                this.onOverlayLeave();
+                break;
+        }
+    }
+    onSelectionChange(event) {
+        this.value = event;
+        this.onModelChange(this.value);
+        this.cd.markForCheck();
+    }
+    onClick(event) {
+        if (!this.disabled && (!this.overlayEl || !this.overlayEl.contains(event.target)) && !DomHandler.hasClass(event.target, 'p-treeselect-close')) {
+            if (this.overlayVisible) {
+                this.hide();
+            }
+            else
+                this.show();
+            this.focusInput.nativeElement.focus();
+        }
+    }
+    onKeyDown(event) {
+        switch (event.which) {
+            //down
+            case 40:
+                if (!this.overlayVisible && event.altKey) {
+                    this.show();
+                    event.preventDefault();
+                }
+                else if (this.overlayVisible && this.overlayEl) {
+                    let focusableElements = DomHandler.getFocusableElements(this.overlayEl);
+                    if (focusableElements && focusableElements.length > 0) {
+                        focusableElements[0].focus();
+                    }
+                    event.preventDefault();
+                }
+                break;
+            //space
+            case 32:
+                if (!this.overlayVisible) {
+                    this.show();
+                    event.preventDefault();
+                }
+                break;
+            //enter and escape
+            case 13:
+            case 27:
+                if (this.overlayVisible) {
+                    this.hide();
+                    event.preventDefault();
+                }
+                break;
+            //tab
+            case 9:
+                this.hide();
+                break;
+            default:
+                break;
+        }
+    }
+    show() {
+        this.overlayVisible = true;
+    }
+    hide() {
+        this.overlayVisible = false;
+        this.cd.markForCheck();
+    }
+    onOverlayClick(event) {
+        this.overlayService.add({
+            originalEvent: event,
+            target: this.el.nativeElement
+        });
+    }
+    updateTreeState() {
+        if (this.value) {
+            let selectedNodes = this.selectionMode === "single" ? [this.value] : [...this.value];
+            this.resetExpandedNodes();
+            if (selectedNodes && this.options) {
+                this.updateTreeBranchState(null, null, selectedNodes);
+            }
+        }
+    }
+    updateTreeBranchState(node, path, selectedNodes) {
+        if (node) {
+            if (this.isSelected(node)) {
+                this.expandPath(path);
+                selectedNodes.splice(selectedNodes.indexOf(node), 1);
+            }
+            if (selectedNodes.length > 0 && node.children) {
+                for (let childNode of node.children) {
+                    path.push(node);
+                    this.updateTreeBranchState(childNode, path, selectedNodes);
+                }
+            }
+        }
+        else {
+            for (let childNode of this.options) {
+                this.updateTreeBranchState(childNode, [], selectedNodes);
+            }
+        }
+    }
+    expandPath(expandedNodes) {
+        for (let node of expandedNodes) {
+            node.expanded = true;
+        }
+        this.expandedNodes = [...expandedNodes];
+    }
+    nodeExpand(event) {
+        this.onNodeExpand.emit(event);
+        this.expandedNodes.push(event.node);
+    }
+    nodeCollapse(event) {
+        this.onNodeCollapse.emit(event);
+        this.expandedNodes.splice(this.expandedNodes.indexOf(event.node), 1);
+    }
+    resetExpandedNodes() {
+        for (let node of this.expandedNodes) {
+            node.expanded = false;
+        }
+        this.expandedNodes = [];
+    }
+    findSelectedNodes(node, keys, selectedNodes) {
+        if (node) {
+            if (this.isSelected(node)) {
+                selectedNodes.push(node);
+                delete keys[node.key];
+            }
+            if (Object.keys(keys).length && node.children) {
+                for (let childNode of node.children) {
+                    this.findSelectedNodes(childNode, keys, selectedNodes);
+                }
+            }
+        }
+        else {
+            for (let childNode of this.options) {
+                this.findSelectedNodes(childNode, keys, selectedNodes);
+            }
+        }
+    }
+    isSelected(node) {
+        return this.findIndexInSelection(node) != -1;
+    }
+    findIndexInSelection(node) {
+        let index = -1;
+        if (this.value) {
+            if (this.selectionMode === "single") {
+                let areNodesEqual = (this.value.key && this.value.key === node.key) || this.value == node;
+                index = areNodesEqual ? 0 : -1;
+            }
+            else {
+                for (let i = 0; i < this.value.length; i++) {
+                    let selectedNode = this.value[i];
+                    let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;
+                    if (areNodesEqual) {
+                        index = i;
+                        break;
+                    }
+                }
+            }
+        }
+        return index;
+    }
+    onSelect(node) {
+        this.onNodeSelect.emit(node);
+        if (this.selectionMode === 'single') {
+            this.hide();
+        }
+    }
+    onUnselect(node) {
+        this.onNodeUnselect.emit(node);
+    }
+    onOverlayEnter() {
+        ZIndexUtils.set('overlay', this.overlayEl, this.config.zIndex.overlay);
+        this.appendContainer();
+        this.alignOverlay();
+        this.bindOutsideClickListener();
+        this.bindScrollListener();
+        this.bindResizeListener();
+        this.onShow.emit();
+    }
+    onOverlayLeave() {
+        this.unbindOutsideClickListener();
+        this.unbindScrollListener();
+        this.unbindResizeListener();
+        ZIndexUtils.clear(this.overlayEl);
+        this.overlayEl = null;
+        this.onHide.emit();
+    }
+    onFocus() {
+        this.focused = true;
+    }
+    onBlur() {
+        this.focused = false;
+    }
+    writeValue(value) {
+        this.value = value;
+        this.updateTreeState();
+        this.cd.markForCheck();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    setDisabledState(val) {
+        this.disabled = val;
+        this.cd.markForCheck();
+    }
+    appendContainer() {
+        if (this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.appendChild(this.overlayEl);
+            else
+                document.getElementById(this.appendTo).appendChild(this.overlayEl);
+        }
+    }
+    restoreAppend() {
+        if (this.overlayEl && this.appendTo) {
+            if (this.appendTo === 'body')
+                document.body.removeChild(this.overlayEl);
+            else
+                document.getElementById(this.appendTo).removeChild(this.overlayEl);
+        }
+    }
+    alignOverlay() {
+        if (this.appendTo) {
+            DomHandler.absolutePosition(this.overlayEl, this.containerEl.nativeElement);
+            this.overlayEl.style.minWidth = DomHandler.getOuterWidth(this.containerEl.nativeElement) + 'px';
+        }
+        else {
+            DomHandler.relativePosition(this.overlayEl, this.containerEl.nativeElement);
+        }
+    }
+    bindOutsideClickListener() {
+        if (!this.outsideClickListener) {
+            this.outsideClickListener = (event) => {
+                if (this.overlayVisible && this.overlayEl && !this.containerEl.nativeElement.contains(event.target) && !this.overlayEl.contains(event.target)) {
+                    this.hide();
+                }
+            };
+            document.addEventListener('click', this.outsideClickListener);
+        }
+    }
+    unbindOutsideClickListener() {
+        if (this.outsideClickListener) {
+            document.removeEventListener('click', this.outsideClickListener);
+            this.outsideClickListener = null;
+        }
+    }
+    bindScrollListener() {
+        if (!this.scrollHandler) {
+            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerEl.nativeElement, () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            });
+        }
+        this.scrollHandler.bindScrollListener();
+    }
+    unbindScrollListener() {
+        if (this.scrollHandler) {
+            this.scrollHandler.unbindScrollListener();
+        }
+    }
+    bindResizeListener() {
+        if (!this.resizeListener) {
+            this.resizeListener = () => {
+                if (this.overlayVisible) {
+                    this.hide();
+                }
+            };
+            window.addEventListener('resize', this.resizeListener);
+        }
+    }
+    unbindResizeListener() {
+        if (this.resizeListener) {
+            window.removeEventListener('resize', this.resizeListener);
+            this.resizeListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.restoreAppend();
+        this.unbindOutsideClickListener();
+        this.unbindResizeListener();
+        if (this.scrollHandler) {
+            this.scrollHandler.destroy();
+            this.scrollHandler = null;
+        }
+        if (this.overlayEl) {
+            ZIndexUtils.clear(this.overlayEl);
+            this.overlayEl = null;
+        }
+    }
+    containerClass() {
+        return {
+            'p-treeselect p-component p-inputwrapper': true,
+            'p-treeselect-chip': this.display === 'chip',
+            'p-disabled': this.disabled,
+            'p-focus': this.focused
+        };
+    }
+    labelClass() {
+        return {
+            'p-treeselect-label': true,
+            'p-placeholder': this.label === this.placeholder,
+            'p-treeselect-label-empty': !this.placeholder && this.emptyValue
+        };
+    }
+    get emptyMessageText() {
+        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
+    }
+    get emptyValue() {
+        return !this.value || Object.keys(this.value).length === 0;
+    }
+    get emptyOptions() {
+        return !this.options || this.options.length === 0;
+    }
+    get label() {
+        let value = this.value || [];
+        return value.length ? value.map(node => node.label).join(', ') : (this.selectionMode === "single" && this.value) ? value.label : this.placeholder;
+    }
+}
+TreeSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeSelect, deps: [{ token: i1.PrimeNGConfig }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
+TreeSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TreeSelect, selector: "p-treeSelect", inputs: { type: "type", inputId: "inputId", scrollHeight: "scrollHeight", disabled: "disabled", metaKeySelection: "metaKeySelection", display: "display", selectionMode: "selectionMode", tabindex: "tabindex", ariaLabelledBy: "ariaLabelledBy", placeholder: "placeholder", panelClass: "panelClass", emptyMessage: "emptyMessage", appendTo: "appendTo", propagateSelectionDown: "propagateSelectionDown", propagateSelectionUp: "propagateSelectionUp", options: "options", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onNodeExpand: "onNodeExpand", onNodeCollapse: "onNodeCollapse", onShow: "onShow", onHide: "onHide", onNodeUnselect: "onNodeUnselect", onNodeSelect: "onNodeSelect" }, host: { properties: { "class.p-inputwrapper-filled": "!emptyValue", "class.p-inputwrapper-focus": "focused || overlayVisible" }, classAttribute: "p-element p-inputwrapper" }, providers: [TREESELECT_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["container"], descendants: true }, { propertyName: "focusInput", first: true, predicate: ["focusInput"], descendants: true }], ngImport: i0, template: `
+    <div #container [ngClass]="containerClass()" (click)="onClick($event)">
+        <div class="p-hidden-accessible">
+            <input #focusInput type="text" role="listbox" [attr.id]="inputId" readonly [disabled]="disabled" (focus)="onFocus()" (blur)="onBlur()" (keydown)="onKeyDown($event)" [attr.tabindex]="tabindex"
+            aria-haspopup="true" [attr.aria-expanded]="overlayVisible" [attr.aria-labelledby]="ariaLabelledBy"/>
+        </div>
+        <div class="p-treeselect-label-container">
+            <div [ngClass]="labelClass()">
+                <ng-container *ngIf="valueTemplate;else defaultValueTemplate">
+                        <ng-container *ngTemplateOutlet="valueTemplate; context: {$implicit: value, placeholder: placeholder}"></ng-container>
+                </ng-container>
+                <ng-template #defaultValueTemplate>
+                    <ng-container *ngIf="display === 'comma';else chipsValueTemplate">
+                        {{label || 'empty'}}
+                    </ng-container>
+                    <ng-template #chipsValueTemplate>
+                        <div *ngFor="let node of value" class="p-treeselect-token">
+                            <span class="p-treeselect-token-label">{{node.label}}</span>
+                        </div>
+                        <ng-container *ngIf="emptyValue">{{placeholder || 'empty'}}</ng-container>
+                    </ng-template>
+                </ng-template>
+            </div>
+        </div>
+        <div class="p-treeselect-trigger">
+            <span class="p-treeselect-trigger-icon pi pi-chevron-down"></span>
+        </div>
+
+        <div #overlayRef class="p-treeselect-panel p-component" *ngIf="overlayVisible" (click)="onOverlayClick($event)"
+            [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationDone($event)">
+            <ng-container *ngTemplateOutlet="headerTemplate; context: {$implicit: value, options: options}"></ng-container>
+            <div class="p-treeselect-items-wrapper" [ngStyle]="{'max-height': scrollHeight}">
+                <p-tree [value]="options" [propagateSelectionDown]="propagateSelectionDown" [propagateSelectionUp]="propagateSelectionUp" [selectionMode]="selectionMode" (selectionChange)="onSelectionChange($event)" [selection]="value"
+                    [metaKeySelection]="metaKeySelection" (onNodeExpand)="nodeExpand($event)" (onNodeCollapse)="nodeCollapse($event)"
+                    (onNodeSelect)="onSelect($event)" (onNodeUnselect)="onUnselect($event)"></p-tree>
+                <div *ngIf="emptyOptions" class="p-treeselect-empty-message">
+                    <ng-container *ngIf="!emptyTemplate; else empty">
+                        {{emptyMessageText}}
+                    </ng-container>
+                    <ng-container *ngTemplateOutlet="emptyTemplate;"></ng-container>
+                </div>
+            </div>
+            <ng-container *ngTemplateOutlet="footerTemplate; context: {$implicit: value, options: options}"></ng-container>
+        </div>
+    </div>
+    `, isInline: true, styles: [".p-treeselect{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-treeselect-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-treeselect-label-container{overflow:hidden;flex:1 1 auto;cursor:pointer}.p-treeselect-label{display:block;white-space:nowrap;cursor:pointer;overflow:hidden;text-overflow:ellipsis}.p-treeselect-label-empty{overflow:hidden;visibility:hidden}.p-treeselect-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto}.p-treeselect .p-treeselect-panel{min-width:100%}.p-treeselect-panel{position:absolute;top:0;left:0}.p-treeselect-items-wrapper{overflow:auto}.p-fluid .p-treeselect{display:flex}\n"], components: [{ type: i2.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filterLocale", "scrollHeight", "virtualScroll", "virtualNodeHeight", "minBufferPx", "maxBufferPx", "indentation", "trackBy"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onFilter"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], animations: [
+        trigger('overlayAnimation', [
+            transition(':enter', [
+                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                animate('{{showTransitionParams}}')
+            ]),
+            transition(':leave', [
+                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+            ])
+        ])
+    ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeSelect, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-treeSelect', template: `
+    <div #container [ngClass]="containerClass()" (click)="onClick($event)">
+        <div class="p-hidden-accessible">
+            <input #focusInput type="text" role="listbox" [attr.id]="inputId" readonly [disabled]="disabled" (focus)="onFocus()" (blur)="onBlur()" (keydown)="onKeyDown($event)" [attr.tabindex]="tabindex"
+            aria-haspopup="true" [attr.aria-expanded]="overlayVisible" [attr.aria-labelledby]="ariaLabelledBy"/>
+        </div>
+        <div class="p-treeselect-label-container">
+            <div [ngClass]="labelClass()">
+                <ng-container *ngIf="valueTemplate;else defaultValueTemplate">
+                        <ng-container *ngTemplateOutlet="valueTemplate; context: {$implicit: value, placeholder: placeholder}"></ng-container>
+                </ng-container>
+                <ng-template #defaultValueTemplate>
+                    <ng-container *ngIf="display === 'comma';else chipsValueTemplate">
+                        {{label || 'empty'}}
+                    </ng-container>
+                    <ng-template #chipsValueTemplate>
+                        <div *ngFor="let node of value" class="p-treeselect-token">
+                            <span class="p-treeselect-token-label">{{node.label}}</span>
+                        </div>
+                        <ng-container *ngIf="emptyValue">{{placeholder || 'empty'}}</ng-container>
+                    </ng-template>
+                </ng-template>
+            </div>
+        </div>
+        <div class="p-treeselect-trigger">
+            <span class="p-treeselect-trigger-icon pi pi-chevron-down"></span>
+        </div>
+
+        <div #overlayRef class="p-treeselect-panel p-component" *ngIf="overlayVisible" (click)="onOverlayClick($event)"
+            [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationDone($event)">
+            <ng-container *ngTemplateOutlet="headerTemplate; context: {$implicit: value, options: options}"></ng-container>
+            <div class="p-treeselect-items-wrapper" [ngStyle]="{'max-height': scrollHeight}">
+                <p-tree [value]="options" [propagateSelectionDown]="propagateSelectionDown" [propagateSelectionUp]="propagateSelectionUp" [selectionMode]="selectionMode" (selectionChange)="onSelectionChange($event)" [selection]="value"
+                    [metaKeySelection]="metaKeySelection" (onNodeExpand)="nodeExpand($event)" (onNodeCollapse)="nodeCollapse($event)"
+                    (onNodeSelect)="onSelect($event)" (onNodeUnselect)="onUnselect($event)"></p-tree>
+                <div *ngIf="emptyOptions" class="p-treeselect-empty-message">
+                    <ng-container *ngIf="!emptyTemplate; else empty">
+                        {{emptyMessageText}}
+                    </ng-container>
+                    <ng-container *ngTemplateOutlet="emptyTemplate;"></ng-container>
+                </div>
+            </div>
+            <ng-container *ngTemplateOutlet="footerTemplate; context: {$implicit: value, options: options}"></ng-container>
+        </div>
+    </div>
+    `, animations: [
+                        trigger('overlayAnimation', [
+                            transition(':enter', [
+                                style({ opacity: 0, transform: 'scaleY(0.8)' }),
+                                animate('{{showTransitionParams}}')
+                            ]),
+                            transition(':leave', [
+                                animate('{{hideTransitionParams}}', style({ opacity: 0 }))
+                            ])
+                        ])
+                    ], host: {
+                        'class': 'p-element p-inputwrapper',
+                        '[class.p-inputwrapper-filled]': '!emptyValue',
+                        '[class.p-inputwrapper-focus]': 'focused || overlayVisible'
+                    }, changeDetection: ChangeDetectionStrategy.OnPush, providers: [TREESELECT_VALUE_ACCESSOR], encapsulation: ViewEncapsulation.None, styles: [".p-treeselect{display:inline-flex;cursor:pointer;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-treeselect-trigger{display:flex;align-items:center;justify-content:center;flex-shrink:0}.p-treeselect-label-container{overflow:hidden;flex:1 1 auto;cursor:pointer}.p-treeselect-label{display:block;white-space:nowrap;cursor:pointer;overflow:hidden;text-overflow:ellipsis}.p-treeselect-label-empty{overflow:hidden;visibility:hidden}.p-treeselect-token{cursor:default;display:inline-flex;align-items:center;flex:0 0 auto}.p-treeselect .p-treeselect-panel{min-width:100%}.p-treeselect-panel{position:absolute;top:0;left:0}.p-treeselect-items-wrapper{overflow:auto}.p-fluid .p-treeselect{display:flex}\n"] }]
+        }], ctorParameters: function () { return [{ type: i1.PrimeNGConfig }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.OverlayService }]; }, propDecorators: { type: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], scrollHeight: [{
+                type: Input
+            }], disabled: [{
+                type: Input
+            }], metaKeySelection: [{
+                type: Input
+            }], display: [{
+                type: Input
+            }], selectionMode: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], placeholder: [{
+                type: Input
+            }], panelClass: [{
+                type: Input
+            }], emptyMessage: [{
+                type: Input
+            }], appendTo: [{
+                type: Input
+            }], propagateSelectionDown: [{
+                type: Input
+            }], propagateSelectionUp: [{
+                type: Input
+            }], options: [{
+                type: Input
+            }], showTransitionOptions: [{
+                type: Input
+            }], hideTransitionOptions: [{
+                type: Input
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], containerEl: [{
+                type: ViewChild,
+                args: ['container']
+            }], focusInput: [{
+                type: ViewChild,
+                args: ['focusInput']
+            }], onNodeExpand: [{
+                type: Output
+            }], onNodeCollapse: [{
+                type: Output
+            }], onShow: [{
+                type: Output
+            }], onHide: [{
+                type: Output
+            }], onNodeUnselect: [{
+                type: Output
+            }], onNodeSelect: [{
+                type: Output
+            }] } });
+class TreeSelectModule {
+}
+TreeSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TreeSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeSelectModule, declarations: [TreeSelect], imports: [CommonModule, RippleModule, SharedModule, TreeModule], exports: [TreeSelect, SharedModule, TreeModule] });
+TreeSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeSelectModule, imports: [[CommonModule, RippleModule, SharedModule, TreeModule], SharedModule, TreeModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeSelectModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, RippleModule, SharedModule, TreeModule],
+                    exports: [TreeSelect, SharedModule, TreeModule],
+                    declarations: [TreeSelect]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { TREESELECT_VALUE_ACCESSOR, TreeSelect, TreeSelectModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-treeselect.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-treeselect.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-treeselect.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-treeselect.mjs","sources":["../../src/app/components/treeselect/treeselect.ts","../../src/app/components/treeselect/primeng-treeselect.ts"],"sourcesContent":["import {NgModule,Component,EventEmitter,Output,Input,ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, AfterContentInit, TemplateRef, QueryList, forwardRef, ChangeDetectorRef, ViewChild, ElementRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {RippleModule} from 'primeng/ripple';\nimport {OverlayService, PrimeNGConfig, PrimeTemplate, SharedModule, TranslationKeys, TreeNode} from 'primeng/api';\nimport {animate, style, transition, trigger, AnimationEvent} from '@angular/animations';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {ConnectedOverlayScrollHandler, DomHandler} from 'primeng/dom';\nimport {TreeModule} from 'primeng/tree';\nimport {ZIndexUtils} from 'primeng/utils'\n\n\nexport const TREESELECT_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => TreeSelect),\n    multi: true\n};\n\n@Component({\n    selector: 'p-treeSelect',\n    template: `\n    <div #container [ngClass]=\"containerClass()\" (click)=\"onClick($event)\">\n        <div class=\"p-hidden-accessible\">\n            <input #focusInput type=\"text\" role=\"listbox\" [attr.id]=\"inputId\" readonly [disabled]=\"disabled\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" (keydown)=\"onKeyDown($event)\" [attr.tabindex]=\"tabindex\"\n            aria-haspopup=\"true\" [attr.aria-expanded]=\"overlayVisible\" [attr.aria-labelledby]=\"ariaLabelledBy\"/>\n        </div>\n        <div class=\"p-treeselect-label-container\">\n            <div [ngClass]=\"labelClass()\">\n                <ng-container *ngIf=\"valueTemplate;else defaultValueTemplate\">\n                        <ng-container *ngTemplateOutlet=\"valueTemplate; context: {$implicit: value, placeholder: placeholder}\"></ng-container>\n                </ng-container>\n                <ng-template #defaultValueTemplate>\n                    <ng-container *ngIf=\"display === 'comma';else chipsValueTemplate\">\n                        {{label || 'empty'}}\n                    </ng-container>\n                    <ng-template #chipsValueTemplate>\n                        <div *ngFor=\"let node of value\" class=\"p-treeselect-token\">\n                            <span class=\"p-treeselect-token-label\">{{node.label}}</span>\n                        </div>\n                        <ng-container *ngIf=\"emptyValue\">{{placeholder || 'empty'}}</ng-container>\n                    </ng-template>\n                </ng-template>\n            </div>\n        </div>\n        <div class=\"p-treeselect-trigger\">\n            <span class=\"p-treeselect-trigger-icon pi pi-chevron-down\"></span>\n        </div>\n\n        <div #overlayRef class=\"p-treeselect-panel p-component\" *ngIf=\"overlayVisible\" (click)=\"onOverlayClick($event)\"\n            [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationDone($event)\">\n            <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: value, options: options}\"></ng-container>\n            <div class=\"p-treeselect-items-wrapper\" [ngStyle]=\"{'max-height': scrollHeight}\">\n                <p-tree [value]=\"options\" [propagateSelectionDown]=\"propagateSelectionDown\" [propagateSelectionUp]=\"propagateSelectionUp\" [selectionMode]=\"selectionMode\" (selectionChange)=\"onSelectionChange($event)\" [selection]=\"value\"\n                    [metaKeySelection]=\"metaKeySelection\" (onNodeExpand)=\"nodeExpand($event)\" (onNodeCollapse)=\"nodeCollapse($event)\"\n                    (onNodeSelect)=\"onSelect($event)\" (onNodeUnselect)=\"onUnselect($event)\"></p-tree>\n                <div *ngIf=\"emptyOptions\" class=\"p-treeselect-empty-message\">\n                    <ng-container *ngIf=\"!emptyTemplate; else empty\">\n                        {{emptyMessageText}}\n                    </ng-container>\n                    <ng-container *ngTemplateOutlet=\"emptyTemplate;\"></ng-container>\n                </div>\n            </div>\n            <ng-container *ngTemplateOutlet=\"footerTemplate; context: {$implicit: value, options: options}\"></ng-container>\n        </div>\n    </div>\n    `,\n    styleUrls: ['./treeselect.css'],\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': '!emptyValue',\n        '[class.p-inputwrapper-focus]': 'focused || overlayVisible'\n    },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [TREESELECT_VALUE_ACCESSOR],\n    encapsulation: ViewEncapsulation.None\n})\nexport class TreeSelect implements AfterContentInit {\n\n    @Input() type: string = \"button\";\n\n    @Input() inputId: string;\n\n    @Input() scrollHeight: string = \"400px\";\n\n    @Input() disabled: boolean;\n\n    @Input() metaKeySelection: boolean = true;\n\n    @Input() display: string = \"comma\";\n\n    @Input() selectionMode: string = \"single\";\n\n    @Input() tabindex: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() placeholder: string;\n\n    @Input() panelClass: string;\n\n    @Input() emptyMessage: string;\n\n    @Input() appendTo: any;\n\n    @Input() propagateSelectionDown: boolean = true;\n\n    @Input() propagateSelectionUp: boolean = true;\n\n    @Input() get options(): any[] {\n        return this._options;\n    };\n    set options(options) {\n        this._options = options;\n        this.updateTreeState();\n    }\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @ViewChild('container') containerEl: ElementRef;\n\n    @ViewChild('focusInput') focusInput: ElementRef;\n\n    @Output() onNodeExpand: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeCollapse: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeUnselect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeSelect: EventEmitter<any> = new EventEmitter();\n\n    valueTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    emptyTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    focused: boolean;\n\n    overlayVisible: boolean;\n\n    selfChange: boolean;\n\n    value;\n\n    expandedNodes: any[] = [];\n\n    _options: any[];\n\n    outsideClickListener: any;\n\n    scrollHandler: any;\n\n    resizeListener: any;\n\n    overlayEl: any;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    constructor(public config: PrimeNGConfig, public cd: ChangeDetectorRef, public el: ElementRef, public overlayService: OverlayService) { }\n\n    ngOnInit() {\n        this.updateTreeState();\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'value':\n                    this.valueTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.valueTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n                this.overlayEl = event.element;\n                this.onOverlayEnter();\n            break;\n        }\n    }\n\n    onOverlayAnimationDone(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'void':\n                this.onOverlayLeave();\n            break;\n        }\n    }\n\n    onSelectionChange(event) {\n        this.value = event;\n        this.onModelChange(this.value);\n        this.cd.markForCheck();\n    }\n\n    onClick(event) {\n        if (!this.disabled && (!this.overlayEl || !this.overlayEl.contains(event.target)) && !DomHandler.hasClass(event.target, 'p-treeselect-close')) {\n            if (this.overlayVisible){\n                this.hide();\n            }\n            else\n                this.show();\n\n            this.focusInput.nativeElement.focus();\n        }\n    }\n\n    onKeyDown(event) {\n        switch(event.which) {\n            //down\n            case 40:\n                if (!this.overlayVisible && event.altKey) {\n                    this.show();\n                    event.preventDefault();\n                }\n                else if (this.overlayVisible && this.overlayEl) {\n                    let focusableElements = DomHandler.getFocusableElements(this.overlayEl);\n\n                    if (focusableElements && focusableElements.length > 0) {\n                        focusableElements[0].focus();\n                    }\n\n                    event.preventDefault();\n                }\n            break;\n\n            //space\n            case 32:\n                if (!this.overlayVisible) {\n                    this.show();\n                    event.preventDefault();\n                }\n            break;\n\n            //enter and escape\n            case 13:\n            case 27:\n                if (this.overlayVisible) {\n                    this.hide();\n                    event.preventDefault();\n                }\n            break;\n\n            //tab\n            case 9:\n                this.hide();\n            break;\n\n            default:\n            break;\n        }\n    }\n\n    show() {\n        this.overlayVisible = true;\n    }\n\n    hide() {\n        this.overlayVisible = false;\n        this.cd.markForCheck();\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    updateTreeState() {\n        if (this.value) {\n            let selectedNodes = this.selectionMode === \"single\" ? [this.value] : [...this.value];\n            this.resetExpandedNodes();\n            if (selectedNodes && this.options) {\n                this.updateTreeBranchState(null, null, selectedNodes);\n            }\n        }\n    }\n\n    updateTreeBranchState(node, path, selectedNodes) {\n        if (node) {\n            if (this.isSelected(node)) {\n                this.expandPath(path);\n                selectedNodes.splice(selectedNodes.indexOf(node), 1);\n            }\n\n            if (selectedNodes.length > 0 && node.children) {\n                for (let childNode of node.children) {\n                    path.push(node);\n                    this.updateTreeBranchState(childNode, path, selectedNodes);\n                }\n            }\n        }\n        else {\n            for (let childNode of this.options) {\n                this.updateTreeBranchState(childNode, [], selectedNodes);\n            }\n        }\n    }\n\n    expandPath(expandedNodes) {\n        for (let node of expandedNodes) {\n            node.expanded = true;\n        }\n\n        this.expandedNodes = [...expandedNodes];\n    }\n\n    nodeExpand(event) {\n        this.onNodeExpand.emit(event);\n        this.expandedNodes.push(event.node);\n    }\n\n    nodeCollapse(event) {\n        this.onNodeCollapse.emit(event);\n        this.expandedNodes.splice(this.expandedNodes.indexOf(event.node), 1);\n    }\n\n    resetExpandedNodes() {\n        for (let node of this.expandedNodes) {\n            node.expanded = false;\n        }\n\n        this.expandedNodes = [];\n    }\n\n    findSelectedNodes(node, keys, selectedNodes) {\n        if (node) {\n            if (this.isSelected(node)) {\n                selectedNodes.push(node);\n                delete keys[node.key];\n            }\n\n            if (Object.keys(keys).length && node.children) {\n                for (let childNode of node.children) {\n                    this.findSelectedNodes(childNode, keys, selectedNodes);\n                }\n            }\n        }\n        else {\n            for (let childNode of this.options) {\n                this.findSelectedNodes(childNode, keys, selectedNodes);\n            }\n        }\n    }\n\n    isSelected(node: TreeNode) {\n        return this.findIndexInSelection(node) != -1;\n    }\n\n    findIndexInSelection(node: TreeNode) {\n        let index: number = -1;\n\n        if (this.value) {\n            if (this.selectionMode === \"single\") {\n                let areNodesEqual = (this.value.key && this.value.key === node.key) || this.value == node;\n                index = areNodesEqual ? 0 : - 1;\n            }\n            else {\n                for(let i = 0; i  < this.value.length; i++) {\n                    let selectedNode = this.value[i];\n                    let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;\n                    if (areNodesEqual) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n\n        return index;\n    }\n\n    onSelect(node) {\n        this.onNodeSelect.emit(node);\n\n        if (this.selectionMode === 'single') {\n            this.hide();\n        }\n    }\n\n    onUnselect(node) {\n        this.onNodeUnselect.emit(node);\n    }\n\n    onOverlayEnter() {\n        ZIndexUtils.set('overlay', this.overlayEl, this.config.zIndex.overlay);\n        this.appendContainer();\n        this.alignOverlay();\n        this.bindOutsideClickListener();\n        this.bindScrollListener();\n        this.bindResizeListener();\n        this.onShow.emit();\n    }\n\n    onOverlayLeave() {\n        this.unbindOutsideClickListener();\n        this.unbindScrollListener();\n        this.unbindResizeListener();\n        ZIndexUtils.clear(this.overlayEl);\n        this.overlayEl = null;\n        this.onHide.emit();\n    }\n\n    onFocus() {\n        this.focused = true;\n    }\n\n    onBlur() {\n        this.focused = false;\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.updateTreeState();\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    appendContainer() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlayEl);\n            else\n                document.getElementById(this.appendTo).appendChild(this.overlayEl);\n        }\n    }\n\n    restoreAppend() {\n        if (this.overlayEl && this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.removeChild(this.overlayEl);\n            else\n                document.getElementById(this.appendTo).removeChild(this.overlayEl);\n        }\n    }\n\n    alignOverlay() {\n        if (this.appendTo) {\n            DomHandler.absolutePosition(this.overlayEl, this.containerEl.nativeElement);\n            this.overlayEl.style.minWidth = DomHandler.getOuterWidth(this.containerEl.nativeElement) + 'px';\n        } else {\n            DomHandler.relativePosition(this.overlayEl, this.containerEl.nativeElement);\n        }\n    }\n\n    bindOutsideClickListener() {\n        if (!this.outsideClickListener) {\n            this.outsideClickListener = (event) => {\n                if (this.overlayVisible && this.overlayEl && !this.containerEl.nativeElement.contains(event.target) && !this.overlayEl.contains(event.target)) {\n                    this.hide();\n                }\n            };\n            document.addEventListener('click', this.outsideClickListener);\n        }\n    }\n\n    unbindOutsideClickListener() {\n        if (this.outsideClickListener) {\n            document.removeEventListener('click', this.outsideClickListener);\n            this.outsideClickListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerEl.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    bindResizeListener() {\n        if (!this.resizeListener) {\n            this.resizeListener = () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            };\n            window.addEventListener('resize', this.resizeListener);\n        }\n    }\n\n    unbindResizeListener() {\n        if (this.resizeListener) {\n            window.removeEventListener('resize', this.resizeListener);\n            this.resizeListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.restoreAppend();\n        this.unbindOutsideClickListener();\n        this.unbindResizeListener();\n\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.overlayEl) {\n            ZIndexUtils.clear(this.overlayEl);\n            this.overlayEl = null;\n        }\n    }\n\n    containerClass() {\n        return {\n            'p-treeselect p-component p-inputwrapper': true,\n            'p-treeselect-chip': this.display === 'chip',\n            'p-disabled': this.disabled,\n            'p-focus': this.focused\n        }\n    }\n\n    labelClass() {\n        return {\n            'p-treeselect-label': true,\n            'p-placeholder': this.label === this.placeholder,\n            'p-treeselect-label-empty': !this.placeholder && this.emptyValue\n        }\n    }\n\n    get emptyMessageText() {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    get emptyValue() {\n        return !this.value || Object.keys(this.value).length === 0;\n    }\n\n    get emptyOptions() {\n        return !this.options || this.options.length === 0;\n    }\n\n    get label() {\n        let value = this.value||[];\n        return value.length ? value.map(node => node.label).join(', ') : (this.selectionMode === \"single\" && this.value) ? value.label : this.placeholder;\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,RippleModule,SharedModule,TreeModule],\n    exports: [TreeSelect,SharedModule,TreeModule],\n    declarations: [TreeSelect]\n})\nexport class TreeSelectModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-treetable.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-treetable.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-treetable.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,2827 @@
+import * as i0 from '@angular/core';
+import { Injectable, EventEmitter, Component, ViewEncapsulation, Input, Output, ViewChild, ContentChildren, Directive, HostListener, ChangeDetectionStrategy, NgModule } from '@angular/core';
+import * as i3 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { Subject } from 'rxjs';
+import { DomHandler } from 'primeng/dom';
+import * as i2 from 'primeng/paginator';
+import { PaginatorModule } from 'primeng/paginator';
+import * as i1 from 'primeng/api';
+import { PrimeTemplate, SharedModule } from 'primeng/api';
+import { ObjectUtils } from 'primeng/utils';
+import * as i5 from 'primeng/ripple';
+import { RippleModule } from 'primeng/ripple';
+import * as i4 from '@angular/cdk/scrolling';
+import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
+
+class TreeTableService {
+    constructor() {
+        this.sortSource = new Subject();
+        this.selectionSource = new Subject();
+        this.contextMenuSource = new Subject();
+        this.uiUpdateSource = new Subject();
+        this.totalRecordsSource = new Subject();
+        this.sortSource$ = this.sortSource.asObservable();
+        this.selectionSource$ = this.selectionSource.asObservable();
+        this.contextMenuSource$ = this.contextMenuSource.asObservable();
+        this.uiUpdateSource$ = this.uiUpdateSource.asObservable();
+        this.totalRecordsSource$ = this.totalRecordsSource.asObservable();
+    }
+    onSort(sortMeta) {
+        this.sortSource.next(sortMeta);
+    }
+    onSelectionChange() {
+        this.selectionSource.next(null);
+    }
+    onContextMenu(node) {
+        this.contextMenuSource.next(node);
+    }
+    onUIUpdate(value) {
+        this.uiUpdateSource.next(value);
+    }
+    onTotalRecordsChange(value) {
+        this.totalRecordsSource.next(value);
+    }
+}
+TreeTableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
+TreeTableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableService });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableService, decorators: [{
+            type: Injectable
+        }] });
+class TreeTable {
+    constructor(el, zone, tableService, filterService) {
+        this.el = el;
+        this.zone = zone;
+        this.tableService = tableService;
+        this.filterService = filterService;
+        this.lazy = false;
+        this.lazyLoadOnInit = true;
+        this.first = 0;
+        this.pageLinks = 5;
+        this.alwaysShowPaginator = true;
+        this.paginatorPosition = 'bottom';
+        this.currentPageReportTemplate = '{currentPage} of {totalPages}';
+        this.showFirstLastIcon = true;
+        this.showPageLinks = true;
+        this.defaultSortOrder = 1;
+        this.sortMode = 'single';
+        this.resetPageOnSort = true;
+        this.selectionChange = new EventEmitter();
+        this.contextMenuSelectionChange = new EventEmitter();
+        this.contextMenuSelectionMode = "separate";
+        this.compareSelectionBy = 'deepEquals';
+        this.loadingIcon = 'pi pi-spinner';
+        this.showLoader = true;
+        this.virtualScrollDelay = 150;
+        this.virtualRowHeight = 28;
+        this.columnResizeMode = 'fit';
+        this.rowTrackBy = (index, item) => item;
+        this.filters = {};
+        this.filterDelay = 300;
+        this.filterMode = 'lenient';
+        this.onFilter = new EventEmitter();
+        this.onNodeExpand = new EventEmitter();
+        this.onNodeCollapse = new EventEmitter();
+        this.onPage = new EventEmitter();
+        this.onSort = new EventEmitter();
+        this.onLazyLoad = new EventEmitter();
+        this.sortFunction = new EventEmitter();
+        this.onColResize = new EventEmitter();
+        this.onColReorder = new EventEmitter();
+        this.onNodeSelect = new EventEmitter();
+        this.onNodeUnselect = new EventEmitter();
+        this.onContextMenuSelect = new EventEmitter();
+        this.onHeaderCheckboxToggle = new EventEmitter();
+        this.onEditInit = new EventEmitter();
+        this.onEditComplete = new EventEmitter();
+        this.onEditCancel = new EventEmitter();
+        this._value = [];
+        this._totalRecords = 0;
+        this._sortOrder = 1;
+        this.selectionKeys = {};
+    }
+    ngOnInit() {
+        if (this.lazy && this.lazyLoadOnInit) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        this.initialized = true;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'caption':
+                    this.captionTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'body':
+                    this.bodyTemplate = item.template;
+                    break;
+                case 'loadingbody':
+                    this.loadingBodyTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                case 'summary':
+                    this.summaryTemplate = item.template;
+                    break;
+                case 'colgroup':
+                    this.colGroupTemplate = item.template;
+                    break;
+                case 'emptymessage':
+                    this.emptyMessageTemplate = item.template;
+                    break;
+                case 'paginatorleft':
+                    this.paginatorLeftTemplate = item.template;
+                    break;
+                case 'paginatorright':
+                    this.paginatorRightTemplate = item.template;
+                    break;
+                case 'paginatordropdownitem':
+                    this.paginatorDropdownItemTemplate = item.template;
+                    break;
+                case 'frozenheader':
+                    this.frozenHeaderTemplate = item.template;
+                    break;
+                case 'frozenbody':
+                    this.frozenBodyTemplate = item.template;
+                    break;
+                case 'frozenfooter':
+                    this.frozenFooterTemplate = item.template;
+                    break;
+                case 'frozencolgroup':
+                    this.frozenColGroupTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    ngOnChanges(simpleChange) {
+        if (simpleChange.value) {
+            this._value = simpleChange.value.currentValue;
+            if (!this.lazy) {
+                this.totalRecords = (this._value ? this._value.length : 0);
+                if (this.sortMode == 'single' && this.sortField)
+                    this.sortSingle();
+                else if (this.sortMode == 'multiple' && this.multiSortMeta)
+                    this.sortMultiple();
+                else if (this.hasFilter()) //sort already filters
+                    this._filter();
+            }
+            this.updateSerializedValue();
+            this.tableService.onUIUpdate(this.value);
+        }
+        if (simpleChange.sortField) {
+            this._sortField = simpleChange.sortField.currentValue;
+            //avoid triggering lazy load prior to lazy initialization at onInit
+            if (!this.lazy || this.initialized) {
+                if (this.sortMode === 'single') {
+                    this.sortSingle();
+                }
+            }
+        }
+        if (simpleChange.sortOrder) {
+            this._sortOrder = simpleChange.sortOrder.currentValue;
+            //avoid triggering lazy load prior to lazy initialization at onInit
+            if (!this.lazy || this.initialized) {
+                if (this.sortMode === 'single') {
+                    this.sortSingle();
+                }
+            }
+        }
+        if (simpleChange.multiSortMeta) {
+            this._multiSortMeta = simpleChange.multiSortMeta.currentValue;
+            if (this.sortMode === 'multiple') {
+                this.sortMultiple();
+            }
+        }
+        if (simpleChange.selection) {
+            this._selection = simpleChange.selection.currentValue;
+            if (!this.preventSelectionSetterPropagation) {
+                this.updateSelectionKeys();
+                this.tableService.onSelectionChange();
+            }
+            this.preventSelectionSetterPropagation = false;
+        }
+    }
+    get value() {
+        return this._value;
+    }
+    set value(val) {
+        this._value = val;
+    }
+    updateSerializedValue() {
+        this.serializedValue = [];
+        if (this.paginator)
+            this.serializePageNodes();
+        else
+            this.serializeNodes(null, this.filteredNodes || this.value, 0, true);
+    }
+    serializeNodes(parent, nodes, level, visible) {
+        if (nodes && nodes.length) {
+            for (let node of nodes) {
+                node.parent = parent;
+                const rowNode = {
+                    node: node,
+                    parent: parent,
+                    level: level,
+                    visible: visible && (parent ? parent.expanded : true)
+                };
+                this.serializedValue.push(rowNode);
+                if (rowNode.visible && node.expanded) {
+                    this.serializeNodes(node, node.children, level + 1, rowNode.visible);
+                }
+            }
+        }
+    }
+    serializePageNodes() {
+        let data = this.filteredNodes || this.value;
+        this.serializedValue = [];
+        if (data && data.length) {
+            const first = this.lazy ? 0 : this.first;
+            for (let i = first; i < (first + this.rows); i++) {
+                let node = data[i];
+                if (node) {
+                    this.serializedValue.push({
+                        node: node,
+                        parent: null,
+                        level: 0,
+                        visible: true
+                    });
+                    this.serializeNodes(node, node.children, 1, true);
+                }
+            }
+        }
+    }
+    get totalRecords() {
+        return this._totalRecords;
+    }
+    set totalRecords(val) {
+        this._totalRecords = val;
+        this.tableService.onTotalRecordsChange(this._totalRecords);
+    }
+    get sortField() {
+        return this._sortField;
+    }
+    set sortField(val) {
+        this._sortField = val;
+    }
+    get sortOrder() {
+        return this._sortOrder;
+    }
+    set sortOrder(val) {
+        this._sortOrder = val;
+    }
+    get multiSortMeta() {
+        return this._multiSortMeta;
+    }
+    set multiSortMeta(val) {
+        this._multiSortMeta = val;
+    }
+    get selection() {
+        return this._selection;
+    }
+    set selection(val) {
+        this._selection = val;
+    }
+    updateSelectionKeys() {
+        if (this.dataKey && this._selection) {
+            this.selectionKeys = {};
+            if (Array.isArray(this._selection)) {
+                for (let node of this._selection) {
+                    this.selectionKeys[String(ObjectUtils.resolveFieldData(node.data, this.dataKey))] = 1;
+                }
+            }
+            else {
+                this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection.data, this.dataKey))] = 1;
+            }
+        }
+    }
+    onPageChange(event) {
+        this.first = event.first;
+        this.rows = event.rows;
+        if (this.lazy)
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        else
+            this.serializePageNodes();
+        this.onPage.emit({
+            first: this.first,
+            rows: this.rows
+        });
+        this.tableService.onUIUpdate(this.value);
+        if (this.scrollable) {
+            this.resetScrollTop();
+        }
+    }
+    sort(event) {
+        let originalEvent = event.originalEvent;
+        if (this.sortMode === 'single') {
+            this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;
+            this._sortField = event.field;
+            this.sortSingle();
+            if (this.resetPageOnSort && this.scrollable) {
+                this.resetScrollTop();
+            }
+        }
+        if (this.sortMode === 'multiple') {
+            let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;
+            let sortMeta = this.getSortMeta(event.field);
+            if (sortMeta) {
+                if (!metaKey) {
+                    this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];
+                    if (this.resetPageOnSort && this.scrollable) {
+                        this.resetScrollTop();
+                    }
+                }
+                else {
+                    sortMeta.order = sortMeta.order * -1;
+                }
+            }
+            else {
+                if (!metaKey || !this.multiSortMeta) {
+                    this._multiSortMeta = [];
+                    if (this.resetPageOnSort && this.scrollable) {
+                        this.resetScrollTop();
+                    }
+                }
+                this.multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });
+            }
+            this.sortMultiple();
+        }
+    }
+    sortSingle() {
+        if (this.sortField && this.sortOrder) {
+            if (this.lazy) {
+                this.onLazyLoad.emit(this.createLazyLoadMetadata());
+            }
+            else if (this.value) {
+                this.sortNodes(this.value);
+                if (this.hasFilter()) {
+                    this._filter();
+                }
+            }
+            let sortMeta = {
+                field: this.sortField,
+                order: this.sortOrder
+            };
+            this.onSort.emit(sortMeta);
+            this.tableService.onSort(sortMeta);
+            this.updateSerializedValue();
+        }
+    }
+    sortNodes(nodes) {
+        if (!nodes || nodes.length === 0) {
+            return;
+        }
+        if (this.customSort) {
+            this.sortFunction.emit({
+                data: nodes,
+                mode: this.sortMode,
+                field: this.sortField,
+                order: this.sortOrder
+            });
+        }
+        else {
+            nodes.sort((node1, node2) => {
+                let value1 = ObjectUtils.resolveFieldData(node1.data, this.sortField);
+                let value2 = ObjectUtils.resolveFieldData(node2.data, this.sortField);
+                let result = null;
+                if (value1 == null && value2 != null)
+                    result = -1;
+                else if (value1 != null && value2 == null)
+                    result = 1;
+                else if (value1 == null && value2 == null)
+                    result = 0;
+                else if (typeof value1 === 'string' && typeof value2 === 'string')
+                    result = value1.localeCompare(value2, undefined, { numeric: true });
+                else
+                    result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
+                return (this.sortOrder * result);
+            });
+        }
+        for (let node of nodes) {
+            this.sortNodes(node.children);
+        }
+    }
+    sortMultiple() {
+        if (this.multiSortMeta) {
+            if (this.lazy) {
+                this.onLazyLoad.emit(this.createLazyLoadMetadata());
+            }
+            else if (this.value) {
+                this.sortMultipleNodes(this.value);
+                if (this.hasFilter()) {
+                    this._filter();
+                }
+            }
+            this.onSort.emit({
+                multisortmeta: this.multiSortMeta
+            });
+            this.updateSerializedValue();
+            this.tableService.onSort(this.multiSortMeta);
+        }
+    }
+    sortMultipleNodes(nodes) {
+        if (!nodes || nodes.length === 0) {
+            return;
+        }
+        if (this.customSort) {
+            this.sortFunction.emit({
+                data: this.value,
+                mode: this.sortMode,
+                multiSortMeta: this.multiSortMeta
+            });
+        }
+        else {
+            nodes.sort((node1, node2) => {
+                return this.multisortField(node1, node2, this.multiSortMeta, 0);
+            });
+        }
+        for (let node of nodes) {
+            this.sortMultipleNodes(node.children);
+        }
+    }
+    multisortField(node1, node2, multiSortMeta, index) {
+        let value1 = ObjectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);
+        let value2 = ObjectUtils.resolveFieldData(node2.data, multiSortMeta[index].field);
+        let result = null;
+        if (value1 == null && value2 != null)
+            result = -1;
+        else if (value1 != null && value2 == null)
+            result = 1;
+        else if (value1 == null && value2 == null)
+            result = 0;
+        if (typeof value1 == 'string' || value1 instanceof String) {
+            if (value1.localeCompare && (value1 != value2)) {
+                return (multiSortMeta[index].order * value1.localeCompare(value2, undefined, { numeric: true }));
+            }
+        }
+        else {
+            result = (value1 < value2) ? -1 : 1;
+        }
+        if (value1 == value2) {
+            return (multiSortMeta.length - 1) > (index) ? (this.multisortField(node1, node2, multiSortMeta, index + 1)) : 0;
+        }
+        return (multiSortMeta[index].order * result);
+    }
+    getSortMeta(field) {
+        if (this.multiSortMeta && this.multiSortMeta.length) {
+            for (let i = 0; i < this.multiSortMeta.length; i++) {
+                if (this.multiSortMeta[i].field === field) {
+                    return this.multiSortMeta[i];
+                }
+            }
+        }
+        return null;
+    }
+    isSorted(field) {
+        if (this.sortMode === 'single') {
+            return (this.sortField && this.sortField === field);
+        }
+        else if (this.sortMode === 'multiple') {
+            let sorted = false;
+            if (this.multiSortMeta) {
+                for (let i = 0; i < this.multiSortMeta.length; i++) {
+                    if (this.multiSortMeta[i].field == field) {
+                        sorted = true;
+                        break;
+                    }
+                }
+            }
+            return sorted;
+        }
+    }
+    createLazyLoadMetadata() {
+        return {
+            first: this.first,
+            rows: this.rows,
+            sortField: this.sortField,
+            sortOrder: this.sortOrder,
+            filters: this.filters,
+            globalFilter: this.filters && this.filters['global'] ? this.filters['global'].value : null,
+            multiSortMeta: this.multiSortMeta
+        };
+    }
+    resetScrollTop() {
+        if (this.virtualScroll)
+            this.scrollToVirtualIndex(0);
+        else
+            this.scrollTo({ top: 0 });
+    }
+    scrollToVirtualIndex(index) {
+        if (this.scrollableViewChild) {
+            this.scrollableViewChild.scrollToVirtualIndex(index);
+        }
+        if (this.scrollableFrozenViewChild) {
+            this.scrollableFrozenViewChild.scrollToVirtualIndex(index);
+        }
+    }
+    scrollTo(options) {
+        if (this.scrollableViewChild) {
+            this.scrollableViewChild.scrollTo(options);
+        }
+        if (this.scrollableFrozenViewChild) {
+            this.scrollableFrozenViewChild.scrollTo(options);
+        }
+    }
+    isEmpty() {
+        let data = this.filteredNodes || this.value;
+        return data == null || data.length == 0;
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    onColumnResizeBegin(event) {
+        let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;
+        this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);
+        event.preventDefault();
+    }
+    onColumnResize(event) {
+        let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;
+        DomHandler.addClass(this.containerViewChild.nativeElement, 'p-unselectable-text');
+        this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';
+        this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';
+        this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';
+        this.resizeHelperViewChild.nativeElement.style.display = 'block';
+    }
+    onColumnResizeEnd(event, column) {
+        let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;
+        let columnWidth = column.offsetWidth;
+        let newColumnWidth = columnWidth + delta;
+        let minWidth = column.style.minWidth || 15;
+        if (columnWidth + delta > parseInt(minWidth)) {
+            if (this.columnResizeMode === 'fit') {
+                let nextColumn = column.nextElementSibling;
+                while (!nextColumn.offsetParent) {
+                    nextColumn = nextColumn.nextElementSibling;
+                }
+                if (nextColumn) {
+                    let nextColumnWidth = nextColumn.offsetWidth - delta;
+                    let nextColumnMinWidth = nextColumn.style.minWidth || 15;
+                    if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {
+                        if (this.scrollable) {
+                            let scrollableView = this.findParentScrollableView(column);
+                            let scrollableBodyTable = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body table') || DomHandler.findSingle(scrollableView, '.p-treetable-virtual-scrollable-body table');
+                            let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-header-table');
+                            let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-footer-table');
+                            let resizeColumnIndex = DomHandler.index(column);
+                            this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
+                            this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
+                            this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
+                        }
+                        else {
+                            column.style.width = newColumnWidth + 'px';
+                            if (nextColumn) {
+                                nextColumn.style.width = nextColumnWidth + 'px';
+                            }
+                        }
+                    }
+                }
+            }
+            else if (this.columnResizeMode === 'expand') {
+                if (this.scrollable) {
+                    let scrollableView = this.findParentScrollableView(column);
+                    let scrollableBody = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport');
+                    let scrollableHeader = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-header');
+                    let scrollableFooter = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-footer');
+                    let scrollableBodyTable = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body table') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport table');
+                    let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-header-table');
+                    let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-footer-table');
+                    scrollableBodyTable.style.width = scrollableBodyTable.offsetWidth + delta + 'px';
+                    scrollableHeaderTable.style.width = scrollableHeaderTable.offsetWidth + delta + 'px';
+                    if (scrollableFooterTable) {
+                        scrollableFooterTable.style.width = scrollableFooterTable.offsetWidth + delta + 'px';
+                    }
+                    let resizeColumnIndex = DomHandler.index(column);
+                    const scrollableBodyTableWidth = column ? scrollableBodyTable.offsetWidth + delta : newColumnWidth;
+                    const scrollableHeaderTableWidth = column ? scrollableHeaderTable.offsetWidth + delta : newColumnWidth;
+                    const isContainerInViewport = this.containerViewChild.nativeElement.offsetWidth >= scrollableBodyTableWidth;
+                    let setWidth = (container, table, width, isContainerInViewport) => {
+                        if (container && table) {
+                            container.style.width = isContainerInViewport ? width + DomHandler.calculateScrollbarWidth(scrollableBody) + 'px' : 'auto';
+                            table.style.width = width + 'px';
+                        }
+                    };
+                    setWidth(scrollableBody, scrollableBodyTable, scrollableBodyTableWidth, isContainerInViewport);
+                    setWidth(scrollableHeader, scrollableHeaderTable, scrollableHeaderTableWidth, isContainerInViewport);
+                    setWidth(scrollableFooter, scrollableFooterTable, scrollableHeaderTableWidth, isContainerInViewport);
+                    this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);
+                    this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);
+                    this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);
+                }
+                else {
+                    this.tableViewChild.nativeElement.style.width = this.tableViewChild.nativeElement.offsetWidth + delta + 'px';
+                    column.style.width = newColumnWidth + 'px';
+                    let containerWidth = this.tableViewChild.nativeElement.style.width;
+                    this.containerViewChild.nativeElement.style.width = containerWidth + 'px';
+                }
+            }
+            this.onColResize.emit({
+                element: column,
+                delta: delta
+            });
+        }
+        this.resizeHelperViewChild.nativeElement.style.display = 'none';
+        DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-unselectable-text');
+    }
+    findParentScrollableView(column) {
+        if (column) {
+            let parent = column.parentElement;
+            while (parent && !DomHandler.hasClass(parent, 'p-treetable-scrollable-view')) {
+                parent = parent.parentElement;
+            }
+            return parent;
+        }
+        else {
+            return null;
+        }
+    }
+    resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {
+        if (table) {
+            let colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;
+            if (colGroup) {
+                let col = colGroup.children[resizeColumnIndex];
+                let nextCol = col.nextElementSibling;
+                col.style.width = newColumnWidth + 'px';
+                if (nextCol && nextColumnWidth) {
+                    nextCol.style.width = nextColumnWidth + 'px';
+                }
+            }
+            else {
+                throw "Scrollable tables require a colgroup to support resizable columns";
+            }
+        }
+    }
+    onColumnDragStart(event, columnElement) {
+        this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);
+        this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);
+        this.draggedColumn = columnElement;
+        event.dataTransfer.setData('text', 'b'); // For firefox
+    }
+    onColumnDragEnter(event, dropHeader) {
+        if (this.reorderableColumns && this.draggedColumn && dropHeader) {
+            event.preventDefault();
+            let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);
+            let dropHeaderOffset = DomHandler.getOffset(dropHeader);
+            if (this.draggedColumn != dropHeader) {
+                let targetLeft = dropHeaderOffset.left - containerOffset.left;
+                let targetTop = containerOffset.top - dropHeaderOffset.top;
+                let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;
+                this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';
+                this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';
+                if (event.pageX > columnCenter) {
+                    this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';
+                    this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';
+                    this.dropPosition = 1;
+                }
+                else {
+                    this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';
+                    this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';
+                    this.dropPosition = -1;
+                }
+                this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';
+                this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';
+            }
+            else {
+                event.dataTransfer.dropEffect = 'none';
+            }
+        }
+    }
+    onColumnDragLeave(event) {
+        if (this.reorderableColumns && this.draggedColumn) {
+            event.preventDefault();
+            this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';
+            this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';
+        }
+    }
+    onColumnDrop(event, dropColumn) {
+        event.preventDefault();
+        if (this.draggedColumn) {
+            let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'ttreorderablecolumn');
+            let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'ttreorderablecolumn');
+            let allowDrop = (dragIndex != dropIndex);
+            if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {
+                allowDrop = false;
+            }
+            if (allowDrop && ((dropIndex < dragIndex && this.dropPosition === 1))) {
+                dropIndex = dropIndex + 1;
+            }
+            if (allowDrop && ((dropIndex > dragIndex && this.dropPosition === -1))) {
+                dropIndex = dropIndex - 1;
+            }
+            if (allowDrop) {
+                ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);
+                this.onColReorder.emit({
+                    dragIndex: dragIndex,
+                    dropIndex: dropIndex,
+                    columns: this.columns
+                });
+            }
+            this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';
+            this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';
+            this.draggedColumn.draggable = false;
+            this.draggedColumn = null;
+            this.dropPosition = null;
+        }
+    }
+    handleRowClick(event) {
+        let targetNode = event.originalEvent.target.nodeName;
+        if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || (DomHandler.hasClass(event.originalEvent.target, 'p-clickable'))) {
+            return;
+        }
+        if (this.selectionMode) {
+            this.preventSelectionSetterPropagation = true;
+            let rowNode = event.rowNode;
+            let selected = this.isSelected(rowNode.node);
+            let metaSelection = this.rowTouched ? false : this.metaKeySelection;
+            let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowNode.node.data, this.dataKey)) : null;
+            if (metaSelection) {
+                let metaKey = event.originalEvent.metaKey || event.originalEvent.ctrlKey;
+                if (selected && metaKey) {
+                    if (this.isSingleSelectionMode()) {
+                        this._selection = null;
+                        this.selectionKeys = {};
+                        this.selectionChange.emit(null);
+                    }
+                    else {
+                        let selectionIndex = this.findIndexInSelection(rowNode.node);
+                        this._selection = this.selection.filter((val, i) => i != selectionIndex);
+                        this.selectionChange.emit(this.selection);
+                        if (dataKeyValue) {
+                            delete this.selectionKeys[dataKeyValue];
+                        }
+                    }
+                    this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });
+                }
+                else {
+                    if (this.isSingleSelectionMode()) {
+                        this._selection = rowNode.node;
+                        this.selectionChange.emit(rowNode.node);
+                        if (dataKeyValue) {
+                            this.selectionKeys = {};
+                            this.selectionKeys[dataKeyValue] = 1;
+                        }
+                    }
+                    else if (this.isMultipleSelectionMode()) {
+                        if (metaKey) {
+                            this._selection = this.selection || [];
+                        }
+                        else {
+                            this._selection = [];
+                            this.selectionKeys = {};
+                        }
+                        this._selection = [...this.selection, rowNode.node];
+                        this.selectionChange.emit(this.selection);
+                        if (dataKeyValue) {
+                            this.selectionKeys[dataKeyValue] = 1;
+                        }
+                    }
+                    this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });
+                }
+            }
+            else {
+                if (this.selectionMode === 'single') {
+                    if (selected) {
+                        this._selection = null;
+                        this.selectionKeys = {};
+                        this.selectionChange.emit(this.selection);
+                        this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });
+                    }
+                    else {
+                        this._selection = rowNode.node;
+                        this.selectionChange.emit(this.selection);
+                        this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });
+                        if (dataKeyValue) {
+                            this.selectionKeys = {};
+                            this.selectionKeys[dataKeyValue] = 1;
+                        }
+                    }
+                }
+                else if (this.selectionMode === 'multiple') {
+                    if (selected) {
+                        let selectionIndex = this.findIndexInSelection(rowNode.node);
+                        this._selection = this.selection.filter((val, i) => i != selectionIndex);
+                        this.selectionChange.emit(this.selection);
+                        this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });
+                        if (dataKeyValue) {
+                            delete this.selectionKeys[dataKeyValue];
+                        }
+                    }
+                    else {
+                        this._selection = this.selection ? [...this.selection, rowNode.node] : [rowNode.node];
+                        this.selectionChange.emit(this.selection);
+                        this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });
+                        if (dataKeyValue) {
+                            this.selectionKeys[dataKeyValue] = 1;
+                        }
+                    }
+                }
+            }
+            this.tableService.onSelectionChange();
+        }
+        this.rowTouched = false;
+    }
+    handleRowTouchEnd(event) {
+        this.rowTouched = true;
+    }
+    handleRowRightClick(event) {
+        if (this.contextMenu) {
+            const node = event.rowNode.node;
+            if (this.contextMenuSelectionMode === 'separate') {
+                this.contextMenuSelection = node;
+                this.contextMenuSelectionChange.emit(node);
+                this.onContextMenuSelect.emit({ originalEvent: event.originalEvent, node: node });
+                this.contextMenu.show(event.originalEvent);
+                this.tableService.onContextMenu(node);
+            }
+            else if (this.contextMenuSelectionMode === 'joint') {
+                this.preventSelectionSetterPropagation = true;
+                let selected = this.isSelected(node);
+                let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;
+                if (!selected) {
+                    if (this.isSingleSelectionMode()) {
+                        this.selection = node;
+                        this.selectionChange.emit(node);
+                    }
+                    else if (this.isMultipleSelectionMode()) {
+                        this.selection = [node];
+                        this.selectionChange.emit(this.selection);
+                    }
+                    if (dataKeyValue) {
+                        this.selectionKeys[dataKeyValue] = 1;
+                    }
+                }
+                this.contextMenu.show(event.originalEvent);
+                this.onContextMenuSelect.emit({ originalEvent: event.originalEvent, node: node });
+            }
+        }
+    }
+    toggleNodeWithCheckbox(event) {
+        this.selection = this.selection || [];
+        this.preventSelectionSetterPropagation = true;
+        let node = event.rowNode.node;
+        let selected = this.isSelected(node);
+        if (selected) {
+            this.propagateSelectionDown(node, false);
+            if (event.rowNode.parent) {
+                this.propagateSelectionUp(node.parent, false);
+            }
+            this.selectionChange.emit(this.selection);
+            this.onNodeUnselect.emit({ originalEvent: event, node: node });
+        }
+        else {
+            this.propagateSelectionDown(node, true);
+            if (event.rowNode.parent) {
+                this.propagateSelectionUp(node.parent, true);
+            }
+            this.selectionChange.emit(this.selection);
+            this.onNodeSelect.emit({ originalEvent: event, node: node });
+        }
+        this.tableService.onSelectionChange();
+    }
+    toggleNodesWithCheckbox(event, check) {
+        let data = this.filteredNodes || this.value;
+        this._selection = check && data ? data.slice() : [];
+        if (check) {
+            if (data && data.length) {
+                for (let node of data) {
+                    this.propagateSelectionDown(node, true);
+                }
+            }
+        }
+        else {
+            this._selection = [];
+            this.selectionKeys = {};
+        }
+        this.preventSelectionSetterPropagation = true;
+        this.selectionChange.emit(this._selection);
+        this.tableService.onSelectionChange();
+        this.onHeaderCheckboxToggle.emit({ originalEvent: event, checked: check });
+    }
+    propagateSelectionUp(node, select) {
+        if (node.children && node.children.length) {
+            let selectedChildCount = 0;
+            let childPartialSelected = false;
+            let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;
+            for (let child of node.children) {
+                if (this.isSelected(child))
+                    selectedChildCount++;
+                else if (child.partialSelected)
+                    childPartialSelected = true;
+            }
+            if (select && selectedChildCount == node.children.length) {
+                this._selection = [...this.selection || [], node];
+                node.partialSelected = false;
+                if (dataKeyValue) {
+                    this.selectionKeys[dataKeyValue] = 1;
+                }
+            }
+            else {
+                if (!select) {
+                    let index = this.findIndexInSelection(node);
+                    if (index >= 0) {
+                        this._selection = this.selection.filter((val, i) => i != index);
+                        if (dataKeyValue) {
+                            delete this.selectionKeys[dataKeyValue];
+                        }
+                    }
+                }
+                if (childPartialSelected || selectedChildCount > 0 && selectedChildCount != node.children.length)
+                    node.partialSelected = true;
+                else
+                    node.partialSelected = false;
+            }
+        }
+        let parent = node.parent;
+        if (parent) {
+            this.propagateSelectionUp(parent, select);
+        }
+    }
+    propagateSelectionDown(node, select) {
+        let index = this.findIndexInSelection(node);
+        let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;
+        if (select && index == -1) {
+            this._selection = [...this.selection || [], node];
+            if (dataKeyValue) {
+                this.selectionKeys[dataKeyValue] = 1;
+            }
+        }
+        else if (!select && index > -1) {
+            this._selection = this.selection.filter((val, i) => i != index);
+            if (dataKeyValue) {
+                delete this.selectionKeys[dataKeyValue];
+            }
+        }
+        node.partialSelected = false;
+        if (node.children && node.children.length) {
+            for (let child of node.children) {
+                this.propagateSelectionDown(child, select);
+            }
+        }
+    }
+    isSelected(node) {
+        if (node && this.selection) {
+            if (this.dataKey) {
+                return this.selectionKeys[ObjectUtils.resolveFieldData(node.data, this.dataKey)] !== undefined;
+            }
+            else {
+                if (this.selection instanceof Array)
+                    return this.findIndexInSelection(node) > -1;
+                else
+                    return this.equals(node, this.selection);
+            }
+        }
+        return false;
+    }
+    findIndexInSelection(node) {
+        let index = -1;
+        if (this.selection && this.selection.length) {
+            for (let i = 0; i < this.selection.length; i++) {
+                if (this.equals(node, this.selection[i])) {
+                    index = i;
+                    break;
+                }
+            }
+        }
+        return index;
+    }
+    isSingleSelectionMode() {
+        return this.selectionMode === 'single';
+    }
+    isMultipleSelectionMode() {
+        return this.selectionMode === 'multiple';
+    }
+    equals(node1, node2) {
+        return this.compareSelectionBy === 'equals' ? (node1 === node2) : ObjectUtils.equals(node1.data, node2.data, this.dataKey);
+    }
+    filter(value, field, matchMode) {
+        if (this.filterTimeout) {
+            clearTimeout(this.filterTimeout);
+        }
+        if (!this.isFilterBlank(value)) {
+            this.filters[field] = { value: value, matchMode: matchMode };
+        }
+        else if (this.filters[field]) {
+            delete this.filters[field];
+        }
+        this.filterTimeout = setTimeout(() => {
+            this._filter();
+            this.filterTimeout = null;
+        }, this.filterDelay);
+    }
+    filterGlobal(value, matchMode) {
+        this.filter(value, 'global', matchMode);
+    }
+    isFilterBlank(filter) {
+        if (filter !== null && filter !== undefined) {
+            if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))
+                return true;
+            else
+                return false;
+        }
+        return true;
+    }
+    _filter() {
+        if (this.lazy) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        else {
+            if (!this.value) {
+                return;
+            }
+            if (!this.hasFilter()) {
+                this.filteredNodes = null;
+                if (this.paginator) {
+                    this.totalRecords = this.value ? this.value.length : 0;
+                }
+            }
+            else {
+                let globalFilterFieldsArray;
+                if (this.filters['global']) {
+                    if (!this.columns && !this.globalFilterFields)
+                        throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');
+                    else
+                        globalFilterFieldsArray = this.globalFilterFields || this.columns;
+                }
+                this.filteredNodes = [];
+                const isStrictMode = this.filterMode === 'strict';
+                let isValueChanged = false;
+                for (let node of this.value) {
+                    let copyNode = { ...node };
+                    let localMatch = true;
+                    let globalMatch = false;
+                    let paramsWithoutNode;
+                    for (let prop in this.filters) {
+                        if (this.filters.hasOwnProperty(prop) && prop !== 'global') {
+                            let filterMeta = this.filters[prop];
+                            let filterField = prop;
+                            let filterValue = filterMeta.value;
+                            let filterMatchMode = filterMeta.matchMode || 'startsWith';
+                            let filterConstraint = this.filterService.filters[filterMatchMode];
+                            paramsWithoutNode = { filterField, filterValue, filterConstraint, isStrictMode };
+                            if ((isStrictMode && !(this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||
+                                (!isStrictMode && !(this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {
+                                localMatch = false;
+                            }
+                            if (!localMatch) {
+                                break;
+                            }
+                        }
+                    }
+                    if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {
+                        for (let j = 0; j < globalFilterFieldsArray.length; j++) {
+                            let copyNodeForGlobal = { ...copyNode };
+                            let filterField = globalFilterFieldsArray[j].field || globalFilterFieldsArray[j];
+                            let filterValue = this.filters['global'].value;
+                            let filterConstraint = this.filterService.filters[this.filters['global'].matchMode];
+                            paramsWithoutNode = { filterField, filterValue, filterConstraint, isStrictMode };
+                            if ((isStrictMode && (this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) || this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode))) ||
+                                (!isStrictMode && (this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode) || this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode)))) {
+                                globalMatch = true;
+                                copyNode = copyNodeForGlobal;
+                            }
+                        }
+                    }
+                    let matches = localMatch;
+                    if (this.filters['global']) {
+                        matches = localMatch && globalMatch;
+                    }
+                    if (matches) {
+                        this.filteredNodes.push(copyNode);
+                    }
+                    isValueChanged = isValueChanged || !localMatch || globalMatch || (localMatch && this.filteredNodes.length > 0) || (!globalMatch && this.filteredNodes.length === 0);
+                }
+                if (!isValueChanged) {
+                    this.filteredNodes = null;
+                }
+                if (this.paginator) {
+                    this.totalRecords = this.filteredNodes ? this.filteredNodes.length : this.value ? this.value.length : 0;
+                }
+            }
+        }
+        this.first = 0;
+        const filteredValue = this.filteredNodes || this.value;
+        this.onFilter.emit({
+            filters: this.filters,
+            filteredValue: filteredValue
+        });
+        this.tableService.onUIUpdate(filteredValue);
+        this.updateSerializedValue();
+        if (this.scrollable) {
+            this.resetScrollTop();
+        }
+    }
+    findFilteredNodes(node, paramsWithoutNode) {
+        if (node) {
+            let matched = false;
+            if (node.children) {
+                let childNodes = [...node.children];
+                node.children = [];
+                for (let childNode of childNodes) {
+                    let copyChildNode = { ...childNode };
+                    if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {
+                        matched = true;
+                        node.children.push(copyChildNode);
+                    }
+                }
+            }
+            if (matched) {
+                return true;
+            }
+        }
+    }
+    isFilterMatched(node, { filterField, filterValue, filterConstraint, isStrictMode }) {
+        let matched = false;
+        let dataFieldValue = ObjectUtils.resolveFieldData(node.data, filterField);
+        if (filterConstraint(dataFieldValue, filterValue, this.filterLocale)) {
+            matched = true;
+        }
+        if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {
+            matched = this.findFilteredNodes(node, { filterField, filterValue, filterConstraint, isStrictMode }) || matched;
+        }
+        return matched;
+    }
+    isNodeLeaf(node) {
+        return node.leaf === false ? false : !(node.children && node.children.length);
+    }
+    hasFilter() {
+        let empty = true;
+        for (let prop in this.filters) {
+            if (this.filters.hasOwnProperty(prop)) {
+                empty = false;
+                break;
+            }
+        }
+        return !empty;
+    }
+    reset() {
+        this._sortField = null;
+        this._sortOrder = 1;
+        this._multiSortMeta = null;
+        this.tableService.onSort(null);
+        this.filteredNodes = null;
+        this.filters = {};
+        this.first = 0;
+        if (this.lazy) {
+            this.onLazyLoad.emit(this.createLazyLoadMetadata());
+        }
+        else {
+            this.totalRecords = (this._value ? this._value.length : 0);
+        }
+    }
+    updateEditingCell(cell, data, field) {
+        this.editingCell = cell;
+        this.editingCellData = data;
+        this.editingCellField = field;
+        this.bindDocumentEditListener();
+    }
+    isEditingCellValid() {
+        return (this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0);
+    }
+    bindDocumentEditListener() {
+        if (!this.documentEditListener) {
+            this.documentEditListener = (event) => {
+                if (this.editingCell && !this.editingCellClick && this.isEditingCellValid()) {
+                    DomHandler.removeClass(this.editingCell, 'p-cell-editing');
+                    this.editingCell = null;
+                    this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData });
+                    this.editingCellField = null;
+                    this.editingCellData = null;
+                    this.unbindDocumentEditListener();
+                }
+                this.editingCellClick = false;
+            };
+            document.addEventListener('click', this.documentEditListener);
+        }
+    }
+    unbindDocumentEditListener() {
+        if (this.documentEditListener) {
+            document.removeEventListener('click', this.documentEditListener);
+            this.documentEditListener = null;
+        }
+    }
+    ngOnDestroy() {
+        this.unbindDocumentEditListener();
+        this.editingCell = null;
+        this.editingCellField = null;
+        this.editingCellData = null;
+        this.initialized = null;
+    }
+}
+TreeTable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTable, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: TreeTableService }, { token: i1.FilterService }], target: i0.ɵɵFactoryTarget.Component });
+TreeTable.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TreeTable, selector: "p-treeTable", inputs: { columns: "columns", style: "style", styleClass: "styleClass", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", autoLayout: "autoLayout", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", paginator: "paginator", rows: "rows", first: "first", pageLinks: "pageLinks", rowsPerPageOptions: "rowsPerPageOptions", alwaysShowPaginator: "alwaysShowPaginator", paginatorPosition: "paginatorPosition", paginatorDropdownAppendTo: "paginatorDropdownAppendTo", currentPageReportTemplate: "currentPageReportTemplate", showCurrentPageReport: "showCurrentPageReport", showJumpToPageDropdown: "showJumpToPageDropdown", showFirstLastIcon: "showFirstLastIcon", showPageLinks: "showPageLinks", defaultSortOrder: "defaultSortOrder", sortMode: "sortMode", resetPageOnSort: "resetPageOnSort", customSort: "customSort", selectionMode: "selectionMode", contextMenuSelection: "contextMenuSelection", contextMenuSelectionMode: "contextMenuSelectionMode", dataKey: "dataKey", metaKeySelection: "metaKeySelection", compareSelectionBy: "compareSelectionBy", rowHover: "rowHover", loading: "loading", loadingIcon: "loadingIcon", showLoader: "showLoader", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", virtualScrollDelay: "virtualScrollDelay", virtualRowHeight: "virtualRowHeight", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", frozenWidth: "frozenWidth", frozenColumns: "frozenColumns", resizableColumns: "resizableColumns", columnResizeMode: "columnResizeMode", reorderableColumns: "reorderableColumns", contextMenu: "contextMenu", rowTrackBy: "rowTrackBy", filters: "filters", globalFilterFields: "globalFilterFields", filterDelay: "filterDelay", filterMode: "filterMode", filterLocale: "filterLocale", value: "value", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", multiSortMeta: "multiSortMeta", selection: "selection" }, outputs: { selectionChange: "selectionChange", contextMenuSelectionChange: "contextMenuSelectionChange", onFilter: "onFilter", onNodeExpand: "onNodeExpand", onNodeCollapse: "onNodeCollapse", onPage: "onPage", onSort: "onSort", onLazyLoad: "onLazyLoad", sortFunction: "sortFunction", onColResize: "onColResize", onColReorder: "onColReorder", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onContextMenuSelect: "onContextMenuSelect", onHeaderCheckboxToggle: "onHeaderCheckboxToggle", onEditInit: "onEditInit", onEditComplete: "onEditComplete", onEditCancel: "onEditCancel" }, host: { classAttribute: "p-element" }, providers: [TreeTableService], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "resizeHelperViewChild", first: true, predicate: ["resizeHelper"], descendants: true }, { propertyName: "reorderIndicatorUpViewChild", first: true, predicate: ["reorderIndicatorUp"], descendants: true }, { propertyName: "reorderIndicatorDownViewChild", first: true, predicate: ["reorderIndicatorDown"], descendants: true }, { propertyName: "tableViewChild", first: true, predicate: ["table"], descendants: true }, { propertyName: "scrollableViewChild", first: true, predicate: ["scrollableView"], descendants: true }, { propertyName: "scrollableFrozenViewChild", first: true, predicate: ["scrollableFrozenView"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
+        <div #container [ngStyle]="style" [class]="styleClass" data-scrollselectors=".p-treetable-scrollable-body"
+                [ngClass]="{'p-treetable p-component': true,
+                'p-treetable-hoverable-rows': (rowHover||(selectionMode === 'single' || selectionMode === 'multiple')),
+                'p-treetable-auto-layout': autoLayout,
+                'p-treetable-resizable': resizableColumns,
+                'p-treetable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),
+                'p-treetable-flex-scrollable': (scrollable && scrollHeight === 'flex')}">
+            <div class="p-treetable-loading" *ngIf="loading && showLoader">
+                <div class="p-treetable-loading-overlay p-component-overlay">
+                    <i [class]="'p-treetable-loading-icon pi-spin ' + loadingIcon"></i>
+                </div>
+            </div>
+            <div *ngIf="captionTemplate" class="p-treetable-header">
+                <ng-container *ngTemplateOutlet="captionTemplate"></ng-container>
+            </div>
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="p-paginator-top" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'top' || paginatorPosition =='both')"
+                [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate" [dropdownAppendTo]="paginatorDropdownAppendTo"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showPageLinks]="showPageLinks"></p-paginator>
+
+            <div class="p-treetable-wrapper" *ngIf="!scrollable">
+                <table #table [ngClass]="tableStyleClass" [ngStyle]="tableStyle">
+                    <ng-container *ngTemplateOutlet="colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <thead class="p-treetable-thead">
+                        <ng-container *ngTemplateOutlet="headerTemplate; context: {$implicit: columns}"></ng-container>
+                    </thead>
+                    <tbody class="p-treetable-tbody" [pTreeTableBody]="columns" [pTreeTableBodyTemplate]="bodyTemplate"></tbody>
+                    <tfoot class="p-treetable-tfoot">
+                        <ng-container *ngTemplateOutlet="footerTemplate; context {$implicit: columns}"></ng-container>
+                    </tfoot>
+                </table>
+            </div>
+
+            <div class="p-treetable-scrollable-wrapper" *ngIf="scrollable">
+               <div class="p-treetable-scrollable-view p-treetable-frozen-view" *ngIf="frozenColumns||frozenBodyTemplate" #scrollableFrozenView [ttScrollableView]="frozenColumns" [frozen]="true" [ngStyle]="{width: frozenWidth}" [scrollHeight]="scrollHeight"></div>
+               <div class="p-treetable-scrollable-view" #scrollableView [ttScrollableView]="columns" [frozen]="false" [scrollHeight]="scrollHeight" [ngStyle]="{left: frozenWidth, width: 'calc(100% - '+frozenWidth+')'}"></div>
+            </div>
+
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="p-paginator-bottom" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')"
+                [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate" [dropdownAppendTo]="paginatorDropdownAppendTo"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showPageLinks]="showPageLinks"></p-paginator>
+            <div *ngIf="summaryTemplate" class="p-treetable-footer">
+                <ng-container *ngTemplateOutlet="summaryTemplate"></ng-container>
+            </div>
+
+            <div #resizeHelper class="p-column-resizer-helper" style="display:none" *ngIf="resizableColumns"></div>
+
+            <span #reorderIndicatorUp class="pi pi-arrow-down p-treetable-reorder-indicator-up" *ngIf="reorderableColumns"></span>
+            <span #reorderIndicatorDown class="pi pi-arrow-up p-treetable-reorder-indicator-down" *ngIf="reorderableColumns"></span>
+        </div>
+    `, isInline: true, styles: [".p-treetable{position:relative}.p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}.p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-treetable .p-sortable-column .p-column-title,.p-treetable .p-sortable-column .p-sortable-column-icon,.p-treetable .p-sortable-column .p-sortable-column-badge{vertical-align:middle}.p-treetable .p-sortable-column .p-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.p-treetable-auto-layout>.p-treetable-wrapper{overflow-x:auto}.p-treetable-auto-layout>.p-treetable-wrapper>table{table-layout:auto}.p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:pointer}.p-treetable-toggler{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}p-treetabletoggler+p-treetablecheckbox .p-checkbox,p-treetabletoggler+p-treetablecheckbox+span{vertical-align:middle}.p-treetable-scrollable-wrapper{position:relative}.p-treetable-scrollable-header,.p-treetable-scrollable-footer{overflow:hidden}.p-treetable-scrollable-body{overflow:auto;position:relative}.p-treetable-scrollable-body>table>.p-treetable-tbody>tr:first-child>td{border-top:0 none}.p-treetable-virtual-table{position:absolute}.p-treetable-frozen-view .p-treetable-scrollable-body{overflow:hidden}.p-treetable-frozen-view>.p-treetable-scrollable-body>table>.p-treetable-tbody>tr>td:last-child{border-right:0 none}.p-treetable-unfrozen-view{position:absolute;top:0}.p-treetable-flex-scrollable,.p-treetable-flex-scrollable .p-treetable-scrollable-wrapper,.p-treetable-flex-scrollable .p-treetable-scrollable-view{display:flex;flex-direction:column;flex:1;height:100%}.p-treetable-flex-scrollable .p-treetable-scrollable-body{flex:1}.p-treetable-resizable>.p-treetable-wrapper{overflow-x:auto}.p-treetable-resizable .p-treetable-thead>tr>th,.p-treetable-resizable .p-treetable-tfoot>tr>td,.p-treetable-resizable .p-treetable-tbody>tr>td{overflow:hidden}.p-treetable-resizable .p-resizable-column{background-clip:padding-box;position:relative}.p-treetable-resizable-fit .p-resizable-column:last-child .p-column-resizer{display:none}.p-treetable .p-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.p-treetable .p-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.p-treetable .p-row-editor-init,.p-treetable .p-row-editor-save,.p-treetable .p-row-editor-cancel,.p-treetable .p-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-treetable-reorder-indicator-up,.p-treetable-reorder-indicator-down{position:absolute;display:none}[ttReorderableColumn]{cursor:move}.p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}\n"], components: [{ type: i0.forwardRef(function () { return i2.Paginator; }), selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "templateLeft", "templateRight", "dropdownAppendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "showPageLinks", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { type: i0.forwardRef(function () { return TTBody; }), selector: "[pTreeTableBody]", inputs: ["pTreeTableBody", "pTreeTableBodyTemplate", "frozen"] }, { type: i0.forwardRef(function () { return TTScrollableView; }), selector: "[ttScrollableView]", inputs: ["ttScrollableView", "frozen", "scrollHeight"] }], directives: [{ type: i0.forwardRef(function () { return i3.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i0.forwardRef(function () { return i3.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i3.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i3.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTable, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-treeTable', template: `
+        <div #container [ngStyle]="style" [class]="styleClass" data-scrollselectors=".p-treetable-scrollable-body"
+                [ngClass]="{'p-treetable p-component': true,
+                'p-treetable-hoverable-rows': (rowHover||(selectionMode === 'single' || selectionMode === 'multiple')),
+                'p-treetable-auto-layout': autoLayout,
+                'p-treetable-resizable': resizableColumns,
+                'p-treetable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),
+                'p-treetable-flex-scrollable': (scrollable && scrollHeight === 'flex')}">
+            <div class="p-treetable-loading" *ngIf="loading && showLoader">
+                <div class="p-treetable-loading-overlay p-component-overlay">
+                    <i [class]="'p-treetable-loading-icon pi-spin ' + loadingIcon"></i>
+                </div>
+            </div>
+            <div *ngIf="captionTemplate" class="p-treetable-header">
+                <ng-container *ngTemplateOutlet="captionTemplate"></ng-container>
+            </div>
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="p-paginator-top" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'top' || paginatorPosition =='both')"
+                [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate" [dropdownAppendTo]="paginatorDropdownAppendTo"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showPageLinks]="showPageLinks"></p-paginator>
+
+            <div class="p-treetable-wrapper" *ngIf="!scrollable">
+                <table #table [ngClass]="tableStyleClass" [ngStyle]="tableStyle">
+                    <ng-container *ngTemplateOutlet="colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <thead class="p-treetable-thead">
+                        <ng-container *ngTemplateOutlet="headerTemplate; context: {$implicit: columns}"></ng-container>
+                    </thead>
+                    <tbody class="p-treetable-tbody" [pTreeTableBody]="columns" [pTreeTableBodyTemplate]="bodyTemplate"></tbody>
+                    <tfoot class="p-treetable-tfoot">
+                        <ng-container *ngTemplateOutlet="footerTemplate; context {$implicit: columns}"></ng-container>
+                    </tfoot>
+                </table>
+            </div>
+
+            <div class="p-treetable-scrollable-wrapper" *ngIf="scrollable">
+               <div class="p-treetable-scrollable-view p-treetable-frozen-view" *ngIf="frozenColumns||frozenBodyTemplate" #scrollableFrozenView [ttScrollableView]="frozenColumns" [frozen]="true" [ngStyle]="{width: frozenWidth}" [scrollHeight]="scrollHeight"></div>
+               <div class="p-treetable-scrollable-view" #scrollableView [ttScrollableView]="columns" [frozen]="false" [scrollHeight]="scrollHeight" [ngStyle]="{left: frozenWidth, width: 'calc(100% - '+frozenWidth+')'}"></div>
+            </div>
+
+            <p-paginator [rows]="rows" [first]="first" [totalRecords]="totalRecords" [pageLinkSize]="pageLinks" styleClass="p-paginator-bottom" [alwaysShow]="alwaysShowPaginator"
+                (onPageChange)="onPageChange($event)" [rowsPerPageOptions]="rowsPerPageOptions" *ngIf="paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')"
+                [templateLeft]="paginatorLeftTemplate" [templateRight]="paginatorRightTemplate" [dropdownAppendTo]="paginatorDropdownAppendTo"
+                [currentPageReportTemplate]="currentPageReportTemplate" [showFirstLastIcon]="showFirstLastIcon" [dropdownItemTemplate]="paginatorDropdownItemTemplate" [showCurrentPageReport]="showCurrentPageReport" [showJumpToPageDropdown]="showJumpToPageDropdown" [showPageLinks]="showPageLinks"></p-paginator>
+            <div *ngIf="summaryTemplate" class="p-treetable-footer">
+                <ng-container *ngTemplateOutlet="summaryTemplate"></ng-container>
+            </div>
+
+            <div #resizeHelper class="p-column-resizer-helper" style="display:none" *ngIf="resizableColumns"></div>
+
+            <span #reorderIndicatorUp class="pi pi-arrow-down p-treetable-reorder-indicator-up" *ngIf="reorderableColumns"></span>
+            <span #reorderIndicatorDown class="pi pi-arrow-up p-treetable-reorder-indicator-down" *ngIf="reorderableColumns"></span>
+        </div>
+    `, providers: [TreeTableService], encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: [".p-treetable{position:relative}.p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}.p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.p-treetable .p-sortable-column .p-column-title,.p-treetable .p-sortable-column .p-sortable-column-icon,.p-treetable .p-sortable-column .p-sortable-column-badge{vertical-align:middle}.p-treetable .p-sortable-column .p-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.p-treetable-auto-layout>.p-treetable-wrapper{overflow-x:auto}.p-treetable-auto-layout>.p-treetable-wrapper>table{table-layout:auto}.p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:pointer}.p-treetable-toggler{cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}p-treetabletoggler+p-treetablecheckbox .p-checkbox,p-treetabletoggler+p-treetablecheckbox+span{vertical-align:middle}.p-treetable-scrollable-wrapper{position:relative}.p-treetable-scrollable-header,.p-treetable-scrollable-footer{overflow:hidden}.p-treetable-scrollable-body{overflow:auto;position:relative}.p-treetable-scrollable-body>table>.p-treetable-tbody>tr:first-child>td{border-top:0 none}.p-treetable-virtual-table{position:absolute}.p-treetable-frozen-view .p-treetable-scrollable-body{overflow:hidden}.p-treetable-frozen-view>.p-treetable-scrollable-body>table>.p-treetable-tbody>tr>td:last-child{border-right:0 none}.p-treetable-unfrozen-view{position:absolute;top:0}.p-treetable-flex-scrollable,.p-treetable-flex-scrollable .p-treetable-scrollable-wrapper,.p-treetable-flex-scrollable .p-treetable-scrollable-view{display:flex;flex-direction:column;flex:1;height:100%}.p-treetable-flex-scrollable .p-treetable-scrollable-body{flex:1}.p-treetable-resizable>.p-treetable-wrapper{overflow-x:auto}.p-treetable-resizable .p-treetable-thead>tr>th,.p-treetable-resizable .p-treetable-tfoot>tr>td,.p-treetable-resizable .p-treetable-tbody>tr>td{overflow:hidden}.p-treetable-resizable .p-resizable-column{background-clip:padding-box;position:relative}.p-treetable-resizable-fit .p-resizable-column:last-child .p-column-resizer{display:none}.p-treetable .p-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.p-treetable .p-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.p-treetable .p-row-editor-init,.p-treetable .p-row-editor-save,.p-treetable .p-row-editor-cancel,.p-treetable .p-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.p-treetable-reorder-indicator-up,.p-treetable-reorder-indicator-down{position:absolute;display:none}[ttReorderableColumn]{cursor:move}.p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: TreeTableService }, { type: i1.FilterService }]; }, propDecorators: { columns: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], tableStyle: [{
+                type: Input
+            }], tableStyleClass: [{
+                type: Input
+            }], autoLayout: [{
+                type: Input
+            }], lazy: [{
+                type: Input
+            }], lazyLoadOnInit: [{
+                type: Input
+            }], paginator: [{
+                type: Input
+            }], rows: [{
+                type: Input
+            }], first: [{
+                type: Input
+            }], pageLinks: [{
+                type: Input
+            }], rowsPerPageOptions: [{
+                type: Input
+            }], alwaysShowPaginator: [{
+                type: Input
+            }], paginatorPosition: [{
+                type: Input
+            }], paginatorDropdownAppendTo: [{
+                type: Input
+            }], currentPageReportTemplate: [{
+                type: Input
+            }], showCurrentPageReport: [{
+                type: Input
+            }], showJumpToPageDropdown: [{
+                type: Input
+            }], showFirstLastIcon: [{
+                type: Input
+            }], showPageLinks: [{
+                type: Input
+            }], defaultSortOrder: [{
+                type: Input
+            }], sortMode: [{
+                type: Input
+            }], resetPageOnSort: [{
+                type: Input
+            }], customSort: [{
+                type: Input
+            }], selectionMode: [{
+                type: Input
+            }], selectionChange: [{
+                type: Output
+            }], contextMenuSelection: [{
+                type: Input
+            }], contextMenuSelectionChange: [{
+                type: Output
+            }], contextMenuSelectionMode: [{
+                type: Input
+            }], dataKey: [{
+                type: Input
+            }], metaKeySelection: [{
+                type: Input
+            }], compareSelectionBy: [{
+                type: Input
+            }], rowHover: [{
+                type: Input
+            }], loading: [{
+                type: Input
+            }], loadingIcon: [{
+                type: Input
+            }], showLoader: [{
+                type: Input
+            }], scrollable: [{
+                type: Input
+            }], scrollHeight: [{
+                type: Input
+            }], virtualScroll: [{
+                type: Input
+            }], virtualScrollDelay: [{
+                type: Input
+            }], virtualRowHeight: [{
+                type: Input
+            }], minBufferPx: [{
+                type: Input
+            }], maxBufferPx: [{
+                type: Input
+            }], frozenWidth: [{
+                type: Input
+            }], frozenColumns: [{
+                type: Input
+            }], resizableColumns: [{
+                type: Input
+            }], columnResizeMode: [{
+                type: Input
+            }], reorderableColumns: [{
+                type: Input
+            }], contextMenu: [{
+                type: Input
+            }], rowTrackBy: [{
+                type: Input
+            }], filters: [{
+                type: Input
+            }], globalFilterFields: [{
+                type: Input
+            }], filterDelay: [{
+                type: Input
+            }], filterMode: [{
+                type: Input
+            }], filterLocale: [{
+                type: Input
+            }], onFilter: [{
+                type: Output
+            }], onNodeExpand: [{
+                type: Output
+            }], onNodeCollapse: [{
+                type: Output
+            }], onPage: [{
+                type: Output
+            }], onSort: [{
+                type: Output
+            }], onLazyLoad: [{
+                type: Output
+            }], sortFunction: [{
+                type: Output
+            }], onColResize: [{
+                type: Output
+            }], onColReorder: [{
+                type: Output
+            }], onNodeSelect: [{
+                type: Output
+            }], onNodeUnselect: [{
+                type: Output
+            }], onContextMenuSelect: [{
+                type: Output
+            }], onHeaderCheckboxToggle: [{
+                type: Output
+            }], onEditInit: [{
+                type: Output
+            }], onEditComplete: [{
+                type: Output
+            }], onEditCancel: [{
+                type: Output
+            }], containerViewChild: [{
+                type: ViewChild,
+                args: ['container']
+            }], resizeHelperViewChild: [{
+                type: ViewChild,
+                args: ['resizeHelper']
+            }], reorderIndicatorUpViewChild: [{
+                type: ViewChild,
+                args: ['reorderIndicatorUp']
+            }], reorderIndicatorDownViewChild: [{
+                type: ViewChild,
+                args: ['reorderIndicatorDown']
+            }], tableViewChild: [{
+                type: ViewChild,
+                args: ['table']
+            }], scrollableViewChild: [{
+                type: ViewChild,
+                args: ['scrollableView']
+            }], scrollableFrozenViewChild: [{
+                type: ViewChild,
+                args: ['scrollableFrozenView']
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], value: [{
+                type: Input
+            }], totalRecords: [{
+                type: Input
+            }], sortField: [{
+                type: Input
+            }], sortOrder: [{
+                type: Input
+            }], multiSortMeta: [{
+                type: Input
+            }], selection: [{
+                type: Input
+            }] } });
+class TTBody {
+    constructor(tt, treeTableService, cd) {
+        this.tt = tt;
+        this.treeTableService = treeTableService;
+        this.cd = cd;
+        this.subscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {
+            if (this.tt.virtualScroll) {
+                this.cd.detectChanges();
+            }
+        });
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TTBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTBody, deps: [{ token: TreeTable }, { token: TreeTableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TTBody.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TTBody, selector: "[pTreeTableBody]", inputs: { columns: ["pTreeTableBody", "columns"], template: ["pTreeTableBodyTemplate", "template"], frozen: "frozen" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <ng-container *ngIf="!tt.virtualScroll">
+            <ng-template ngFor let-serializedNode let-rowIndex="index" [ngForOf]="tt.serializedValue" [ngForTrackBy]="tt.rowTrackBy">
+                <ng-container *ngIf="serializedNode.visible">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: serializedNode, node: serializedNode.node, rowData: serializedNode.node.data, columns: columns}"></ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="tt.virtualScroll">
+            <ng-template cdkVirtualFor let-serializedNode let-rowIndex="index" [cdkVirtualForOf]="tt.serializedValue" [cdkVirtualForTrackBy]="tt.rowTrackBy" [cdkVirtualForTemplateCacheSize]="0">
+                <ng-container *ngIf="serializedNode.visible">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: serializedNode, node: serializedNode.node, rowData: serializedNode.node.data, columns: columns}"></ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="tt.isEmpty()">
+            <ng-container *ngTemplateOutlet="tt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}"></ng-container>
+        </ng-container>
+    `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTBody, decorators: [{
+            type: Component,
+            args: [{
+                    selector: '[pTreeTableBody]',
+                    template: `
+        <ng-container *ngIf="!tt.virtualScroll">
+            <ng-template ngFor let-serializedNode let-rowIndex="index" [ngForOf]="tt.serializedValue" [ngForTrackBy]="tt.rowTrackBy">
+                <ng-container *ngIf="serializedNode.visible">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: serializedNode, node: serializedNode.node, rowData: serializedNode.node.data, columns: columns}"></ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="tt.virtualScroll">
+            <ng-template cdkVirtualFor let-serializedNode let-rowIndex="index" [cdkVirtualForOf]="tt.serializedValue" [cdkVirtualForTrackBy]="tt.rowTrackBy" [cdkVirtualForTemplateCacheSize]="0">
+                <ng-container *ngIf="serializedNode.visible">
+                    <ng-container *ngTemplateOutlet="template; context: {$implicit: serializedNode, node: serializedNode.node, rowData: serializedNode.node.data, columns: columns}"></ng-container>
+                </ng-container>
+            </ng-template>
+        </ng-container>
+        <ng-container *ngIf="tt.isEmpty()">
+            <ng-container *ngTemplateOutlet="tt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}"></ng-container>
+        </ng-container>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: TreeTableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { columns: [{
+                type: Input,
+                args: ["pTreeTableBody"]
+            }], template: [{
+                type: Input,
+                args: ["pTreeTableBodyTemplate"]
+            }], frozen: [{
+                type: Input
+            }] } });
+class TTScrollableView {
+    constructor(tt, el, zone) {
+        this.tt = tt;
+        this.el = el;
+        this.zone = zone;
+    }
+    get scrollHeight() {
+        return this._scrollHeight;
+    }
+    set scrollHeight(val) {
+        this._scrollHeight = val;
+        if (val != null && (val.includes('%') || val.includes('calc'))) {
+            console.log('Percentage scroll height calculation is removed in favor of the more performant CSS based flex mode, use scrollHeight="flex" instead.');
+        }
+        if (this.tt.virtualScroll && this.virtualScrollBody) {
+            this.virtualScrollBody.ngOnInit();
+        }
+    }
+    ngAfterViewInit() {
+        if (!this.frozen) {
+            if (this.tt.frozenColumns || this.tt.frozenBodyTemplate) {
+                DomHandler.addClass(this.el.nativeElement, 'p-treetable-unfrozen-view');
+            }
+            let frozenView = this.el.nativeElement.previousElementSibling;
+            if (frozenView) {
+                if (this.tt.virtualScroll)
+                    this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-treetable-virtual-scrollable-body');
+                else
+                    this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-treetable-scrollable-body');
+            }
+            let scrollBarWidth = DomHandler.calculateScrollbarWidth();
+            this.scrollHeaderBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';
+            if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {
+                this.scrollFooterBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';
+            }
+        }
+        else {
+            if (this.scrollableAlignerViewChild && this.scrollableAlignerViewChild.nativeElement) {
+                this.scrollableAlignerViewChild.nativeElement.style.height = DomHandler.calculateScrollbarHeight() + 'px';
+            }
+        }
+        this.bindEvents();
+    }
+    bindEvents() {
+        this.zone.runOutsideAngular(() => {
+            if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {
+                this.headerScrollListener = this.onHeaderScroll.bind(this);
+                this.scrollHeaderBoxViewChild.nativeElement.addEventListener('scroll', this.headerScrollListener);
+            }
+            if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {
+                this.footerScrollListener = this.onFooterScroll.bind(this);
+                this.scrollFooterViewChild.nativeElement.addEventListener('scroll', this.footerScrollListener);
+            }
+            if (!this.frozen) {
+                this.bodyScrollListener = this.onBodyScroll.bind(this);
+                if (this.tt.virtualScroll)
+                    this.virtualScrollBody.getElementRef().nativeElement.addEventListener('scroll', this.bodyScrollListener);
+                else
+                    this.scrollBodyViewChild.nativeElement.addEventListener('scroll', this.bodyScrollListener);
+            }
+        });
+    }
+    unbindEvents() {
+        if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {
+            this.scrollHeaderBoxViewChild.nativeElement.removeEventListener('scroll', this.headerScrollListener);
+        }
+        if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {
+            this.scrollFooterViewChild.nativeElement.removeEventListener('scroll', this.footerScrollListener);
+        }
+        if (this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {
+            this.scrollBodyViewChild.nativeElement.removeEventListener('scroll', this.bodyScrollListener);
+        }
+        if (this.virtualScrollBody && this.virtualScrollBody.getElementRef()) {
+            this.virtualScrollBody.getElementRef().nativeElement.removeEventListener('scroll', this.bodyScrollListener);
+        }
+    }
+    onHeaderScroll() {
+        const scrollLeft = this.scrollHeaderViewChild.nativeElement.scrollLeft;
+        this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;
+        if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {
+            this.scrollFooterViewChild.nativeElement.scrollLeft = scrollLeft;
+        }
+        this.preventBodyScrollPropagation = true;
+    }
+    onFooterScroll() {
+        const scrollLeft = this.scrollFooterViewChild.nativeElement.scrollLeft;
+        this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;
+        if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {
+            this.scrollHeaderViewChild.nativeElement.scrollLeft = scrollLeft;
+        }
+        this.preventBodyScrollPropagation = true;
+    }
+    onBodyScroll(event) {
+        if (this.preventBodyScrollPropagation) {
+            this.preventBodyScrollPropagation = false;
+            return;
+        }
+        if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {
+            this.scrollHeaderBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';
+        }
+        if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {
+            this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';
+        }
+        if (this.frozenSiblingBody) {
+            this.frozenSiblingBody.scrollTop = event.target.scrollTop;
+        }
+    }
+    scrollToVirtualIndex(index) {
+        if (this.virtualScrollBody) {
+            this.virtualScrollBody.scrollToIndex(index);
+        }
+    }
+    scrollTo(options) {
+        if (this.virtualScrollBody) {
+            this.virtualScrollBody.scrollTo(options);
+        }
+        else {
+            if (this.scrollBodyViewChild.nativeElement.scrollTo) {
+                this.scrollBodyViewChild.nativeElement.scrollTo(options);
+            }
+            else {
+                this.scrollBodyViewChild.nativeElement.scrollLeft = options.left;
+                this.scrollBodyViewChild.nativeElement.scrollTop = options.top;
+            }
+        }
+    }
+    ngOnDestroy() {
+        this.unbindEvents();
+        this.frozenSiblingBody = null;
+    }
+}
+TTScrollableView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTScrollableView, deps: [{ token: TreeTable }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
+TTScrollableView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TTScrollableView, selector: "[ttScrollableView]", inputs: { columns: ["ttScrollableView", "columns"], frozen: "frozen", scrollHeight: "scrollHeight" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "scrollHeaderViewChild", first: true, predicate: ["scrollHeader"], descendants: true }, { propertyName: "scrollHeaderBoxViewChild", first: true, predicate: ["scrollHeaderBox"], descendants: true }, { propertyName: "scrollBodyViewChild", first: true, predicate: ["scrollBody"], descendants: true }, { propertyName: "scrollTableViewChild", first: true, predicate: ["scrollTable"], descendants: true }, { propertyName: "scrollLoadingTableViewChild", first: true, predicate: ["loadingTable"], descendants: true }, { propertyName: "scrollFooterViewChild", first: true, predicate: ["scrollFooter"], descendants: true }, { propertyName: "scrollFooterBoxViewChild", first: true, predicate: ["scrollFooterBox"], descendants: true }, { propertyName: "scrollableAlignerViewChild", first: true, predicate: ["scrollableAligner"], descendants: true }, { propertyName: "virtualScrollBody", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: `
+        <div #scrollHeader class="p-treetable-scrollable-header">
+            <div #scrollHeaderBox class="p-treetable-scrollable-header-box">
+                <table class="p-treetable-scrollable-header-table" [ngClass]="tt.tableStyleClass" [ngStyle]="tt.tableStyle">
+                    <ng-container *ngTemplateOutlet="frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <thead class="p-treetable-thead">
+                        <ng-container *ngTemplateOutlet="frozen ? tt.frozenHeaderTemplate||tt.headerTemplate : tt.headerTemplate; context {$implicit: columns}"></ng-container>
+                    </thead>
+                </table>
+            </div>
+        </div>
+        <ng-container *ngIf="!tt.virtualScroll; else virtualScrollTemplate">
+            <div #scrollBody class="p-treetable-scrollable-body" [ngStyle]="{'max-height': tt.scrollHeight !== 'flex' ? scrollHeight : undefined, 'overflow-y': !frozen && tt.scrollHeight ? 'scroll' : undefined}">
+                <table #scrollTable [class]="tt.tableStyleClass" [ngStyle]="tt.tableStyle">
+                    <ng-container *ngTemplateOutlet="frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <tbody class="p-treetable-tbody" [pTreeTableBody]="columns" [pTreeTableBodyTemplate]="frozen ? tt.frozenBodyTemplate||tt.bodyTemplate : tt.bodyTemplate" [frozen]="frozen"></tbody>
+                </table>
+                <div #scrollableAligner style="background-color:transparent" *ngIf="frozen"></div>
+            </div>
+        </ng-container>
+        <ng-template #virtualScrollTemplate>
+            <cdk-virtual-scroll-viewport [itemSize]="tt.virtualRowHeight" [style.height]="tt.scrollHeight !== 'flex' ? scrollHeight : undefined"
+                    [minBufferPx]="tt.minBufferPx" [maxBufferPx]="tt.maxBufferPx" class="p-treetable-virtual-scrollable-body">
+                <table #scrollTable [class]="tt.tableStyleClass" [ngStyle]="tt.tableStyle">
+                    <ng-container *ngTemplateOutlet="frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <tbody class="p-treetable-tbody" [pTreeTableBody]="columns" [pTreeTableBodyTemplate]="frozen ? tt.frozenBodyTemplate||tt.bodyTemplate : tt.bodyTemplate" [frozen]="frozen"></tbody>
+                </table>
+                <div #scrollableAligner style="background-color:transparent" *ngIf="frozen"></div>
+            </cdk-virtual-scroll-viewport>
+        </ng-template>
+        <div #scrollFooter *ngIf="tt.footerTemplate" class="p-treetable-scrollable-footer">
+            <div #scrollFooterBox class="p-treetable-scrollable-footer-box">
+                <table class="p-treetable-scrollable-footer-table" [ngClass]="tt.tableStyleClass" [ngStyle]="tt.tableStyle">
+                    <ng-container *ngTemplateOutlet="frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <tfoot class="p-treetable-tfoot">
+                        <ng-container *ngTemplateOutlet="frozen ? tt.frozenFooterTemplate||tt.footerTemplate : tt.footerTemplate; context {$implicit: columns}"></ng-container>
+                    </tfoot>
+                </table>
+            </div>
+        </div>
+    `, isInline: true, components: [{ type: TTBody, selector: "[pTreeTableBody]", inputs: ["pTreeTableBody", "pTreeTableBodyTemplate", "frozen"] }, { type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTScrollableView, decorators: [{
+            type: Component,
+            args: [{
+                    selector: '[ttScrollableView]',
+                    template: `
+        <div #scrollHeader class="p-treetable-scrollable-header">
+            <div #scrollHeaderBox class="p-treetable-scrollable-header-box">
+                <table class="p-treetable-scrollable-header-table" [ngClass]="tt.tableStyleClass" [ngStyle]="tt.tableStyle">
+                    <ng-container *ngTemplateOutlet="frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <thead class="p-treetable-thead">
+                        <ng-container *ngTemplateOutlet="frozen ? tt.frozenHeaderTemplate||tt.headerTemplate : tt.headerTemplate; context {$implicit: columns}"></ng-container>
+                    </thead>
+                </table>
+            </div>
+        </div>
+        <ng-container *ngIf="!tt.virtualScroll; else virtualScrollTemplate">
+            <div #scrollBody class="p-treetable-scrollable-body" [ngStyle]="{'max-height': tt.scrollHeight !== 'flex' ? scrollHeight : undefined, 'overflow-y': !frozen && tt.scrollHeight ? 'scroll' : undefined}">
+                <table #scrollTable [class]="tt.tableStyleClass" [ngStyle]="tt.tableStyle">
+                    <ng-container *ngTemplateOutlet="frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <tbody class="p-treetable-tbody" [pTreeTableBody]="columns" [pTreeTableBodyTemplate]="frozen ? tt.frozenBodyTemplate||tt.bodyTemplate : tt.bodyTemplate" [frozen]="frozen"></tbody>
+                </table>
+                <div #scrollableAligner style="background-color:transparent" *ngIf="frozen"></div>
+            </div>
+        </ng-container>
+        <ng-template #virtualScrollTemplate>
+            <cdk-virtual-scroll-viewport [itemSize]="tt.virtualRowHeight" [style.height]="tt.scrollHeight !== 'flex' ? scrollHeight : undefined"
+                    [minBufferPx]="tt.minBufferPx" [maxBufferPx]="tt.maxBufferPx" class="p-treetable-virtual-scrollable-body">
+                <table #scrollTable [class]="tt.tableStyleClass" [ngStyle]="tt.tableStyle">
+                    <ng-container *ngTemplateOutlet="frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <tbody class="p-treetable-tbody" [pTreeTableBody]="columns" [pTreeTableBodyTemplate]="frozen ? tt.frozenBodyTemplate||tt.bodyTemplate : tt.bodyTemplate" [frozen]="frozen"></tbody>
+                </table>
+                <div #scrollableAligner style="background-color:transparent" *ngIf="frozen"></div>
+            </cdk-virtual-scroll-viewport>
+        </ng-template>
+        <div #scrollFooter *ngIf="tt.footerTemplate" class="p-treetable-scrollable-footer">
+            <div #scrollFooterBox class="p-treetable-scrollable-footer-box">
+                <table class="p-treetable-scrollable-footer-table" [ngClass]="tt.tableStyleClass" [ngStyle]="tt.tableStyle">
+                    <ng-container *ngTemplateOutlet="frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}"></ng-container>
+                    <tfoot class="p-treetable-tfoot">
+                        <ng-container *ngTemplateOutlet="frozen ? tt.frozenFooterTemplate||tt.footerTemplate : tt.footerTemplate; context {$implicit: columns}"></ng-container>
+                    </tfoot>
+                </table>
+            </div>
+        </div>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { columns: [{
+                type: Input,
+                args: ["ttScrollableView"]
+            }], frozen: [{
+                type: Input
+            }], scrollHeaderViewChild: [{
+                type: ViewChild,
+                args: ['scrollHeader']
+            }], scrollHeaderBoxViewChild: [{
+                type: ViewChild,
+                args: ['scrollHeaderBox']
+            }], scrollBodyViewChild: [{
+                type: ViewChild,
+                args: ['scrollBody']
+            }], scrollTableViewChild: [{
+                type: ViewChild,
+                args: ['scrollTable']
+            }], scrollLoadingTableViewChild: [{
+                type: ViewChild,
+                args: ['loadingTable']
+            }], scrollFooterViewChild: [{
+                type: ViewChild,
+                args: ['scrollFooter']
+            }], scrollFooterBoxViewChild: [{
+                type: ViewChild,
+                args: ['scrollFooterBox']
+            }], scrollableAlignerViewChild: [{
+                type: ViewChild,
+                args: ['scrollableAligner']
+            }], virtualScrollBody: [{
+                type: ViewChild,
+                args: [CdkVirtualScrollViewport]
+            }], scrollHeight: [{
+                type: Input
+            }] } });
+class TTSortableColumn {
+    constructor(tt) {
+        this.tt = tt;
+        if (this.isEnabled()) {
+            this.subscription = this.tt.tableService.sortSource$.subscribe(sortMeta => {
+                this.updateSortState();
+            });
+        }
+    }
+    ngOnInit() {
+        if (this.isEnabled()) {
+            this.updateSortState();
+        }
+    }
+    updateSortState() {
+        this.sorted = this.tt.isSorted(this.field);
+    }
+    onClick(event) {
+        if (this.isEnabled()) {
+            this.updateSortState();
+            this.tt.sort({
+                originalEvent: event,
+                field: this.field
+            });
+            DomHandler.clearSelection();
+        }
+    }
+    onEnterKey(event) {
+        this.onClick(event);
+    }
+    isEnabled() {
+        return this.ttSortableColumnDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TTSortableColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTSortableColumn, deps: [{ token: TreeTable }], target: i0.ɵɵFactoryTarget.Directive });
+TTSortableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: TTSortableColumn, selector: "[ttSortableColumn]", inputs: { field: ["ttSortableColumn", "field"], ttSortableColumnDisabled: "ttSortableColumnDisabled" }, host: { listeners: { "click": "onClick($event)", "keydown.enter": "onEnterKey($event)" }, properties: { "class.p-sortable-column": "isEnabled()", "class.p-highlight": "sorted", "attr.tabindex": "isEnabled() ? \"0\" : null", "attr.role": "\"columnheader\"" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTSortableColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[ttSortableColumn]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-sortable-column]': 'isEnabled()',
+                        '[class.p-highlight]': 'sorted',
+                        '[attr.tabindex]': 'isEnabled() ? "0" : null',
+                        '[attr.role]': '"columnheader"'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }]; }, propDecorators: { field: [{
+                type: Input,
+                args: ["ttSortableColumn"]
+            }], ttSortableColumnDisabled: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }], onEnterKey: [{
+                type: HostListener,
+                args: ['keydown.enter', ['$event']]
+            }] } });
+class TTSortIcon {
+    constructor(tt, cd) {
+        this.tt = tt;
+        this.cd = cd;
+        this.subscription = this.tt.tableService.sortSource$.subscribe(sortMeta => {
+            this.updateSortState();
+            this.cd.markForCheck();
+        });
+    }
+    ngOnInit() {
+        this.updateSortState();
+    }
+    onClick(event) {
+        event.preventDefault();
+    }
+    updateSortState() {
+        if (this.tt.sortMode === 'single') {
+            this.sortOrder = this.tt.isSorted(this.field) ? this.tt.sortOrder : 0;
+        }
+        else if (this.tt.sortMode === 'multiple') {
+            let sortMeta = this.tt.getSortMeta(this.field);
+            this.sortOrder = sortMeta ? sortMeta.order : 0;
+        }
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TTSortIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTSortIcon, deps: [{ token: TreeTable }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TTSortIcon.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TTSortIcon, selector: "p-treeTableSortIcon", inputs: { field: "field", ariaLabelDesc: "ariaLabelDesc", ariaLabelAsc: "ariaLabelAsc" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <i class="p-sortable-column-icon pi pi-fw" [ngClass]="{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}"></i>
+    `, isInline: true, directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTSortIcon, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-treeTableSortIcon',
+                    template: `
+        <i class="p-sortable-column-icon pi pi-fw" [ngClass]="{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}"></i>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { field: [{
+                type: Input
+            }], ariaLabelDesc: [{
+                type: Input
+            }], ariaLabelAsc: [{
+                type: Input
+            }] } });
+class TTResizableColumn {
+    constructor(tt, el, zone) {
+        this.tt = tt;
+        this.el = el;
+        this.zone = zone;
+    }
+    ngAfterViewInit() {
+        if (this.isEnabled()) {
+            DomHandler.addClass(this.el.nativeElement, 'p-resizable-column');
+            this.resizer = document.createElement('span');
+            this.resizer.className = 'p-column-resizer';
+            this.el.nativeElement.appendChild(this.resizer);
+            this.zone.runOutsideAngular(() => {
+                this.resizerMouseDownListener = this.onMouseDown.bind(this);
+                this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);
+            });
+        }
+    }
+    bindDocumentEvents() {
+        this.zone.runOutsideAngular(() => {
+            this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);
+            document.addEventListener('mousemove', this.documentMouseMoveListener);
+            this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);
+            document.addEventListener('mouseup', this.documentMouseUpListener);
+        });
+    }
+    unbindDocumentEvents() {
+        if (this.documentMouseMoveListener) {
+            document.removeEventListener('mousemove', this.documentMouseMoveListener);
+            this.documentMouseMoveListener = null;
+        }
+        if (this.documentMouseUpListener) {
+            document.removeEventListener('mouseup', this.documentMouseUpListener);
+            this.documentMouseUpListener = null;
+        }
+    }
+    onMouseDown(event) {
+        this.tt.onColumnResizeBegin(event);
+        this.bindDocumentEvents();
+    }
+    onDocumentMouseMove(event) {
+        this.tt.onColumnResize(event);
+    }
+    onDocumentMouseUp(event) {
+        this.tt.onColumnResizeEnd(event, this.el.nativeElement);
+        this.unbindDocumentEvents();
+    }
+    isEnabled() {
+        return this.ttResizableColumnDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.resizerMouseDownListener) {
+            this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);
+        }
+        this.unbindDocumentEvents();
+    }
+}
+TTResizableColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTResizableColumn, deps: [{ token: TreeTable }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+TTResizableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: TTResizableColumn, selector: "[ttResizableColumn]", inputs: { ttResizableColumnDisabled: "ttResizableColumnDisabled" }, host: { classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTResizableColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[ttResizableColumn]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { ttResizableColumnDisabled: [{
+                type: Input
+            }] } });
+class TTReorderableColumn {
+    constructor(tt, el, zone) {
+        this.tt = tt;
+        this.el = el;
+        this.zone = zone;
+    }
+    ngAfterViewInit() {
+        if (this.isEnabled()) {
+            this.bindEvents();
+        }
+    }
+    bindEvents() {
+        this.zone.runOutsideAngular(() => {
+            this.mouseDownListener = this.onMouseDown.bind(this);
+            this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);
+            this.dragStartListener = this.onDragStart.bind(this);
+            this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);
+            this.dragOverListener = this.onDragEnter.bind(this);
+            this.el.nativeElement.addEventListener('dragover', this.dragOverListener);
+            this.dragEnterListener = this.onDragEnter.bind(this);
+            this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);
+            this.dragLeaveListener = this.onDragLeave.bind(this);
+            this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);
+        });
+    }
+    unbindEvents() {
+        if (this.mouseDownListener) {
+            document.removeEventListener('mousedown', this.mouseDownListener);
+            this.mouseDownListener = null;
+        }
+        if (this.dragOverListener) {
+            document.removeEventListener('dragover', this.dragOverListener);
+            this.dragOverListener = null;
+        }
+        if (this.dragEnterListener) {
+            document.removeEventListener('dragenter', this.dragEnterListener);
+            this.dragEnterListener = null;
+        }
+        if (this.dragEnterListener) {
+            document.removeEventListener('dragenter', this.dragEnterListener);
+            this.dragEnterListener = null;
+        }
+        if (this.dragLeaveListener) {
+            document.removeEventListener('dragleave', this.dragLeaveListener);
+            this.dragLeaveListener = null;
+        }
+    }
+    onMouseDown(event) {
+        if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer'))
+            this.el.nativeElement.draggable = false;
+        else
+            this.el.nativeElement.draggable = true;
+    }
+    onDragStart(event) {
+        this.tt.onColumnDragStart(event, this.el.nativeElement);
+    }
+    onDragOver(event) {
+        event.preventDefault();
+    }
+    onDragEnter(event) {
+        this.tt.onColumnDragEnter(event, this.el.nativeElement);
+    }
+    onDragLeave(event) {
+        this.tt.onColumnDragLeave(event);
+    }
+    onDrop(event) {
+        if (this.isEnabled()) {
+            this.tt.onColumnDrop(event, this.el.nativeElement);
+        }
+    }
+    isEnabled() {
+        return this.ttReorderableColumnDisabled !== true;
+    }
+    ngOnDestroy() {
+        this.unbindEvents();
+    }
+}
+TTReorderableColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTReorderableColumn, deps: [{ token: TreeTable }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+TTReorderableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: TTReorderableColumn, selector: "[ttReorderableColumn]", inputs: { ttReorderableColumnDisabled: "ttReorderableColumnDisabled" }, host: { listeners: { "drop": "onDrop($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTReorderableColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[ttReorderableColumn]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { ttReorderableColumnDisabled: [{
+                type: Input
+            }], onDrop: [{
+                type: HostListener,
+                args: ['drop', ['$event']]
+            }] } });
+class TTSelectableRow {
+    constructor(tt, tableService) {
+        this.tt = tt;
+        this.tableService = tableService;
+        if (this.isEnabled()) {
+            this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {
+                this.selected = this.tt.isSelected(this.rowNode.node);
+            });
+        }
+    }
+    ngOnInit() {
+        if (this.isEnabled()) {
+            this.selected = this.tt.isSelected(this.rowNode.node);
+        }
+    }
+    onClick(event) {
+        if (this.isEnabled()) {
+            this.tt.handleRowClick({
+                originalEvent: event,
+                rowNode: this.rowNode
+            });
+        }
+    }
+    onEnterKey(event) {
+        if (event.which === 13) {
+            this.onClick(event);
+        }
+    }
+    onTouchEnd(event) {
+        if (this.isEnabled()) {
+            this.tt.handleRowTouchEnd(event);
+        }
+    }
+    isEnabled() {
+        return this.ttSelectableRowDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TTSelectableRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTSelectableRow, deps: [{ token: TreeTable }, { token: TreeTableService }], target: i0.ɵɵFactoryTarget.Directive });
+TTSelectableRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: TTSelectableRow, selector: "[ttSelectableRow]", inputs: { rowNode: ["ttSelectableRow", "rowNode"], ttSelectableRowDisabled: "ttSelectableRowDisabled" }, host: { listeners: { "click": "onClick($event)", "keydown": "onEnterKey($event)", "touchend": "onTouchEnd($event)" }, properties: { "class.p-highlight": "selected" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTSelectableRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[ttSelectableRow]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-highlight]': 'selected'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: TreeTableService }]; }, propDecorators: { rowNode: [{
+                type: Input,
+                args: ["ttSelectableRow"]
+            }], ttSelectableRowDisabled: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }], onEnterKey: [{
+                type: HostListener,
+                args: ['keydown', ['$event']]
+            }], onTouchEnd: [{
+                type: HostListener,
+                args: ['touchend', ['$event']]
+            }] } });
+class TTSelectableRowDblClick {
+    constructor(tt, tableService) {
+        this.tt = tt;
+        this.tableService = tableService;
+        if (this.isEnabled()) {
+            this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {
+                this.selected = this.tt.isSelected(this.rowNode.node);
+            });
+        }
+    }
+    ngOnInit() {
+        if (this.isEnabled()) {
+            this.selected = this.tt.isSelected(this.rowNode.node);
+        }
+    }
+    onClick(event) {
+        if (this.isEnabled()) {
+            this.tt.handleRowClick({
+                originalEvent: event,
+                rowNode: this.rowNode
+            });
+        }
+    }
+    isEnabled() {
+        return this.ttSelectableRowDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TTSelectableRowDblClick.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTSelectableRowDblClick, deps: [{ token: TreeTable }, { token: TreeTableService }], target: i0.ɵɵFactoryTarget.Directive });
+TTSelectableRowDblClick.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: TTSelectableRowDblClick, selector: "[ttSelectableRowDblClick]", inputs: { rowNode: ["ttSelectableRowDblClick", "rowNode"], ttSelectableRowDisabled: "ttSelectableRowDisabled" }, host: { listeners: { "dblclick": "onClick($event)" }, properties: { "class.p-highlight": "selected" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTSelectableRowDblClick, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[ttSelectableRowDblClick]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-highlight]': 'selected'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: TreeTableService }]; }, propDecorators: { rowNode: [{
+                type: Input,
+                args: ["ttSelectableRowDblClick"]
+            }], ttSelectableRowDisabled: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['dblclick', ['$event']]
+            }] } });
+class TTContextMenuRow {
+    constructor(tt, tableService, el) {
+        this.tt = tt;
+        this.tableService = tableService;
+        this.el = el;
+        if (this.isEnabled()) {
+            this.subscription = this.tt.tableService.contextMenuSource$.subscribe((node) => {
+                this.selected = this.tt.equals(this.rowNode.node, node);
+            });
+        }
+    }
+    onContextMenu(event) {
+        if (this.isEnabled()) {
+            this.tt.handleRowRightClick({
+                originalEvent: event,
+                rowNode: this.rowNode
+            });
+            this.el.nativeElement.focus();
+            event.preventDefault();
+        }
+    }
+    isEnabled() {
+        return this.ttContextMenuRowDisabled !== true;
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TTContextMenuRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTContextMenuRow, deps: [{ token: TreeTable }, { token: TreeTableService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
+TTContextMenuRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: TTContextMenuRow, selector: "[ttContextMenuRow]", inputs: { rowNode: ["ttContextMenuRow", "rowNode"], ttContextMenuRowDisabled: "ttContextMenuRowDisabled" }, host: { listeners: { "contextmenu": "onContextMenu($event)" }, properties: { "class.p-highlight-contextmenu": "selected", "attr.tabindex": "isEnabled() ? 0 : undefined" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTContextMenuRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[ttContextMenuRow]',
+                    host: {
+                        'class': 'p-element',
+                        '[class.p-highlight-contextmenu]': 'selected',
+                        '[attr.tabindex]': 'isEnabled() ? 0 : undefined'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: TreeTableService }, { type: i0.ElementRef }]; }, propDecorators: { rowNode: [{
+                type: Input,
+                args: ["ttContextMenuRow"]
+            }], ttContextMenuRowDisabled: [{
+                type: Input
+            }], onContextMenu: [{
+                type: HostListener,
+                args: ['contextmenu', ['$event']]
+            }] } });
+class TTCheckbox {
+    constructor(tt, tableService, cd) {
+        this.tt = tt;
+        this.tableService = tableService;
+        this.cd = cd;
+        this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {
+            this.checked = this.tt.isSelected(this.rowNode.node);
+            this.cd.markForCheck();
+        });
+    }
+    ngOnInit() {
+        this.checked = this.tt.isSelected(this.rowNode.node);
+    }
+    onClick(event) {
+        if (!this.disabled) {
+            this.tt.toggleNodeWithCheckbox({
+                originalEvent: event,
+                rowNode: this.rowNode
+            });
+        }
+        DomHandler.clearSelection();
+    }
+    onFocus() {
+        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    onBlur() {
+        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    ngOnDestroy() {
+        if (this.subscription) {
+            this.subscription.unsubscribe();
+        }
+    }
+}
+TTCheckbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTCheckbox, deps: [{ token: TreeTable }, { token: TreeTableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TTCheckbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TTCheckbox, selector: "p-treeTableCheckbox", inputs: { disabled: "disabled", rowNode: ["value", "rowNode"] }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "boxViewChild", first: true, predicate: ["box"], descendants: true }], ngImport: i0, template: `
+        <div class="p-checkbox p-component" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input type="checkbox" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()">
+            </div>
+            <div #box [ngClass]="{'p-checkbox-box':true,
+                'p-highlight':checked, 'p-indeterminate': rowNode.node.partialSelected, 'p-disabled':disabled}"  role="checkbox" [attr.aria-checked]="checked">
+                <span class="p-checkbox-icon pi" [ngClass]="{'pi-check':checked, 'pi-minus': rowNode.node.partialSelected}"></span>
+            </div>
+        </div>
+    `, isInline: true, directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTCheckbox, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-treeTableCheckbox',
+                    template: `
+        <div class="p-checkbox p-component" (click)="onClick($event)">
+            <div class="p-hidden-accessible">
+                <input type="checkbox" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()">
+            </div>
+            <div #box [ngClass]="{'p-checkbox-box':true,
+                'p-highlight':checked, 'p-indeterminate': rowNode.node.partialSelected, 'p-disabled':disabled}"  role="checkbox" [attr.aria-checked]="checked">
+                <span class="p-checkbox-icon pi" [ngClass]="{'pi-check':checked, 'pi-minus': rowNode.node.partialSelected}"></span>
+            </div>
+        </div>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: TreeTableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
+                type: Input
+            }], rowNode: [{
+                type: Input,
+                args: ["value"]
+            }], boxViewChild: [{
+                type: ViewChild,
+                args: ['box']
+            }] } });
+class TTHeaderCheckbox {
+    constructor(tt, tableService, cd) {
+        this.tt = tt;
+        this.tableService = tableService;
+        this.cd = cd;
+        this.valueChangeSubscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {
+            this.checked = this.updateCheckedState();
+        });
+        this.selectionChangeSubscription = this.tt.tableService.selectionSource$.subscribe(() => {
+            this.checked = this.updateCheckedState();
+        });
+    }
+    ngOnInit() {
+        this.checked = this.updateCheckedState();
+    }
+    onClick(event, checked) {
+        if (this.tt.value && this.tt.value.length > 0) {
+            this.tt.toggleNodesWithCheckbox(event, !checked);
+        }
+        DomHandler.clearSelection();
+    }
+    onFocus() {
+        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    onBlur() {
+        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');
+    }
+    ngOnDestroy() {
+        if (this.selectionChangeSubscription) {
+            this.selectionChangeSubscription.unsubscribe();
+        }
+        if (this.valueChangeSubscription) {
+            this.valueChangeSubscription.unsubscribe();
+        }
+    }
+    updateCheckedState() {
+        this.cd.markForCheck();
+        let checked;
+        const data = this.tt.filteredNodes || this.tt.value;
+        if (data) {
+            for (let node of data) {
+                if (this.tt.isSelected(node)) {
+                    checked = true;
+                }
+                else {
+                    checked = false;
+                    break;
+                }
+            }
+        }
+        else {
+            checked = false;
+        }
+        return checked;
+    }
+}
+TTHeaderCheckbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTHeaderCheckbox, deps: [{ token: TreeTable }, { token: TreeTableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TTHeaderCheckbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TTHeaderCheckbox, selector: "p-treeTableHeaderCheckbox", host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "boxViewChild", first: true, predicate: ["box"], descendants: true }], ngImport: i0, template: `
+        <div class="p-checkbox p-component" (click)="onClick($event, cb.checked)">
+            <div class="p-hidden-accessible">
+                <input #cb type="checkbox" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()" [disabled]="!tt.value||tt.value.length === 0">
+            </div>
+            <div #box [ngClass]="{'p-checkbox-box':true,
+                'p-highlight':checked, 'p-disabled': (!tt.value || tt.value.length === 0)}"  role="checkbox" [attr.aria-checked]="checked">
+                <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':checked}"></span>
+            </div>
+        </div>
+    `, isInline: true, directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTHeaderCheckbox, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-treeTableHeaderCheckbox',
+                    template: `
+        <div class="p-checkbox p-component" (click)="onClick($event, cb.checked)">
+            <div class="p-hidden-accessible">
+                <input #cb type="checkbox" [checked]="checked" (focus)="onFocus()" (blur)="onBlur()" [disabled]="!tt.value||tt.value.length === 0">
+            </div>
+            <div #box [ngClass]="{'p-checkbox-box':true,
+                'p-highlight':checked, 'p-disabled': (!tt.value || tt.value.length === 0)}"  role="checkbox" [attr.aria-checked]="checked">
+                <span class="p-checkbox-icon" [ngClass]="{'pi pi-check':checked}"></span>
+            </div>
+        </div>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: TreeTableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { boxViewChild: [{
+                type: ViewChild,
+                args: ['box']
+            }] } });
+class TTEditableColumn {
+    constructor(tt, el, zone) {
+        this.tt = tt;
+        this.el = el;
+        this.zone = zone;
+    }
+    ngAfterViewInit() {
+        if (this.isEnabled()) {
+            DomHandler.addClass(this.el.nativeElement, 'p-editable-column');
+        }
+    }
+    onClick(event) {
+        if (this.isEnabled()) {
+            this.tt.editingCellClick = true;
+            if (this.tt.editingCell) {
+                if (this.tt.editingCell !== this.el.nativeElement) {
+                    if (!this.tt.isEditingCellValid()) {
+                        return;
+                    }
+                    DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');
+                    this.openCell();
+                }
+            }
+            else {
+                this.openCell();
+            }
+        }
+    }
+    openCell() {
+        this.tt.updateEditingCell(this.el.nativeElement, this.data, this.field);
+        DomHandler.addClass(this.el.nativeElement, 'p-cell-editing');
+        this.tt.onEditInit.emit({ field: this.field, data: this.data });
+        this.tt.editingCellClick = true;
+        this.zone.runOutsideAngular(() => {
+            setTimeout(() => {
+                let focusable = DomHandler.findSingle(this.el.nativeElement, 'input, textarea');
+                if (focusable) {
+                    focusable.focus();
+                }
+            }, 50);
+        });
+    }
+    closeEditingCell() {
+        DomHandler.removeClass(this.tt.editingCell, 'p-checkbox-icon');
+        this.tt.editingCell = null;
+        this.tt.unbindDocumentEditListener();
+    }
+    onKeyDown(event) {
+        if (this.isEnabled()) {
+            //enter
+            if (event.keyCode == 13) {
+                if (this.tt.isEditingCellValid()) {
+                    DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');
+                    this.closeEditingCell();
+                    this.tt.onEditComplete.emit({ field: this.field, data: this.data });
+                }
+                event.preventDefault();
+            }
+            //escape
+            else if (event.keyCode == 27) {
+                if (this.tt.isEditingCellValid()) {
+                    DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');
+                    this.closeEditingCell();
+                    this.tt.onEditCancel.emit({ field: this.field, data: this.data });
+                }
+                event.preventDefault();
+            }
+            //tab
+            else if (event.keyCode == 9) {
+                this.tt.onEditComplete.emit({ field: this.field, data: this.data });
+                if (event.shiftKey)
+                    this.moveToPreviousCell(event);
+                else
+                    this.moveToNextCell(event);
+            }
+        }
+    }
+    findCell(element) {
+        if (element) {
+            let cell = element;
+            while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {
+                cell = cell.parentElement;
+            }
+            return cell;
+        }
+        else {
+            return null;
+        }
+    }
+    moveToPreviousCell(event) {
+        let currentCell = this.findCell(event.target);
+        let row = currentCell.parentElement;
+        let targetCell = this.findPreviousEditableColumn(currentCell);
+        if (targetCell) {
+            DomHandler.invokeElementMethod(targetCell, 'click');
+            event.preventDefault();
+        }
+    }
+    moveToNextCell(event) {
+        let currentCell = this.findCell(event.target);
+        let row = currentCell.parentElement;
+        let targetCell = this.findNextEditableColumn(currentCell);
+        if (targetCell) {
+            DomHandler.invokeElementMethod(targetCell, 'click');
+            event.preventDefault();
+        }
+    }
+    findPreviousEditableColumn(cell) {
+        let prevCell = cell.previousElementSibling;
+        if (!prevCell) {
+            let previousRow = cell.parentElement ? cell.parentElement.previousElementSibling : null;
+            if (previousRow) {
+                prevCell = previousRow.lastElementChild;
+            }
+        }
+        if (prevCell) {
+            if (DomHandler.hasClass(prevCell, 'p-editable-column'))
+                return prevCell;
+            else
+                return this.findPreviousEditableColumn(prevCell);
+        }
+        else {
+            return null;
+        }
+    }
+    findNextEditableColumn(cell) {
+        let nextCell = cell.nextElementSibling;
+        if (!nextCell) {
+            let nextRow = cell.parentElement ? cell.parentElement.nextElementSibling : null;
+            if (nextRow) {
+                nextCell = nextRow.firstElementChild;
+            }
+        }
+        if (nextCell) {
+            if (DomHandler.hasClass(nextCell, 'p-editable-column'))
+                return nextCell;
+            else
+                return this.findNextEditableColumn(nextCell);
+        }
+        else {
+            return null;
+        }
+    }
+    isEnabled() {
+        return this.ttEditableColumnDisabled !== true;
+    }
+}
+TTEditableColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTEditableColumn, deps: [{ token: TreeTable }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+TTEditableColumn.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: TTEditableColumn, selector: "[ttEditableColumn]", inputs: { data: ["ttEditableColumn", "data"], field: ["ttEditableColumnField", "field"], ttEditableColumnDisabled: "ttEditableColumnDisabled" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTEditableColumn, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[ttEditableColumn]',
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { data: [{
+                type: Input,
+                args: ["ttEditableColumn"]
+            }], field: [{
+                type: Input,
+                args: ["ttEditableColumnField"]
+            }], ttEditableColumnDisabled: [{
+                type: Input
+            }], onClick: [{
+                type: HostListener,
+                args: ['click', ['$event']]
+            }], onKeyDown: [{
+                type: HostListener,
+                args: ['keydown', ['$event']]
+            }] } });
+class TreeTableCellEditor {
+    constructor(tt, editableColumn) {
+        this.tt = tt;
+        this.editableColumn = editableColumn;
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'input':
+                    this.inputTemplate = item.template;
+                    break;
+                case 'output':
+                    this.outputTemplate = item.template;
+                    break;
+            }
+        });
+    }
+}
+TreeTableCellEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableCellEditor, deps: [{ token: TreeTable }, { token: TTEditableColumn }], target: i0.ɵɵFactoryTarget.Component });
+TreeTableCellEditor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TreeTableCellEditor, selector: "p-treeTableCellEditor", host: { classAttribute: "p-element" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
+        <ng-container *ngIf="tt.editingCell === editableColumn.el.nativeElement">
+            <ng-container *ngTemplateOutlet="inputTemplate"></ng-container>
+        </ng-container>
+        <ng-container *ngIf="!tt.editingCell || tt.editingCell !== editableColumn.el.nativeElement">
+            <ng-container *ngTemplateOutlet="outputTemplate"></ng-container>
+        </ng-container>
+    `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableCellEditor, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-treeTableCellEditor',
+                    template: `
+        <ng-container *ngIf="tt.editingCell === editableColumn.el.nativeElement">
+            <ng-container *ngTemplateOutlet="inputTemplate"></ng-container>
+        </ng-container>
+        <ng-container *ngIf="!tt.editingCell || tt.editingCell !== editableColumn.el.nativeElement">
+            <ng-container *ngTemplateOutlet="outputTemplate"></ng-container>
+        </ng-container>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: TTEditableColumn }]; }, propDecorators: { templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }] } });
+class TTRow {
+    constructor(tt, el, zone) {
+        this.tt = tt;
+        this.el = el;
+        this.zone = zone;
+    }
+    onKeyDown(event) {
+        switch (event.which) {
+            //down arrow
+            case 40:
+                let nextRow = this.el.nativeElement.nextElementSibling;
+                if (nextRow) {
+                    nextRow.focus();
+                }
+                event.preventDefault();
+                break;
+            //down arrow
+            case 38:
+                let prevRow = this.el.nativeElement.previousElementSibling;
+                if (prevRow) {
+                    prevRow.focus();
+                }
+                event.preventDefault();
+                break;
+            //left arrow
+            case 37:
+                if (this.rowNode.node.expanded) {
+                    this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);
+                    this.rowNode.node.expanded = false;
+                    this.tt.onNodeCollapse.emit({
+                        originalEvent: event,
+                        node: this.rowNode.node
+                    });
+                    this.tt.updateSerializedValue();
+                    this.tt.tableService.onUIUpdate(this.tt.value);
+                    this.restoreFocus();
+                }
+                break;
+            //right arrow
+            case 39:
+                if (!this.rowNode.node.expanded) {
+                    this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);
+                    this.rowNode.node.expanded = true;
+                    this.tt.onNodeExpand.emit({
+                        originalEvent: event,
+                        node: this.rowNode.node
+                    });
+                    this.tt.updateSerializedValue();
+                    this.tt.tableService.onUIUpdate(this.tt.value);
+                    this.restoreFocus();
+                }
+                break;
+        }
+    }
+    restoreFocus() {
+        this.zone.runOutsideAngular(() => {
+            setTimeout(() => {
+                let row = DomHandler.findSingle(this.tt.containerViewChild.nativeElement, '.p-treetable-tbody').children[this.tt.toggleRowIndex];
+                if (row) {
+                    row.focus();
+                }
+            }, 25);
+        });
+    }
+}
+TTRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTRow, deps: [{ token: TreeTable }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
+TTRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: TTRow, selector: "[ttRow]", inputs: { rowNode: ["ttRow", "rowNode"] }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "attr.tabindex": "\"0\"" }, classAttribute: "p-element" }, ngImport: i0 });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TTRow, decorators: [{
+            type: Directive,
+            args: [{
+                    selector: '[ttRow]',
+                    host: {
+                        'class': 'p-element',
+                        '[attr.tabindex]': '"0"'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { rowNode: [{
+                type: Input,
+                args: ['ttRow']
+            }], onKeyDown: [{
+                type: HostListener,
+                args: ['keydown', ['$event']]
+            }] } });
+class TreeTableToggler {
+    constructor(tt) {
+        this.tt = tt;
+    }
+    onClick(event) {
+        this.rowNode.node.expanded = !this.rowNode.node.expanded;
+        if (this.rowNode.node.expanded) {
+            this.tt.onNodeExpand.emit({
+                originalEvent: event,
+                node: this.rowNode.node
+            });
+        }
+        else {
+            this.tt.onNodeCollapse.emit({
+                originalEvent: event,
+                node: this.rowNode.node
+            });
+        }
+        this.tt.updateSerializedValue();
+        this.tt.tableService.onUIUpdate(this.tt.value);
+        event.preventDefault();
+    }
+}
+TreeTableToggler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableToggler, deps: [{ token: TreeTable }], target: i0.ɵɵFactoryTarget.Component });
+TreeTableToggler.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TreeTableToggler, selector: "p-treeTableToggler", inputs: { rowNode: "rowNode" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
+        <button type="button" class="p-treetable-toggler p-link" (click)="onClick($event)" tabindex="-1" pRipple
+            [style.visibility]="rowNode.node.leaf === false || (rowNode.node.children && rowNode.node.children.length) ? 'visible' : 'hidden'" [style.marginLeft]="rowNode.level * 16 + 'px'">
+            <i [ngClass]="rowNode.node.expanded ? 'pi pi-fw pi-chevron-down' : 'pi pi-fw pi-chevron-right'"></i>
+        </button>
+    `, isInline: true, directives: [{ type: i5.Ripple, selector: "[pRipple]" }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableToggler, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-treeTableToggler',
+                    template: `
+        <button type="button" class="p-treetable-toggler p-link" (click)="onClick($event)" tabindex="-1" pRipple
+            [style.visibility]="rowNode.node.leaf === false || (rowNode.node.children && rowNode.node.children.length) ? 'visible' : 'hidden'" [style.marginLeft]="rowNode.level * 16 + 'px'">
+            <i [ngClass]="rowNode.node.expanded ? 'pi pi-fw pi-chevron-down' : 'pi pi-fw pi-chevron-right'"></i>
+        </button>
+    `,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: TreeTable }]; }, propDecorators: { rowNode: [{
+                type: Input
+            }] } });
+class TreeTableModule {
+}
+TreeTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TreeTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableModule, declarations: [TreeTable, TreeTableToggler, TTScrollableView, TTBody, TTSortableColumn, TTSortIcon, TTResizableColumn, TTRow, TTReorderableColumn, TTSelectableRow, TTSelectableRowDblClick, TTContextMenuRow, TTCheckbox, TTHeaderCheckbox, TTEditableColumn, TreeTableCellEditor], imports: [CommonModule, PaginatorModule, ScrollingModule, RippleModule], exports: [TreeTable, SharedModule, TreeTableToggler, TTSortableColumn, TTSortIcon, TTResizableColumn, TTRow, TTReorderableColumn, TTSelectableRow, TTSelectableRowDblClick, TTContextMenuRow, TTCheckbox, TTHeaderCheckbox, TTEditableColumn, TreeTableCellEditor, ScrollingModule] });
+TreeTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableModule, imports: [[CommonModule, PaginatorModule, ScrollingModule, RippleModule], SharedModule, ScrollingModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TreeTableModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, PaginatorModule, ScrollingModule, RippleModule],
+                    exports: [TreeTable, SharedModule, TreeTableToggler, TTSortableColumn, TTSortIcon, TTResizableColumn, TTRow, TTReorderableColumn, TTSelectableRow, TTSelectableRowDblClick, TTContextMenuRow, TTCheckbox, TTHeaderCheckbox, TTEditableColumn, TreeTableCellEditor, ScrollingModule],
+                    declarations: [TreeTable, TreeTableToggler, TTScrollableView, TTBody, TTSortableColumn, TTSortIcon, TTResizableColumn, TTRow, TTReorderableColumn, TTSelectableRow, TTSelectableRowDblClick, TTContextMenuRow, TTCheckbox, TTHeaderCheckbox, TTEditableColumn, TreeTableCellEditor]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { TTBody, TTCheckbox, TTContextMenuRow, TTEditableColumn, TTHeaderCheckbox, TTReorderableColumn, TTResizableColumn, TTRow, TTScrollableView, TTSelectableRow, TTSelectableRowDblClick, TTSortIcon, TTSortableColumn, TreeTable, TreeTableCellEditor, TreeTableModule, TreeTableService, TreeTableToggler };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-treetable.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-treetable.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-treetable.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-treetable.mjs","sources":["../../src/app/components/treetable/treetable.ts","../../src/app/components/treetable/primeng-treetable.ts"],"sourcesContent":["import { NgModule, AfterContentInit, OnInit, OnDestroy, HostListener, Injectable, Directive, Component, Input, Output, EventEmitter, ContentChildren, TemplateRef, QueryList, ElementRef, NgZone, ViewChild, AfterViewInit, AfterViewChecked, OnChanges, SimpleChanges, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TreeNode } from 'primeng/api';\nimport { Subject, Subscription } from 'rxjs';\nimport { DomHandler } from 'primeng/dom';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PrimeTemplate, SharedModule, FilterService } from 'primeng/api';\nimport { SortMeta } from 'primeng/api';\nimport { BlockableUI } from 'primeng/api';\nimport { FilterMetadata } from 'primeng/api';\nimport { ObjectUtils } from 'primeng/utils';\nimport { RippleModule } from 'primeng/ripple';\nimport { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\n\n@Injectable()\nexport class TreeTableService {\n\n    private sortSource = new Subject<SortMeta|SortMeta[]>();\n    private selectionSource = new Subject();\n    private contextMenuSource = new Subject<any>();\n    private uiUpdateSource = new Subject<any>();\n    private totalRecordsSource = new Subject<any>();\n\n    sortSource$ = this.sortSource.asObservable();\n    selectionSource$ = this.selectionSource.asObservable();\n    contextMenuSource$ = this.contextMenuSource.asObservable();\n    uiUpdateSource$ = this.uiUpdateSource.asObservable();\n    totalRecordsSource$ = this.totalRecordsSource.asObservable();\n\n    onSort(sortMeta: SortMeta|SortMeta[]) {\n        this.sortSource.next(sortMeta);\n    }\n\n    onSelectionChange() {\n        this.selectionSource.next(null);\n    }\n\n    onContextMenu(node: any) {\n        this.contextMenuSource.next(node);\n    }\n\n    onUIUpdate(value: any) {\n        this.uiUpdateSource.next(value);\n    }\n\n    onTotalRecordsChange(value: number) {\n        this.totalRecordsSource.next(value);\n    }\n}\n\n@Component({\n    selector: 'p-treeTable',\n    template: `\n        <div #container [ngStyle]=\"style\" [class]=\"styleClass\" data-scrollselectors=\".p-treetable-scrollable-body\"\n                [ngClass]=\"{'p-treetable p-component': true,\n                'p-treetable-hoverable-rows': (rowHover||(selectionMode === 'single' || selectionMode === 'multiple')),\n                'p-treetable-auto-layout': autoLayout,\n                'p-treetable-resizable': resizableColumns,\n                'p-treetable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),\n                'p-treetable-flex-scrollable': (scrollable && scrollHeight === 'flex')}\">\n            <div class=\"p-treetable-loading\" *ngIf=\"loading && showLoader\">\n                <div class=\"p-treetable-loading-overlay p-component-overlay\">\n                    <i [class]=\"'p-treetable-loading-icon pi-spin ' + loadingIcon\"></i>\n                </div>\n            </div>\n            <div *ngIf=\"captionTemplate\" class=\"p-treetable-header\">\n                <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n            </div>\n            <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-paginator-top\" [alwaysShow]=\"alwaysShowPaginator\"\n                (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\"\n                [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\n                [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n            <div class=\"p-treetable-wrapper\" *ngIf=\"!scrollable\">\n                <table #table [ngClass]=\"tableStyleClass\" [ngStyle]=\"tableStyle\">\n                    <ng-container *ngTemplateOutlet=\"colGroupTemplate; context {$implicit: columns}\"></ng-container>\n                    <thead class=\"p-treetable-thead\">\n                        <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: columns}\"></ng-container>\n                    </thead>\n                    <tbody class=\"p-treetable-tbody\" [pTreeTableBody]=\"columns\" [pTreeTableBodyTemplate]=\"bodyTemplate\"></tbody>\n                    <tfoot class=\"p-treetable-tfoot\">\n                        <ng-container *ngTemplateOutlet=\"footerTemplate; context {$implicit: columns}\"></ng-container>\n                    </tfoot>\n                </table>\n            </div>\n\n            <div class=\"p-treetable-scrollable-wrapper\" *ngIf=\"scrollable\">\n               <div class=\"p-treetable-scrollable-view p-treetable-frozen-view\" *ngIf=\"frozenColumns||frozenBodyTemplate\" #scrollableFrozenView [ttScrollableView]=\"frozenColumns\" [frozen]=\"true\" [ngStyle]=\"{width: frozenWidth}\" [scrollHeight]=\"scrollHeight\"></div>\n               <div class=\"p-treetable-scrollable-view\" #scrollableView [ttScrollableView]=\"columns\" [frozen]=\"false\" [scrollHeight]=\"scrollHeight\" [ngStyle]=\"{left: frozenWidth, width: 'calc(100% - '+frozenWidth+')'}\"></div>\n            </div>\n\n            <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-paginator-bottom\" [alwaysShow]=\"alwaysShowPaginator\"\n                (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\"\n                [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\n                [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n            <div *ngIf=\"summaryTemplate\" class=\"p-treetable-footer\">\n                <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\n            </div>\n\n            <div #resizeHelper class=\"p-column-resizer-helper\" style=\"display:none\" *ngIf=\"resizableColumns\"></div>\n\n            <span #reorderIndicatorUp class=\"pi pi-arrow-down p-treetable-reorder-indicator-up\" *ngIf=\"reorderableColumns\"></span>\n            <span #reorderIndicatorDown class=\"pi pi-arrow-up p-treetable-reorder-indicator-down\" *ngIf=\"reorderableColumns\"></span>\n        </div>\n    `,\n    providers: [TreeTableService],\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./treetable.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TreeTable implements AfterContentInit, OnInit, OnDestroy, BlockableUI, OnChanges {\n\n    @Input() columns: any[];\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() tableStyle: any;\n\n    @Input() tableStyleClass: string;\n\n    @Input() autoLayout: boolean;\n\n    @Input() lazy: boolean = false;\n\n    @Input() lazyLoadOnInit: boolean = true;\n\n    @Input() paginator: boolean;\n\n    @Input() rows: number;\n\n    @Input() first: number = 0;\n\n    @Input() pageLinks: number = 5;\n\n    @Input() rowsPerPageOptions: any[];\n\n    @Input() alwaysShowPaginator: boolean = true;\n\n    @Input() paginatorPosition: string = 'bottom';\n\n    @Input() paginatorDropdownAppendTo: any;\n\n    @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n    @Input() showCurrentPageReport: boolean;\n\n    @Input() showJumpToPageDropdown: boolean;\n\n    @Input() showFirstLastIcon: boolean = true;\n\n    @Input() showPageLinks: boolean = true;\n\n    @Input() defaultSortOrder: number = 1;\n\n    @Input() sortMode: string = 'single';\n\n    @Input() resetPageOnSort: boolean = true;\n\n    @Input() customSort: boolean;\n\n    @Input() selectionMode: string;\n\n    @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n    @Input() contextMenuSelection: any;\n\n    @Output() contextMenuSelectionChange: EventEmitter<any> = new EventEmitter();\n\n    @Input() contextMenuSelectionMode: string = \"separate\";\n\n    @Input() dataKey: string;\n\n    @Input() metaKeySelection: boolean;\n\n    @Input() compareSelectionBy: string = 'deepEquals';\n\n    @Input() rowHover: boolean;\n\n    @Input() loading: boolean;\n\n    @Input() loadingIcon: string = 'pi pi-spinner';\n\n    @Input() showLoader: boolean = true;\n\n    @Input() scrollable: boolean;\n\n    @Input() scrollHeight: string;\n\n    @Input() virtualScroll: boolean;\n\n    @Input() virtualScrollDelay: number = 150;\n\n    @Input() virtualRowHeight: number = 28;\n\n    @Input() minBufferPx: number;\n\n    @Input() maxBufferPx: number;\n\n    @Input() frozenWidth: string;\n\n    @Input() frozenColumns: any[];\n\n    @Input() resizableColumns: boolean;\n\n    @Input() columnResizeMode: string = 'fit';\n\n    @Input() reorderableColumns: boolean;\n\n    @Input() contextMenu: any;\n\n    @Input() rowTrackBy: Function = (index: number, item: any) => item;\n\n    @Input() filters: { [s: string]: FilterMetadata; } = {};\n\n    @Input() globalFilterFields: string[];\n\n    @Input() filterDelay: number = 300;\n\n    @Input() filterMode: string = 'lenient';\n\n    @Input() filterLocale: string;\n\n    @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeExpand: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeCollapse: EventEmitter<any> = new EventEmitter();\n\n    @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSort: EventEmitter<any> = new EventEmitter();\n\n    @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n    @Output() sortFunction: EventEmitter<any> = new EventEmitter();\n\n    @Output() onColResize: EventEmitter<any> = new EventEmitter();\n\n    @Output() onColReorder: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onNodeUnselect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHeaderCheckboxToggle: EventEmitter<any> = new EventEmitter();\n\n    @Output() onEditInit: EventEmitter<any> = new EventEmitter();\n\n    @Output() onEditComplete: EventEmitter<any> = new EventEmitter();\n\n    @Output() onEditCancel: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('container') containerViewChild: ElementRef;\n\n    @ViewChild('resizeHelper') resizeHelperViewChild: ElementRef;\n\n    @ViewChild('reorderIndicatorUp') reorderIndicatorUpViewChild: ElementRef;\n\n    @ViewChild('reorderIndicatorDown') reorderIndicatorDownViewChild: ElementRef;\n\n    @ViewChild('table') tableViewChild: ElementRef;\n\n    @ViewChild('scrollableView') scrollableViewChild;\n\n    @ViewChild('scrollableFrozenView') scrollableFrozenViewChild;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n    _value: TreeNode[] = [];\n\n    serializedValue: any[];\n\n    _totalRecords: number = 0;\n\n    _multiSortMeta: SortMeta[];\n\n    _sortField: string;\n\n    _sortOrder: number = 1;\n\n    filteredNodes: any[];\n\n    filterTimeout: any;\n\n    colGroupTemplate: TemplateRef<any>;\n\n    captionTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    bodyTemplate: TemplateRef<any>;\n\n    loadingBodyTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    summaryTemplate: TemplateRef<any>;\n\n    emptyMessageTemplate: TemplateRef<any>;\n\n    paginatorLeftTemplate: TemplateRef<any>;\n\n    paginatorRightTemplate: TemplateRef<any>;\n\n    paginatorDropdownItemTemplate: TemplateRef<any>;\n\n    frozenHeaderTemplate: TemplateRef<any>;\n\n    frozenBodyTemplate: TemplateRef<any>;\n\n    frozenFooterTemplate: TemplateRef<any>;\n\n    frozenColGroupTemplate: TemplateRef<any>;\n\n    lastResizerHelperX: number;\n\n    reorderIconWidth: number;\n\n    reorderIconHeight: number;\n\n    draggedColumn: any;\n\n    dropPosition: number;\n\n    preventSelectionSetterPropagation: boolean;\n\n    _selection: any;\n\n    selectionKeys: any = {};\n\n    rowTouched: boolean;\n\n    editingCell: Element;\n\n    editingCellData: any;\n\n    editingCellField: any;\n\n    editingCellClick: boolean;\n\n    documentEditListener: any;\n\n    initialized: boolean;\n\n    toggleRowIndex: number;\n\n    ngOnInit() {\n        if (this.lazy && this.lazyLoadOnInit) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        this.initialized = true;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'caption':\n                    this.captionTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'body':\n                    this.bodyTemplate = item.template;\n                break;\n\n                case 'loadingbody':\n                    this.loadingBodyTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                case 'summary':\n                    this.summaryTemplate = item.template;\n                break;\n\n                case 'colgroup':\n                    this.colGroupTemplate = item.template;\n                break;\n\n                case 'emptymessage':\n                    this.emptyMessageTemplate = item.template;\n                break;\n\n                case 'paginatorleft':\n                    this.paginatorLeftTemplate = item.template;\n                break;\n\n                case 'paginatorright':\n                    this.paginatorRightTemplate = item.template;\n                break;\n\n                case 'paginatordropdownitem':\n                    this.paginatorDropdownItemTemplate = item.template;\n                break;\n\n                case 'frozenheader':\n                    this.frozenHeaderTemplate = item.template;\n                break;\n\n                case 'frozenbody':\n                    this.frozenBodyTemplate = item.template;\n                break;\n\n                case 'frozenfooter':\n                    this.frozenFooterTemplate = item.template;\n                break;\n\n                case 'frozencolgroup':\n                    this.frozenColGroupTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    constructor(public el: ElementRef, public zone: NgZone, public tableService: TreeTableService, public filterService: FilterService) {}\n\n    ngOnChanges(simpleChange: SimpleChanges) {\n        if (simpleChange.value) {\n            this._value = simpleChange.value.currentValue;\n\n            if (!this.lazy) {\n                this.totalRecords = (this._value ? this._value.length : 0);\n\n                if (this.sortMode == 'single' && this.sortField)\n                    this.sortSingle();\n                else if (this.sortMode == 'multiple' && this.multiSortMeta)\n                    this.sortMultiple();\n                else if (this.hasFilter())       //sort already filters\n                    this._filter();\n            }\n\n            this.updateSerializedValue();\n            this.tableService.onUIUpdate(this.value);\n        }\n\n        if (simpleChange.sortField) {\n            this._sortField = simpleChange.sortField.currentValue;\n\n            //avoid triggering lazy load prior to lazy initialization at onInit\n            if ( !this.lazy || this.initialized ) {\n                if (this.sortMode === 'single') {\n                    this.sortSingle();\n                }\n            }\n        }\n\n        if (simpleChange.sortOrder) {\n            this._sortOrder = simpleChange.sortOrder.currentValue;\n\n            //avoid triggering lazy load prior to lazy initialization at onInit\n            if ( !this.lazy || this.initialized ) {\n                if (this.sortMode === 'single') {\n                    this.sortSingle();\n                }\n            }\n        }\n\n        if (simpleChange.multiSortMeta) {\n            this._multiSortMeta = simpleChange.multiSortMeta.currentValue;\n            if (this.sortMode === 'multiple') {\n                this.sortMultiple();\n            }\n        }\n\n        if (simpleChange.selection) {\n            this._selection = simpleChange.selection.currentValue;\n\n            if (!this.preventSelectionSetterPropagation) {\n                this.updateSelectionKeys();\n                this.tableService.onSelectionChange();\n            }\n            this.preventSelectionSetterPropagation = false;\n        }\n    }\n\n    @Input() get value(): any[] {\n        return this._value;\n    }\n    set value(val: any[]) {\n        this._value = val;\n    }\n\n    updateSerializedValue() {\n        this.serializedValue = [];\n\n        if (this.paginator)\n            this.serializePageNodes();\n        else\n            this.serializeNodes(null, this.filteredNodes||this.value, 0, true);\n    }\n\n    serializeNodes(parent, nodes, level, visible) {\n        if (nodes && nodes.length) {\n            for(let node of nodes) {\n                node.parent = parent;\n                const rowNode = {\n                    node: node,\n                    parent: parent,\n                    level: level,\n                    visible: visible && (parent ? parent.expanded : true)\n                };\n                this.serializedValue.push(rowNode);\n\n                if (rowNode.visible && node.expanded) {\n                    this.serializeNodes(node, node.children, level + 1, rowNode.visible);\n                }\n            }\n        }\n    }\n\n    serializePageNodes() {\n        let data = this.filteredNodes || this.value;\n        this.serializedValue = [];\n        if (data && data.length) {\n            const first = this.lazy ? 0 : this.first;\n\n            for(let i = first; i < (first + this.rows); i++) {\n                let node = data[i];\n                if (node) {\n                    this.serializedValue.push({\n                        node: node,\n                        parent: null,\n                        level: 0,\n                        visible: true\n                    });\n\n                    this.serializeNodes(node, node.children, 1, true);\n                }\n            }\n        }\n    }\n\n    @Input() get totalRecords(): number {\n        return this._totalRecords;\n    }\n    set totalRecords(val: number) {\n        this._totalRecords = val;\n        this.tableService.onTotalRecordsChange(this._totalRecords);\n    }\n\n    @Input() get sortField(): string {\n        return this._sortField;\n    }\n\n    set sortField(val: string) {\n        this._sortField = val;\n    }\n\n    @Input() get sortOrder(): number {\n        return this._sortOrder;\n    }\n    set sortOrder(val: number) {\n        this._sortOrder = val;\n    }\n\n    @Input() get multiSortMeta(): SortMeta[] {\n        return this._multiSortMeta;\n    }\n\n    set multiSortMeta(val: SortMeta[]) {\n        this._multiSortMeta = val;\n    }\n\n    @Input() get selection(): any {\n        return this._selection;\n    }\n\n    set selection(val: any) {\n        this._selection = val;\n    }\n\n    updateSelectionKeys() {\n        if (this.dataKey && this._selection) {\n            this.selectionKeys = {};\n            if (Array.isArray(this._selection)) {\n                for(let node of this._selection) {\n                    this.selectionKeys[String(ObjectUtils.resolveFieldData(node.data, this.dataKey))] = 1;\n                }\n            }\n            else {\n                this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection.data, this.dataKey))] = 1;\n            }\n        }\n    }\n\n    onPageChange(event) {\n        this.first = event.first;\n        this.rows = event.rows;\n\n        if (this.lazy)\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        else\n            this.serializePageNodes();\n\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n\n        this.tableService.onUIUpdate(this.value);\n\n        if (this.scrollable) {\n            this.resetScrollTop();\n        }\n    }\n\n    sort(event) {\n        let originalEvent = event.originalEvent;\n\n        if (this.sortMode === 'single') {\n            this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;\n            this._sortField = event.field;\n            this.sortSingle();\n\n            if (this.resetPageOnSort && this.scrollable) {\n                this.resetScrollTop();\n            }\n        }\n        if (this.sortMode === 'multiple') {\n            let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n            let sortMeta = this.getSortMeta(event.field);\n\n            if (sortMeta) {\n                if (!metaKey) {\n                    this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }]\n\n                    if (this.resetPageOnSort && this.scrollable) {\n                        this.resetScrollTop();\n                    }\n                }\n                else {\n                    sortMeta.order = sortMeta.order * -1;\n                }\n            }\n            else {\n                if (!metaKey || !this.multiSortMeta) {\n                    this._multiSortMeta = [];\n\n                    if (this.resetPageOnSort && this.scrollable) {\n                        this.resetScrollTop();\n                    }\n                }\n                this.multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });\n            }\n\n            this.sortMultiple();\n        }\n    }\n\n    sortSingle() {\n        if (this.sortField && this.sortOrder) {\n            if (this.lazy) {\n                this.onLazyLoad.emit(this.createLazyLoadMetadata());\n            }\n            else if (this.value) {\n                this.sortNodes(this.value);\n\n                if (this.hasFilter()) {\n                    this._filter();\n                }\n            }\n\n            let sortMeta: SortMeta = {\n                field: this.sortField,\n                order: this.sortOrder\n            };\n\n            this.onSort.emit(sortMeta);\n            this.tableService.onSort(sortMeta);\n            this.updateSerializedValue();\n        }\n    }\n\n    sortNodes(nodes) {\n        if (!nodes || nodes.length === 0) {\n            return;\n        }\n\n        if (this.customSort) {\n            this.sortFunction.emit({\n                data: nodes,\n                mode: this.sortMode,\n                field: this.sortField,\n                order: this.sortOrder\n            });\n        }\n        else {\n            nodes.sort((node1, node2) => {\n                let value1 = ObjectUtils.resolveFieldData(node1.data, this.sortField);\n                let value2 = ObjectUtils.resolveFieldData(node2.data, this.sortField);\n                let result = null;\n\n                if (value1 == null && value2 != null)\n                    result = -1;\n                else if (value1 != null && value2 == null)\n                    result = 1;\n                else if (value1 == null && value2 == null)\n                    result = 0;\n                else if (typeof value1 === 'string' && typeof value2 === 'string')\n                    result = value1.localeCompare(value2, undefined, {numeric: true});\n                else\n                    result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n                return (this.sortOrder * result);\n            });\n        }\n\n        for(let node of nodes) {\n            this.sortNodes(node.children);\n        }\n    }\n\n    sortMultiple() {\n        if (this.multiSortMeta) {\n            if (this.lazy) {\n                this.onLazyLoad.emit(this.createLazyLoadMetadata());\n            }\n            else if (this.value) {\n               this.sortMultipleNodes(this.value);\n\n                if (this.hasFilter()) {\n                    this._filter();\n                }\n            }\n\n            this.onSort.emit({\n                multisortmeta: this.multiSortMeta\n            });\n            this.updateSerializedValue();\n            this.tableService.onSort(this.multiSortMeta);\n        }\n    }\n\n    sortMultipleNodes(nodes) {\n        if (!nodes || nodes.length === 0) {\n            return;\n        }\n\n        if (this.customSort) {\n            this.sortFunction.emit({\n                data: this.value,\n                mode: this.sortMode,\n                multiSortMeta: this.multiSortMeta\n            });\n        }\n        else {\n            nodes.sort((node1, node2) => {\n                return this.multisortField(node1, node2, this.multiSortMeta, 0);\n            });\n        }\n\n        for(let node of nodes) {\n            this.sortMultipleNodes(node.children);\n        }\n    }\n\n    multisortField(node1, node2, multiSortMeta, index) {\n        let value1 = ObjectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);\n        let value2 = ObjectUtils.resolveFieldData(node2.data, multiSortMeta[index].field);\n        let result = null;\n\n        if (value1 == null && value2 != null)\n            result = -1;\n        else if (value1 != null && value2 == null)\n            result = 1;\n        else if (value1 == null && value2 == null)\n            result = 0;\n        if (typeof value1 == 'string' || value1 instanceof String) {\n            if (value1.localeCompare && (value1 != value2)) {\n                return (multiSortMeta[index].order * value1.localeCompare(value2, undefined, {numeric: true}));\n            }\n        }\n        else {\n            result = (value1 < value2) ? -1 : 1;\n        }\n\n        if (value1 == value2) {\n            return (multiSortMeta.length - 1) > (index) ? (this.multisortField(node1, node2, multiSortMeta, index + 1)) : 0;\n        }\n\n        return (multiSortMeta[index].order * result);\n    }\n\n    getSortMeta(field: string) {\n        if (this.multiSortMeta && this.multiSortMeta.length) {\n            for (let i = 0; i < this.multiSortMeta.length; i++) {\n                if (this.multiSortMeta[i].field === field) {\n                    return this.multiSortMeta[i];\n                }\n            }\n        }\n\n        return null;\n    }\n\n    isSorted(field: string) {\n        if (this.sortMode === 'single') {\n            return (this.sortField && this.sortField === field);\n        }\n        else if (this.sortMode === 'multiple') {\n            let sorted = false;\n            if (this.multiSortMeta) {\n                for(let i = 0; i < this.multiSortMeta.length; i++) {\n                    if (this.multiSortMeta[i].field == field) {\n                        sorted = true;\n                        break;\n                    }\n                }\n            }\n            return sorted;\n        }\n    }\n\n    createLazyLoadMetadata(): any {\n        return {\n            first: this.first,\n            rows: this.rows,\n            sortField: this.sortField,\n            sortOrder: this.sortOrder,\n            filters: this.filters,\n            globalFilter: this.filters && this.filters['global'] ? this.filters['global'].value : null,\n            multiSortMeta: this.multiSortMeta\n        };\n    }\n\n    public resetScrollTop() {\n        if (this.virtualScroll)\n            this.scrollToVirtualIndex(0);\n        else\n            this.scrollTo({top: 0});\n    }\n\n    public scrollToVirtualIndex(index: number) {\n        if (this.scrollableViewChild) {\n            this.scrollableViewChild.scrollToVirtualIndex(index);\n        }\n\n        if (this.scrollableFrozenViewChild) {\n            this.scrollableFrozenViewChild.scrollToVirtualIndex(index);\n        }\n    }\n\n    public scrollTo(options) {\n        if (this.scrollableViewChild) {\n            this.scrollableViewChild.scrollTo(options);\n        }\n\n        if (this.scrollableFrozenViewChild) {\n            this.scrollableFrozenViewChild.scrollTo(options);\n        }\n    }\n\n    isEmpty() {\n        let data = this.filteredNodes||this.value;\n        return data == null || data.length == 0;\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    onColumnResizeBegin(event) {\n        let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n        this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);\n        event.preventDefault();\n    }\n\n    onColumnResize(event) {\n        let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n        DomHandler.addClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n        this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';\n        this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';\n        this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';\n\n        this.resizeHelperViewChild.nativeElement.style.display = 'block';\n    }\n\n    onColumnResizeEnd(event, column) {\n        let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;\n        let columnWidth = column.offsetWidth;\n        let newColumnWidth = columnWidth + delta;\n        let minWidth = column.style.minWidth || 15;\n\n        if (columnWidth + delta > parseInt(minWidth)) {\n            if (this.columnResizeMode === 'fit') {\n                let nextColumn = column.nextElementSibling;\n                while (!nextColumn.offsetParent) {\n                    nextColumn = nextColumn.nextElementSibling;\n                }\n\n                if (nextColumn) {\n                    let nextColumnWidth = nextColumn.offsetWidth - delta;\n                    let nextColumnMinWidth = nextColumn.style.minWidth || 15;\n\n                    if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {\n                        if (this.scrollable) {\n                            let scrollableView = this.findParentScrollableView(column);\n                            let scrollableBodyTable = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body table') || DomHandler.findSingle(scrollableView, '.p-treetable-virtual-scrollable-body table');\n                            let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-header-table');\n                            let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-footer-table');\n                            let resizeColumnIndex = DomHandler.index(column);\n\n                            this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n                            this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n                            this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n                        }\n                        else {\n                            column.style.width = newColumnWidth + 'px';\n                            if (nextColumn) {\n                                nextColumn.style.width = nextColumnWidth + 'px';\n                            }\n                        }\n                    }\n                }\n            }\n            else if (this.columnResizeMode === 'expand') {\n                if (this.scrollable) {\n                    let scrollableView = this.findParentScrollableView(column);\n                    let scrollableBody = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport');\n                    let scrollableHeader = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-header');\n                    let scrollableFooter = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-footer');\n                    let scrollableBodyTable = DomHandler.findSingle(scrollableView, '.p-treetable-scrollable-body table') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport table');\n                    let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-header-table');\n                    let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-treetable-scrollable-footer-table');\n                    scrollableBodyTable.style.width = scrollableBodyTable.offsetWidth + delta + 'px';\n                    scrollableHeaderTable.style.width = scrollableHeaderTable.offsetWidth + delta + 'px';\n                    if (scrollableFooterTable) {\n                        scrollableFooterTable.style.width = scrollableFooterTable.offsetWidth + delta + 'px';\n                    }\n                    let resizeColumnIndex = DomHandler.index(column);\n\n                    const scrollableBodyTableWidth = column ? scrollableBodyTable.offsetWidth + delta : newColumnWidth;\n                    const scrollableHeaderTableWidth = column ? scrollableHeaderTable.offsetWidth + delta : newColumnWidth;\n                    const isContainerInViewport = this.containerViewChild.nativeElement.offsetWidth >= scrollableBodyTableWidth;\n\n                    let setWidth = (container, table, width, isContainerInViewport) => {\n                        if (container && table) {\n                            container.style.width = isContainerInViewport ? width + DomHandler.calculateScrollbarWidth(scrollableBody) + 'px' : 'auto'\n                            table.style.width = width + 'px';\n                        }\n                    };\n\n                    setWidth(scrollableBody, scrollableBodyTable, scrollableBodyTableWidth, isContainerInViewport);\n                    setWidth(scrollableHeader, scrollableHeaderTable, scrollableHeaderTableWidth, isContainerInViewport);\n                    setWidth(scrollableFooter, scrollableFooterTable, scrollableHeaderTableWidth, isContainerInViewport);\n\n                    this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);\n                    this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);\n                    this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);\n                }\n                else {\n                    this.tableViewChild.nativeElement.style.width = this.tableViewChild.nativeElement.offsetWidth + delta + 'px';\n                    column.style.width = newColumnWidth + 'px';\n                    let containerWidth = this.tableViewChild.nativeElement.style.width;\n                    this.containerViewChild.nativeElement.style.width = containerWidth + 'px';\n                }\n            }\n\n            this.onColResize.emit({\n                element: column,\n                delta: delta\n            });\n        }\n\n        this.resizeHelperViewChild.nativeElement.style.display = 'none';\n        DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n    }\n\n    findParentScrollableView(column) {\n        if (column) {\n            let parent = column.parentElement;\n            while (parent && !DomHandler.hasClass(parent, 'p-treetable-scrollable-view')) {\n                parent = parent.parentElement;\n            }\n\n            return parent;\n        }\n        else {\n            return null;\n        }\n    }\n\n    resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {\n        if (table) {\n            let colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;\n\n            if (colGroup) {\n                let col = colGroup.children[resizeColumnIndex];\n                let nextCol = col.nextElementSibling;\n                col.style.width = newColumnWidth + 'px';\n\n                if (nextCol && nextColumnWidth) {\n                    nextCol.style.width = nextColumnWidth + 'px';\n                }\n            }\n            else {\n                throw \"Scrollable tables require a colgroup to support resizable columns\";\n            }\n        }\n    }\n\n    onColumnDragStart(event, columnElement) {\n        this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);\n        this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);\n        this.draggedColumn = columnElement;\n        event.dataTransfer.setData('text', 'b');    // For firefox\n    }\n\n    onColumnDragEnter(event, dropHeader) {\n        if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n            event.preventDefault();\n            let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);\n            let dropHeaderOffset = DomHandler.getOffset(dropHeader);\n\n            if (this.draggedColumn != dropHeader) {\n                let targetLeft = dropHeaderOffset.left - containerOffset.left;\n                let targetTop = containerOffset.top - dropHeaderOffset.top;\n                let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n\n                this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';\n                this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n\n                if (event.pageX > columnCenter) {\n                    this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n                    this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n                    this.dropPosition = 1;\n                }\n                else {\n                    this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n                    this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n                    this.dropPosition = -1;\n                }\n\n                this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';\n                this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';\n            }\n            else {\n                event.dataTransfer.dropEffect = 'none';\n            }\n        }\n    }\n\n    onColumnDragLeave(event) {\n        if (this.reorderableColumns && this.draggedColumn) {\n            event.preventDefault();\n            this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n            this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n        }\n    }\n\n    onColumnDrop(event, dropColumn) {\n        event.preventDefault();\n        if (this.draggedColumn) {\n            let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'ttreorderablecolumn');\n            let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'ttreorderablecolumn');\n            let allowDrop = (dragIndex != dropIndex);\n            if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {\n                allowDrop = false;\n            }\n\n            if (allowDrop && ((dropIndex < dragIndex && this.dropPosition === 1))) {\n                dropIndex = dropIndex + 1;\n            }\n\n            if (allowDrop && ((dropIndex > dragIndex && this.dropPosition === -1))) {\n                dropIndex = dropIndex - 1;\n            }\n\n            if (allowDrop) {\n                ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n\n                this.onColReorder.emit({\n                    dragIndex: dragIndex,\n                    dropIndex: dropIndex,\n                    columns: this.columns\n                });\n            }\n\n            this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n            this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n            this.draggedColumn.draggable = false;\n            this.draggedColumn = null;\n            this.dropPosition = null;\n        }\n    }\n\n    handleRowClick(event) {\n        let targetNode = (<HTMLElement> event.originalEvent.target).nodeName;\n        if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || (DomHandler.hasClass(event.originalEvent.target, 'p-clickable'))) {\n            return;\n        }\n\n        if (this.selectionMode) {\n            this.preventSelectionSetterPropagation = true;\n            let rowNode = event.rowNode;\n            let selected = this.isSelected(rowNode.node);\n            let metaSelection = this.rowTouched ? false : this.metaKeySelection;\n            let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowNode.node.data, this.dataKey)) : null;\n\n            if (metaSelection) {\n                let metaKey = event.originalEvent.metaKey||event.originalEvent.ctrlKey;\n\n                if (selected && metaKey) {\n                    if (this.isSingleSelectionMode()) {\n                        this._selection = null;\n                        this.selectionKeys = {};\n                        this.selectionChange.emit(null);\n                    }\n                    else {\n                        let selectionIndex = this.findIndexInSelection(rowNode.node);\n                        this._selection = this.selection.filter((val,i) => i != selectionIndex);\n                        this.selectionChange.emit(this.selection);\n                        if (dataKeyValue) {\n                            delete this.selectionKeys[dataKeyValue];\n                        }\n                    }\n\n                    this.onNodeUnselect.emit({originalEvent: event.originalEvent, node: rowNode.node, type: 'row'});\n                }\n                else {\n                    if (this.isSingleSelectionMode()) {\n                        this._selection = rowNode.node;\n                        this.selectionChange.emit(rowNode.node);\n                        if (dataKeyValue) {\n                            this.selectionKeys = {};\n                            this.selectionKeys[dataKeyValue] = 1;\n                        }\n                    }\n                    else if (this.isMultipleSelectionMode()) {\n                        if (metaKey) {\n                            this._selection = this.selection||[];\n                        }\n                        else {\n                            this._selection = [];\n                            this.selectionKeys = {};\n                        }\n\n                        this._selection = [...this.selection, rowNode.node];\n                        this.selectionChange.emit(this.selection);\n                        if (dataKeyValue) {\n                            this.selectionKeys[dataKeyValue] = 1;\n                        }\n                    }\n\n                    this.onNodeSelect.emit({originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex});\n                }\n            }\n            else {\n                if (this.selectionMode === 'single') {\n                    if (selected) {\n                        this._selection = null;\n                        this.selectionKeys = {};\n                        this.selectionChange.emit(this.selection);\n                        this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n                    }\n                    else {\n                        this._selection = rowNode.node;\n                        this.selectionChange.emit(this.selection);\n                        this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });\n                        if (dataKeyValue) {\n                            this.selectionKeys = {};\n                            this.selectionKeys[dataKeyValue] = 1;\n                        }\n                    }\n                }\n                else if (this.selectionMode === 'multiple') {\n                    if (selected) {\n                        let selectionIndex = this.findIndexInSelection(rowNode.node);\n                        this._selection = this.selection.filter((val, i) => i != selectionIndex);\n                        this.selectionChange.emit(this.selection);\n                        this.onNodeUnselect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row' });\n                        if (dataKeyValue) {\n                            delete this.selectionKeys[dataKeyValue];\n                        }\n                    }\n                    else {\n                        this._selection = this.selection ? [...this.selection, rowNode.node] : [rowNode.node];\n                        this.selectionChange.emit(this.selection);\n                        this.onNodeSelect.emit({ originalEvent: event.originalEvent, node: rowNode.node, type: 'row', index: event.rowIndex });\n                        if (dataKeyValue) {\n                            this.selectionKeys[dataKeyValue] = 1;\n                        }\n                    }\n                }\n            }\n\n            this.tableService.onSelectionChange();\n        }\n\n        this.rowTouched = false;\n    }\n\n    handleRowTouchEnd(event) {\n        this.rowTouched = true;\n    }\n\n    handleRowRightClick(event) {\n        if (this.contextMenu) {\n            const node = event.rowNode.node;\n\n            if (this.contextMenuSelectionMode === 'separate') {\n                this.contextMenuSelection = node;\n                this.contextMenuSelectionChange.emit(node);\n                this.onContextMenuSelect.emit({originalEvent: event.originalEvent, node: node});\n                this.contextMenu.show(event.originalEvent);\n                this.tableService.onContextMenu(node);\n            }\n            else if (this.contextMenuSelectionMode === 'joint') {\n                this.preventSelectionSetterPropagation = true;\n                let selected = this.isSelected(node);\n                let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n                if (!selected) {\n                    if (this.isSingleSelectionMode()) {\n                        this.selection = node;\n                        this.selectionChange.emit(node);\n                    }\n                    else if (this.isMultipleSelectionMode()) {\n                        this.selection = [node];\n                        this.selectionChange.emit(this.selection);\n                    }\n\n                    if (dataKeyValue) {\n                        this.selectionKeys[dataKeyValue] = 1;\n                    }\n                }\n\n                this.contextMenu.show(event.originalEvent);\n                this.onContextMenuSelect.emit({originalEvent: event.originalEvent, node: node});\n            }\n        }\n    }\n\n    toggleNodeWithCheckbox(event) {\n        this.selection = this.selection||[];\n        this.preventSelectionSetterPropagation = true;\n        let node = event.rowNode.node;\n        let selected = this.isSelected(node);\n\n        if (selected) {\n            this.propagateSelectionDown(node, false);\n            if (event.rowNode.parent) {\n                this.propagateSelectionUp(node.parent, false);\n            }\n            this.selectionChange.emit(this.selection);\n            this.onNodeUnselect.emit({originalEvent: event, node: node});\n        }\n        else {\n            this.propagateSelectionDown(node, true);\n            if (event.rowNode.parent) {\n                this.propagateSelectionUp(node.parent, true);\n            }\n            this.selectionChange.emit(this.selection);\n            this.onNodeSelect.emit({originalEvent: event, node: node});\n        }\n\n        this.tableService.onSelectionChange();\n    }\n\n    toggleNodesWithCheckbox(event: Event, check: boolean) {\n        let data = this.filteredNodes || this.value;\n        this._selection = check && data ? data.slice() : [];\n        if (check) {\n            if (data && data.length) {\n                for (let node of data) {\n                    this.propagateSelectionDown(node, true);\n                }\n            }\n        }\n        else {\n            this._selection = [];\n            this.selectionKeys = {};\n        }\n\n        this.preventSelectionSetterPropagation = true;\n        this.selectionChange.emit(this._selection);\n        this.tableService.onSelectionChange();\n        this.onHeaderCheckboxToggle.emit({originalEvent: event, checked: check});\n    }\n\n    propagateSelectionUp(node: TreeNode, select: boolean) {\n        if (node.children && node.children.length) {\n            let selectedChildCount: number = 0;\n            let childPartialSelected: boolean = false;\n            let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n            for (let child of node.children) {\n                if (this.isSelected(child))\n                selectedChildCount++;\n                else if (child.partialSelected)\n                    childPartialSelected = true;\n            }\n\n            if (select && selectedChildCount == node.children.length) {\n                this._selection =  [...this.selection||[], node];\n                node.partialSelected = false;\n                if (dataKeyValue) {\n                    this.selectionKeys[dataKeyValue] = 1;\n                }\n            }\n            else {\n                if (!select) {\n                    let index = this.findIndexInSelection(node);\n                    if (index >= 0) {\n                        this._selection =  this.selection.filter((val,i) => i!=index);\n\n                        if (dataKeyValue) {\n                            delete this.selectionKeys[dataKeyValue];\n                        }\n                    }\n                }\n\n                if (childPartialSelected || selectedChildCount > 0 && selectedChildCount != node.children.length)\n                    node.partialSelected = true;\n                else\n                    node.partialSelected = false;\n            }\n        }\n\n        let parent = node.parent;\n        if (parent) {\n            this.propagateSelectionUp(parent, select);\n        }\n    }\n\n    propagateSelectionDown(node: TreeNode, select: boolean) {\n        let index = this.findIndexInSelection(node);\n        let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(node.data, this.dataKey)) : null;\n\n        if (select && index == -1) {\n            this._selection =  [...this.selection||[],node]\n            if (dataKeyValue) {\n                this.selectionKeys[dataKeyValue] = 1;\n            }\n        }\n        else if (!select && index > -1) {\n            this._selection =  this.selection.filter((val,i) => i!=index);\n            if (dataKeyValue) {\n                delete this.selectionKeys[dataKeyValue];\n            }\n        }\n\n        node.partialSelected = false;\n\n        if (node.children && node.children.length) {\n            for (let child of node.children) {\n                this.propagateSelectionDown(child, select);\n            }\n        }\n    }\n\n    isSelected(node) {\n        if (node && this.selection) {\n            if (this.dataKey) {\n                return this.selectionKeys[ObjectUtils.resolveFieldData(node.data, this.dataKey)] !== undefined;\n            }\n            else {\n                if (this.selection instanceof Array)\n                    return this.findIndexInSelection(node) > -1;\n                else\n                    return this.equals(node, this.selection);\n            }\n        }\n\n        return false;\n    }\n\n    findIndexInSelection(node: any) {\n        let index: number = -1;\n        if (this.selection && this.selection.length) {\n            for (let i = 0; i < this.selection.length; i++) {\n                if (this.equals(node, this.selection[i])) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n\n        return index;\n    }\n\n    isSingleSelectionMode() {\n        return this.selectionMode === 'single';\n    }\n\n    isMultipleSelectionMode() {\n        return this.selectionMode === 'multiple';\n    }\n\n    equals(node1, node2) {\n        return this.compareSelectionBy === 'equals' ? (node1 === node2) : ObjectUtils.equals(node1.data, node2.data, this.dataKey);\n    }\n\n    filter(value, field, matchMode) {\n        if (this.filterTimeout) {\n            clearTimeout(this.filterTimeout);\n        }\n\n        if (!this.isFilterBlank(value)) {\n            this.filters[field] = { value: value, matchMode: matchMode };\n        } else if (this.filters[field]) {\n            delete this.filters[field];\n        }\n\n        this.filterTimeout = setTimeout(() => {\n            this._filter();\n            this.filterTimeout = null;\n        }, this.filterDelay);\n    }\n\n    filterGlobal(value, matchMode) {\n        this.filter(value, 'global', matchMode);\n    }\n\n    isFilterBlank(filter: any): boolean {\n        if (filter !== null && filter !== undefined) {\n            if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))\n                return true;\n            else\n                return false;\n        }\n        return true;\n    }\n\n    _filter() {\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            if (!this.value) {\n                return;\n            }\n\n            if (!this.hasFilter()) {\n                this.filteredNodes = null;\n                if (this.paginator) {\n                    this.totalRecords = this.value ? this.value.length : 0;\n                }\n            }\n            else {\n                let globalFilterFieldsArray;\n                if (this.filters['global']) {\n                    if (!this.columns && !this.globalFilterFields)\n                        throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');\n                    else\n                        globalFilterFieldsArray = this.globalFilterFields||this.columns;\n                }\n\n                this.filteredNodes = [];\n                const isStrictMode = this.filterMode === 'strict';\n                let isValueChanged = false;\n\n                for (let node of this.value) {\n                    let copyNode = {...node};\n                    let localMatch = true;\n                    let globalMatch = false;\n                    let paramsWithoutNode;\n\n                    for (let prop in this.filters) {\n                        if (this.filters.hasOwnProperty(prop) && prop !== 'global') {\n                            let filterMeta = this.filters[prop];\n                            let filterField = prop;\n                            let filterValue = filterMeta.value;\n                            let filterMatchMode = filterMeta.matchMode || 'startsWith';\n                            let filterConstraint = this.filterService.filters[filterMatchMode];\n                            paramsWithoutNode = {filterField, filterValue, filterConstraint, isStrictMode};\n                            if ((isStrictMode && !(this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||\n                                (!isStrictMode && !(this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {\n                                    localMatch = false;\n                            }\n\n                            if (!localMatch) {\n                                break;\n                            }\n                        }\n                    }\n\n                    if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {\n                        for(let j = 0; j < globalFilterFieldsArray.length; j++) {\n                            let copyNodeForGlobal = {...copyNode};\n                            let filterField = globalFilterFieldsArray[j].field||globalFilterFieldsArray[j];\n                            let filterValue = this.filters['global'].value;\n                            let filterConstraint = this.filterService.filters[this.filters['global'].matchMode];\n                            paramsWithoutNode = {filterField, filterValue, filterConstraint, isStrictMode};\n\n                            if ((isStrictMode && (this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) || this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode))) ||\n                                (!isStrictMode && (this.isFilterMatched(copyNodeForGlobal, paramsWithoutNode) || this.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode)))) {\n                                    globalMatch = true;\n                                    copyNode = copyNodeForGlobal;\n                            }\n                        }\n                    }\n\n                    let matches = localMatch;\n                    if (this.filters['global']) {\n                        matches = localMatch && globalMatch;\n                    }\n\n                    if (matches) {\n                        this.filteredNodes.push(copyNode);\n                    }\n\n                    isValueChanged = isValueChanged || !localMatch || globalMatch || (localMatch && this.filteredNodes.length > 0) || (!globalMatch && this.filteredNodes.length === 0)\n                }\n\n                if (!isValueChanged) {\n                    this.filteredNodes = null;\n                }\n\n                if (this.paginator) {\n                    this.totalRecords = this.filteredNodes ? this.filteredNodes.length : this.value ? this.value.length : 0;\n                }\n            }\n        }\n\n        this.first = 0;\n\n        const filteredValue = this.filteredNodes || this.value;\n\n        this.onFilter.emit({\n            filters: this.filters,\n            filteredValue: filteredValue\n        });\n\n        this.tableService.onUIUpdate(filteredValue);\n        this.updateSerializedValue();\n\n        if (this.scrollable) {\n            this.resetScrollTop();\n        }\n    }\n\n    findFilteredNodes(node, paramsWithoutNode) {\n        if (node) {\n            let matched = false;\n            if (node.children) {\n                let childNodes = [...node.children];\n                node.children = [];\n                for (let childNode of childNodes) {\n                    let copyChildNode = {...childNode};\n                    if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n                        matched = true;\n                        node.children.push(copyChildNode);\n                    }\n                }\n            }\n\n            if (matched) {\n                return true;\n            }\n        }\n    }\n\n    isFilterMatched(node, {filterField, filterValue, filterConstraint, isStrictMode}) {\n        let matched = false;\n        let dataFieldValue = ObjectUtils.resolveFieldData(node.data, filterField);\n        if (filterConstraint(dataFieldValue, filterValue, this.filterLocale)) {\n            matched = true;\n        }\n\n        if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {\n            matched = this.findFilteredNodes(node, {filterField, filterValue, filterConstraint, isStrictMode}) || matched;\n        }\n\n        return matched;\n    }\n\n    isNodeLeaf(node) {\n        return node.leaf === false ? false : !(node.children && node.children.length);\n    }\n\n    hasFilter() {\n        let empty = true;\n        for (let prop in this.filters) {\n            if (this.filters.hasOwnProperty(prop)) {\n                empty = false;\n                break;\n            }\n        }\n\n        return !empty;\n    }\n\n    public reset() {\n        this._sortField = null;\n        this._sortOrder = 1;\n        this._multiSortMeta = null;\n        this.tableService.onSort(null);\n\n        this.filteredNodes = null;\n        this.filters = {};\n\n        this.first = 0;\n\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            this.totalRecords = (this._value ? this._value.length : 0);\n        }\n    }\n\n    updateEditingCell(cell, data, field) {\n        this.editingCell = cell;\n        this.editingCellData = data;\n        this.editingCellField = field;\n        this.bindDocumentEditListener();\n    }\n\n    isEditingCellValid() {\n        return (this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0);\n    }\n\n    bindDocumentEditListener() {\n        if (!this.documentEditListener) {\n            this.documentEditListener = (event) => {\n                if (this.editingCell && !this.editingCellClick && this.isEditingCellValid()) {\n                    DomHandler.removeClass(this.editingCell, 'p-cell-editing');\n                    this.editingCell = null;\n                    this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData });\n                    this.editingCellField = null;\n                    this.editingCellData = null;\n                    this.unbindDocumentEditListener();\n                }\n\n                this.editingCellClick = false;\n            };\n\n            document.addEventListener('click', this.documentEditListener);\n        }\n    }\n\n    unbindDocumentEditListener() {\n        if (this.documentEditListener) {\n            document.removeEventListener('click', this.documentEditListener);\n            this.documentEditListener = null;\n        }\n    }\n\n    ngOnDestroy() {\n        this.unbindDocumentEditListener();\n        this.editingCell = null;\n        this.editingCellField = null;\n        this.editingCellData = null;\n        this.initialized = null;\n    }\n\n}\n\n@Component({\n    selector: '[pTreeTableBody]',\n    template: `\n        <ng-container *ngIf=\"!tt.virtualScroll\">\n            <ng-template ngFor let-serializedNode let-rowIndex=\"index\" [ngForOf]=\"tt.serializedValue\" [ngForTrackBy]=\"tt.rowTrackBy\">\n                <ng-container *ngIf=\"serializedNode.visible\">\n                    <ng-container *ngTemplateOutlet=\"template; context: {$implicit: serializedNode, node: serializedNode.node, rowData: serializedNode.node.data, columns: columns}\"></ng-container>\n                </ng-container>\n            </ng-template>\n        </ng-container>\n        <ng-container *ngIf=\"tt.virtualScroll\">\n            <ng-template cdkVirtualFor let-serializedNode let-rowIndex=\"index\" [cdkVirtualForOf]=\"tt.serializedValue\" [cdkVirtualForTrackBy]=\"tt.rowTrackBy\" [cdkVirtualForTemplateCacheSize]=\"0\">\n                <ng-container *ngIf=\"serializedNode.visible\">\n                    <ng-container *ngTemplateOutlet=\"template; context: {$implicit: serializedNode, node: serializedNode.node, rowData: serializedNode.node.data, columns: columns}\"></ng-container>\n                </ng-container>\n            </ng-template>\n        </ng-container>\n        <ng-container *ngIf=\"tt.isEmpty()\">\n            <ng-container *ngTemplateOutlet=\"tt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n        </ng-container>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TTBody {\n\n    @Input(\"pTreeTableBody\") columns: any[];\n\n    @Input(\"pTreeTableBodyTemplate\") template: TemplateRef<any>;\n\n    @Input() frozen: boolean;\n\n    subscription: Subscription;\n\n    constructor(public tt: TreeTable, public treeTableService: TreeTableService, public cd: ChangeDetectorRef) {\n        this.subscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {\n            if (this.tt.virtualScroll) {\n                this.cd.detectChanges();\n            }\n        });\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n}\n\n@Component({\n    selector: '[ttScrollableView]',\n    template: `\n        <div #scrollHeader class=\"p-treetable-scrollable-header\">\n            <div #scrollHeaderBox class=\"p-treetable-scrollable-header-box\">\n                <table class=\"p-treetable-scrollable-header-table\" [ngClass]=\"tt.tableStyleClass\" [ngStyle]=\"tt.tableStyle\">\n                    <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n                    <thead class=\"p-treetable-thead\">\n                        <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenHeaderTemplate||tt.headerTemplate : tt.headerTemplate; context {$implicit: columns}\"></ng-container>\n                    </thead>\n                </table>\n            </div>\n        </div>\n        <ng-container *ngIf=\"!tt.virtualScroll; else virtualScrollTemplate\">\n            <div #scrollBody class=\"p-treetable-scrollable-body\" [ngStyle]=\"{'max-height': tt.scrollHeight !== 'flex' ? scrollHeight : undefined, 'overflow-y': !frozen && tt.scrollHeight ? 'scroll' : undefined}\">\n                <table #scrollTable [class]=\"tt.tableStyleClass\" [ngStyle]=\"tt.tableStyle\">\n                    <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n                    <tbody class=\"p-treetable-tbody\" [pTreeTableBody]=\"columns\" [pTreeTableBodyTemplate]=\"frozen ? tt.frozenBodyTemplate||tt.bodyTemplate : tt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n                </table>\n                <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n            </div>\n        </ng-container>\n        <ng-template #virtualScrollTemplate>\n            <cdk-virtual-scroll-viewport [itemSize]=\"tt.virtualRowHeight\" [style.height]=\"tt.scrollHeight !== 'flex' ? scrollHeight : undefined\"\n                    [minBufferPx]=\"tt.minBufferPx\" [maxBufferPx]=\"tt.maxBufferPx\" class=\"p-treetable-virtual-scrollable-body\">\n                <table #scrollTable [class]=\"tt.tableStyleClass\" [ngStyle]=\"tt.tableStyle\">\n                    <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n                    <tbody class=\"p-treetable-tbody\" [pTreeTableBody]=\"columns\" [pTreeTableBodyTemplate]=\"frozen ? tt.frozenBodyTemplate||tt.bodyTemplate : tt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n                </table>\n                <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n            </cdk-virtual-scroll-viewport>\n        </ng-template>\n        <div #scrollFooter *ngIf=\"tt.footerTemplate\" class=\"p-treetable-scrollable-footer\">\n            <div #scrollFooterBox class=\"p-treetable-scrollable-footer-box\">\n                <table class=\"p-treetable-scrollable-footer-table\" [ngClass]=\"tt.tableStyleClass\" [ngStyle]=\"tt.tableStyle\">\n                    <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenColGroupTemplate||tt.colGroupTemplate : tt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n                    <tfoot class=\"p-treetable-tfoot\">\n                        <ng-container *ngTemplateOutlet=\"frozen ? tt.frozenFooterTemplate||tt.footerTemplate : tt.footerTemplate; context {$implicit: columns}\"></ng-container>\n                    </tfoot>\n                </table>\n            </div>\n        </div>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TTScrollableView implements AfterViewInit, OnDestroy {\n\n    @Input(\"ttScrollableView\") columns: any[];\n\n    @Input() frozen: boolean;\n\n    @ViewChild('scrollHeader') scrollHeaderViewChild: ElementRef;\n\n    @ViewChild('scrollHeaderBox') scrollHeaderBoxViewChild: ElementRef;\n\n    @ViewChild('scrollBody') scrollBodyViewChild: ElementRef;\n\n    @ViewChild('scrollTable') scrollTableViewChild: ElementRef;\n\n    @ViewChild('loadingTable') scrollLoadingTableViewChild: ElementRef;\n\n    @ViewChild('scrollFooter') scrollFooterViewChild: ElementRef;\n\n    @ViewChild('scrollFooterBox') scrollFooterBoxViewChild: ElementRef;\n\n    @ViewChild('scrollableAligner') scrollableAlignerViewChild: ElementRef;\n\n    @ViewChild(CdkVirtualScrollViewport) virtualScrollBody: CdkVirtualScrollViewport;\n\n    headerScrollListener;\n\n    bodyScrollListener;\n\n    footerScrollListener;\n\n    frozenSiblingBody: Element;\n\n    totalRecordsSubscription: Subscription;\n\n    _scrollHeight: string;\n\n    preventBodyScrollPropagation: boolean;\n\n    @Input() get scrollHeight(): string {\n        return this._scrollHeight;\n    }\n    set scrollHeight(val: string) {\n        this._scrollHeight = val;\n        if (val != null && (val.includes('%') || val.includes('calc'))) {\n            console.log('Percentage scroll height calculation is removed in favor of the more performant CSS based flex mode, use scrollHeight=\"flex\" instead.')\n        }\n\n        if (this.tt.virtualScroll && this.virtualScrollBody) {\n            this.virtualScrollBody.ngOnInit();\n        }\n    }\n\n    constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n    ngAfterViewInit() {\n        if (!this.frozen) {\n            if (this.tt.frozenColumns || this.tt.frozenBodyTemplate) {\n                DomHandler.addClass(this.el.nativeElement, 'p-treetable-unfrozen-view');\n            }\n\n            let frozenView = this.el.nativeElement.previousElementSibling;\n            if (frozenView) {\n                if (this.tt.virtualScroll)\n                    this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-treetable-virtual-scrollable-body');\n                else\n                    this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-treetable-scrollable-body');\n            }\n\n            let scrollBarWidth = DomHandler.calculateScrollbarWidth();\n            this.scrollHeaderBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n\n            if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {\n                this.scrollFooterBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n            }\n        }\n        else {\n            if (this.scrollableAlignerViewChild && this.scrollableAlignerViewChild.nativeElement) {\n                this.scrollableAlignerViewChild.nativeElement.style.height = DomHandler.calculateScrollbarHeight() + 'px';\n            }\n        }\n\n        this.bindEvents();\n    }\n\n    bindEvents() {\n        this.zone.runOutsideAngular(() => {\n            if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n                this.headerScrollListener = this.onHeaderScroll.bind(this);\n                this.scrollHeaderBoxViewChild.nativeElement.addEventListener('scroll', this.headerScrollListener);\n            }\n\n            if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n                this.footerScrollListener = this.onFooterScroll.bind(this);\n                this.scrollFooterViewChild.nativeElement.addEventListener('scroll', this.footerScrollListener);\n            }\n\n            if (!this.frozen) {\n                this.bodyScrollListener = this.onBodyScroll.bind(this);\n\n                if (this.tt.virtualScroll)\n                    this.virtualScrollBody.getElementRef().nativeElement.addEventListener('scroll', this.bodyScrollListener);\n                else\n                    this.scrollBodyViewChild.nativeElement.addEventListener('scroll', this.bodyScrollListener);\n            }\n        });\n    }\n\n    unbindEvents() {\n        if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n            this.scrollHeaderBoxViewChild.nativeElement.removeEventListener('scroll', this.headerScrollListener);\n        }\n\n        if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n            this.scrollFooterViewChild.nativeElement.removeEventListener('scroll', this.footerScrollListener);\n        }\n\n        if (this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\n            this.scrollBodyViewChild.nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n        }\n\n        if (this.virtualScrollBody && this.virtualScrollBody.getElementRef()) {\n            this.virtualScrollBody.getElementRef().nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n        }\n    }\n\n    onHeaderScroll() {\n        const scrollLeft = this.scrollHeaderViewChild.nativeElement.scrollLeft;\n\n        this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n        if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n            this.scrollFooterViewChild.nativeElement.scrollLeft = scrollLeft;\n        }\n\n        this.preventBodyScrollPropagation = true;\n    }\n\n    onFooterScroll() {\n        const scrollLeft = this.scrollFooterViewChild.nativeElement.scrollLeft;\n        this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n        if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n            this.scrollHeaderViewChild.nativeElement.scrollLeft = scrollLeft;\n        }\n\n        this.preventBodyScrollPropagation = true;\n    }\n\n    onBodyScroll(event) {\n        if (this.preventBodyScrollPropagation) {\n            this.preventBodyScrollPropagation = false;\n            return;\n        }\n\n        if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n            this.scrollHeaderBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n        }\n\n        if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n            this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n        }\n\n        if (this.frozenSiblingBody) {\n            this.frozenSiblingBody.scrollTop = event.target.scrollTop;\n        }\n    }\n\n    scrollToVirtualIndex(index: number): void {\n        if (this.virtualScrollBody) {\n            this.virtualScrollBody.scrollToIndex(index);\n        }\n    }\n\n    scrollTo(options): void {\n        if (this.virtualScrollBody) {\n            this.virtualScrollBody.scrollTo(options);\n        }\n        else {\n            if (this.scrollBodyViewChild.nativeElement.scrollTo) {\n                this.scrollBodyViewChild.nativeElement.scrollTo(options);\n            }\n            else {\n                this.scrollBodyViewChild.nativeElement.scrollLeft = options.left;\n                this.scrollBodyViewChild.nativeElement.scrollTop = options.top;\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        this.unbindEvents();\n\n        this.frozenSiblingBody = null;\n    }\n}\n\n@Directive({\n    selector: '[ttSortableColumn]',\n    host: {\n        'class': 'p-element',\n        '[class.p-sortable-column]': 'isEnabled()',\n        '[class.p-highlight]': 'sorted',\n        '[attr.tabindex]': 'isEnabled() ? \"0\" : null',\n        '[attr.role]': '\"columnheader\"'\n    }\n})\nexport class TTSortableColumn implements OnInit, OnDestroy {\n\n    @Input(\"ttSortableColumn\") field: string;\n\n    @Input() ttSortableColumnDisabled: boolean;\n\n    sorted: boolean;\n\n    subscription: Subscription;\n\n    constructor(public tt: TreeTable) {\n        if (this.isEnabled()) {\n            this.subscription = this.tt.tableService.sortSource$.subscribe(sortMeta => {\n                this.updateSortState();\n            });\n        }\n    }\n\n    ngOnInit() {\n        if (this.isEnabled()) {\n            this.updateSortState();\n        }\n    }\n\n    updateSortState() {\n        this.sorted = this.tt.isSorted(this.field);\n    }\n\n    @HostListener('click', ['$event'])\n    onClick(event: MouseEvent) {\n        if (this.isEnabled()) {\n            this.updateSortState();\n            this.tt.sort({\n                originalEvent: event,\n                field: this.field\n            });\n\n            DomHandler.clearSelection();\n        }\n    }\n\n    @HostListener('keydown.enter', ['$event'])\n    onEnterKey(event: MouseEvent) {\n        this.onClick(event);\n    }\n\n    isEnabled() {\n        return this.ttSortableColumnDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n}\n\n@Component({\n    selector: 'p-treeTableSortIcon',\n    template: `\n        <i class=\"p-sortable-column-icon pi pi-fw\" [ngClass]=\"{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}\"></i>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TTSortIcon implements OnInit, OnDestroy {\n\n    @Input() field: string;\n\n    @Input() ariaLabelDesc: string;\n\n    @Input() ariaLabelAsc: string;\n\n    subscription: Subscription;\n\n    sortOrder: number;\n\n    constructor(public tt: TreeTable, public cd: ChangeDetectorRef) {\n        this.subscription = this.tt.tableService.sortSource$.subscribe(sortMeta => {\n            this.updateSortState();\n            this.cd.markForCheck();\n        });\n    }\n\n    ngOnInit() {\n        this.updateSortState();\n    }\n\n    onClick(event){\n        event.preventDefault();\n    }\n\n    updateSortState() {\n        if (this.tt.sortMode === 'single') {\n            this.sortOrder = this.tt.isSorted(this.field) ? this.tt.sortOrder : 0;\n        }\n        else if (this.tt.sortMode === 'multiple') {\n            let sortMeta = this.tt.getSortMeta(this.field);\n            this.sortOrder = sortMeta ? sortMeta.order: 0;\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n}\n\n@Directive({\n    selector: '[ttResizableColumn]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TTResizableColumn implements AfterViewInit, OnDestroy {\n\n    @Input() ttResizableColumnDisabled: boolean;\n\n    resizer: HTMLSpanElement;\n\n    resizerMouseDownListener: any;\n\n    documentMouseMoveListener: any;\n\n    documentMouseUpListener: any;\n\n    constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) { }\n\n    ngAfterViewInit() {\n        if (this.isEnabled()) {\n            DomHandler.addClass(this.el.nativeElement, 'p-resizable-column');\n            this.resizer = document.createElement('span');\n            this.resizer.className = 'p-column-resizer';\n            this.el.nativeElement.appendChild(this.resizer);\n\n            this.zone.runOutsideAngular(() => {\n                this.resizerMouseDownListener = this.onMouseDown.bind(this);\n                this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);\n            });\n        }\n    }\n\n    bindDocumentEvents() {\n        this.zone.runOutsideAngular(() => {\n            this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);\n            document.addEventListener('mousemove', this.documentMouseMoveListener);\n\n            this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);\n            document.addEventListener('mouseup', this.documentMouseUpListener);\n        });\n    }\n\n    unbindDocumentEvents() {\n        if (this.documentMouseMoveListener) {\n            document.removeEventListener('mousemove', this.documentMouseMoveListener);\n            this.documentMouseMoveListener = null;\n        }\n\n        if (this.documentMouseUpListener) {\n            document.removeEventListener('mouseup', this.documentMouseUpListener);\n            this.documentMouseUpListener = null;\n        }\n    }\n\n    onMouseDown(event: Event) {\n        this.tt.onColumnResizeBegin(event);\n        this.bindDocumentEvents();\n    }\n\n    onDocumentMouseMove(event: Event) {\n        this.tt.onColumnResize(event);\n    }\n\n    onDocumentMouseUp(event: Event) {\n        this.tt.onColumnResizeEnd(event, this.el.nativeElement);\n        this.unbindDocumentEvents();\n    }\n\n    isEnabled() {\n        return this.ttResizableColumnDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.resizerMouseDownListener) {\n            this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);\n        }\n\n        this.unbindDocumentEvents();\n    }\n}\n\n@Directive({\n    selector: '[ttReorderableColumn]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TTReorderableColumn implements AfterViewInit, OnDestroy {\n\n    @Input() ttReorderableColumnDisabled: boolean;\n\n    dragStartListener: any;\n\n    dragOverListener: any;\n\n    dragEnterListener: any;\n\n    dragLeaveListener: any;\n\n    mouseDownListener: any;\n\n    constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) { }\n\n    ngAfterViewInit() {\n        if (this.isEnabled()) {\n            this.bindEvents();\n        }\n    }\n\n    bindEvents() {\n        this.zone.runOutsideAngular(() => {\n            this.mouseDownListener = this.onMouseDown.bind(this);\n            this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n            this.dragStartListener = this.onDragStart.bind(this);\n            this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n            this.dragOverListener = this.onDragEnter.bind(this);\n            this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n            this.dragEnterListener = this.onDragEnter.bind(this);\n            this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);\n\n            this.dragLeaveListener = this.onDragLeave.bind(this);\n            this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n        });\n    }\n\n    unbindEvents() {\n        if (this.mouseDownListener) {\n            document.removeEventListener('mousedown', this.mouseDownListener);\n            this.mouseDownListener = null;\n        }\n\n        if (this.dragOverListener) {\n            document.removeEventListener('dragover', this.dragOverListener);\n            this.dragOverListener = null;\n        }\n\n        if (this.dragEnterListener) {\n            document.removeEventListener('dragenter', this.dragEnterListener);\n            this.dragEnterListener = null;\n        }\n\n        if (this.dragEnterListener) {\n            document.removeEventListener('dragenter', this.dragEnterListener);\n            this.dragEnterListener = null;\n        }\n\n        if (this.dragLeaveListener) {\n            document.removeEventListener('dragleave', this.dragLeaveListener);\n            this.dragLeaveListener = null;\n        }\n    }\n\n    onMouseDown(event) {\n        if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer'))\n            this.el.nativeElement.draggable = false;\n        else\n            this.el.nativeElement.draggable = true;\n    }\n\n    onDragStart(event) {\n        this.tt.onColumnDragStart(event, this.el.nativeElement);\n    }\n\n    onDragOver(event) {\n        event.preventDefault();\n    }\n\n    onDragEnter(event) {\n        this.tt.onColumnDragEnter(event, this.el.nativeElement);\n    }\n\n    onDragLeave(event) {\n        this.tt.onColumnDragLeave(event);\n    }\n\n    @HostListener('drop', ['$event'])\n    onDrop(event) {\n        if (this.isEnabled()) {\n            this.tt.onColumnDrop(event, this.el.nativeElement);\n        }\n    }\n\n    isEnabled() {\n        return this.ttReorderableColumnDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        this.unbindEvents();\n    }\n\n}\n\n@Directive({\n    selector: '[ttSelectableRow]',\n    host: {\n        'class': 'p-element',\n        '[class.p-highlight]': 'selected'\n    }\n})\nexport class TTSelectableRow implements OnInit, OnDestroy {\n\n    @Input(\"ttSelectableRow\") rowNode: any;\n\n    @Input() ttSelectableRowDisabled: boolean;\n\n    selected: boolean;\n\n    subscription: Subscription;\n\n    constructor(public tt: TreeTable, public tableService: TreeTableService) {\n        if (this.isEnabled()) {\n            this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n                this.selected = this.tt.isSelected(this.rowNode.node);\n            });\n        }\n    }\n\n    ngOnInit() {\n        if (this.isEnabled()) {\n            this.selected = this.tt.isSelected(this.rowNode.node);\n        }\n    }\n\n    @HostListener('click', ['$event'])\n    onClick(event: Event) {\n        if (this.isEnabled()) {\n            this.tt.handleRowClick({\n                originalEvent: event,\n                rowNode: this.rowNode\n            });\n        }\n    }\n\n    @HostListener('keydown', ['$event'])\n    onEnterKey(event: KeyboardEvent) {\n        if (event.which === 13) {\n            this.onClick(event);\n        }\n    }\n\n    @HostListener('touchend', ['$event'])\n    onTouchEnd(event: Event) {\n        if (this.isEnabled()) {\n            this.tt.handleRowTouchEnd(event);\n        }\n    }\n\n    isEnabled() {\n        return this.ttSelectableRowDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Directive({\n    selector: '[ttSelectableRowDblClick]',\n    host: {\n        'class': 'p-element',\n        '[class.p-highlight]': 'selected'\n    }\n})\nexport class TTSelectableRowDblClick implements OnInit, OnDestroy {\n\n    @Input(\"ttSelectableRowDblClick\") rowNode: any;\n\n    @Input() ttSelectableRowDisabled: boolean;\n\n    selected: boolean;\n\n    subscription: Subscription;\n\n    constructor(public tt: TreeTable, public tableService: TreeTableService) {\n        if (this.isEnabled()) {\n            this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n                this.selected = this.tt.isSelected(this.rowNode.node);\n            });\n        }\n    }\n\n    ngOnInit() {\n        if (this.isEnabled()) {\n            this.selected = this.tt.isSelected(this.rowNode.node);\n        }\n    }\n\n    @HostListener('dblclick', ['$event'])\n    onClick(event: Event) {\n        if (this.isEnabled()) {\n            this.tt.handleRowClick({\n                originalEvent: event,\n                rowNode: this.rowNode\n            });\n        }\n    }\n\n    isEnabled() {\n        return this.ttSelectableRowDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Directive({\n    selector: '[ttContextMenuRow]',\n    host: {\n        'class': 'p-element',\n        '[class.p-highlight-contextmenu]': 'selected',\n        '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n    }\n})\nexport class TTContextMenuRow {\n\n    @Input(\"ttContextMenuRow\") rowNode: any;\n\n    @Input() ttContextMenuRowDisabled: boolean;\n\n    selected: boolean;\n\n    subscription: Subscription;\n\n    constructor(public tt: TreeTable, public tableService: TreeTableService, private el: ElementRef) {\n        if (this.isEnabled()) {\n            this.subscription = this.tt.tableService.contextMenuSource$.subscribe((node) => {\n                this.selected = this.tt.equals(this.rowNode.node, node);\n            });\n        }\n    }\n\n    @HostListener('contextmenu', ['$event'])\n    onContextMenu(event: Event) {\n        if (this.isEnabled()) {\n            this.tt.handleRowRightClick({\n                originalEvent: event,\n                rowNode: this.rowNode\n            });\n\n            this.el.nativeElement.focus();\n\n            event.preventDefault();\n        }\n    }\n\n    isEnabled() {\n        return this.ttContextMenuRowDisabled !== true;\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Component({\n    selector: 'p-treeTableCheckbox',\n    template: `\n        <div class=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n            <div class=\"p-hidden-accessible\">\n                <input type=\"checkbox\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\n            </div>\n            <div #box [ngClass]=\"{'p-checkbox-box':true,\n                'p-highlight':checked, 'p-indeterminate': rowNode.node.partialSelected, 'p-disabled':disabled}\"  role=\"checkbox\" [attr.aria-checked]=\"checked\">\n                <span class=\"p-checkbox-icon pi\" [ngClass]=\"{'pi-check':checked, 'pi-minus': rowNode.node.partialSelected}\"></span>\n            </div>\n        </div>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TTCheckbox  {\n\n    @Input() disabled: boolean;\n\n    @Input(\"value\") rowNode: any;\n\n    @ViewChild('box') boxViewChild: ElementRef;\n\n    checked: boolean;\n\n    subscription: Subscription;\n\n    constructor(public tt: TreeTable, public tableService: TreeTableService, public cd: ChangeDetectorRef) {\n        this.subscription = this.tt.tableService.selectionSource$.subscribe(() => {\n            this.checked = this.tt.isSelected(this.rowNode.node);\n            this.cd.markForCheck();\n        });\n    }\n\n    ngOnInit() {\n        this.checked = this.tt.isSelected(this.rowNode.node);\n    }\n\n    onClick(event: Event) {\n        if (!this.disabled) {\n            this.tt.toggleNodeWithCheckbox({\n                originalEvent: event,\n                rowNode: this.rowNode\n            });\n        }\n        DomHandler.clearSelection();\n    }\n\n    onFocus() {\n        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    onBlur() {\n        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n}\n\n@Component({\n    selector: 'p-treeTableHeaderCheckbox',\n    template: `\n        <div class=\"p-checkbox p-component\" (click)=\"onClick($event, cb.checked)\">\n            <div class=\"p-hidden-accessible\">\n                <input #cb type=\"checkbox\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [disabled]=\"!tt.value||tt.value.length === 0\">\n            </div>\n            <div #box [ngClass]=\"{'p-checkbox-box':true,\n                'p-highlight':checked, 'p-disabled': (!tt.value || tt.value.length === 0)}\"  role=\"checkbox\" [attr.aria-checked]=\"checked\">\n                <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n            </div>\n        </div>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TTHeaderCheckbox  {\n\n    @ViewChild('box') boxViewChild: ElementRef;\n\n    checked: boolean;\n\n    disabled: boolean;\n\n    selectionChangeSubscription: Subscription;\n\n    valueChangeSubscription: Subscription;\n\n    constructor(public tt: TreeTable, public tableService: TreeTableService, private cd: ChangeDetectorRef) {\n        this.valueChangeSubscription = this.tt.tableService.uiUpdateSource$.subscribe(() => {\n            this.checked = this.updateCheckedState();\n        });\n\n        this.selectionChangeSubscription = this.tt.tableService.selectionSource$.subscribe(() => {\n            this.checked = this.updateCheckedState();\n        });\n    }\n\n    ngOnInit() {\n        this.checked = this.updateCheckedState();\n    }\n\n    onClick(event: Event, checked) {\n        if (this.tt.value && this.tt.value.length > 0) {\n            this.tt.toggleNodesWithCheckbox(event, !checked);\n        }\n\n        DomHandler.clearSelection();\n    }\n\n    onFocus() {\n        DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    onBlur() {\n        DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n    }\n\n    ngOnDestroy() {\n        if (this.selectionChangeSubscription) {\n            this.selectionChangeSubscription.unsubscribe();\n        }\n\n        if (this.valueChangeSubscription) {\n            this.valueChangeSubscription.unsubscribe();\n        }\n    }\n\n    updateCheckedState() {\n        this.cd.markForCheck();\n        let checked: boolean;\n        const data = this.tt.filteredNodes||this.tt.value;\n\n        if (data) {\n            for (let node of data) {\n                if (this.tt.isSelected(node)) {\n                    checked = true;\n                }\n                else  {\n                    checked = false;\n                    break;\n                }\n            }\n        }\n        else {\n            checked = false;\n        }\n\n        return checked;\n    }\n\n}\n\n@Directive({\n    selector: '[ttEditableColumn]',\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TTEditableColumn implements AfterViewInit {\n\n    @Input(\"ttEditableColumn\") data: any;\n\n    @Input(\"ttEditableColumnField\") field: any;\n\n    @Input() ttEditableColumnDisabled: boolean;\n\n    constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n    ngAfterViewInit() {\n        if (this.isEnabled()) {\n            DomHandler.addClass(this.el.nativeElement, 'p-editable-column');\n        }\n    }\n\n    @HostListener('click', ['$event'])\n    onClick(event: MouseEvent) {\n        if (this.isEnabled()) {\n            this.tt.editingCellClick = true;\n\n            if (this.tt.editingCell) {\n                if (this.tt.editingCell !== this.el.nativeElement) {\n                    if (!this.tt.isEditingCellValid()) {\n                        return;\n                    }\n\n                    DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');\n                    this.openCell();\n                }\n            }\n            else {\n                this.openCell();\n            }\n        }\n    }\n\n    openCell() {\n        this.tt.updateEditingCell(this.el.nativeElement, this.data, this.field);\n        DomHandler.addClass(this.el.nativeElement, 'p-cell-editing');\n        this.tt.onEditInit.emit({ field: this.field, data: this.data});\n        this.tt.editingCellClick = true;\n        this.zone.runOutsideAngular(() => {\n            setTimeout(() => {\n                let focusable = DomHandler.findSingle(this.el.nativeElement, 'input, textarea');\n                if (focusable) {\n                    focusable.focus();\n                }\n            }, 50);\n        });\n    }\n\n    closeEditingCell() {\n        DomHandler.removeClass(this.tt.editingCell, 'p-checkbox-icon');\n        this.tt.editingCell = null;\n        this.tt.unbindDocumentEditListener();\n    }\n\n    @HostListener('keydown', ['$event'])\n    onKeyDown(event: KeyboardEvent) {\n        if (this.isEnabled()) {\n            //enter\n            if (event.keyCode == 13) {\n                if (this.tt.isEditingCellValid()) {\n                    DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');\n                    this.closeEditingCell();\n                    this.tt.onEditComplete.emit({ field: this.field, data: this.data });\n                }\n\n                event.preventDefault();\n            }\n\n            //escape\n            else if (event.keyCode == 27) {\n                if (this.tt.isEditingCellValid()) {\n                    DomHandler.removeClass(this.tt.editingCell, 'p-cell-editing');\n                    this.closeEditingCell();\n                    this.tt.onEditCancel.emit({ field: this.field, data: this.data });\n                }\n\n                event.preventDefault();\n            }\n\n            //tab\n            else if (event.keyCode == 9) {\n                this.tt.onEditComplete.emit({ field: this.field, data: this.data });\n\n                if (event.shiftKey)\n                    this.moveToPreviousCell(event);\n                else\n                    this.moveToNextCell(event);\n            }\n        }\n    }\n\n    findCell(element) {\n        if (element) {\n            let cell = element;\n            while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {\n                cell = cell.parentElement;\n            }\n\n            return cell;\n        }\n        else {\n            return null;\n        }\n    }\n\n    moveToPreviousCell(event: KeyboardEvent) {\n        let currentCell = this.findCell(event.target);\n        let row = currentCell.parentElement;\n        let targetCell = this.findPreviousEditableColumn(currentCell);\n\n        if (targetCell) {\n            DomHandler.invokeElementMethod(targetCell, 'click');\n            event.preventDefault();\n        }\n    }\n\n    moveToNextCell(event: KeyboardEvent) {\n        let currentCell = this.findCell(event.target);\n        let row = currentCell.parentElement;\n        let targetCell = this.findNextEditableColumn(currentCell);\n\n        if (targetCell) {\n            DomHandler.invokeElementMethod(targetCell, 'click');\n            event.preventDefault();\n        }\n    }\n\n    findPreviousEditableColumn(cell: Element) {\n        let prevCell = cell.previousElementSibling;\n\n        if (!prevCell) {\n            let previousRow = cell.parentElement ? cell.parentElement.previousElementSibling : null;\n            if (previousRow) {\n                prevCell = previousRow.lastElementChild;\n            }\n        }\n\n        if (prevCell) {\n            if (DomHandler.hasClass(prevCell, 'p-editable-column'))\n                return prevCell;\n            else\n                return this.findPreviousEditableColumn(prevCell);\n        }\n        else {\n            return null;\n        }\n    }\n\n    findNextEditableColumn(cell: Element) {\n        let nextCell = cell.nextElementSibling;\n\n        if (!nextCell) {\n            let nextRow = cell.parentElement ? cell.parentElement.nextElementSibling : null;\n            if (nextRow) {\n                nextCell = nextRow.firstElementChild;\n            }\n        }\n\n        if (nextCell) {\n            if (DomHandler.hasClass(nextCell, 'p-editable-column'))\n                return nextCell;\n            else\n                return this.findNextEditableColumn(nextCell);\n        }\n        else {\n            return null;\n        }\n    }\n\n    isEnabled() {\n        return this.ttEditableColumnDisabled !== true;\n    }\n\n}\n\n@Component({\n    selector: 'p-treeTableCellEditor',\n    template: `\n        <ng-container *ngIf=\"tt.editingCell === editableColumn.el.nativeElement\">\n            <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n        </ng-container>\n        <ng-container *ngIf=\"!tt.editingCell || tt.editingCell !== editableColumn.el.nativeElement\">\n            <ng-container *ngTemplateOutlet=\"outputTemplate\"></ng-container>\n        </ng-container>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TreeTableCellEditor implements AfterContentInit {\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n    inputTemplate: TemplateRef<any>;\n\n    outputTemplate: TemplateRef<any>;\n\n    constructor(public tt: TreeTable, public editableColumn: TTEditableColumn) { }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'input':\n                    this.inputTemplate = item.template;\n                    break;\n\n                case 'output':\n                    this.outputTemplate = item.template;\n                    break;\n            }\n        });\n    }\n}\n\n@Directive({\n    selector: '[ttRow]',\n    host: {\n        'class': 'p-element',\n        '[attr.tabindex]': '\"0\"'\n    }\n})\nexport class TTRow {\n\n    @Input('ttRow') rowNode: any;\n\n    constructor(public tt: TreeTable, public el: ElementRef, public zone: NgZone) {}\n\n    @HostListener('keydown', ['$event'])\n    onKeyDown(event: KeyboardEvent) {\n        switch (event.which) {\n            //down arrow\n            case 40:\n                let nextRow = this.el.nativeElement.nextElementSibling;\n                if (nextRow) {\n                    nextRow.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //down arrow\n            case 38:\n                let prevRow = this.el.nativeElement.previousElementSibling;\n                if (prevRow) {\n                    prevRow.focus();\n                }\n\n                event.preventDefault();\n            break;\n\n            //left arrow\n            case 37:\n                if (this.rowNode.node.expanded) {\n                    this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);\n                    this.rowNode.node.expanded = false;\n\n                    this.tt.onNodeCollapse.emit({\n                        originalEvent: event,\n                        node: this.rowNode.node\n                    });\n\n                    this.tt.updateSerializedValue();\n                    this.tt.tableService.onUIUpdate(this.tt.value);\n                    this.restoreFocus();\n                }\n            break;\n\n            //right arrow\n            case 39:\n                if (!this.rowNode.node.expanded) {\n                    this.tt.toggleRowIndex = DomHandler.index(this.el.nativeElement);\n                    this.rowNode.node.expanded = true;\n\n                    this.tt.onNodeExpand.emit({\n                        originalEvent: event,\n                        node: this.rowNode.node\n                    });\n\n                    this.tt.updateSerializedValue();\n                    this.tt.tableService.onUIUpdate(this.tt.value);\n                    this.restoreFocus();\n                }\n            break;\n        }\n    }\n\n    restoreFocus() {\n        this.zone.runOutsideAngular(() => {\n            setTimeout(() => {\n                let row = DomHandler.findSingle(this.tt.containerViewChild.nativeElement, '.p-treetable-tbody').children[this.tt.toggleRowIndex];\n                if (row) {\n                    row.focus();\n                }\n            }, 25);\n        });\n    }\n}\n\n@Component({\n    selector: 'p-treeTableToggler',\n    template: `\n        <button type=\"button\" class=\"p-treetable-toggler p-link\" (click)=\"onClick($event)\" tabindex=\"-1\" pRipple\n            [style.visibility]=\"rowNode.node.leaf === false || (rowNode.node.children && rowNode.node.children.length) ? 'visible' : 'hidden'\" [style.marginLeft]=\"rowNode.level * 16 + 'px'\">\n            <i [ngClass]=\"rowNode.node.expanded ? 'pi pi-fw pi-chevron-down' : 'pi pi-fw pi-chevron-right'\"></i>\n        </button>\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TreeTableToggler {\n\n    @Input() rowNode: any;\n\n    constructor(public tt: TreeTable) {}\n\n    onClick(event: Event) {\n        this.rowNode.node.expanded = !this.rowNode.node.expanded;\n\n        if (this.rowNode.node.expanded) {\n            this.tt.onNodeExpand.emit({\n                originalEvent: event,\n                node: this.rowNode.node\n            });\n        }\n        else {\n            this.tt.onNodeCollapse.emit({\n                originalEvent: event,\n                node: this.rowNode.node\n            });\n        }\n\n        this.tt.updateSerializedValue();\n        this.tt.tableService.onUIUpdate(this.tt.value);\n\n        event.preventDefault();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,PaginatorModule,ScrollingModule,RippleModule],\n    exports: [TreeTable,SharedModule,TreeTableToggler,TTSortableColumn,TTSortIcon,TTResizableColumn,TTRow,TTReorderableColumn,TTSelectableRow,TTSelectableRowDblClick,TTContextMenuRow,TTCheckbox,TTHeaderCheckbox,TTEditableColumn,TreeTableCellEditor,ScrollingModule],\n    declarations: [TreeTable,TreeTableToggler,TTScrollableView,TTBody,TTSortableColumn,TTSortIcon,TTResizableColumn,TTRow,TTReorderableColumn,TTSelectableRow,TTSelectableRowDblClick,TTContextMenuRow,TTCheckbox,TTHeaderCheckbox,TTEditableColumn,TreeTableCellEditor]\n})\nexport class TreeTableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tristatecheckbox.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tristatecheckbox.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tristatecheckbox.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,157 @@
+import * as i0 from '@angular/core';
+import { forwardRef, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, NgModule } from '@angular/core';
+import * as i1 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { NG_VALUE_ACCESSOR } from '@angular/forms';
+
+const TRISTATECHECKBOX_VALUE_ACCESSOR = {
+    provide: NG_VALUE_ACCESSOR,
+    useExisting: forwardRef(() => TriStateCheckbox),
+    multi: true
+};
+class TriStateCheckbox {
+    constructor(cd) {
+        this.cd = cd;
+        this.checkboxTrueIcon = 'pi pi-check';
+        this.checkboxFalseIcon = 'pi pi-times';
+        this.onChange = new EventEmitter();
+        this.onModelChange = () => { };
+        this.onModelTouched = () => { };
+    }
+    onClick(event, input) {
+        if (!this.disabled && !this.readonly) {
+            this.toggle(event);
+            this.focused = true;
+            input.focus();
+        }
+    }
+    onKeydown(event) {
+        if (event.keyCode == 32) {
+            event.preventDefault();
+        }
+    }
+    onKeyup(event) {
+        if (event.keyCode == 32 && !this.readonly) {
+            this.toggle(event);
+            event.preventDefault();
+        }
+    }
+    toggle(event) {
+        if (this.value == null || this.value == undefined)
+            this.value = true;
+        else if (this.value == true)
+            this.value = false;
+        else if (this.value == false)
+            this.value = null;
+        this.onModelChange(this.value);
+        this.onChange.emit({
+            originalEvent: event,
+            value: this.value
+        });
+    }
+    onFocus() {
+        this.focused = true;
+    }
+    onBlur() {
+        this.focused = false;
+        this.onModelTouched();
+    }
+    registerOnChange(fn) {
+        this.onModelChange = fn;
+    }
+    registerOnTouched(fn) {
+        this.onModelTouched = fn;
+    }
+    writeValue(value) {
+        this.value = value;
+        this.cd.markForCheck();
+    }
+    setDisabledState(disabled) {
+        this.disabled = disabled;
+        this.cd.markForCheck();
+    }
+}
+TriStateCheckbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TriStateCheckbox, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
+TriStateCheckbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: TriStateCheckbox, selector: "p-triStateCheckbox", inputs: { disabled: "disabled", name: "name", ariaLabelledBy: "ariaLabelledBy", tabindex: "tabindex", inputId: "inputId", style: "style", styleClass: "styleClass", label: "label", readonly: "readonly", checkboxTrueIcon: "checkboxTrueIcon", checkboxFalseIcon: "checkboxFalseIcon" }, outputs: { onChange: "onChange" }, host: { classAttribute: "p-element" }, providers: [TRISTATECHECKBOX_VALUE_ACCESSOR], ngImport: i0, template: `
+        <div [ngStyle]="style" [ngClass]="{'p-checkbox p-component': true,'p-checkbox-disabled': disabled, 'p-checkbox-focused': focused}" [class]="styleClass">
+            <div class="p-hidden-accessible">
+                <input #input type="text" [attr.id]="inputId" [name]="name" [attr.tabindex]="tabindex" [readonly]="readonly" [disabled]="disabled" (keyup)="onKeyup($event)" (keydown)="onKeydown($event)" (focus)="onFocus()" (blur)="onBlur()" [attr.aria-labelledby]="ariaLabelledBy" inputmode="none">
+            </div>
+            <div class="p-checkbox-box" (click)="onClick($event,input)"  role="checkbox" [attr.aria-checked]="value === true"
+                [ngClass]="{'p-highlight':value!=null,'p-disabled':disabled,'p-focus':focused}">
+                <span class="p-checkbox-icon" [ngClass]="value === true ? checkboxTrueIcon : value === false ? checkboxFalseIcon : ''"></span>
+            </div>
+        </div>
+        <label class="p-checkbox-label" (click)="onClick($event,input)"
+               [ngClass]="{'p-checkbox-label-active':value!=null, 'p-disabled':disabled, 'p-checkbox-label-focus':focused}"
+               *ngIf="label" [attr.for]="inputId">{{label}}</label>
+    `, isInline: true, directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TriStateCheckbox, decorators: [{
+            type: Component,
+            args: [{
+                    selector: 'p-triStateCheckbox',
+                    template: `
+        <div [ngStyle]="style" [ngClass]="{'p-checkbox p-component': true,'p-checkbox-disabled': disabled, 'p-checkbox-focused': focused}" [class]="styleClass">
+            <div class="p-hidden-accessible">
+                <input #input type="text" [attr.id]="inputId" [name]="name" [attr.tabindex]="tabindex" [readonly]="readonly" [disabled]="disabled" (keyup)="onKeyup($event)" (keydown)="onKeydown($event)" (focus)="onFocus()" (blur)="onBlur()" [attr.aria-labelledby]="ariaLabelledBy" inputmode="none">
+            </div>
+            <div class="p-checkbox-box" (click)="onClick($event,input)"  role="checkbox" [attr.aria-checked]="value === true"
+                [ngClass]="{'p-highlight':value!=null,'p-disabled':disabled,'p-focus':focused}">
+                <span class="p-checkbox-icon" [ngClass]="value === true ? checkboxTrueIcon : value === false ? checkboxFalseIcon : ''"></span>
+            </div>
+        </div>
+        <label class="p-checkbox-label" (click)="onClick($event,input)"
+               [ngClass]="{'p-checkbox-label-active':value!=null, 'p-disabled':disabled, 'p-checkbox-label-focus':focused}"
+               *ngIf="label" [attr.for]="inputId">{{label}}</label>
+    `,
+                    providers: [TRISTATECHECKBOX_VALUE_ACCESSOR],
+                    changeDetection: ChangeDetectionStrategy.OnPush,
+                    encapsulation: ViewEncapsulation.None,
+                    host: {
+                        'class': 'p-element'
+                    }
+                }]
+        }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
+                type: Input
+            }], name: [{
+                type: Input
+            }], ariaLabelledBy: [{
+                type: Input
+            }], tabindex: [{
+                type: Input
+            }], inputId: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], label: [{
+                type: Input
+            }], readonly: [{
+                type: Input
+            }], checkboxTrueIcon: [{
+                type: Input
+            }], checkboxFalseIcon: [{
+                type: Input
+            }], onChange: [{
+                type: Output
+            }] } });
+class TriStateCheckboxModule {
+}
+TriStateCheckboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TriStateCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+TriStateCheckboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TriStateCheckboxModule, declarations: [TriStateCheckbox], imports: [CommonModule], exports: [TriStateCheckbox] });
+TriStateCheckboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TriStateCheckboxModule, imports: [[CommonModule]] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: TriStateCheckboxModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule],
+                    exports: [TriStateCheckbox],
+                    declarations: [TriStateCheckbox]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { TRISTATECHECKBOX_VALUE_ACCESSOR, TriStateCheckbox, TriStateCheckboxModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-tristatecheckbox.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-tristatecheckbox.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-tristatecheckbox.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-tristatecheckbox.mjs","sources":["../../src/app/components/tristatecheckbox/tristatecheckbox.ts","../../src/app/components/tristatecheckbox/primeng-tristatecheckbox.ts"],"sourcesContent":["import {NgModule,Component,Input,Output,EventEmitter,forwardRef,ChangeDetectorRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const TRISTATECHECKBOX_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => TriStateCheckbox),\n  multi: true\n};\n\n@Component({\n    selector: 'p-triStateCheckbox',\n    template: `\n        <div [ngStyle]=\"style\" [ngClass]=\"{'p-checkbox p-component': true,'p-checkbox-disabled': disabled, 'p-checkbox-focused': focused}\" [class]=\"styleClass\">\n            <div class=\"p-hidden-accessible\">\n                <input #input type=\"text\" [attr.id]=\"inputId\" [name]=\"name\" [attr.tabindex]=\"tabindex\" [readonly]=\"readonly\" [disabled]=\"disabled\" (keyup)=\"onKeyup($event)\" (keydown)=\"onKeydown($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [attr.aria-labelledby]=\"ariaLabelledBy\" inputmode=\"none\">\n            </div>\n            <div class=\"p-checkbox-box\" (click)=\"onClick($event,input)\"  role=\"checkbox\" [attr.aria-checked]=\"value === true\"\n                [ngClass]=\"{'p-highlight':value!=null,'p-disabled':disabled,'p-focus':focused}\">\n                <span class=\"p-checkbox-icon\" [ngClass]=\"value === true ? checkboxTrueIcon : value === false ? checkboxFalseIcon : ''\"></span>\n            </div>\n        </div>\n        <label class=\"p-checkbox-label\" (click)=\"onClick($event,input)\"\n               [ngClass]=\"{'p-checkbox-label-active':value!=null, 'p-disabled':disabled, 'p-checkbox-label-focus':focused}\"\n               *ngIf=\"label\" [attr.for]=\"inputId\">{{label}}</label>\n    `,\n    providers: [TRISTATECHECKBOX_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class TriStateCheckbox implements ControlValueAccessor  {\n\n    constructor(private cd: ChangeDetectorRef) {}\n\n    @Input() disabled: boolean;\n\n    @Input() name: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() tabindex: number;\n\n    @Input() inputId: string;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() label: string;\n\n    @Input() readonly: boolean;\n\n    @Input() checkboxTrueIcon: string = 'pi pi-check';\n\n    @Input() checkboxFalseIcon: string = 'pi pi-times';\n\n    @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n    focused: boolean;\n\n    value: any;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    onClick(event: Event, input: HTMLInputElement) {\n        if (!this.disabled && !this.readonly) {\n            this.toggle(event);\n            this.focused = true;\n            input.focus();\n        }\n    }\n\n    onKeydown(event: KeyboardEvent) {\n        if (event.keyCode == 32) {\n            event.preventDefault();\n        }\n    }\n\n    onKeyup(event: KeyboardEvent) {\n        if (event.keyCode == 32 && !this.readonly) {\n            this.toggle(event);\n            event.preventDefault();\n        }\n    }\n\n    toggle(event: Event) {\n        if (this.value == null || this.value == undefined)\n            this.value = true;\n        else if (this.value == true)\n            this.value = false;\n        else if (this.value == false)\n            this.value = null;\n\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        })\n    }\n\n    onFocus() {\n        this.focused = true;\n    }\n\n    onBlur() {\n        this.focused = false;\n        this.onModelTouched();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.cd.markForCheck();\n    }\n\n    setDisabledState(disabled: boolean): void {\n        this.disabled = disabled;\n        this.cd.markForCheck();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [TriStateCheckbox],\n    declarations: [TriStateCheckbox]\n})\nexport class TriStateCheckboxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-utils.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-utils.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-utils.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,202 @@
+class ObjectUtils {
+    static equals(obj1, obj2, field) {
+        if (field)
+            return (this.resolveFieldData(obj1, field) === this.resolveFieldData(obj2, field));
+        else
+            return this.equalsByValue(obj1, obj2);
+    }
+    static equalsByValue(obj1, obj2) {
+        if (obj1 === obj2)
+            return true;
+        if (obj1 && obj2 && typeof obj1 == 'object' && typeof obj2 == 'object') {
+            var arrA = Array.isArray(obj1), arrB = Array.isArray(obj2), i, length, key;
+            if (arrA && arrB) {
+                length = obj1.length;
+                if (length != obj2.length)
+                    return false;
+                for (i = length; i-- !== 0;)
+                    if (!this.equalsByValue(obj1[i], obj2[i]))
+                        return false;
+                return true;
+            }
+            if (arrA != arrB)
+                return false;
+            var dateA = obj1 instanceof Date, dateB = obj2 instanceof Date;
+            if (dateA != dateB)
+                return false;
+            if (dateA && dateB)
+                return obj1.getTime() == obj2.getTime();
+            var regexpA = obj1 instanceof RegExp, regexpB = obj2 instanceof RegExp;
+            if (regexpA != regexpB)
+                return false;
+            if (regexpA && regexpB)
+                return obj1.toString() == obj2.toString();
+            var keys = Object.keys(obj1);
+            length = keys.length;
+            if (length !== Object.keys(obj2).length)
+                return false;
+            for (i = length; i-- !== 0;)
+                if (!Object.prototype.hasOwnProperty.call(obj2, keys[i]))
+                    return false;
+            for (i = length; i-- !== 0;) {
+                key = keys[i];
+                if (!this.equalsByValue(obj1[key], obj2[key]))
+                    return false;
+            }
+            return true;
+        }
+        return obj1 !== obj1 && obj2 !== obj2;
+    }
+    static resolveFieldData(data, field) {
+        if (data && field) {
+            if (this.isFunction(field)) {
+                return field(data);
+            }
+            else if (field.indexOf('.') == -1) {
+                return data[field];
+            }
+            else {
+                let fields = field.split('.');
+                let value = data;
+                for (let i = 0, len = fields.length; i < len; ++i) {
+                    if (value == null) {
+                        return null;
+                    }
+                    value = value[fields[i]];
+                }
+                return value;
+            }
+        }
+        else {
+            return null;
+        }
+    }
+    static isFunction(obj) {
+        return !!(obj && obj.constructor && obj.call && obj.apply);
+    }
+    static reorderArray(value, from, to) {
+        let target;
+        if (value && from !== to) {
+            if (to >= value.length) {
+                to %= value.length;
+                from %= value.length;
+            }
+            value.splice(to, 0, value.splice(from, 1)[0]);
+        }
+    }
+    static insertIntoOrderedArray(item, index, arr, sourceArr) {
+        if (arr.length > 0) {
+            let injected = false;
+            for (let i = 0; i < arr.length; i++) {
+                let currentItemIndex = this.findIndexInList(arr[i], sourceArr);
+                if (currentItemIndex > index) {
+                    arr.splice(i, 0, item);
+                    injected = true;
+                    break;
+                }
+            }
+            if (!injected) {
+                arr.push(item);
+            }
+        }
+        else {
+            arr.push(item);
+        }
+    }
+    static findIndexInList(item, list) {
+        let index = -1;
+        if (list) {
+            for (let i = 0; i < list.length; i++) {
+                if (list[i] == item) {
+                    index = i;
+                    break;
+                }
+            }
+        }
+        return index;
+    }
+    static contains(value, list) {
+        if (value != null && list && list.length) {
+            for (let val of list) {
+                if (this.equals(value, val))
+                    return true;
+            }
+        }
+        return false;
+    }
+    static removeAccents(str) {
+        if (str && str.search(/[\xC0-\xFF]/g) > -1) {
+            str = str
+                .replace(/[\xC0-\xC5]/g, "A")
+                .replace(/[\xC6]/g, "AE")
+                .replace(/[\xC7]/g, "C")
+                .replace(/[\xC8-\xCB]/g, "E")
+                .replace(/[\xCC-\xCF]/g, "I")
+                .replace(/[\xD0]/g, "D")
+                .replace(/[\xD1]/g, "N")
+                .replace(/[\xD2-\xD6\xD8]/g, "O")
+                .replace(/[\xD9-\xDC]/g, "U")
+                .replace(/[\xDD]/g, "Y")
+                .replace(/[\xDE]/g, "P")
+                .replace(/[\xE0-\xE5]/g, "a")
+                .replace(/[\xE6]/g, "ae")
+                .replace(/[\xE7]/g, "c")
+                .replace(/[\xE8-\xEB]/g, "e")
+                .replace(/[\xEC-\xEF]/g, "i")
+                .replace(/[\xF1]/g, "n")
+                .replace(/[\xF2-\xF6\xF8]/g, "o")
+                .replace(/[\xF9-\xFC]/g, "u")
+                .replace(/[\xFE]/g, "p")
+                .replace(/[\xFD\xFF]/g, "y");
+        }
+        return str;
+    }
+}
+
+var lastId = 0;
+function UniqueComponentId() {
+    let prefix = 'pr_id_';
+    lastId++;
+    return `${prefix}${lastId}`;
+}
+
+function ZIndexUtils() {
+    let zIndexes = [];
+    const generateZIndex = (key, baseZIndex) => {
+        let lastZIndex = zIndexes.length > 0 ? zIndexes[zIndexes.length - 1] : { key, value: baseZIndex };
+        let newZIndex = lastZIndex.value + (lastZIndex.key === key ? 0 : baseZIndex) + 1;
+        zIndexes.push({ key, value: newZIndex });
+        return newZIndex;
+    };
+    const revertZIndex = (zIndex) => {
+        zIndexes = zIndexes.filter(obj => obj.value !== zIndex);
+    };
+    const getCurrentZIndex = () => {
+        return zIndexes.length > 0 ? zIndexes[zIndexes.length - 1].value : 0;
+    };
+    const getZIndex = (el) => {
+        return el ? parseInt(el.style.zIndex, 10) || 0 : 0;
+    };
+    return {
+        get: getZIndex,
+        set: (key, el, baseZIndex) => {
+            if (el) {
+                el.style.zIndex = String(generateZIndex(key, baseZIndex));
+            }
+        },
+        clear: (el) => {
+            if (el) {
+                revertZIndex(getZIndex(el));
+                el.style.zIndex = '';
+            }
+        },
+        getCurrent: () => getCurrentZIndex()
+    };
+}
+var zindexutils = ZIndexUtils();
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { ObjectUtils, UniqueComponentId, zindexutils as ZIndexUtils };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-utils.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-utils.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-utils.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-utils.mjs","sources":["../../src/app/components/utils/objectutils.ts","../../src/app/components/utils/uniquecomponentid.ts","../../src/app/components/utils/zindexutils.ts","../../src/app/components/utils/primeng-utils.ts"],"sourcesContent":["export class ObjectUtils {\n\n    public static equals(obj1: any, obj2: any, field?: string): boolean {\n        if (field)\n            return (this.resolveFieldData(obj1, field) === this.resolveFieldData(obj2, field));\n        else\n            return this.equalsByValue(obj1, obj2);\n    }\n\n    public static equalsByValue(obj1: any, obj2: any): boolean {\n        if (obj1 === obj2) return true;\n\n        if (obj1 && obj2 && typeof obj1 == 'object' && typeof obj2 == 'object') {\n            var arrA = Array.isArray(obj1)\n                , arrB = Array.isArray(obj2)\n                , i\n                , length\n                , key;\n\n            if (arrA && arrB) {\n                length = obj1.length;\n                if (length != obj2.length) return false;\n                for (i = length; i-- !== 0;)\n                    if (!this.equalsByValue(obj1[i], obj2[i])) return false;\n                return true;\n            }\n\n            if (arrA != arrB) return false;\n\n            var dateA = obj1 instanceof Date\n                , dateB = obj2 instanceof Date;\n            if (dateA != dateB) return false;\n            if (dateA && dateB) return obj1.getTime() == obj2.getTime();\n\n            var regexpA = obj1 instanceof RegExp\n                , regexpB = obj2 instanceof RegExp;\n            if (regexpA != regexpB) return false;\n            if (regexpA && regexpB) return obj1.toString() == obj2.toString();\n\n            var keys = Object.keys(obj1);\n            length = keys.length;\n\n            if (length !== Object.keys(obj2).length)\n                return false;\n\n            for (i = length; i-- !== 0;)\n                if (!Object.prototype.hasOwnProperty.call(obj2, keys[i])) return false;\n\n            for (i = length; i-- !== 0;) {\n                key = keys[i];\n                if (!this.equalsByValue(obj1[key], obj2[key])) return false;\n            }\n\n            return true;\n        }\n\n        return obj1 !== obj1 && obj2 !== obj2;\n    }\n\n    public static resolveFieldData(data: any, field: any): any {\n        if (data && field) {\n            if (this.isFunction(field)) {\n                return field(data);\n            }\n            else if (field.indexOf('.') == -1) {\n                return data[field];\n            }\n            else {\n                let fields: string[] = field.split('.');\n                let value = data;\n                for(let i = 0, len = fields.length; i < len; ++i) {\n                    if (value == null) {\n                        return null;\n                    }\n                    value = value[fields[i]];\n                }\n                return value;\n            }\n        }\n        else {\n            return null;\n        }\n    }\n\n    public static isFunction(obj: any) {\n        return !!(obj && obj.constructor && obj.call && obj.apply);\n    }\n\n    public static reorderArray(value: any[], from: number, to: number) {\n        let target: number;\n        if (value && from !== to) {\n            if (to >= value.length) {\n                to %= value.length;\n                from %= value.length;\n            }\n            value.splice(to, 0, value.splice(from, 1)[0]);\n        }\n    }\n\n    public static insertIntoOrderedArray(item: any, index: number, arr: any[], sourceArr: any[]): void {\n        if (arr.length > 0) {\n            let injected = false;\n            for(let i = 0; i < arr.length; i++) {\n                let currentItemIndex = this.findIndexInList(arr[i], sourceArr);\n                if (currentItemIndex > index) {\n                    arr.splice(i, 0, item);\n                    injected = true;\n                    break;\n                }\n            }\n\n            if (!injected) {\n                arr.push(item);\n            }\n        }\n        else {\n            arr.push(item);\n        }\n    }\n\n    public static findIndexInList(item: any, list: any): number {\n        let index: number = -1;\n\n        if (list) {\n            for(let i = 0; i < list.length; i++) {\n                if (list[i] == item) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n\n        return index;\n    }\n\n    public static contains(value, list) {\n        if (value != null && list && list.length) {\n            for (let val of list) {\n                if (this.equals(value, val))\n                    return true;\n            }\n        }\n\n        return false;\n    }\n\n    public static removeAccents(str) {\n        if (str && str.search(/[\\xC0-\\xFF]/g) > -1) {\n            str = str\n                    .replace(/[\\xC0-\\xC5]/g, \"A\")\n                    .replace(/[\\xC6]/g, \"AE\")\n                    .replace(/[\\xC7]/g, \"C\")\n                    .replace(/[\\xC8-\\xCB]/g, \"E\")\n                    .replace(/[\\xCC-\\xCF]/g, \"I\")\n                    .replace(/[\\xD0]/g, \"D\")\n                    .replace(/[\\xD1]/g, \"N\")\n                    .replace(/[\\xD2-\\xD6\\xD8]/g, \"O\")\n                    .replace(/[\\xD9-\\xDC]/g, \"U\")\n                    .replace(/[\\xDD]/g, \"Y\")\n                    .replace(/[\\xDE]/g, \"P\")\n                    .replace(/[\\xE0-\\xE5]/g, \"a\")\n                    .replace(/[\\xE6]/g, \"ae\")\n                    .replace(/[\\xE7]/g, \"c\")\n                    .replace(/[\\xE8-\\xEB]/g, \"e\")\n                    .replace(/[\\xEC-\\xEF]/g, \"i\")\n                    .replace(/[\\xF1]/g, \"n\")\n                    .replace(/[\\xF2-\\xF6\\xF8]/g, \"o\")\n                    .replace(/[\\xF9-\\xFC]/g, \"u\")\n                    .replace(/[\\xFE]/g, \"p\")\n                    .replace(/[\\xFD\\xFF]/g, \"y\");\n        }\n\n        return str;\n      }\n}\n","\nexport var lastId = 0;\n\nexport function UniqueComponentId () {\n    let prefix = 'pr_id_';\n    lastId++;\n    return `${prefix}${lastId}`;\n}","function ZIndexUtils() {\n    let zIndexes = [];\n\n    const generateZIndex = (key, baseZIndex) => {\n        let lastZIndex = zIndexes.length > 0 ? zIndexes[zIndexes.length - 1] : { key, value: baseZIndex };\n        let newZIndex = lastZIndex.value + (lastZIndex.key === key ? 0 : baseZIndex) + 1;\n\n        zIndexes.push({ key, value: newZIndex });\n\n        return newZIndex;\n    }\n\n    const revertZIndex = (zIndex) => {\n        zIndexes = zIndexes.filter(obj => obj.value !== zIndex);\n    }\n\n    const getCurrentZIndex = () => {\n        return zIndexes.length > 0 ? zIndexes[zIndexes.length - 1].value : 0;\n    }\n\n    const getZIndex = (el) => {\n        return el ? parseInt(el.style.zIndex, 10) || 0 : 0\n    }\n\n    return {\n        get: getZIndex,\n        set: (key, el, baseZIndex) => {\n            if (el) {\n                el.style.zIndex = String(generateZIndex(key, baseZIndex));\n            }\n        },\n        clear: (el) => {\n            if (el) {\n                revertZIndex(getZIndex(el));\n                el.style.zIndex = '';\n            }\n        },\n        getCurrent: () => getCurrentZIndex()\n    };\n}\n\nexport default ZIndexUtils();\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-virtualscroller.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-virtualscroller.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-virtualscroller.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,202 @@
+import * as i0 from '@angular/core';
+import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ContentChild, ContentChildren, ViewChild, Output, NgModule } from '@angular/core';
+import * as i2 from '@angular/common';
+import { CommonModule } from '@angular/common';
+import { Header, Footer, PrimeTemplate, SharedModule } from 'primeng/api';
+import * as i1 from '@angular/cdk/scrolling';
+import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
+
+class VirtualScroller {
+    constructor(el) {
+        this.el = el;
+        this.delay = 250;
+        this.trackBy = (index, item) => item;
+        this.onLazyLoad = new EventEmitter();
+        this._totalRecords = 0;
+        this.page = 0;
+        this._first = 0;
+    }
+    get totalRecords() {
+        return this._totalRecords;
+    }
+    set totalRecords(val) {
+        this._totalRecords = val;
+        console.log("totalRecords is deprecated, provide a value with the length of virtual items instead.");
+    }
+    get first() {
+        return this._first;
+    }
+    set first(val) {
+        this._first = val;
+        console.log("first property is deprecated, use scrollToIndex function to scroll a specific item.");
+    }
+    get cache() {
+        return this._cache;
+    }
+    set cache(val) {
+        this._cache = val;
+        console.log("cache is deprecated as it is always on.");
+    }
+    ngAfterContentInit() {
+        this.templates.forEach((item) => {
+            switch (item.getType()) {
+                case 'item':
+                    this.itemTemplate = item.template;
+                    break;
+                case 'loadingItem':
+                    this.loadingItemTemplate = item.template;
+                    break;
+                case 'header':
+                    this.headerTemplate = item.template;
+                    break;
+                case 'footer':
+                    this.footerTemplate = item.template;
+                    break;
+                default:
+                    this.itemTemplate = item.template;
+                    break;
+            }
+        });
+    }
+    onScrollIndexChange(index) {
+        if (this.lazy) {
+            if (this.virtualScrollTimeout) {
+                clearTimeout(this.virtualScrollTimeout);
+            }
+            this.virtualScrollTimeout = setTimeout(() => {
+                let page = Math.floor(index / this.rows);
+                let virtualScrollOffset = page === 0 ? 0 : (page - 1) * this.rows;
+                let virtualScrollChunkSize = page === 0 ? this.rows * 2 : this.rows * 3;
+                if (page !== this.virtualPage) {
+                    this.virtualPage = page;
+                    this.onLazyLoad.emit({ first: virtualScrollOffset, rows: virtualScrollChunkSize });
+                }
+            }, this.delay);
+        }
+    }
+    getBlockableElement() {
+        return this.el.nativeElement.children[0];
+    }
+    //@deprecated
+    scrollTo(index, mode) {
+        this.scrollToIndex(index, mode);
+    }
+    scrollToIndex(index, mode) {
+        if (this.viewport) {
+            this.viewport.scrollToIndex(index, mode);
+        }
+    }
+}
+VirtualScroller.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: VirtualScroller, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
+VirtualScroller.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: VirtualScroller, selector: "p-virtualScroller", inputs: { value: "value", itemSize: "itemSize", style: "style", styleClass: "styleClass", scrollHeight: "scrollHeight", lazy: "lazy", rows: "rows", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx", delay: "delay", trackBy: "trackBy", totalRecords: "totalRecords", first: "first", cache: "cache" }, outputs: { onLazyLoad: "onLazyLoad" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "header", first: true, predicate: Header, descendants: true }, { propertyName: "footer", first: true, predicate: Footer, descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: `
+        <div [ngClass]="'p-virtualscroller p-component'" [ngStyle]="style" [class]="styleClass">
+            <div class="p-virtualscroller-header" *ngIf="header || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            </div>
+            <div #content class="p-virtualscroller-content">
+                <div class="p-virtualscroller-list">
+                    <cdk-virtual-scroll-viewport #viewport [ngStyle]="{'height': scrollHeight}" tabindex="0" [itemSize]="itemSize" [minBufferPx]="minBufferPx" [maxBufferPx]="maxBufferPx" (scrolledIndexChange)="onScrollIndexChange($event)">
+                        <ng-container *cdkVirtualFor="let item of value; trackBy: trackBy; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd;">
+                            <div [ngStyle]="{'height': itemSize + 'px'}" class="p-virtualscroller-item">
+                                <ng-container *ngTemplateOutlet="item ? itemTemplate : loadingItemTemplate; context: {$implicit: item, index: i, count: c, first: f, last: l, even: e, odd: o}"></ng-container>
+                            </div>
+                        </ng-container>
+                    </cdk-virtual-scroll-viewport>
+                </div>
+            </div>
+            <div class="p-virtualscroller-footer" *ngIf="footer || footerTemplate">
+                <ng-content select="p-footer"></ng-content>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </div>
+    `, isInline: true, styles: ["cdk-virtual-scroll-viewport{outline:0 none}\n"], components: [{ type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: VirtualScroller, decorators: [{
+            type: Component,
+            args: [{ selector: 'p-virtualScroller', template: `
+        <div [ngClass]="'p-virtualscroller p-component'" [ngStyle]="style" [class]="styleClass">
+            <div class="p-virtualscroller-header" *ngIf="header || headerTemplate">
+                <ng-content select="p-header"></ng-content>
+                <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
+            </div>
+            <div #content class="p-virtualscroller-content">
+                <div class="p-virtualscroller-list">
+                    <cdk-virtual-scroll-viewport #viewport [ngStyle]="{'height': scrollHeight}" tabindex="0" [itemSize]="itemSize" [minBufferPx]="minBufferPx" [maxBufferPx]="maxBufferPx" (scrolledIndexChange)="onScrollIndexChange($event)">
+                        <ng-container *cdkVirtualFor="let item of value; trackBy: trackBy; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd;">
+                            <div [ngStyle]="{'height': itemSize + 'px'}" class="p-virtualscroller-item">
+                                <ng-container *ngTemplateOutlet="item ? itemTemplate : loadingItemTemplate; context: {$implicit: item, index: i, count: c, first: f, last: l, even: e, odd: o}"></ng-container>
+                            </div>
+                        </ng-container>
+                    </cdk-virtual-scroll-viewport>
+                </div>
+            </div>
+            <div class="p-virtualscroller-footer" *ngIf="footer || footerTemplate">
+                <ng-content select="p-footer"></ng-content>
+                <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
+            </div>
+        </div>
+    `, changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, host: {
+                        'class': 'p-element'
+                    }, styles: ["cdk-virtual-scroll-viewport{outline:0 none}\n"] }]
+        }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { value: [{
+                type: Input
+            }], itemSize: [{
+                type: Input
+            }], style: [{
+                type: Input
+            }], styleClass: [{
+                type: Input
+            }], scrollHeight: [{
+                type: Input
+            }], lazy: [{
+                type: Input
+            }], rows: [{
+                type: Input
+            }], minBufferPx: [{
+                type: Input
+            }], maxBufferPx: [{
+                type: Input
+            }], delay: [{
+                type: Input
+            }], trackBy: [{
+                type: Input
+            }], header: [{
+                type: ContentChild,
+                args: [Header]
+            }], footer: [{
+                type: ContentChild,
+                args: [Footer]
+            }], templates: [{
+                type: ContentChildren,
+                args: [PrimeTemplate]
+            }], viewport: [{
+                type: ViewChild,
+                args: [CdkVirtualScrollViewport]
+            }], onLazyLoad: [{
+                type: Output
+            }], totalRecords: [{
+                type: Input
+            }], first: [{
+                type: Input
+            }], cache: [{
+                type: Input
+            }] } });
+class VirtualScrollerModule {
+}
+VirtualScrollerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: VirtualScrollerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
+VirtualScrollerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: VirtualScrollerModule, declarations: [VirtualScroller], imports: [CommonModule, ScrollingModule], exports: [VirtualScroller, SharedModule, ScrollingModule] });
+VirtualScrollerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: VirtualScrollerModule, imports: [[CommonModule, ScrollingModule], SharedModule, ScrollingModule] });
+i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: VirtualScrollerModule, decorators: [{
+            type: NgModule,
+            args: [{
+                    imports: [CommonModule, ScrollingModule],
+                    exports: [VirtualScroller, SharedModule, ScrollingModule],
+                    declarations: [VirtualScroller]
+                }]
+        }] });
+
+/**
+ * Generated bundle index. Do not edit.
+ */
+
+export { VirtualScroller, VirtualScrollerModule };
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng-virtualscroller.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng-virtualscroller.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng-virtualscroller.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng-virtualscroller.mjs","sources":["../../src/app/components/virtualscroller/virtualscroller.ts","../../src/app/components/virtualscroller/primeng-virtualscroller.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,AfterContentInit,Input,Output,ViewChild,EventEmitter,ContentChild,ContentChildren,QueryList,TemplateRef,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {Header,Footer,PrimeTemplate,SharedModule} from 'primeng/api';\nimport {ScrollingModule,CdkVirtualScrollViewport} from '@angular/cdk/scrolling';\nimport {BlockableUI} from 'primeng/api';\n\n@Component({\n    selector: 'p-virtualScroller',\n    template:`\n        <div [ngClass]=\"'p-virtualscroller p-component'\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <div class=\"p-virtualscroller-header\" *ngIf=\"header || headerTemplate\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n            </div>\n            <div #content class=\"p-virtualscroller-content\">\n                <div class=\"p-virtualscroller-list\">\n                    <cdk-virtual-scroll-viewport #viewport [ngStyle]=\"{'height': scrollHeight}\" tabindex=\"0\" [itemSize]=\"itemSize\" [minBufferPx]=\"minBufferPx\" [maxBufferPx]=\"maxBufferPx\" (scrolledIndexChange)=\"onScrollIndexChange($event)\">\n                        <ng-container *cdkVirtualFor=\"let item of value; trackBy: trackBy; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd;\">\n                            <div [ngStyle]=\"{'height': itemSize + 'px'}\" class=\"p-virtualscroller-item\">\n                                <ng-container *ngTemplateOutlet=\"item ? itemTemplate : loadingItemTemplate; context: {$implicit: item, index: i, count: c, first: f, last: l, even: e, odd: o}\"></ng-container>\n                            </div>\n                        </ng-container>\n                    </cdk-virtual-scroll-viewport>\n                </div>\n            </div>\n            <div class=\"p-virtualscroller-footer\" *ngIf=\"footer || footerTemplate\">\n                <ng-content select=\"p-footer\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.Default,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./virtualscroller.css'],\n    host: {\n        'class': 'p-element'\n    }\n})\nexport class VirtualScroller implements AfterContentInit,BlockableUI {\n\n    @Input() value: any[];\n\n    @Input() itemSize: number;\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() scrollHeight: any;\n\n    @Input() lazy: boolean;\n\n    @Input() rows: number;\n\n    @Input() minBufferPx: number;\n\n    @Input() maxBufferPx: number;\n\n    @Input() delay: number = 250;\n\n    @Input() trackBy: Function = (index: number, item: any) => item;\n\n    @ContentChild(Header) header: Header;\n\n    @ContentChild(Footer) footer: Footer;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @ViewChild(CdkVirtualScrollViewport) viewport: CdkVirtualScrollViewport;\n\n    @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n    itemTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    loadingItemTemplate: TemplateRef<any>;\n\n    _totalRecords: number = 0;\n\n    page: number = 0;\n\n    _first: number = 0;\n\n    _cache: boolean;\n\n    virtualScrollTimeout: any;\n\n    virtualPage: number;\n\n    constructor(public el: ElementRef) {}\n\n    @Input() get totalRecords(): number {\n        return this._totalRecords;\n    }\n    set totalRecords(val: number) {\n        this._totalRecords = val;\n        console.log(\"totalRecords is deprecated, provide a value with the length of virtual items instead.\");\n    }\n\n    @Input() get first(): number {\n        return this._first;\n    }\n    set first(val:number) {\n        this._first = val;\n        console.log(\"first property is deprecated, use scrollToIndex function to scroll a specific item.\");\n    }\n\n    @Input() get cache(): boolean {\n        return this._cache;\n    }\n    set cache(val: boolean) {\n        this._cache = val;\n        console.log(\"cache is deprecated as it is always on.\");\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'loadingItem':\n                    this.loadingItemTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    onScrollIndexChange(index: number) {\n        if (this.lazy) {\n            if (this.virtualScrollTimeout) {\n                clearTimeout(this.virtualScrollTimeout);\n            }\n\n            this.virtualScrollTimeout = setTimeout(() => {\n                let page = Math.floor(index / this.rows);\n                let virtualScrollOffset = page === 0 ? 0 : (page - 1) * this.rows;\n                let virtualScrollChunkSize = page === 0 ? this.rows * 2 : this.rows * 3;\n\n                if (page !== this.virtualPage) {\n                    this.virtualPage = page;\n                    this.onLazyLoad.emit({first: virtualScrollOffset, rows: virtualScrollChunkSize});\n                }\n            }, this.delay);\n        }\n    }\n\n    getBlockableElement(): HTMLElement {\n        return this.el.nativeElement.children[0];\n    }\n\n    //@deprecated\n    scrollTo(index: number, mode?: ScrollBehavior): void {\n        this.scrollToIndex(index, mode);\n    }\n\n    scrollToIndex(index: number, mode?: ScrollBehavior): void {\n        if (this.viewport) {\n            this.viewport.scrollToIndex(index, mode);\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ScrollingModule],\n    exports: [VirtualScroller,SharedModule,ScrollingModule],\n    declarations: [VirtualScroller]\n})\nexport class VirtualScrollerModule { }\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng.mjs
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng.mjs	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,5 @@
+var public_api = {};
+
+/**
+ * Generated bundle index. Do not edit.
+ */
Index: trip-planner-front/node_modules/primeng/fesm2020/primeng.mjs.map
===================================================================
--- trip-planner-front/node_modules/primeng/fesm2020/primeng.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
+++ trip-planner-front/node_modules/primeng/fesm2020/primeng.mjs.map	(revision 59329aad30ff25ec5095bb7ffb78ddb59b7dc111)
@@ -0,0 +1,1 @@
+{"version":3,"file":"primeng.mjs","sources":["../../src/app/components/public_api.ts","../../src/app/components/primeng.ts"],"sourcesContent":["export default {};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"AAAA,iBAAe,EAAE;;ACAjB;;"}
