ng-zenduit 2.2.4 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ng-zenduit.mjs +134 -58
- package/fesm2022/ng-zenduit.mjs.map +1 -1
- package/package.json +2 -2
- package/styles/all.scss +0 -1
- package/types/ng-zenduit.d.ts +43 -10
- package/styles/snackbar.scss +0 -91
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-zenduit.mjs","sources":["../../../projects/ng-zenduit/src/lib/services/zendu-notify.service.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.html","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.ts","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.html","../../../projects/ng-zenduit/src/lib/util.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.component.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.component.html","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.ts","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.html","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.ts","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.html","../../../projects/ng-zenduit/src/lib/datepicker/datepicker.ts","../../../projects/ng-zenduit/src/lib/icon/icon-config.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.html","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.ts","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.html","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.ts","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.html","../../../projects/ng-zenduit/src/lib/groups/zendu-groups.component.ts","../../../projects/ng-zenduit/src/lib/groups/zendu-groups.component.html","../../../projects/ng-zenduit/src/lib/radio-button/radio-button.component.ts","../../../projects/ng-zenduit/src/lib/radio-button/radio-button.component.html","../../../projects/ng-zenduit/src/lib/spinner/zendu-spinner.component.ts","../../../projects/ng-zenduit/src/lib/spinner/zendu-spinner.component.html","../../../projects/ng-zenduit/src/lib/button/zen-button.component.ts","../../../projects/ng-zenduit/src/lib/button/zen-button.component.html","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.ts","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.html","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-option.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-value.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-button.directive.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.html","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.ts","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.html","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.ts","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.html","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.ts","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.html","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.ts","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.html","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.ts","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.html","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.ts","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.html","../../../projects/ng-zenduit/src/lib/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/script.loader.service.ts","../../../projects/ng-zenduit/src/lib/services/opencv.service.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.html","../../../projects/ng-zenduit/src/lib/services/map.service.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.html","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.ts","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.html","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.ts","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.html","../../../projects/ng-zenduit/src/lib/services/geoconding.service.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.html","../../../projects/ng-zenduit/src/lib/core/cevent.ts","../../../projects/ng-zenduit/src/lib/live-view-player/player.control.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.html","../../../projects/ng-zenduit/src/lib/core/thread.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.html","../../../projects/ng-zenduit/src/lib/core/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/http.service.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.html","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.ts","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.html","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/date-picker-dropdown.types.ts","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.ts","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.html","../../../projects/ng-zenduit/src/lib/file-uploader/zendu-file-uploader.component.ts","../../../projects/ng-zenduit/src/lib/file-uploader/zendu-file-uploader.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-group.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-group.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-label-group.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-label-group.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-profile-photo.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-profile-photo.component.html","../../../projects/ng-zenduit/src/lib/slider/zendu-slider.component.ts","../../../projects/ng-zenduit/src/lib/slider/zendu-slider.component.html","../../../projects/ng-zenduit/src/lib/badge/zen-badge.component.ts","../../../projects/ng-zenduit/src/lib/badge/zen-badge.component.html","../../../projects/ng-zenduit/src/lib/dropdown-menu/zen-dropdown-menu.component.ts","../../../projects/ng-zenduit/src/lib/dropdown-menu/zen-dropdown-menu.component.html","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.component.ts","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.component.html","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.directive.ts","../../../projects/ng-zenduit/src/lib/eld-status/zen-eld-status.component.ts","../../../projects/ng-zenduit/src/lib/eld-status/zen-eld-status.component.html","../../../projects/ng-zenduit/src/lib/nav-search/zen-nav-search.component.ts","../../../projects/ng-zenduit/src/lib/nav-search/zen-nav-search.component.html","../../../projects/ng-zenduit/src/lib/submodule-item/zen-submodule-item.component.ts","../../../projects/ng-zenduit/src/lib/submodule-item/zen-submodule-item.component.html","../../../projects/ng-zenduit/src/lib/subpage-item/zen-subpage-item.component.ts","../../../projects/ng-zenduit/src/lib/subpage-item/zen-subpage-item.component.html","../../../projects/ng-zenduit/src/lib/module-popup/zen-module-popup.component.ts","../../../projects/ng-zenduit/src/lib/module-popup/zen-module-popup.component.html","../../../projects/ng-zenduit/src/lib/chart/zen-chart.component.ts","../../../projects/ng-zenduit/src/lib/chart/zen-chart.component.html","../../../projects/ng-zenduit/src/lib/progress-steps/zen-step-base.component.ts","../../../projects/ng-zenduit/src/lib/progress-steps/zen-step-base.component.html","../../../projects/ng-zenduit/src/lib/progress-steps/zen-progress-steps.component.ts","../../../projects/ng-zenduit/src/lib/progress-steps/zen-progress-steps.component.html","../../../projects/ng-zenduit/src/lib/ng-zenduit.module.ts","../../../projects/ng-zenduit/src/public-api.ts","../../../projects/ng-zenduit/src/ng-zenduit.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport { show as showSnackbar } from \"node-snackbar\"\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenNotifyService {\n\n public info(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public success(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n backgroundColor: \"#5cbb3a\",// $color-success-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public warn(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.warn(msg);\n showSnackbar({\n pos: \"top-center\",\n text: msg,\n textColor: \"white\",\n backgroundColor: \"#f1b10b\",// $color-alert-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n public error(\n err: unknown,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.error(err);\n showSnackbar({\n pos: \"top-center\",\n text: this.getErrorMessage(err),\n textColor: \"white\",\n backgroundColor: \"#dc3e33\",// $color-error-primary\n duration: duration,\n actionText: \"dismiss\",\n actionTextColor: \"white\",\n showAction: hasDismiss\n })\n }\n\n private getErrorMessage(ex: any): string {\n if (!ex) {\n return '';\n }\n\n if (typeof ex === 'string') {\n return ex;\n }\n else if (typeof ex.error === 'string') {\n return ex.error;\n }\n else if (ex.error && ex.error.message) {\n return ex.error.message;\n }\n else if (ex.message) {\n return ex.message;\n }\n else if (ex.status && ex.statusText) {\n return `Http error ${ex.status} ${ex.statusText}`;\n }\n else if (ex.statusText) {\n return ex.statusText;\n }\n else {\n console.warn('Can\\'t extract error message from object:', ex);\n return '';\n }\n }\n}\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-checkbox',\n templateUrl: './zendu-checkbox.component.html',\n styleUrls: ['./zendu-checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduCheckboxComponent {\n\n @Input() checked: boolean;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n @Input() label: string | number = 'Enable';\n\n @Input() labelColor: string = \"\";\n\n @Input() disabled = false;\n\n @Input() disableValueChange = false;\n\n @Input() indeterminate = false;\n\n @Input() imageUrl: string;\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() supportingText: string;\n\n /**\n * Toggle state\n */\n public toggle(): void {\n if (this.disabled || this.disableValueChange) {\n return;\n }\n\n this.checked = !this.checked;\n this.indeterminate = false;\n\n this.checkedChange.emit(this.checked);\n }\n}\n","<div class=\"checkbox-component\"\n [ngClass]=\"{'app-disabled': disabled, 'checkbox-md': size === 'md'}\"\n (click)=\"toggle()\">\n <button class=\"app-checkbox\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'app-checked': checked && !indeterminate, 'app-indeterminate': indeterminate }\">\n @if (checked && !indeterminate) {\n <i\n class=\"material-icons app-checkbox-icon\">done</i>\n }\n @if (indeterminate) {\n <i\n class=\"material-icons app-checkbox-icon\">remove</i>\n }\n </button>\n @if (label || supportingText) {\n <div class=\"app-checkbox-text-wrap\"\n >\n @if (label) {\n <div class=\"app-checkbox-label\"\n [ngStyle]=\"{'color': labelColor }\">\n @if (imageUrl) {\n <img class=\"checkbox-image\"\n [src]=\"imageUrl\"\n >\n }\n {{ label }}\n </div>\n }\n @if (supportingText) {\n <div class=\"app-checkbox-supporting-text\"\n >\n {{ supportingText }}\n </div>\n }\n </div>\n }\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-colorpicker',\n templateUrl: './zendu-colorpicker.component.html',\n styleUrls: ['./zendu-colorpicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduColorPickerComponent implements OnChanges {\n\n @Input() color: string;\n\n @Output() colorChange = new EventEmitter<string>();\n\n @Input() icon = \"text\";\n\n @Input() customTarget: HTMLElement;\n\n @Input() showNone = true;\n\n public opened = false;\n\n public menuLeft = \"0px\";\n\n public menuTop = \"\";\n\n public menuBottom = \"\";\n public colorsRows: { colors: string[] }[] = [\n { colors: [\"#5B0F00\", \"#660000\", \"#783F04\", \"#7F6000\", \"#274E13\", \"#0C343D\", \"#1C4587\", \"#073763\", \"#20124D\", \"#4C1130\"] },\n { colors: [\"#85200C\", \"#990000\", \"#B45F06\", \"#BF9000\", \"#38761D\", \"#134F5C\", \"#1155CC\", \"#0B5394\", \"#351C75\", \"#741B47\"] },\n { colors: [\"#A61C00\", \"#CC0000\", \"#E69138\", \"#F1C232\", \"#6AA84F\", \"#45818E\", \"#3C78D8\", \"#3D85C6\", \"#674EA7\", \"#A64D79\"] },\n { colors: [\"#CC4125\", \"#E06666\", \"#F6B26B\", \"#FFD966\", \"#93C47D\", \"#76A5AF\", \"#6D9EEB\", \"#6FA8DC\", \"#8E7CC3\", \"#C27BA0\"] },\n { colors: [\"#DD7E6B\", \"#EA9999\", \"#F9CB9C\", \"#FFE599\", \"#B6D7A8\", \"#A2C4C9\", \"#A4C2F4\", \"#9FC5E8\", \"#B4A7D6\", \"#D5A6BD\"] },\n { colors: [\"#E6B8AF\", \"#F4CCCC\", \"#FCE5CD\", \"#FFF2CC\", \"#D9EAD3\", \"#D0E0E3\", \"#C9DAF8\", \"#CFE2F3\", \"#D9D2E9\", \"#EAD1DC\"] },\n ]\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hidePicker();\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n constructor(\n private _element: ElementRef\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"customTarget\"] &&\n changes[\"customTarget\"].currentValue &&\n this.customTarget) {\n this.customTarget.addEventListener(\"click\", this.toggleEvent.bind(this));\n }\n this.updatePlacement();\n }\n\n public toggleEvent(evt: MouseEvent) {\n this.toggle();\n evt.stopPropagation();\n }\n\n public toggle() {\n this.updatePlacement();\n this.opened = !this.opened;\n }\n\n public updatePlacement() {\n\n let container: HTMLElement;\n if (this.customTarget) {\n container = this.customTarget;\n }\n else {\n const component = this._element.nativeElement as HTMLElement;\n container = component.getElementsByClassName(\"colorpicker-component\").item(0) as HTMLElement;\n }\n\n const left = container.getBoundingClientRect().left;\n const top = container.getBoundingClientRect().top;\n const bottom = container.getBoundingClientRect().bottom;\n\n const margin = 8;\n\n this.menuLeft = `${left}px`;\n const distToBottomOfPage = window.innerHeight - top;\n if (distToBottomOfPage > 150) {\n this.menuTop = `${bottom + margin}px`;\n this.menuBottom = \"\";\n }\n else {\n const bottomFixed = window.innerHeight - top + margin;\n this.menuBottom = `${bottomFixed}px`;\n this.menuTop = \"\";\n }\n }\n\n private hidePicker() {\n this.opened = false;\n }\n\n public selectColor(color: string) {\n this.color = color;\n this.colorChange.emit(color);\n }\n}\n","<div class=\"colorpicker-component\"\n (click)=\"toggle()\"\n [class.opened]=\"opened\"\n [class.no-size]=\"customTarget\">\n\n @if (!customTarget) {\n @if (icon == 'text') {\n <div>\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_text.svg\"\n class=\"icon-text\">\n </div>\n }\n @if (icon == 'paint') {\n <div>\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_paint.svg\"\n class=\"icon-paint\">\n </div>\n }\n <div class=\"toggle\">\n <i class=\"material-icons\">arrow_drop_down</i>\n </div>\n <div class=\"color-line\"\n [ngStyle]=\"{'border-color': color}\">\n </div>\n }\n\n @if (opened) {\n <div\n class=\"color-menu\"\n [ngStyle]=\"{ 'left': menuLeft, 'top': menuTop, 'bottom': menuBottom }\">\n <div class=\"colors-container\">\n @for (row of colorsRows; track row) {\n <div\n class=\"color-row\">\n @for (rowColor of row.colors; track rowColor) {\n <div\n (click)=\"selectColor(rowColor)\"\n class=\"color-item\"\n [ngStyle]=\"{'background-color': rowColor}\">\n @if (rowColor == color) {\n <div\n class=\"select-icon\">\n <i class=\"material-icons\">check</i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n @if (showNone) {\n <div\n class=\"no-color\"\n (click)=\"selectColor('')\">\n None\n </div>\n }\n </div>\n }\n</div>\n","// import { environment } from 'src/environments/environment';\ninterface IGeocodingRes {\n Name: string;\n\n City: string;\n\n Country: string;\n\n PostalCode: string;\n\n Street: string;\n\n State: string;\n\n Bounds: H.geo.Rect;\n}\nexport class Util {\n\n private _platform: H.service.Platform;\n constructor() {\n // this._platform = new H.service.Platform({\n // apikey: environment.hereMaps\n // });\n}\n public static debounce(func: any, wait: number, immediate?: boolean) {\n let timeout: any;\n const context: any = this;\n\n return function executedFunction() {\n const args = arguments;\n\n const later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n const callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n public static clone<T>(source: T): T\n {\n let str = JSON.stringify(source);\n let outObj = JSON.parse(str);\n\n this.updateClone(outObj);\n\n // Convert in the output object ISO string to Date object\n //\n // @ts-ignore\n for(let key of Object.keys(source))\n {\n const val = (source as any)[key];\n if(val &&\n typeof val == \"object\" &&\n typeof val.getTime == \"function\" &&\n typeof val.getDate == \"function\")\n {\n outObj[key] = new Date(val);\n }\n }\n\n return outObj;\n }\n\n\n\n /**\n * Remove internal angularjs properties\n * @param obj\n */\n private static updateClone(obj: any)\n {\n if(!obj)\n {\n return;\n }\n if(Array.isArray(obj))\n {\n for(let item of obj)\n {\n if(!item)\n {\n item = item;\n }\n this.updateClone(item);\n }\n return;\n }\n\n let type = typeof obj;\n if(type == \"string\" || type == \"number\")\n {\n return;\n }\n\n // Remove invalid props\n let keys = Object.keys(obj);\n keys.forEach((key) =>\n {\n if(key[0] == '$' ||\n key[0] == '&')\n {\n delete obj[key];\n return;\n }\n\n let val = obj[key];\n if(Array.isArray(val))\n {\n let arr = <Array<any>>val;\n for(let k of arr)\n {\n this.updateClone(k);\n }\n }\n else if(typeof val == \"object\")\n {\n this.updateClone(val);\n }\n });\n }\n\n\n public static copyProperties(source: any, dest: any)\n {\n for(let key of Object.keys(source))\n {\n dest[key] = source[key];\n }\n }\n\n public static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n })\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ViewChild,\n ElementRef,\n OnInit,\n OnChanges,\n SimpleChanges,\n HostBinding,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\nexport interface DropdownOption {\n label: string;\n value: string | number;\n icon?: string;\n}\n\n@Component({\n selector: 'zen-input',\n templateUrl: './zendu-input.component.html',\n styleUrls: ['./zendu-input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZenduInputComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduInputComponent implements ControlValueAccessor, OnInit, OnChanges {\n \n @ViewChild('inputElement') inputElement: ElementRef<HTMLInputElement>;\n \n /**\n * Input type attribute\n */\n @Input() type: 'text' | 'email' | 'password' | 'tel' | 'number' | 'url' | 'search' = 'text';\n \n /**\n * Input variant type\n */\n @Input() variant: 'default' | 'input-field' | 'payment' | 'leading-dropdown' | 'leading-text' | 'trailing-dropdown' | 'trailing-text' = 'default';\n \n /**\n * Placeholder text\n */\n @Input() placeholder = '';\n \n /**\n * Label text (shown above input)\n */\n @Input() label = '';\n \n /**\n * Hint text (shown below input)\n */\n @Input() hintText = '';\n \n /**\n * Leading icon name (Material Icons)\n */\n @Input() leadingIcon = '';\n \n /**\n * Show help icon with tooltip\n */\n @Input() helpIcon = false;\n \n /**\n * Tooltip text for help icon\n */\n @Input() helpTooltip = 'This is a tooltip';\n \n /**\n * Error/destructive state\n */\n @Input() destructive = false;\n \n /**\n * Error message to display\n */\n @Input() errorMessage = '';\n \n /**\n * Disabled state\n */\n @Input() disabled = false;\n \n /**\n * Required field\n */\n @Input() required = false;\n \n /**\n * Maximum character length\n */\n @Input() maxLength: number;\n \n /**\n * Minimum character length\n */\n @Input() minLength: number;\n \n /**\n * Pattern for validation\n */\n @Input() pattern: string;\n \n /**\n * Autocomplete attribute\n */\n @Input() autocomplete = 'off';\n \n /**\n * Name attribute\n */\n @Input() name = '';\n \n /**\n * ID attribute\n */\n @Input() id = '';\n \n /**\n * Leading dropdown options\n */\n @Input() leadingDropdownOptions: DropdownOption[] = [];\n \n /**\n * Selected leading dropdown value\n */\n @Input() leadingDropdownValue: string | number = '';\n \n /**\n * Leading dropdown placeholder\n */\n @Input() leadingDropdownPlaceholder = 'Select';\n \n /**\n * Trailing dropdown options\n */\n @Input() trailingDropdownOptions: DropdownOption[] = [];\n \n /**\n * Selected trailing dropdown value\n */\n @Input() trailingDropdownValue: string | number = '';\n \n /**\n * Trailing dropdown placeholder\n */\n @Input() trailingDropdownPlaceholder = 'Select';\n \n /**\n * Leading static text\n */\n @Input() leadingText = '';\n\n /**\n * Trailing static text\n */\n @Input() trailingText = '';\n \n /**\n * Input size\n */\n @Input() size: 'sm' | 'md' = 'md';\n \n /**\n * Show character counter\n */\n @Input() showCharacterCount = false;\n \n /**\n * Phone input maximum length\n */\n @Input() phoneMaxLength: number = 13;\n \n /**\n * Phone number value (for tel type)\n */\n @Input() phone: string = '';\n \n /**\n * Width for phone input\n */\n @Input() width: string;\n \n /**\n * Value change event\n */\n @Output() valueChange = new EventEmitter<string>();\n \n /**\n * Focus event\n */\n @Output() inputFocus = new EventEmitter<FocusEvent>();\n \n /**\n * Blur event\n */\n @Output() inputBlur = new EventEmitter<FocusEvent>();\n \n /**\n * Keydown event\n */\n @Output() inputKeydown = new EventEmitter<KeyboardEvent>();\n \n /**\n * Keyup event\n */\n @Output() inputKeyup = new EventEmitter<KeyboardEvent>();\n \n /**\n * Leading dropdown change event\n */\n @Output() leadingDropdownChange = new EventEmitter<string | number>();\n \n /**\n * Leading dropdown value change event (for two-way binding)\n */\n @Output() leadingDropdownValueChange = new EventEmitter<string | number>();\n \n /**\n * Trailing dropdown change event\n */\n @Output() trailingDropdownChange = new EventEmitter<string | number>();\n \n /**\n * Trailing dropdown value change event (for two-way binding)\n */\n @Output() trailingDropdownValueChange = new EventEmitter<string | number>();\n \n /**\n * Help icon click event\n */\n @Output() helpIconClick = new EventEmitter<MouseEvent>();\n \n /**\n * Phone change event\n */\n @Output() phoneChange = new EventEmitter<string>();\n \n /**\n * Phone valid change event\n */\n @Output() validChange = new EventEmitter<boolean>();\n \n /**\n * Leading icon click event\n */\n @Output() leadingIconClick = new EventEmitter<MouseEvent>();\n \n // Internal properties\n public value = '';\n public isFocused = false;\n public showHelpTooltip = false;\n public leadingDropdownOpen = false;\n public trailingDropdownOpen = false;\n \n // Phone input properties\n public phoneText = '';\n public countryList: { countryCode: string, countryName: string, countryCallingCode: string, flag: string }[] = [\n {\n countryCode: \"US\",\n countryName: \"America\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/USA.svg\"\n },\n {\n countryCode: \"CA\",\n countryName: \"Canada\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Canada.svg\"\n },\n {\n countryCode: \"MX\",\n countryName: \"Mexico\",\n countryCallingCode: \"+52\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Mexico.svg\"\n }\n ];\n \n public customCountry = {\n countryCode: \"\",\n countryName: \"Custom\",\n countryCallingCode: \"\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Custom.svg\"\n };\n \n public selectedCountry: { countryCode: string, countryName: string, countryCallingCode: string, flag: string };\n public isPhoneDropdownExpanded = false;\n \n // ControlValueAccessor implementation\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n \n @HostBinding('class.zen-input-wrapper')\n get hostClass(): boolean {\n return true;\n }\n \n ngOnInit(): void {\n // Set default ID if not provided\n if (!this.id) {\n this.id = `zen-input-${Math.random().toString(36).substr(2, 9)}`;\n }\n \n // Initialize phone input if type is tel\n if (this.type === 'tel') {\n this.selectedCountry = this.countryList[1]; // Default to Canada\n this.parsePhoneNumber();\n }\n }\n \n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"phone\"] && this.type === 'tel' && (!this.selectedCountry || !this.selectedCountry.countryCode)) {\n this.parsePhoneNumber();\n }\n }\n \n // ControlValueAccessor methods\n writeValue(value: string): void {\n this.value = value || '';\n }\n \n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n \n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n \n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n \n // Event handlers\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n \n if (this.type === 'tel') {\n // Handle phone input\n this.phoneText = target.value;\n this.onPhoneChanged(target);\n } else {\n // Handle regular input\n this.value = target.value;\n this.onChange(this.value);\n this.valueChange.emit(this.value);\n }\n }\n \n onInputFocus(event: FocusEvent): void {\n this.isFocused = true;\n this.onTouched();\n this.inputFocus.emit(event);\n }\n \n onInputBlur(event: FocusEvent): void {\n this.isFocused = false;\n this.inputBlur.emit(event);\n }\n \n onKeydown(event: KeyboardEvent): void {\n this.inputKeydown.emit(event);\n }\n \n onKeyup(event: KeyboardEvent): void {\n this.inputKeyup.emit(event);\n }\n \n onLeadingDropdownChange(value: string | number): void {\n this.leadingDropdownValue = value;\n this.leadingDropdownChange.emit(value);\n this.leadingDropdownValueChange.emit(value);\n this.leadingDropdownOpen = false;\n }\n \n onTrailingDropdownChange(value: string | number): void {\n this.trailingDropdownValue = value;\n this.trailingDropdownChange.emit(value);\n this.trailingDropdownValueChange.emit(value);\n this.trailingDropdownOpen = false;\n }\n \n toggleLeadingDropdown(): void {\n if (!this.disabled) {\n this.leadingDropdownOpen = !this.leadingDropdownOpen;\n this.trailingDropdownOpen = false;\n }\n }\n \n toggleTrailingDropdown(): void {\n if (!this.disabled) {\n this.trailingDropdownOpen = !this.trailingDropdownOpen;\n this.leadingDropdownOpen = false;\n }\n }\n \n onHelpIconClick(event: MouseEvent): void {\n this.showHelpTooltip = !this.showHelpTooltip;\n this.helpIconClick.emit(event);\n }\n \n closeDropdowns(): void {\n this.leadingDropdownOpen = false;\n this.trailingDropdownOpen = false;\n }\n \n get hasValue(): boolean {\n return this.value !== '' && this.value !== null && this.value !== undefined;\n }\n \n get showLabel(): boolean {\n return !!this.label;\n }\n \n get showHintText(): boolean {\n return !!this.hintText || (this.destructive && !!this.errorMessage);\n }\n \n get displayHintText(): string {\n if (this.destructive && this.errorMessage) {\n return this.errorMessage;\n }\n return this.hintText;\n }\n \n get characterCount(): string {\n const currentLength = this.value ? this.value.length : 0;\n if (this.maxLength) {\n return `${currentLength}/${this.maxLength}`;\n }\n return `${currentLength}`;\n }\n \n get inputClasses(): string {\n const classes = ['zen-input-container'];\n \n if (this.isFocused) {\n classes.push('focused');\n }\n \n if (this.hasValue) {\n classes.push('filled');\n }\n \n if (this.disabled) {\n classes.push('disabled');\n }\n \n if (this.destructive) {\n classes.push('destructive');\n }\n \n if (this.size) {\n classes.push(`size-${this.size}`);\n }\n \n if (this.variant) {\n classes.push(`variant-${this.variant}`);\n }\n \n return classes.join(' ');\n }\n \n getLeadingDropdownLabel(): string {\n const selected = this.leadingDropdownOptions.find(opt => opt.value === this.leadingDropdownValue);\n return selected ? selected.label : this.leadingDropdownPlaceholder;\n }\n \n getTrailingDropdownLabel(): string {\n const selected = this.trailingDropdownOptions.find(opt => opt.value === this.trailingDropdownValue);\n return selected ? selected.label : this.trailingDropdownPlaceholder;\n }\n \n focusInput(): void {\n if (this.inputElement) {\n this.inputElement.nativeElement.focus();\n }\n }\n \n // Phone input methods\n parsePhoneNumber(): void {\n try {\n this.phoneText = this.phone || '';\n\n if (this.phone) {\n const countryFromList = this.countryList.find(country => \n this.phone.startsWith(country.countryCallingCode) || \n `+${this.phone}`.startsWith(country.countryCallingCode)\n );\n if (countryFromList) {\n this.selectedCountry = countryFromList || this.customCountry;\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n const parsedPhone = phoneNumberUtil.parse(this.phone || \"\", 'US');\n setTimeout(() => {\n if (this.phoneText.startsWith('+')) {\n this.phoneText = this.phoneText.replace(`+${parsedPhone.getCountryCode()}`, \"\");\n } else if (this.phoneText.startsWith(parsedPhone.getCountryCode())) {\n this.phoneText = this.phoneText.replace(parsedPhone.getCountryCode(), \"\");\n }\n this.onPhoneChanged();\n });\n } else {\n this.selectedCountry = this.customCountry; \n }\n } else {\n this.selectedCountry = this.customCountry;\n }\n } catch (err) {\n console.warn(`Can't parse phone: ${this.phone}`, err);\n this.selectedCountry = this.customCountry;\n }\n }\n \n onCountryChanged(country): void {\n this.isPhoneDropdownExpanded = false;\n this.selectedCountry = country;\n this.onPhoneChanged();\n }\n \n onPhoneChanged(input?: HTMLInputElement): void {\n // allow + in custom country\n let custom = false;\n if (this.selectedCountry === this.customCountry && this.phoneText.includes('+')) {\n custom = true;\n }\n \n const phoneText = (this.phoneText || '').replace(/\\D/g, '');\n this.phoneText = custom ? `+${phoneText}` : phoneText;\n if (input && input.value !== this.phoneText) {\n input.value = this.phoneText;\n }\n const fullNumber = `${this.selectedCountry.countryCallingCode}${this.phoneText}`;\n if (this.phone !== fullNumber) {\n this.phoneChange.emit(fullNumber);\n // Also update the main value for form integration\n this.value = fullNumber;\n this.onChange(this.value);\n this.valueChange.emit(this.value);\n }\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n if (this.selectedCountry === this.customCountry) {\n this.validChange.emit(true);\n } else {\n try {\n this.validChange.emit(phoneNumberUtil.isValidNumber(phoneNumberUtil.parseAndKeepRawInput(fullNumber)));\n } catch {\n this.validChange.emit(false);\n }\n }\n }\n \n hidePhoneDropdown(): void {\n this.isPhoneDropdownExpanded = false;\n }\n \n togglePhoneDropdown(): void {\n if (this.disabled) {\n return;\n }\n this.isPhoneDropdownExpanded = !this.isPhoneDropdownExpanded;\n }\n \n onPhoneInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.phoneText = target.value;\n this.onPhoneChanged(target);\n }\n \n onLeadingIconClick(event: MouseEvent): void {\n event.stopPropagation();\n this.leadingIconClick.emit(event);\n \n // Focus the input when leading icon is clicked\n this.focusInput();\n }\n}","<div class=\"zen-input-container\" [ngClass]=\"inputClasses\">\n <!-- Label -->\n @if (showLabel) {\n <label\n [for]=\"id\"\n class=\"zen-input-label text text-sm text-weight-medium\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n @if (required) {\n <span class=\"required-indicator\">*</span>\n }\n </label>\n }\n\n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n\n <!-- Leading icon -->\n @if (leadingIcon && variant === 'default') {\n <i\n class=\"material-icons zen-input-leading-icon\"\n (click)=\"onLeadingIconClick($event)\">\n {{ leadingIcon }}\n </i>\n }\n\n <!-- Leading dropdown -->\n @if (variant === 'leading-dropdown') {\n <div\n class=\"zen-input-leading-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggleLeadingDropdown(); $event.stopPropagation()\">\n <span class=\"dropdown-label\">{{ getLeadingDropdownLabel() }}</span>\n <i class=\"material-icons dropdown-icon\">expand_more</i>\n </button>\n @if (leadingDropdownOpen) {\n <div class=\"zen-dropdown-menu\"\n [ngClass]=\"{'open': leadingDropdownOpen}\">\n @for (option of leadingDropdownOptions; track option) {\n <button\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === leadingDropdownValue}\"\n (click)=\"onLeadingDropdownChange(option.value); $event.stopPropagation()\">\n @if (option.icon) {\n <i class=\"material-icons option-icon\">{{ option.icon }}</i>\n }\n {{ option.label | translate }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Leading text -->\n @if (variant === 'leading-text') {\n <span\n class=\"zen-input-leading-text text text-md text-weight-regular\">\n {{ leadingText }}\n </span>\n }\n\n <!-- Payment card icon -->\n @if (variant === 'payment') {\n <div\n class=\"zen-payment-card-icon\">\n <i class=\"material-icons card-icon\">payment</i>\n </div>\n }\n\n <!-- Input content based on type -->\n @if (type === 'tel') {\n <ng-container *ngTemplateOutlet=\"phoneInputTemplate\"></ng-container>\n } @else {\n <input #inputElement\n [type]=\"type\"\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [attr.maxlength]=\"maxLength\"\n [attr.minlength]=\"minLength\"\n [pattern]=\"pattern\"\n [autocomplete]=\"autocomplete\"\n class=\"zen-input-field text text-md text-weight-regular\"\n [ngClass]=\"{'zen-payment-field': variant === 'payment'}\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\" />\n }\n\n <!-- Default input template -->\n\n <!-- Trailing elements container -->\n <div class=\"zen-input-trailing-container\">\n <!-- Trailing text -->\n @if (variant === 'trailing-text') {\n <span\n class=\"zen-input-trailing-text text text-md text-weight-regular\">\n {{ trailingText }}\n </span>\n }\n\n <!-- Character counter -->\n @if (showCharacterCount && !helpIcon && variant === 'default') {\n <span\n class=\"zen-character-count text text-sm text-weight-regular\">\n {{ characterCount }}\n </span>\n }\n\n <!-- Help icon -->\n @if (helpIcon && variant !== 'trailing-dropdown') {\n <button\n type=\"button\"\n class=\"zen-help-icon\"\n [disabled]=\"disabled\"\n (click)=\"onHelpIconClick($event); $event.stopPropagation()\">\n <i class=\"material-icons-outlined\">help_outline</i>\n <!-- Help tooltip -->\n @if (showHelpTooltip) {\n <div class=\"zen-help-tooltip\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"tooltip-content\">\n {{ helpTooltip | translate }}\n </div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n }\n </button>\n }\n\n <!-- Trailing dropdown -->\n @if (variant === 'trailing-dropdown') {\n <div\n class=\"zen-input-trailing-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggleTrailingDropdown(); $event.stopPropagation()\">\n <span class=\"dropdown-label\">{{ getTrailingDropdownLabel() }}</span>\n <i class=\"material-icons dropdown-icon\">expand_more</i>\n </button>\n @if (trailingDropdownOpen) {\n <div class=\"zen-dropdown-menu dropdown-menu-right\"\n [ngClass]=\"{'open': trailingDropdownOpen}\">\n @for (option of trailingDropdownOptions; track option) {\n <button\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === trailingDropdownValue}\"\n (click)=\"onTrailingDropdownChange(option.value); $event.stopPropagation()\">\n @if (option.icon) {\n <i class=\"material-icons option-icon\">{{ option.icon }}</i>\n }\n {{ option.label | translate }}\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Hint text / Error message -->\n @if (showHintText) {\n <div\n class=\"zen-input-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n @if (destructive) {\n <i class=\"material-icons-outlined hint-icon\">error_outline</i>\n }\n {{ displayHintText | translate }}\n </div>\n }\n\n <!-- Phone Country Dropdown (for tel type) -->\n @if (type === 'tel' && isPhoneDropdownExpanded) {\n <div\n class=\"zen-phone-dropdown-menu\">\n <div class=\"zen-phone-dropdown-list\">\n <!-- Countries List -->\n @for (country of countryList; track country) {\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === country.countryName}\"\n (click)=\"onCountryChanged(country)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"country.flag\"\n [alt]=\"country.countryName\">\n <span class=\"zen-phone-country-name\">{{ country.countryName | translate }}</span>\n <span class=\"zen-phone-country-code\">{{ country.countryCallingCode }}</span>\n </button>\n }\n <!-- Custom Country -->\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"onCountryChanged(customCountry)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"customCountry.flag\"\n [alt]=\"customCountry.countryName\">\n <span class=\"zen-phone-country-name\">{{ customCountry.countryName | translate }}</span>\n <span class=\"zen-phone-country-code\">{{ customCountry.countryCallingCode }}</span>\n </button>\n </div>\n </div>\n }\n</div>\n\n<!-- Phone Input Template -->\n<ng-template #phoneInputTemplate>\n <!-- Phone country selector -->\n <div class=\"zen-phone-country-select\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"selectedCountry.flag\"\n [alt]=\"selectedCountry.countryName\">\n <span class=\"zen-phone-code\">{{ selectedCountry.countryCallingCode }}</span>\n <button type=\"button\"\n class=\"zen-phone-dropdown-btn\"\n [disabled]=\"disabled\"\n (click)=\"togglePhoneDropdown(); $event.stopPropagation()\">\n <i class=\"material-icons zen-phone-expand-icon\"\n [ngClass]=\"{'active': isPhoneDropdownExpanded}\">expand_more</i>\n </button>\n </div>\n\n <!-- Phone input field -->\n <input #inputElement\n type=\"text\"\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [value]=\"phoneText\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [attr.maxlength]=\"phoneMaxLength\"\n [attr.minlength]=\"minLength\"\n [autocomplete]=\"autocomplete\"\n class=\"zen-input-field text text-md text-weight-regular\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\" />\n</ng-template>\n\n<!-- Click outside handler for dropdowns -->\n@if (leadingDropdownOpen || trailingDropdownOpen || isPhoneDropdownExpanded) {\n <div\n class=\"zen-dropdown-backdrop\"\n (click)=\"closeDropdowns(); hidePhoneDropdown()\"></div>\n}","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { Util } from '../util';\n\n@Component({\n selector: 'zen-search-box',\n templateUrl: './zendu-search-box.component.html',\n styleUrls: ['./zendu-search-box.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSearchBoxComponent implements OnInit {\n @Input() text: string;\n\n @Output() textChange = new EventEmitter<string>();\n\n @Input() set delay(val: number) {\n this.setDelay(val);\n }\n\n @Input() autoFocus = true;\n\n @Input() disabled = false;\n\n @Input() public placeholder = 'Search';\n\n private _debouncedInvoke!: () => void;\n\n private _focusAttempts = 0;\n\n public constructor(private _element: ElementRef, private _ngZone: NgZone) {\n this.setDelay(500);\n }\n\n public ngOnInit(): void {\n // give 100ms for autoFocus initalization\n setTimeout(() => {\n if (this.autoFocus) {\n this.doFocus();\n }\n }, 100);\n }\n\n public onChange() {\n this._debouncedInvoke();\n }\n\n public clearFromParent() {\n this.text = '';\n }\n\n public clear() {\n this.text = '';\n this._debouncedInvoke();\n }\n\n private invokeChange() {\n this._ngZone.run(() => {\n this.textChange.emit(this.text);\n });\n }\n\n private setDelay(delay: number) {\n this._debouncedInvoke = Util.debounce(() => {\n this.invokeChange();\n }, delay);\n }\n\n public doFocus() {\n this._focusAttempts++;\n if (this._focusAttempts > 100) {\n // stop attempts to initalize\n return;\n }\n\n const input = this.getInput(this._element.nativeElement);\n if (!input) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n // check if element visible or not\n const height = input.clientHeight;\n if (height == 0) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n\n // set focus to element\n setTimeout(() => {\n input.focus();\n }, 1);\n }\n\n private getInput(element: HTMLElement | null): HTMLInputElement | null {\n if (!element) {\n return null;\n }\n if (element.nodeName == 'INPUT') {\n return element as HTMLInputElement;\n }\n\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (el && el.nodeName == 'INPUT') {\n return el as HTMLInputElement;\n }\n }\n\n // find input in the children tree\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (!el) {\n continue;\n }\n const elInput = this.getInput(el as HTMLElement);\n if (elInput) {\n return elInput;\n }\n }\n\n return null;\n }\n}\n","<div class=\"search-box-component\"\n [class.has-text]=\"text\">\n <zen-input [(ngModel)]=\"text\"\n [placeholder]=\"placeholder | translate\"\n [disabled]=\"disabled\"\n leadingIcon=\"search\"\n autocomplete=\"off\"\n (ngModelChange)=\"onChange()\">\n </zen-input>\n @if (text) {\n <i class=\"material-icons close-icon\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"clear(); $event.stopPropagation()\">close</i>\n }\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ColumnState } from './columnState';\nimport { Util } from './../util';\n\n@Component({\n selector: 'zen-column-configuration',\n templateUrl: './zendu-column-configuration.component.html',\n styleUrls: ['./zendu-column-configuration.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduColumnConfigurationComponent implements OnChanges {\n /**\n * callback to emit changes for parent component\n */\n @Output() configurationChange = new EventEmitter<ColumnState[]>();\n\n /**\n * input propery\n */\n @Input() configuration: ColumnState[] = [];\n\n /**\n * Default configuration for reset button\n */\n @Input() defaultConfiguration: ColumnState[] = [];\n\n /**\n * dropdown position\n */\n @Input() dropdownPosition: 'right' | 'left' = 'right';\n\n /**\n * Inital configuration\n */\n private _sourceConfiguration: ColumnState[] = [];\n\n public tempColumnConfiguration: ColumnState[] = [];\n\n public filteredColumnsConfiguration: ColumnState[] = [];\n\n public showPanel: boolean = false;\n\n public searchText = '';\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n // hide the menu for outside click\n this.hide();\n }\n\n ngOnChanges(changes: any): void {\n if (changes.configuration.currentValue && this.configuration) {\n this.initData();\n }\n }\n\n public initData() {\n this.tempColumnConfiguration = Util.clone(this.configuration);\n this._sourceConfiguration = Util.clone(this.configuration);\n this.filterItems();\n }\n\n public togglePanel() {\n this.showPanel = !this.showPanel;\n // clear search\n this.searchText = '';\n if (this.showPanel) {\n // restore inital values on open\n this.tempColumnConfiguration = Util.clone(this._sourceConfiguration);\n }\n this.filterItems();\n }\n\n public apply() {\n this.configuration = Util.clone(this.tempColumnConfiguration);\n // overwrite the default as well\n this._sourceConfiguration = Util.clone(this.tempColumnConfiguration);\n this.showPanel = false;\n this.configurationChange.emit(this.configuration);\n }\n\n public hide() {\n this.showPanel = false;\n }\n\n public onDrop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(\n this.filteredColumnsConfiguration,\n event.previousIndex,\n event.currentIndex\n );\n this.tempColumnConfiguration = this.filteredColumnsConfiguration;\n }\n\n public reset() {\n if (this.defaultConfiguration && this.defaultConfiguration.length) {\n // use the default configuration\n this.tempColumnConfiguration = Util.clone(this.defaultConfiguration);\n } else {\n // activate all items\n for (const item of this.tempColumnConfiguration) {\n item.isVisible = true;\n }\n }\n this.filterItems();\n }\n\n public filterItems(): void {\n this.filteredColumnsConfiguration = this.tempColumnConfiguration.filter(\n (col) =>\n col.displayName\n .toLowerCase()\n .includes(this.searchText.trim().toLowerCase())\n );\n }\n}\n","<div class=\"column-config-component\">\n <button class=\"button-basic button-icon\"\n [ngClass]=\"{ 'active': showPanel }\"\n (click)=\"togglePanel()\">\n <i class=\"material-icons\">view_column</i>\n </button>\n\n @if (showPanel) {\n <div\n class=\"action-menu column-config-menu\"\n [ngClass]=\"{'right': dropdownPosition === 'right'}\">\n <div class=\"action-menu-header\">\n <div class=\"title\">Manage Columns</div>\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"filterItems()\"></zen-search-box>\n </div>\n <div class=\"action-menu-body dnd-container\"\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (config of filteredColumnsConfiguration; track config) {\n <div\n class=\"action-item-checkbox drag-item\"\n cdkDrag>\n <zen-checkbox class=\"flex-1\"\n [(checked)]=\"config.isVisible\"\n [label]=\"config.displayName\"></zen-checkbox>\n <i class=\"material-icons drag-icon\">drag_handle</i>\n </div>\n }\n </div>\n <div class=\"action-menu-footer\">\n <button (click)=\"reset()\"\n type=\"button\"\n class=\"button-stroked full-width\">Reset</button>\n <button (click)=\"apply()\"\n type=\"button\"\n class=\"button-flat full-width\">Apply</button>\n </div>\n </div>\n }\n</div>\n","export enum DATEPICKER_POSITION {\n AUTO = 'auto',\n LEFT = 'left',\n RIGHT = 'right',\n TOP = 'top',\n BOTTOM = 'bottom'\n}","import { InjectionToken } from '@angular/core';\n\nexport interface ZenIconConfig {\n iconBasePath: string;\n}\n\nexport const ZEN_ICON_CONFIG = new InjectionToken<ZenIconConfig>('ZEN_ICON_CONFIG', {\n providedIn: 'root',\n factory: () => ({ iconBasePath: 'https://storage.googleapis.com/trax_public/icons' })\n});\n\nexport type ZenIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type ZenIconColor = 'primary' | 'gray' | 'error' | 'warning' | 'success';\nexport type ZenIconTheme = 'light-circle' | 'light-circle-outline' | 'dark-circle' | 'light-square' | 'mid-square' | 'dark-square';\n","import { Component, ElementRef, Input, Inject, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { ZEN_ICON_CONFIG, ZenIconConfig, ZenIconSize, ZenIconColor, ZenIconTheme } from './icon-config';\n\n@Component({\n selector: 'zen-icon',\n templateUrl: './zendu-icon.component.html',\n styleUrls: ['./zendu-icon.component.scss'],\n host: {\n '[class.zen-icon--featured]': 'isFeatured'\n },\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduIconComponent implements OnChanges {\n\n @Input() src: string;\n @Input() name: string;\n @Input() size: ZenIconSize;\n @Input() color: ZenIconColor;\n @Input() theme: ZenIconTheme;\n @Input() customColor: string;\n\n resolvedSrc: string;\n isFeatured = false;\n\n constructor(\n private _host: ElementRef,\n @Inject(ZEN_ICON_CONFIG) private _config: ZenIconConfig\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Resolve icon source\n if (this.name) {\n this.resolvedSrc = `${this._config.iconBasePath}/${this.name}.svg`;\n } else if (this.src) {\n this.resolvedSrc = this.src;\n }\n\n this.isFeatured = !!(this.size && this.color && this.theme);\n\n const host = this._host.nativeElement as HTMLElement;\n\n if (this.isFeatured) {\n // Featured mode: clear host mask styles, let template handle it\n host.style.removeProperty('mask-image');\n host.style.removeProperty('-webkit-mask-image');\n host.style.removeProperty('background-color');\n } else if (this.resolvedSrc) {\n // Simple mode: apply mask to host and set background color based on color input\n host.style['mask-image'] = `url(${this.resolvedSrc})`;\n host.style['-webkit-mask-image'] = `url(${this.resolvedSrc})`;\n if (this.customColor) {\n host.style.backgroundColor = this.customColor;\n } else {\n host.style.removeProperty('background-color');\n }\n }\n }\n}\n","@if (isFeatured) {\n <div\n class=\"zen-icon-featured\"\n [ngClass]=\"['zen-icon-' + size, 'zen-icon-' + color, 'zen-icon-' + theme]\">\n <div class=\"zen-icon-inner\"\n [style.mask-image]=\"'url(' + resolvedSrc + ')'\"\n [style.-webkit-mask-image]=\"'url(' + resolvedSrc + ')'\"\n [style.background-color]=\"customColor || null\">\n </div>\n </div>\n}\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from './date-picker-day';\nimport { DatePickerHint } from \"./date-picker-hint\";\nimport { DATEPICKER_POSITION } from './datepicker';\nimport { OverlayRef, Overlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst defaultHours = '12';\nconst defaultMinuts = '00';\nconst defaultSeconds = '00';\n\n@Component({\n selector: 'zen-datepicker',\n templateUrl: './zendu-datepicker.component.html',\n styleUrls: ['./zendu-datepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDatepickerComponent implements OnChanges {\n\n /**\n * Component property\n */\n @Input() date: Date;\n\n /**\n * callback to emit changes for parent component\n */\n @Output() dateChange = new EventEmitter<Date>();\n\n @Input() showTime = false;\n\n @Input() showSeconds = false;\n\n @Input() showDate = true;\n\n @Input() parentContainer: HTMLElement | null = null;\n\n @Input() containerClass: string;\n\n @Input() minDate: Date;\n\n @Input() maxDate: Date;\n\n @Input() boxDesign: boolean = false;\n\n @Input() highlightDays: number[] = [];\n\n @Input() autoConfirm: boolean = false;\n\n @Input() hint: DatePickerHint;\n\n /**\n * datepicker states\n */\n @Input() highlightError: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() readonly: boolean = false;\n\n @Input() xPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() yPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() dispalyOverParent: boolean = false;\n\n @ViewChild('dateMenu') dateMenu!: ElementRef;\n\n @ViewChild('triggerButton') triggerButton!: ElementRef;\n\n @ViewChild('dateMenuTemplate') dateMenuTemplate: TemplateRef<unknown>;\n\n private overlayRef: OverlayRef;\n\n public selectedTime: { Hr: number, Min: number, Sec: number } = { Hr: 1, Min: 0, Sec: 0 };\n\n public isPickerVisible = false;\n\n public dayRows: Array<{ days: DatePickerDay[] }> = [];\n\n public daysTitle = \"\";\n\n public weekDays = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fri\", \"Sa\", \"Su\"];\n\n public currentSlot = new Date();\n\n public hour = defaultHours;\n\n public min = defaultMinuts;\n\n public sec = defaultSeconds;\n\n public isPM = false;\n\n public _dateToSet: Date;\n\n public months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n public years = [];\n\n public monthPickerVisible: boolean = false;\n\n public yearPickerVisible: boolean = false;\n\n right: boolean = false;\n bottom: boolean = false;\n\n constructor(\n private _element: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _translate: TranslateService\n ) { }\n\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hideTimePicker()\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.date) {\n this._dateToSet = new Date(this.date);\n\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n }\n }\n\n public updatePlacement() {\n this.right = false;\n this.bottom = false;\n if (this.xPosition === DATEPICKER_POSITION.AUTO && this.getHorizontalMenuDirection() === DATEPICKER_POSITION.LEFT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.AUTO && this.getVerticalMenuDirection() === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n if (this.xPosition === DATEPICKER_POSITION.RIGHT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n }\n\n private getVerticalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const top = element.getBoundingClientRect().top;\n const height = window.innerHeight;\n if (top > (height / 2)) {\n return DATEPICKER_POSITION.TOP\n }\n else {\n return DATEPICKER_POSITION.BOTTOM;\n }\n }\n\n /**\n * Used to get datepicker position\n * @returns either \"left\" or \"right\"\n */\n private getHorizontalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const left = element.getBoundingClientRect().left;\n const width = window.innerWidth;\n if (left > (width / 2)) {\n return DATEPICKER_POSITION.LEFT;\n }\n else {\n return DATEPICKER_POSITION.RIGHT;\n }\n }\n\n\n public togglePicker() {\n if (this.disabled) return;\n\n this._dateToSet = this.date ? new Date(this.date) : null;\n\n this.isPickerVisible = !this.isPickerVisible;\n if (this.showDate) {\n this.currentSlot = this._dateToSet || new Date();\n this.updateDays();\n }\n if (this.showTime) {\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n\n if (this.date) {\n const m = moment(this.date);\n\n this.hour = m.format('hh');\n this.min = m.format('mm');\n this.sec = m.format('ss');\n this.isPM = m.format('A') === 'PM';\n }\n }\n if (this.isPickerVisible) {\n if (this.dispalyOverParent) {\n this.createOverlay();\n } else {\n this.updatePlacement();\n this.syncMenuPositionWithDelay();\n }\n }\n }\n\n private createOverlay() {\n const verticalDirection = this.getVerticalMenuDirection();\n const horizontalDirection = this.getHorizontalMenuDirection();\n\n const position: ConnectedPosition = {\n originX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n originY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'bottom' : 'top',\n overlayX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n overlayY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'top' : 'bottom'\n };\n\n // Determine the vertical position (below or above) and set the vertical offset (0 for below, -20 for above)\n const isBelow = verticalDirection === DATEPICKER_POSITION.BOTTOM;\n const offsetY = isBelow ? 0 : -20;\n\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.triggerButton)\n .withPositions([\n position\n ])\n // Disable flexible dimensions, meaning the overlay will not resize automatically\n .withFlexibleDimensions(false)\n // Set the vertical offset to avoid overlapping with the parent button \n .withDefaultOffsetY(offsetY)\n // Disable automatic repositioning of the overlay to avoid overlap with other elements\n .withPush(false);\n\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'custom-backdrop',\n panelClass: 'custom-overlay',\n });\n\n this.overlayRef.attach(new TemplatePortal(this.dateMenuTemplate, this.viewContainerRef));\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n this.isPickerVisible = false;\n });\n\n }\n\n // Method to close the overlay\n public closePicker(): void {\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.isPickerVisible = false;\n }\n\n // Cleanup overlay on component destruction\n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n\n private showDatePicker() {\n setTimeout(() => {\n if (this.dateMenu) {\n this.dateMenu.nativeElement.style.visibility = 'visible';\n }\n }, 0)\n }\n\n private syncMenuPositionWithDelay() {\n if (!this.parentContainer) {\n this.showDatePicker();\n return;\n }\n\n setTimeout(() => {\n const elementRect = this._element.nativeElement.getBoundingClientRect();\n const parentRect = this.parentContainer.getBoundingClientRect();\n\n // Calculate the top difference between element and parent (if available)\n const top = this.calculateTopPosition(elementRect, parentRect);\n\n const dateMenuRect = this.dateMenu?.nativeElement?.getBoundingClientRect();\n this.bottom = dateMenuRect?.height < top;\n this.showDatePicker();\n }, 0);\n }\n\n private calculateTopPosition(elementRect: DOMRect, parentRect: DOMRect): number {\n let top: number;\n if (elementRect.top < parentRect.top) {\n top = parentRect.top - elementRect.top; // Reverse order if condition is met\n } else {\n top = elementRect.top - parentRect.top; // Normal calculation\n }\n return top;\n }\n\n private updateDays() {\n if (!this.currentSlot) {\n this.currentSlot = new Date();\n }\n\n const enMonth = moment(this.currentSlot).format(\"MMM\");\n const translatedMonth = this._translate.instant(enMonth);\n\n this.daysTitle = moment(this.currentSlot).format(\"MMM yyyy\").replace(enMonth, translatedMonth);\n this.dayRows = [];\n let current = moment(this.currentSlot).startOf(\"month\").startOf(\"week\").add(1, \"day\");\n let end = moment(this.currentSlot).endOf(\"month\").endOf(\"week\").add(1, \"day\");\n\n const currentMonth = moment(this.currentSlot).month();\n\n const date = moment(this._dateToSet);\n\n while (current <= end) {\n const row = { days: [] as DatePickerDay[] };\n this.dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n\n let isSelected = false;\n if (date) {\n isSelected = current.date() == date.date() &&\n date.month() == current.month();\n }\n\n let isOutside = currentMonth != current.month();\n\n let isDisabled = false;\n\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let isHighlighted = false;\n\n if (this.highlightDays && this.highlightDays.length) {\n isHighlighted = this.highlightDays.indexOf(current.valueOf()) >= 0;\n }\n\n row.days.push({\n date: current.toDate(),\n lbl: moment(current).date().toString(),\n isOutside: isOutside,\n selected: isSelected,\n isDisabled: isDisabled,\n isHighlighted: isHighlighted\n });\n\n current = moment(current).add(1, \"day\");\n }\n }\n }\n\n public nextMonth() {\n this.currentSlot = moment(this.currentSlot).add(1, \"month\").toDate();\n this.updateDays();\n }\n\n public prevMonth() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"month\").toDate();\n this.updateDays();\n }\n\n public nextYear() {\n this.currentSlot = moment(this.currentSlot).add(1, \"year\").toDate();\n this.updateDays();\n }\n\n public prevYear() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"year\").toDate();\n this.updateDays();\n }\n\n public nextYearGroup() {\n this.years = this.years.map(year => year + 15);\n }\n\n public prevYearGroup() {\n this.years = this.years.map(year => year - 15);\n }\n\n public selectDay(day: DatePickerDay) {\n if (day.isDisabled) {\n // day is disabled\n return;\n }\n\n if (this.showTime) {\n this._dateToSet = moment(day.date).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else {\n this._dateToSet = new Date(day.date);\n\n if (this.autoConfirm) {\n this.apply();\n }\n }\n\n this.updateDays();\n }\n\n public selectMonth(month: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setMonth(month);\n this.currentSlot = newDate;\n this.updateDays();\n this.monthPickerVisible = false;\n }\n\n public selectYear(year: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setFullYear(year);\n this.currentSlot = newDate;\n this.updateDays();\n this.yearPickerVisible = false;\n }\n\n public hideTimePicker() {\n if (!this.dispalyOverParent) {\n this.isPickerVisible = false;\n }\n }\n\n\n public timeChanged() {\n let min = parseInt(this.min);\n let hour = parseInt(this.hour);\n let sec = this.showSeconds ? parseInt(this.sec) : 0;\n\n if (isNaN(hour) || isNaN(min)) {\n return;\n }\n\n if (this.showSeconds && isNaN(sec)) {\n return;\n }\n\n hour = Math.min(hour, 12);\n hour = Math.max(hour, 1);\n\n min = Math.min(min, 59);\n min = Math.max(min, 0);\n\n if (this.showSeconds) {\n sec = Math.min(sec, 59);\n sec = Math.max(sec, 0);\n }\n\n const time = moment(`${hour} ${min} ${sec} ${this.isPM ? \"pm\" : \"am\"}`, \"h m s a\");\n\n this.selectedTime = {\n Hr: time.hours(),\n Min: time.minutes(),\n Sec: time.seconds()\n };\n\n // added below condition because we can select the time without date, and it was showing invalid date in the input box\n // second condition is required to disable apply button when date is not selected\n if (this._dateToSet) {\n this._dateToSet = moment(this._dateToSet).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else if (!this.showDate) {\n this._dateToSet = moment().hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n }\n\n // format\n if (hour < 10) {\n this.hour = `0${hour}`;\n }\n else {\n this.hour = `${hour}`;\n }\n\n if (min < 10) {\n this.min = `0${min}`;\n }\n else {\n this.min = `${min}`;\n }\n\n if (this.showSeconds) {\n if (sec < 10) {\n this.sec = `0${sec}`;\n }\n else {\n this.sec = `${sec}`;\n }\n }\n\n }\n\n public formattedDate() {\n if (!this.date) {\n return \"\";\n }\n\n if (this.boxDesign && moment(this.date).isSame(moment(), \"day\")) {\n return 'Today';\n }\n\n // get the translated text for day and month\n const enMonth = moment(this.date).format(\"MMM\");\n const enDay = moment(this.date).format(\"ddd\");\n const translatedMonth = this._translate.instant(enMonth);\n const translatedDay = this._translate.instant(enDay);\n\n if (this.showDate && !this.showTime && !this.boxDesign) {\n // Expanded formatting for date only picker\n return moment(this.date).format(\"ddd, DD MMM YYYY\")\n .replace(enDay, translatedDay)\n .replace(enMonth, translatedMonth);\n }\n\n return moment(this.date).format(\"MMM DD, YY\").replace(enMonth, translatedMonth);\n }\n\n public formattedTime() {\n if (!this.date) {\n return \"\";\n }\n if (this.showSeconds) {\n return moment(this.date).format(\"h:mm:ss A\");\n }\n return moment(this.date).format(\"h:mm A\");\n }\n\n public toggleTime() {\n this.isPM = !this.isPM;\n this.timeChanged();\n }\n\n public showMonthPicker() {\n this.monthPickerVisible = true;\n }\n\n public showYearPicker() {\n this.yearPickerVisible = true;\n this.years = [];\n for (let i = this.currentSlot.getFullYear() - 7; i < this.currentSlot.getFullYear() + 8; i++) {\n this.years.push(i);\n }\n }\n\n public hourUp() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour++;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public hourDown() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour--;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public minUp() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min++;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public minDown() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min--;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public secUp() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec++;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public secDown() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec--;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public apply() {\n if (this._dateToSet) {\n // If time selection has enabled and user keeps default time then triggering the timeChanged function\n if (this.showTime && this.hour === defaultHours && this.min === defaultMinuts && this.sec === defaultSeconds) {\n this.timeChanged();\n }\n\n this.date = new Date(this._dateToSet);\n }\n this.dateChange.emit(this.date);\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public cancel() {\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public clear() {\n this._dateToSet = null;\n this.hour = defaultHours;\n this.min = defaultMinuts;\n this.date = null;\n this.apply();\n }\n\n public getIcon() {\n // Change picker icon based on mode\n switch (true) {\n case this.showDate && this.showTime:\n // Date + Time\n return 'assets/ng-zenduit/icons/date.svg';\n case this.showDate && !this.showTime:\n // Date only\n return 'assets/ng-zenduit/icons/calendar.svg';\n case !this.showDate && this.showTime:\n // Time only\n return 'assets/ng-zenduit/icons/time.svg';\n default:\n return 'assets/ng-zenduit/icons/date.svg';\n }\n }\n\n public selectHintDate(date: Date): void {\n if (!date) {\n console.error('Invalid hint');\n return;\n }\n\n this._dateToSet = new Date(date);\n this.selectedTime = {\n Hr: moment(date).hours(),\n Min: moment(date).minutes(),\n Sec: moment(date).seconds()\n };\n\n if (this.autoConfirm) {\n this.apply();\n }\n\n this.updateDays();\n }\n}\n","<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n @if (!boxDesign) {\n <button class=\"date-toggle\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n @if (!date && showDate && !showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date\" | translate}}\n </div>\n }\n @if (!date && showTime && !showDate) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Time\" | translate}}\n </div>\n }\n @if (!date && showTime && showDate && showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date & Time\" | translate}}\n </div>\n }\n <!-- Selected datetime -->\n @if (date) {\n <div>\n @if (showDate) {\n <span>{{formattedDate()}}</span>\n }\n @if (showTime) {\n <span> {{formattedTime()}}</span>\n }\n </div>\n }\n </div>\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n }\n\n <!-- Box design datepicker toggle -->\n @if (boxDesign) {\n <button class=\"date-toggle new-box-design\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n @if (!date && showDate && !showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date\" | translate}}\n </div>\n }\n @if (!date && showTime && !showDate) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Time\" | translate}}\n </div>\n }\n @if (!date && showTime && showDate && showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date & Time\" | translate}}\n </div>\n }\n <!-- Selected datetime -->\n @if (date) {\n <div>\n @if (showDate) {\n <span>{{formattedDate()}}</span>\n }\n @if (showTime) {\n <span> {{formattedTime()}}</span>\n }\n </div>\n }\n </div>\n </button>\n }\n\n <!-- Datepicker popup -->\n <ng-container *ngTemplateOutlet=\"dateMenuTemplate\">\n </ng-container>\n\n <ng-template #dateMenuTemplate>\n @if (isPickerVisible) {\n <div #dateMenu\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n @if (showDate) {\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n @for (weekDay of weekDays; track weekDay) {\n <div\n class=\"week-day\">\n {{weekDay | translate}}\n </div>\n }\n </div>\n @for (row of dayRows; track row) {\n <div\n class=\"day-row\">\n @for (day of row.days; track day) {\n <div\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl | translate}}\n @if (day.isHighlighted) {\n <zen-icon\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (showTime) {\n <div\n class=\"time-container\">\n <div class=\"time-lbl\">\n {{\"Select Time\" | translate}}:\n </div>\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"hourUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"hourDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <span>:</span>\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"minUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"minDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n @if (showSeconds) {\n <span>:</span>\n }\n @if (showSeconds) {\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"secUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"sec\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"secDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n }\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'PM' : 'AM') | translate}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'AM' : 'PM') | translate}}\n </div>\n </div>\n </div>\n </div>\n }\n @if (hint) {\n <div class=\"hint\"\n >\n <div class=\"hint-description\">\n {{hint.description | translate}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText | translate}}\n </div>\n </div>\n }\n @if (!autoConfirm || showTime) {\n <div class=\"footer\"\n >\n @if (date) {\n <button\n (click)=\"clear()\"\n class=\"button-stroked\">\n {{\"Clear\" | translate}}\n </button>\n }\n @if (!date) {\n <button\n (click)=\"cancel()\"\n class=\"button-stroked\">\n {{\"Cancel\" | translate}}\n </button>\n }\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n {{\"Apply\" | translate}}\n </button>\n </div>\n }\n @if (monthPickerVisible) {\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n @for (month of months; track month; let index = $index) {\n <div class=\"month-item\"\n (click)=\"selectMonth(index)\">\n {{ month | translate }}\n </div>\n }\n </div>\n </div>\n }\n @if (yearPickerVisible) {\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n @for (year of years; track year) {\n <div class=\"month-item\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n }\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle-slide',\n templateUrl: './zendu-toggle-slide.component.html',\n styleUrls: ['./zendu-toggle-slide.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduToggleSlideComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() disabled!: boolean;\n\n /**\n * Toggle state\n */\n public toggle() {\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<button class=\"toggle-slide-component\"\n (click)=\"toggle()\"\n [disabled]=\"disabled\"\n [class.active]=\"enabled\"\n [class.disabled]=\"disabled\">\n\n <div class=\"toggle-slider\"></div>\n <div class=\"toggle-btn\"></div>\n</button>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { DataSource } from '../filter/filtersConfig';\n\n@Component({\n selector: 'zen-groups',\n templateUrl: './zendu-groups.component.html',\n styleUrls: ['./zendu-groups.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduGroupsComponent implements OnChanges {\n @Input() dataSource: DataSource[] = [];\n @Input() filteredDataSource: DataSource[] = [];\n @Input() hideSelectAll = false;\n @Input() isSelectedAll = false;\n @Input() inline = false;\n @Input() width = '300px';\n @Input() placeholder = 'Select group';\n @Input() hideSearch = false;\n @Input() idProp: string = 'id';\n @Input() displayProp: string = 'name';\n\n @Output() isSelectedAllChange = new EventEmitter<boolean>();\n @Output() checkedChange = new EventEmitter<DataSource>();\n\n public isOpen = false;\n public openUpward = false;\n public searchText = '';\n private _searchFilteredDataSource: DataSource[] | null = null;\n\n private _treeMap = new Map<string | number, DataSource>();\n private _childCountCache = new Map<string | number, number>();\n\n constructor(private _elementRef: ElementRef) {}\n\n private getChildren(item: any): string[] | undefined {\n return item.children || item.Children || item.Childrens;\n }\n\n public hasChildren(item: any): boolean {\n const children = this.getChildren(item);\n return !!children && children.length > 0;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['dataSource']) {\n this.buildTreeLevels();\n }\n if ((changes['filteredDataSource'] || changes['dataSource']) &&\n this._treeMap.size > 0 && this.filteredDataSource?.length) {\n this.filteredDataSource = this.sortTreeOrder(this.filteredDataSource);\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n onOutsideClick(event: MouseEvent) {\n if (this.inline || !this.isOpen) return;\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.isOpen = false;\n }\n }\n\n public toggleDropdown(): void {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.openUpward = this.shouldOpenUpward(300);\n } else {\n this.searchText = '';\n this._searchFilteredDataSource = null;\n }\n }\n\n private shouldOpenUpward(dropdownHeight: number): boolean {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return (window.innerHeight - rect.bottom) < dropdownHeight;\n }\n\n public get displayDataSource(): DataSource[] {\n if (this._searchFilteredDataSource !== null) {\n return this._searchFilteredDataSource;\n }\n return this.filteredDataSource;\n }\n\n public onSearchChange(): void {\n if (!this.searchText) {\n this._searchFilteredDataSource = null;\n return;\n }\n\n const lowerSearch = this.searchText.toLowerCase();\n const matchingIds = new Set<string | number>();\n\n for (const el of this.dataSource) {\n const name = typeof el[this.displayProp] === 'number' ? el[this.displayProp].toString() : el[this.displayProp];\n if (name.toLowerCase().includes(lowerSearch)) {\n matchingIds.add(el[this.idProp]);\n // Include all ancestors\n let current = el;\n while (current.parentId != null) {\n matchingIds.add(current.parentId);\n const parent = this._treeMap.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n }\n }\n\n let filtered = this.dataSource.filter(el => matchingIds.has(el[this.idProp]));\n\n // Auto-expand parents when searching\n for (const el of filtered) {\n if (this.hasChildren(el)) {\n el.isOpen = true;\n }\n }\n\n this._searchFilteredDataSource = this.sortTreeOrder(filtered);\n }\n\n public get selectedCount(): number {\n return this.dataSource?.filter(d => d.checked).length || 0;\n }\n\n public get selectedLabel(): string {\n const count = this.selectedCount;\n if (count === 0) return '';\n if (count === 1) {\n const item = this.dataSource.find(d => d.checked);\n return item ? item[this.displayProp]?.toString() : '';\n }\n return `${count} selected`;\n }\n\n public get hasActiveItems(): boolean {\n return this.dataSource?.some(d => d.checked) || false;\n }\n\n public onSelectAll(): void {\n this.dataSource.forEach(d => (d.checked = this.isSelectedAll));\n this.isSelectedAllChange.emit(this.isSelectedAll);\n }\n\n public onCheckChanged(dsItem: DataSource): void {\n this.cascadeToChildren(dsItem);\n this.updateParentCheckedState(dsItem);\n this.checkedChange.emit(dsItem);\n }\n\n private buildTreeLevels(): void {\n if (!this.dataSource?.length) return;\n const hasChildren = this.dataSource.some(d => this.hasChildren(d));\n if (!hasChildren) return;\n\n const map = new Map<string | number, DataSource>();\n for (const item of this.dataSource) {\n map.set(item[this.idProp], item);\n }\n this._treeMap = map;\n\n for (const item of this.dataSource) {\n const children = this.getChildren(item);\n if (children?.length) {\n for (const childId of children) {\n const child = map.get(childId);\n if (child && child.parentId == null) {\n child.parentId = item[this.idProp];\n }\n }\n }\n }\n\n for (const item of this.dataSource) {\n let level = 0;\n let current = item;\n while (current.parentId != null) {\n level++;\n const parent = map.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n item.level = level;\n }\n\n this._childCountCache.clear();\n const countChildren = (item: DataSource): number => {\n const children = this.getChildren(item);\n if (!children?.length) return 0;\n let count = 0;\n for (const childId of children) {\n const child = map.get(childId);\n if (child) {\n const childLeaves = countChildren(child);\n count += childLeaves > 0 ? childLeaves : 1;\n }\n }\n return count;\n };\n for (const item of this.dataSource) {\n if (this.hasChildren(item)) {\n this._childCountCache.set(item[this.idProp], countChildren(item));\n }\n }\n }\n\n public sortTreeOrder(items: DataSource[]): DataSource[] {\n const itemSet = new Set(items.map(i => i[this.idProp]));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item[this.idProp])) return;\n if (!itemSet.has(item[this.idProp])) return;\n visited.add(item[this.idProp]);\n ordered.push(item);\n const children = this.getChildren(item);\n if (children?.length) {\n for (const childId of children) {\n const child = this._treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item[this.idProp])) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public isTreeItemVisible(dsItem: DataSource): boolean {\n if (dsItem.parentId == null) {\n return true;\n }\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent) {\n return true;\n }\n return parent.isOpen && this.isTreeItemVisible(parent);\n }\n\n public toggleTreeNode(dsItem: DataSource): void {\n dsItem.isOpen = !dsItem.isOpen;\n }\n\n public getChildCount(dsItem: DataSource): number {\n return this._childCountCache.get(dsItem[this.idProp]) || 0;\n }\n\n public isTreeItemIndeterminate(dsItem: DataSource): boolean {\n if (!this.hasChildren(dsItem)) return false;\n const allDescendants = this.getAllDescendants(dsItem);\n if (!allDescendants.length) return false;\n const checkedCount = allDescendants.filter(d => d.checked).length;\n return checkedCount > 0 && checkedCount < allDescendants.length;\n }\n\n private getAllDescendants(dsItem: DataSource): DataSource[] {\n const result: DataSource[] = [];\n const children = this.getChildren(dsItem);\n if (!children?.length) return result;\n for (const childId of children) {\n const child = this._treeMap.get(childId);\n if (child) {\n result.push(child);\n result.push(...this.getAllDescendants(child));\n }\n }\n return result;\n }\n\n private updateParentCheckedState(dsItem: DataSource): void {\n if (dsItem.parentId == null) return;\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent || !this.hasChildren(parent)) return;\n const allDescendants = this.getAllDescendants(parent);\n const allChecked = allDescendants.every(d => d.checked);\n parent.checked = allChecked;\n this.updateParentCheckedState(parent);\n }\n\n private cascadeToChildren(item: DataSource): void {\n const children = this.getChildren(item);\n if (!children?.length) return;\n this.dataSource.forEach(data => {\n if (item[this.idProp] == data[this.idProp]) {\n return;\n }\n if (children.includes(<string>data[this.idProp])) {\n data.checked = item.checked;\n if (this.hasChildren(data)) {\n this.cascadeToChildren(data);\n }\n }\n });\n }\n\n public getTreeConnectors(dsItem: DataSource): string[] {\n if (!dsItem.level) return [];\n\n const isLastFlags: boolean[] = [];\n let current: DataSource | undefined = dsItem;\n\n for (let l = dsItem.level; l >= 1; l--) {\n const parent = this._treeMap.get(current!.parentId!);\n const parentChildren = parent ? this.getChildren(parent) : undefined;\n if (!parentChildren?.length) {\n isLastFlags.push(true);\n } else {\n const lastChildId = parentChildren[parentChildren.length - 1];\n isLastFlags.push(current![this.idProp] === lastChildId);\n }\n current = parent;\n }\n\n isLastFlags.reverse();\n\n const result: string[] = [];\n for (let i = 0; i < isLastFlags.length; i++) {\n const isItemLevel = (i === isLastFlags.length - 1);\n const isLast = isLastFlags[i];\n\n if (isItemLevel) {\n result.push(isLast ? 'elbow' : 'branch');\n } else {\n result.push(isLast ? 'none' : 'through');\n }\n }\n return result;\n }\n\n public getTreeMap(): Map<string | number, DataSource> {\n return this._treeMap;\n }\n}\n","<!-- Dropdown mode (default) -->\n@if (!inline) {\n <div class=\"zen-groups-dropdown\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n @if (!selectedLabel) {\n <span class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n }\n @if (selectedLabel) {\n <span class=\"zen-groups-value\">{{ selectedLabel }}</span>\n }\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n @if (isOpen) {\n <div class=\"zen-groups-panel\" [class.open-upward]=\"openUpward\">\n @if (!hideSearch) {\n <div class=\"zen-groups-search\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n }\n </div>\n}\n\n<!-- Inline mode (used inside zen-filter) -->\n@if (inline) {\n <div class=\"zen-groups-inline\">\n @if (!hideSearch) {\n <div class=\"zen-groups-search\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n}\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n @if (!hideSelectAll) {\n <div class=\"action-item-checkbox select-all\">\n @if (dataSource.length === displayDataSource.length) {\n <zen-checkbox\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n }\n </div>\n }\n\n @for (dsItem of displayDataSource; track dsItem) {\n @if (isTreeItemVisible(dsItem)) {\n <div\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n @if (dsItem.level > 0) {\n @for (connector of getTreeConnectors(dsItem); track connector; let i = $index) {\n <div\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n }\n }\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem[displayProp]?.toString() | translate\"></zen-checkbox>\n @if (hasChildren(dsItem)) {\n <span\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n }\n </div>\n @if (hasChildren(dsItem)) {\n <button\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n }\n </div>\n }\n }\n\n @if (searchText && displayDataSource.length === 0) {\n <div class=\"zen-groups-no-results\">\n {{ 'No Results Found' | translate }}\n </div>\n }\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduRadioButtonComponent implements OnInit {\n\n @Input() selected: boolean;\n\n @Output() radioChange = new EventEmitter<string>();\n\n @Input() label: string;\n\n @Input() value: string;\n\n @Input() name: string;\n\n @Input() disabled = false;\n\n @Input() imageUrl: string;\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() supportingText: string;\n\n public selectedRadio: string;\n\n constructor() { }\n\n ngOnInit() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"selected\"]) {\n if (changes[\"selected\"].currentValue) {\n this.selectedRadio = this.value;\n }\n else {\n this.selectedRadio = \"\";\n }\n }\n }\n\n public emitChange(event: any): void {\n if (this.disabled) {\n return;\n }\n this.radioChange.emit(event.target.value);\n }\n}\n","<label class=\"radio-component\"\n [ngClass]=\"{'disabled-radio': disabled, 'radio-md': size === 'md'}\"\n for=\"{{value}}\">\n <input type=\"radio\"\n class=\"radio-input\"\n name=\"{{name}}\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n id=\"{{value}}\"\n [checked]=\"selectedRadio === value\"\n (change)=\"emitChange($event)\" />\n\n <span class=\"radio-indicator\"></span>\n\n @if (label || supportingText) {\n <div class=\"radio-text-wrap\"\n >\n <span class=\"app-radio-button-label\">\n @if (imageUrl) {\n <img class=\"radio-image\"\n [src]=\"imageUrl\"\n >\n }\n {{label | translate}}\n </span>\n @if (supportingText) {\n <span class=\"app-radio-supporting-text\"\n >\n {{supportingText}}\n </span>\n }\n </div>\n }\n</label>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-spinner',\n templateUrl: './zendu-spinner.component.html',\n styleUrls: ['./zendu-spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSpinner {\n @Input() size?: \"small\" | \"default\" = \"default\";\n}\n","<div class=\"component\"\n [class.small-size]=\"size == 'small'\">\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-button',\n templateUrl: './zen-button.component.html',\n styleUrls: ['./zen-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenButtonComponent {\n \n @Input() variant: 'primary' | 'secondary-gray' | 'secondary' | 'tertiary-gray' | 'tertiary' | 'link-gray' | 'link' = 'primary';\n \n @Input() buttonType: 'button' | 'button-dot' | 'button-icon-leading' | 'button-icon-trailing' | 'button-icon-only' = 'button';\n \n @Input() icon?: string;\n @Input() iconRotated: boolean = false;\n @Input() size: '2xl' | 'xl' | 'lg' | 'md' | 'sm' = 'md';\n @Input() destructive: boolean = false;\n @Input() disabled: boolean = false;\n @Input() fullWidth: boolean = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n get isIconOnly(): boolean {\n return this.buttonType === 'button-icon-only';\n }\n\n get buttonClasses(): string {\n const classes = [];\n \n // Base variant class\n if (this.variant === 'primary') {\n classes.push('button-base');\n } else if (this.variant === 'secondary-gray') {\n classes.push('button-secondary-gray');\n } else if (this.variant === 'secondary') {\n classes.push('button-secondary-color');\n } else if (this.variant === 'tertiary-gray') {\n classes.push('button-tertiary-gray');\n } else if (this.variant === 'tertiary') {\n classes.push('button-tertiary-color');\n } else if (this.variant === 'link-gray') {\n classes.push('button-link-gray');\n } else if (this.variant === 'link') {\n classes.push('button-link-color');\n }\n \n // Size class\n classes.push(`button-${this.size}`);\n \n // Typography classes based on size\n classes.push('text');\n if (this.size === '2xl') {\n classes.push('text-lg');\n classes.push('text-weight-medium');\n } else if (this.size === 'xl' || this.size === 'lg') {\n classes.push('text-md');\n classes.push('text-weight-medium');\n } else {\n classes.push('text-sm');\n classes.push('text-weight-medium');\n }\n \n // State modifiers\n if (this.destructive) {\n classes.push('destructive');\n }\n \n if (this.isIconOnly) {\n classes.push('button-icon-only');\n }\n \n if (this.fullWidth) {\n classes.push('full-width');\n }\n \n return classes.join(' ');\n }\n\n getIconName(): string {\n // Use the icon input if provided, otherwise default to circle\n return this.icon || 'circle';\n }\n}","<button\n [class]=\"buttonClasses\"\n [type]=\"type\"\n [disabled]=\"disabled\">\n\n <!-- Dot indicator -->\n @if (buttonType === 'button-dot') {\n <span class=\"button-dot\"></span>\n }\n\n <!-- Leading icon -->\n @if (buttonType === 'button-icon-leading' || isIconOnly) {\n <zen-icon\n [name]=\"getIconName()\"\n [class.rotated]=\"iconRotated\"\n size=\"xs\"></zen-icon>\n }\n\n <!-- Button content -->\n @if (!isIconOnly) {\n <ng-content></ng-content>\n }\n\n <!-- Trailing icon -->\n @if (buttonType === 'button-icon-trailing') {\n <zen-icon\n [name]=\"getIconName()\"\n [class.rotated]=\"iconRotated\"\n size=\"xs\"></zen-icon>\n }\n</button>","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport {\n DataSource,\n FiltersConfig,\n FiltersConfigItem,\n MultiSelectItem,\n} from './filtersConfig';\nimport uniqBy from 'lodash.uniqby';\nimport moment from 'moment/moment';\nimport { ZenduSearchBoxComponent } from '../search-box/zendu-search-box.component';\nimport { Util } from '../util';\nimport { DATEPICKER_POSITION } from '../datepicker/datepicker';\nimport { DateRange } from './dateRange';\nimport { Renderer2 } from '@angular/core';\n\n@Component({\n selector: 'zen-filter',\n templateUrl: './zendu-filter.component.html',\n styleUrls: ['./zendu-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFilterComponent implements OnChanges {\n @Input() config: FiltersConfig = { items: [] };\n\n @Input() filter: object;\n\n @Input() position = 'right';\n\n @Input() resetBehavior: 'set_all' | 'clear' = 'clear';\n\n @Output() filterChange = new EventEmitter<object>();\n\n @Input() isVisible = false;\n\n @Output() isVisibleChange = new EventEmitter<boolean>();\n\n @Input() customTrigger = false;\n\n @Input() imageUrl: string;\n\n @Input() label: string;\n\n @Input() showOptions: boolean;\n\n @Input() customOptions: string;\n\n @Input() wrapperBodyClass: string;\n\n @Input() customPosition: 'fixed' | 'absolute' = 'fixed';\n\n public searchText = '';\n\n public isApplied = false;\n\n private lastAppliedFilter: any = {};\n\n private resetedFilter: any;\n\n public menuLeft = '0px';\n\n public menuRight = '0px';\n\n public menuTop = '0px';\n\n public menuBottom = '0px';\n\n public showNoFilterResult: boolean;\n\n public errorMessage: string[] = [];\n\n public datepickerPosition = DATEPICKER_POSITION;\n\n public selectedDateRangeOptions: { [key: string]: string } = {};\n\n @ViewChild('searchBox', { static: false }) searchBox: ZenduSearchBoxComponent;\n\n @ViewChild('mainComponent', { static: false })\n _componentElement: ElementRef<HTMLElement>;\n constructor(public renderer: Renderer2) {}\n\n public ngOnChanges(changes: any): void {\n if (changes.config && changes.config.currentValue) {\n // init values\n for (const item of this.config.items) {\n if (item.type === 'multiselect') {\n item.dataSource = item.dataSource\n ? this.extractUniqueDataSource(item.dataSource)\n : [];\n } else if (item.type === 'dateRange' && !item.dateRange) {\n item.dateRange = { start: null, end: null };\n\n // init date range options\n if (item.showDateRangeOptions && !item.dateRangeOptions?.length) {\n item.dateRangeOptions = this.getDefaultDateRangeOptions();\n }\n } else if (item.type === 'numberRange' && !item.numberRange) {\n item.numberRange = {};\n }\n\n if (typeof item.showTime !== 'boolean') {\n item.showTime = true;\n }\n }\n\n this.filterItems();\n\n this.resetedFilter = this.getFilterObject();\n this.filter = this.getFilterObject();\n this.lastAppliedFilter = Util.clone(this.filter);\n }\n\n if (changes.filter && changes.filter.currentValue) {\n this.lastAppliedFilter = Util.clone(changes.filter.currentValue);\n\n this.updateAppliedState();\n }\n\n if (changes.isVisible && changes.isVisible.currentValue) {\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isVisible) {\n return;\n }\n\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n // element not in the DOM\n return;\n }\n if (this._componentElement.nativeElement.contains(target)) {\n return;\n }\n\n // hide the menu for outside click\n this.hide();\n\n // restore values\n this.restorePreviousApplied();\n }\n\n @HostListener('window:resize', [])\n windowSizeHandling() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:scroll', [])\n windowScroll() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent) {\n if (!this.isVisible) {\n return;\n }\n\n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Home' ||\n event.key === 'End'\n ) {\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n return;\n }\n\n if (\n this._componentElement.nativeElement.contains(target) &&\n !target.classList.contains('button-stroked')\n ) {\n return;\n }\n this.hide();\n this.restorePreviousApplied();\n }\n }\n\n public focusSearchBox() {\n this.searchBox.doFocus();\n }\n\n public isMenuIsVisible(item: FiltersConfigItem) {\n if (item.isLazyLoading) {\n if (item.isLoadingNow || item.canLoadMore !== false) {\n return true;\n }\n if (this.searchText) {\n return item.filteredDataSource?.length > 0;\n }\n return true;\n }\n\n if (item.filteredDataSource && this.searchText) {\n if (!item.filteredDataSource.length) {\n return false;\n }\n }\n\n return true;\n }\n\n private extractUniqueDataSource(\n array: {\n id: string | number;\n name: string | number;\n }[]\n ): MultiSelectItem[] {\n const items = array.filter((el) => {\n return Boolean(\n typeof el.id === 'number'\n ? typeof el.id !== undefined\n : el.id && typeof el.name === 'number'\n ? typeof el.name !== undefined\n : el.name\n );\n });\n const uniqItems = uniqBy(items, (el) => el.id);\n // add index to each uniqItems\n uniqItems.forEach(\n (el: MultiSelectItem, index: number) => (el.index = index)\n );\n return uniqItems;\n }\n\n public onSelectAll(item: FiltersConfigItem) {\n item.dataSource.forEach((d) => (d.checked = item.isSelectedAll));\n }\n\n public isItemActive(item: FiltersConfigItem): boolean {\n if (item.type === 'multiselect') {\n const checkedItems = item.dataSource.filter((el) => el.checked);\n item.isSelectedAll = checkedItems.length === item.dataSource.length;\n return checkedItems.length > 0;\n } else if (item.type === 'radio') {\n return item.radioOptions.some((ro) => ro.selected);\n } else if (item.type === 'numberRange') {\n return Boolean(item.numberRange.from || item.numberRange.to);\n } else if (item.type === 'dateRange') {\n return Boolean(item.dateRange.start || item.dateRange.end);\n } else if (item.type === 'date') {\n return Boolean(item.date);\n } else {\n return false;\n }\n }\n\n public searchTextChanged() {\n // run the lazy loading\n // the filterItems called from onChanges, so call lazy loading only on search change\n this.resetLazyLoadingSources(false);\n\n this.filterItems();\n }\n\n private async resetLazyLoadingSources(showSelectedOnTop: boolean) {\n const requests = [];\n for (const configItem of this.config.items) {\n if (configItem.isLazyLoading) {\n configItem.canLoadMore = true;\n configItem.filteredDataSource = [];\n requests.push(this.loadMore(configItem, showSelectedOnTop));\n }\n }\n\n await Promise.all(requests);\n\n // filter non-lazy loading items\n this.filterItems();\n }\n\n private filterItems() {\n let hasData = false;\n\n for (const configItem of this.config.items) {\n if (configItem.type === 'multiselect') {\n if (configItem.isLazyLoading) {\n if (configItem.isLoadingNow) {\n // mark as data available in loading state\n hasData = true;\n } else if (configItem.filteredDataSource?.length) {\n hasData = true;\n }\n } else {\n const isTree = this.hasTreeData(configItem);\n if (isTree && this.searchText) {\n // Build a local lookup map for ancestor traversal\n const localMap = new Map<string | number, DataSource>();\n for (const el of configItem.dataSource) {\n localMap.set(el.id, el);\n }\n\n // For tree data, include matching items and their ancestors\n const matchingIds = new Set<string | number>();\n for (const el of configItem.dataSource) {\n const preparedName =\n typeof el.name === 'number' ? el.name.toString() : el.name;\n if (preparedName.toLowerCase().includes(this.searchText.toLowerCase())) {\n matchingIds.add(el.id);\n // Add all ancestors\n let current = el;\n while (current.parentId) {\n matchingIds.add(current.parentId);\n current = localMap.get(current.parentId);\n if (!current) break;\n }\n }\n }\n configItem.filteredDataSource = configItem.dataSource.filter(\n (el) => matchingIds.has(el.id)\n );\n // Auto-expand parents when searching\n for (const el of configItem.filteredDataSource) {\n if (el.children?.length) {\n el.isOpen = true;\n }\n }\n configItem.filteredDataSource = this.sortTreeOrder(configItem.filteredDataSource, localMap);\n } else {\n configItem.filteredDataSource = configItem.dataSource.filter((el) => {\n const preparedName =\n typeof el.name === 'number' ? el.name.toString() : el.name;\n return preparedName\n .toLowerCase()\n .includes(this.searchText.toLowerCase());\n });\n if (isTree) {\n const localMap = new Map<string | number, DataSource>();\n for (const el of configItem.dataSource) {\n localMap.set(el.id, el);\n }\n configItem.filteredDataSource = this.sortTreeOrder(configItem.filteredDataSource, localMap);\n }\n }\n\n if (configItem.filteredDataSource.length) {\n hasData = true;\n }\n }\n } else if (configItem.type === 'dateRange') {\n if (\n this.searchText &&\n !Boolean(configItem.dateRange.start || configItem.dateRange.end)\n ) {\n configItem.filteredDataSource = [];\n }\n } else if (configItem.type === 'numberRange') {\n if (\n this.searchText &&\n !Boolean(configItem.numberRange.from || configItem.numberRange.to)\n ) {\n configItem.filteredDataSource = [];\n }\n }\n }\n\n this.showNoFilterResult = this.searchText && !hasData;\n }\n\n public async loadMore(item: FiltersConfigItem, showSelectedOnTop: boolean) {\n try {\n item.isLoadingNow = true;\n if (!item.lazyLoader) {\n throw `loader is not available`;\n }\n if (!item.filteredDataSource) {\n item.filteredDataSource = [];\n }\n\n // load first 10 records for the the first time\n const limit = item.filteredDataSource.length == 0 ? 10 : 100;\n const newItems = await item.lazyLoader(\n { text: this.searchText || '' },\n item.filteredDataSource.length,\n limit\n );\n\n item.canLoadMore = newItems.length == limit;\n\n // the filteredDataSource contains the items that is visilible to user at the current moment\n item.filteredDataSource = item.filteredDataSource.concat(newItems);\n\n // the dataSource contains the selected items\n const checkedIds = item.dataSource\n .filter((i) => i.checked)\n .map((i) => i.id);\n\n if (showSelectedOnTop) {\n // remove the checked items first\n item.filteredDataSource = item.filteredDataSource.filter(\n (i) => !checkedIds.includes(i.id)\n );\n // add all checked items to the top\n const checkedItems = item.dataSource.filter((i) => i.checked);\n item.filteredDataSource = checkedItems.concat(item.filteredDataSource);\n } else {\n // mark as checked based on the dataSource\n for (let dsItem of item.filteredDataSource) {\n dsItem.checked = checkedIds.includes(dsItem.id);\n }\n }\n } catch (err) {\n console.error(err);\n } finally {\n item.isLoadingNow = false;\n }\n }\n\n public toggleItem(item: FiltersConfigItem) {\n item.expanded = !item.expanded;\n\n if (item.isLazyLoading) {\n if (item.expanded) {\n if (item.canLoadMore !== false && !item.filteredDataSource?.length) {\n this.loadMore(item, false);\n }\n }\n }\n }\n\n private resetFilters() {\n let selectAll = this.resetBehavior === 'set_all';\n this.selectedDateRangeOptions = {};\n\n for (const item of this.config.items) {\n if (item.dataSource) {\n item.isSelectedAll = selectAll;\n\n for (const dsItem of item.dataSource) {\n dsItem.checked = selectAll;\n }\n }\n\n if (item.dateRange) {\n item.dateRange = { start: null, end: null };\n }\n\n if (item.numberRange) {\n item.numberRange = { from: null, to: null };\n }\n\n if (item.date) {\n item.date = new Date();\n }\n if (item.type === 'toggle') {\n item.enabled = false;\n }\n if (item.type === 'radio') {\n item.radioOptions.forEach((e) => {\n if (e.id === item.selectedRadio) {\n e.selected = true;\n } else {\n e.selected = false;\n }\n });\n }\n }\n }\n\n private restorePreviousApplied(): void {\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource) {\n const selection = this.lastAppliedFilter[item.key];\n\n for (const dataItem of item.dataSource) {\n dataItem.checked = selection\n ? selection.includes(dataItem.id)\n : false;\n }\n }\n break;\n case 'dateRange':\n item.dateRange = this.lastAppliedFilter[item.key] || {\n start: null,\n end: null,\n };\n break;\n case 'numberRange':\n item.numberRange = this.lastAppliedFilter[item.key] || {};\n break;\n case 'toggle':\n item.dateRange = this.lastAppliedFilter[item.key];\n break;\n case 'date':\n item.date = this.lastAppliedFilter[item.key];\n break;\n case 'radio':\n item.selectedRadio = this.lastAppliedFilter[item.key];\n break;\n }\n }\n }\n\n public reset() {\n this.resetFilters();\n\n this.filter = this.getFilterObject();\n this.resetedFilter = this.getFilterObject();\n\n this.resetLazyLoadingSources(false);\n }\n\n public apply() {\n this.filter = this.getFilterObject();\n let hasError = false;\n for (const iterator of this.config.items) {\n const itemFlag = this.onCheckValidity(iterator);\n if (!itemFlag) {\n hasError = true;\n }\n }\n if (hasError) {\n setTimeout(() => (this.errorMessage = []), 5000);\n return;\n } else {\n this.errorMessage = [];\n }\n this.lastAppliedFilter = Util.clone(this.filter);\n\n this.filterChange.emit(this.filter);\n\n // update the apply state\n this.updateAppliedState();\n\n this.hide();\n }\n\n private updateAppliedState() {\n this.isApplied = false;\n // showing checked items on top of the list\n for (const item of this.config.items) {\n if (item.type === 'multiselect') {\n // resort first based on index\n item.dataSource.sort((a, b) => a.index - b.index);\n\n // then sort based on checked items again\n item.dataSource.sort(\n (a: DataSource, b: DataSource) =>\n Number(b.checked || 0) - Number(a.checked || 0)\n );\n }\n }\n\n if (Object.keys(this.filter).length > 0) {\n if (this.resetedFilter) {\n // Filter was reset, so compare the reset filter object with the current filter\n // When user click on Reset and Then Apply, filter must unhighlighted\n if (\n JSON.stringify(this.resetedFilter) !== JSON.stringify(this.filter)\n ) {\n this.isApplied = true;\n }\n } else {\n this.isApplied = true;\n }\n }\n\n let wrapperClass = document.querySelector('.action-menu-body');\n if (this.wrapperBodyClass) {\n wrapperClass = document.querySelector(`.${this.wrapperBodyClass}`);\n }\n if (wrapperClass) {\n wrapperClass.scrollTo({ top: 0, behavior: 'auto' });\n }\n }\n\n private getFilterObject() {\n const filter = {};\n\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource && item.dataSource.length) {\n const checkedIds = item.dataSource\n .filter((i) => i.checked)\n .map((i) => i.id);\n\n if (checkedIds.length) {\n filter[item.key] = checkedIds;\n }\n }\n break;\n case 'dateRange':\n if (item.dateRange && item.dateRange.start && item.dateRange.end) {\n filter[item.key] = item.dateRange;\n }\n break;\n case 'numberRange':\n if (\n item.numberRange &&\n typeof item?.numberRange?.from === 'number' &&\n typeof item?.numberRange?.to === 'number'\n ) {\n filter[item.key] = item.numberRange;\n }\n break;\n case 'toggle':\n filter[item.key] = item.enabled || false;\n break;\n case 'date':\n if (item.date) {\n filter[item.key] = item.date;\n }\n break;\n case 'radio':\n filter[item.key] = item.radioOptions.find((ro) => ro.selected)?.id;\n break;\n }\n }\n\n return filter;\n }\n\n public hide() {\n this.isVisible = false;\n this.searchText = '';\n this.filterItems();\n\n this.isVisibleChange.emit(false);\n }\n\n public radioChanged(value: string, item: FiltersConfigItem): void {\n item.radioOptions.forEach((opt) => (opt.selected = opt.id === value));\n }\n\n public checkChanged(item: DataSource, configItem: FiltersConfigItem): void {\n if (configItem.isLazyLoading) {\n // store the check items in the data source\n const existItem = configItem.dataSource.find((i) => i.id == item.id);\n if (existItem) {\n existItem.checked = item.checked;\n } else {\n configItem.dataSource.push(item);\n }\n // keep only checked\n configItem.dataSource = configItem.dataSource.filter((d) => d.checked);\n }\n // For tree items, zen-groups handles cascade internally\n }\n\n public toggle() {\n this.isVisible = !this.isVisible;\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n\n if (this.isVisible) {\n this.resetLazyLoadingSources(true);\n }\n }\n\n public onCheckValidity(item: FiltersConfigItem) {\n if (item.type === 'numberRange') {\n if (\n typeof item.numberRange.from === 'number' &&\n typeof item.numberRange.to === 'number' &&\n item.numberRange.from > item.numberRange.to\n ) {\n this.errorMessage.push(\n `Invalid Number range: The Min number cannot be greater than the Max number.`\n );\n return false;\n }\n }\n if (item.type === 'dateRange') {\n if (\n item.dateRange.start &&\n item.dateRange.end &&\n new Date(item.dateRange.start) > new Date(item.dateRange.end)\n ) {\n this.errorMessage.push(\n `Invalid Date range: The Start date cannot be after the End date.`\n );\n return false;\n }\n }\n return true;\n }\n\n public updatePlacement(pos: 'fixed' | 'absolute' = 'fixed') {\n const host = this._componentElement.nativeElement as HTMLElement;\n const container = host.querySelector('.menu-content') as HTMLElement;\n if (!container) return;\n\n const rect =\n pos === 'fixed'\n ? host.getBoundingClientRect()\n : container.getBoundingClientRect();\n const left = rect.left;\n const right = rect.right;\n const top = rect.top;\n const bottom = window.innerHeight - top;\n\n if (pos === 'absolute') {\n this.renderer.addClass(container, 'absolute');\n this.renderer.removeStyle(container, 'inset');\n } else {\n this.renderer.removeClass(container, 'absolute');\n }\n\n if (pos === 'fixed') {\n if (this.position.includes('auto')) {\n const horizontalPosition = this.getHorizontalPosition();\n this.menuRight =\n horizontalPosition === 'left'\n ? `${window.innerWidth - right}px`\n : 'unset';\n this.menuLeft = horizontalPosition === 'right' ? `${left}px` : 'unset';\n } else if (this.position.includes('left')) {\n this.menuRight = `${window.innerWidth - right}px`;\n this.menuLeft = 'unset';\n } else {\n this.menuLeft = `${left}px`;\n this.menuRight = 'unset';\n }\n\n if (this.position.includes('auto')) {\n const verticalPosition = this.getVerticalPosition();\n this.menuTop =\n verticalPosition === 'bottom' ? `${top + 42}px` : 'unset';\n this.menuBottom = verticalPosition === 'top' ? `${bottom}px` : 'unset';\n } else if (this.position.includes('top')) {\n this.menuTop = 'unset';\n this.menuBottom = `${bottom + 10}px`;\n } else {\n this.menuTop = `${top + 55}px`;\n this.menuBottom = 'unset';\n }\n } else {\n let verticalClass = '';\n let horizontalClass = '';\n\n if (this.position.includes('auto')) {\n horizontalClass = this.getHorizontalPosition();\n verticalClass = this.getVerticalPosition();\n } else {\n horizontalClass = this.position.includes('left') ? 'left' : 'right';\n verticalClass = this.position.includes('top') ? 'top' : 'bottom';\n }\n [\n 'dropdown-left',\n 'dropdown-right',\n 'dropdown-top',\n 'dropdown-bottom',\n ].forEach((c) => this.renderer.removeClass(container, c));\n this.renderer.addClass(container, `dropdown-${horizontalClass}`);\n this.renderer.addClass(container, `dropdown-${verticalClass}`);\n }\n }\n\n private getVerticalPosition(): 'bottom' | 'top' {\n const top =\n this._componentElement.nativeElement.getBoundingClientRect().top;\n return top > window.innerHeight / 2 ? 'top' : 'bottom';\n }\n\n private getHorizontalPosition(): 'right' | 'left' {\n const left =\n this._componentElement.nativeElement.getBoundingClientRect().left;\n return left > window.innerWidth / 2 ? 'left' : 'right';\n }\n\n public getDefaultDateRangeOptions(): {\n name: string;\n dateRange: DateRange;\n }[] {\n return [\n {\n name: 'Today',\n dateRange: {\n start: moment().startOf('day').toDate(),\n end: moment().endOf('day').toDate(),\n },\n },\n {\n name: 'Yesterday',\n dateRange: {\n start: moment().subtract(1, 'days').startOf('day').toDate(),\n end: moment().subtract(1, 'days').endOf('day').toDate(),\n },\n },\n {\n name: 'This Week',\n dateRange: {\n start: moment().startOf('week').toDate(),\n end: moment().endOf('week').toDate(),\n },\n },\n {\n name: 'Last Week',\n dateRange: {\n start: moment().subtract(7, 'days').startOf('week').toDate(),\n end: moment().subtract(7, 'days').endOf('week').toDate(),\n },\n },\n {\n name: 'This Month',\n dateRange: {\n start: moment().startOf('month').toDate(),\n end: moment().endOf('month').toDate(),\n },\n },\n {\n name: 'Last Month',\n dateRange: {\n start: moment().subtract(1, 'month').startOf('month').toDate(),\n end: moment().subtract(1, 'month').endOf('month').toDate(),\n },\n },\n ];\n }\n\n private sortTreeOrder(items: DataSource[], treeMap: Map<string | number, DataSource>): DataSource[] {\n const itemSet = new Set(items.map(i => i.id));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item.id)) return;\n if (!itemSet.has(item.id)) return;\n visited.add(item.id);\n ordered.push(item);\n if (item.children?.length) {\n for (const childId of item.children) {\n const child = treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item.id)) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public hasTreeData(configItem: FiltersConfigItem): boolean {\n return configItem.dataSource?.some(d => d.children?.length > 0) || false;\n }\n\n public handleDateRangeOptionClick(item, option) {\n item.dateRange = option.dateRange;\n this.selectedDateRangeOptions[item.key] = option.name;\n }\n\n public handleCustomDateRangeClick(item) {\n this.selectedDateRangeOptions[item.key] = 'Custom';\n }\n\n public handleEndDateChange(item) {\n if (!item.showTime) {\n item.dateRange.end = moment(item.dateRange.end).endOf('day').toDate();\n }\n }\n\n public get hasMultiselectItems(): boolean {\n return this.config.items.some(\n (item) => item.type === 'multiselect' && item.dataSource?.length > 0\n );\n }\n\n public get selectedCount(): number {\n let count = 0;\n for (const item of this.config.items) {\n if (item.type === 'multiselect' && item.dataSource) {\n count += item.dataSource.filter((d) => d.checked).length;\n }\n }\n return count;\n }\n}\n","<div class=\"filters-component\"\n #mainComponent\n click-out=\"isVisible && hide()\">\n\n @if (!customTrigger) {\n <zen-button (click)=\"toggle()\"\n [variant]=\"isApplied ? 'secondary' : 'secondary-gray'\"\n class=\"filter {{isApplied ? 'applied' : ''}}\">\n @if (imageUrl) {\n <zen-icon [src]=\"imageUrl\"\n ></zen-icon>\n }\n @if (!imageUrl) {\n <i class=\"filter-icon material-icons\"\n >filter_list</i>\n }\n @if (label) {\n <span>{{ label | translate }}</span>\n }\n </zen-button>\n }\n\n @if (customTrigger) {\n <ng-content></ng-content>\n }\n\n <div [hidden]=\"!isVisible\"\n class=\"action-menu menu-content\"\n [class.customTrigger]=\"customTrigger\"\n [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom }\">\n <div class=\"action-menu-header\">\n <zen-search-box [(text)]=\"searchText\"\n #searchBox\n (textChange)=\"searchTextChanged()\"></zen-search-box>\n </div>\n\n <div class=\"action-menu-body items-wrapper\"\n ngClass=\"{{wrapperBodyClass}}\">\n @if (errorMessage.length) {\n @for (item of errorMessage; track item) {\n <li\n class=\"error-msg\">{{item | translate }}</li>\n }\n }\n\n @for (item of config.items; track item) {\n <div>\n @if (isMenuIsVisible(item)) {\n <div class=\"menu-item\"\n >\n <!-- Divider between two filter -->\n @if (item.type === 'divider') {\n <div>\n <p class=\"filter-divider\"></p>\n </div>\n }\n <!-- Boolean toggle -->\n @if (item.type === 'toggle') {\n <div\n class=\"action-item toggle-row\">\n <div>{{item.title | translate}}</div>\n <zen-toggle-slide [(enabled)]=\"item.enabled\"></zen-toggle-slide>\n </div>\n }\n @if (item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse) {\n <button class=\"action-item expander-item\"\n (click)=\"toggleItem(item)\">\n <span class=\"expander-title\">{{item.title | translate}}</span>\n <i class=\"material-icons expand-icon\"\n [ngClass]=\"{'active': item.expanded}\">expand_more</i>\n </button>\n }\n @if (item.type != 'toggle' && item.type != 'divider' && item.disableCollapse) {\n <div class=\"action-item section-title\"\n >\n {{item.title | translate}}\n </div>\n }\n @if (item.expanded || item.disableCollapse) {\n <div>\n @switch (item.type) {\n <!-- Multiselect -->\n @case ('multiselect') {\n <div>\n <!-- Lazy loading mode -->\n @if (item.isLazyLoading) {\n @for (dsItem of item.filteredDataSource; track dsItem) {\n <div\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n @if (dsItem.badgeBgColor) {\n <span\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n }\n </div>\n }\n @if (item.canLoadMore && !item.isLoadingNow) {\n <div\n class=\"action-item\">\n <button (click)=\"loadMore(item, false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n }\n @if (item.isLoadingNow) {\n <div\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n }\n }\n @if (!item.isLazyLoading && !hasTreeData(item)) {\n @if (!item.hideSelectAll) {\n <div class=\"action-item-checkbox ds-item select-all\">\n @if (item.dataSource.length === item.filteredDataSource.length) {\n <zen-checkbox\n [(checked)]=\"item.isSelectedAll\"\n [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll(item)\">\n </zen-checkbox>\n }\n </div>\n }\n @for (dsItem of item.filteredDataSource; track dsItem) {\n <div\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n @if (dsItem.badgeBgColor) {\n <span\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n }\n </div>\n }\n }\n <!-- Tree view mode -->\n @if (!item.isLazyLoading && hasTreeData(item)) {\n <zen-groups\n [dataSource]=\"item.dataSource\"\n [filteredDataSource]=\"item.filteredDataSource\"\n [hideSelectAll]=\"item.hideSelectAll\"\n [inline]=\"true\"\n [hideSearch]=\"true\"\n [(isSelectedAll)]=\"item.isSelectedAll\"\n (checkedChange)=\"checkChanged($event, item)\">\n </zen-groups>\n }\n </div>\n }\n <!-- Date range picker -->\n @case ('dateRange') {\n <div>\n <!-- Options date range view -->\n @if (item.dateRangeOptions?.length) {\n @for (option of item.dateRangeOptions; track option) {\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"></zen-radio>\n </div>\n }\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom' | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"></zen-radio>\n </div>\n @if (selectedDateRangeOptions[item.key] === 'Custom') {\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n }\n }\n <!-- Default date range view -->\n @if (!item.dateRangeOptions?.length) {\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n }\n </div>\n }\n <!-- Date picker -->\n @case ('date') {\n <div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'Date' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.date\"\n [showTime]=\"item.showTime\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n </div>\n }\n <!-- Number range -->\n @case ('numberRange') {\n <div\n class=\"filter-row number-range-row\">\n <div>\n <div class=\"lbl\">{{'Min' | translate}}:</div>\n <input class=\"material-input\"\n [(ngModel)]=\"item.numberRange.from\"\n type=\"number\" />\n </div>\n <div>\n <div class=\"lbl\">{{'Max' | translate}}:</div>\n <input class=\"material-input\"\n [(ngModel)]=\"item.numberRange.to\"\n type=\"number\" />\n </div>\n </div>\n }\n <!-- Radio -->\n @case ('radio') {\n <div>\n @for (option of item.radioOptions; track option) {\n <div\n class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.id\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [imageUrl]=\"option.imageUrl\"\n [selected]=\"option.selected\"\n (radioChange)=\"radioChanged($event, item)\"\n [disabled]=\"option.disabled\"></zen-radio>\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (showNoFilterResult) {\n <span\n class=\"no-item\">{{'No Results Found' | translate}}..</span>\n }\n </div>\n\n <div class=\"action-menu-footer filter-footer\">\n @if (hasMultiselectItems) {\n <span class=\"selected-count\">{{ selectedCount }} {{'Selected' | translate}}</span>\n }\n <div class=\"filter-footer-actions\">\n <button (click)=\"reset()\"\n class=\"filter-btn-clear\"\n [class.has-selection]=\"selectedCount > 0 && hasMultiselectItems\">\n {{'Clear Filter' | translate}}\n </button>\n <button (click)=\"apply()\"\n class=\"filter-btn-apply\">\n {{'Apply' | translate}}\n </button>\n </div>\n </div>\n\n </div>\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-option]',\n standalone: false\n})\nexport class ZenduSelectOptionDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-value]',\n standalone: false\n})\nexport class ZenduSelectValueDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-custom-button]',\n standalone: false\n})\nexport class ZenduSelectButtonDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, ViewEncapsulation, ContentChild, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenduSelectOptionDirective } from './templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './templates/zendu-select-value.directive';\nimport { ZenduSelectButtonDirective } from './templates/zendu-select-button.directive';\nimport { DataSource } from '../filter/filtersConfig';\n\nexport interface LazyLoaderSearch {\n text?: string;\n ids?: string[];\n}\n\nexport interface LazyLoaderResult {\n id: string | number;\n name?: string | number; // Compatible with DataSource\n text?: string; // Original property\n checked?: boolean;\n imageUrl?: string;\n isOpen?: boolean;\n children?: string[];\n parentId?: string | number;\n level?: number;\n index?: number;\n badgeBgColor?: string;\n badgeColor?: string;\n}\n\nexport type LazyLoaderFunction = (\n search: LazyLoaderSearch, \n offset: number, \n limit: number\n) => Promise<LazyLoaderResult[]>;\n\nexport interface AddOptionEvent {\n value: string;\n}\n\nexport interface RemoveOptionEvent {\n removed: boolean;\n}\n\nexport interface SelectOption {\n [key: string]: any;\n id?: string | number;\n name?: string;\n icon?: string;\n iconName?: string;\n avatar?: string;\n dotColor?: string;\n secondaryText?: string;\n}\n\n@Component({\n selector: 'zen-select',\n templateUrl: './zendu-select.component.html',\n styleUrls: ['./zendu-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSelectComponent implements OnChanges {\n /**\n * 2-Way component property for selected items.\n * Don't initialize property on constructor to prevent change source parameter\n */\n @Input() selectModel: any | any[];\n \n /**\n * callback to emit changes for parent component\n */\n @Output() selectModelChange = new EventEmitter<any | any[]>();\n \n /**\n * List of options\n */\n @Input() options: SelectOption[] | any[] = [];\n \n /**\n * Label text above the select\n */\n @Input() label?: string;\n \n /**\n * Supporting text below the select\n */\n @Input() supportingText?: string;\n \n /**\n * Hint text (shown below select)\n */\n @Input() hintText = '';\n \n /**\n * Placeholder text\n */\n @Input() placeholder = 'Select';\n \n /**\n * Leading element type\n */\n @Input() leadingType: 'default' | 'icon' | 'avatar' | 'dot' | 'search' = 'default';\n \n /**\n * Icon for icon leading type\n */\n @Input() leadingIcon?: string;\n \n /**\n * Avatar URL for avatar leading type\n */\n @Input() leadingAvatar?: string;\n \n /**\n * Dot color for dot leading type\n */\n @Input() leadingDotColor?: string;\n \n /**\n * This is a key value to get display name from option object\n */\n @Input() displayProp: string = 'name';\n \n /**\n * This is a key value to get id from option object\n */\n @Input() idProp: string = 'id';\n \n /**\n * Enable search functionality\n */\n @Input() hasSearch = false;\n \n /**\n * Component property to enable multiselect\n */\n @Input() isMultiselect = false;\n \n /**\n * Alias for isMultiselect for easier usage\n */\n @Input() \n set multiselect(value: boolean) {\n this.isMultiselect = value;\n }\n get multiselect(): boolean {\n return this.isMultiselect;\n }\n \n /**\n * Auto-detected tree mode: true if any option has a `children` array\n */\n public isTreeMode = false;\n\n /**\n * Hide \"Select All\" option in both tree mode and flat multiselect\n */\n @Input() hideSelectAll = false;\n\n /**\n * Hide search box in tree mode\n */\n @Input() hideTreeSearch = false;\n\n /**\n * Mark the select as required (shows * indicator on label)\n */\n @Input() required = false;\n\n /**\n * Disable the select\n */\n @Input() disabled = false;\n \n /**\n * Show error state\n */\n @Input() error = false;\n \n /**\n * Error message to display\n */\n @Input() errorMessage?: string;\n \n /**\n * Destructive/error state (similar to zen-input)\n */\n @Input() destructive = false;\n \n /**\n * Size variant\n */\n @Input() size: 'sm' | 'md' = 'md';\n \n /**\n * Component property to return whole option object\n * By default only id value is returned\n */\n @Input() returnOption: boolean = false;\n \n \n /**\n * Truncate text with \"...\" at the end\n */\n @Input() isTruncate: boolean = false;\n \n /**\n * show Add New Option at first place\n */\n @Input() enableAddNewOption: boolean = false;\n \n /**\n * Show Add New option text by default if newOptionText empty\n */\n @Input() showDefaultAddOption: boolean = true;\n \n /**\n * display custom text for Add New Option\n */\n @Input() newOptionText: string;\n\n \n /**\n * Emit event when Add New Option is clicked\n */\n @Output() addNewOption: EventEmitter<AddOptionEvent> = new EventEmitter<AddOptionEvent>();\n \n /**\n * show remove Option at first place\n */\n @Input() enableRemoveOption: boolean = false;\n \n /**\n * display custom text for remove Option\n */\n @Input() removeOptionText: string;\n \n /**\n * Enable lazy loading for options\n */\n @Input() isLazyLoading = false;\n \n /**\n * Lazy loader function to fetch options\n */\n @Input() lazyLoader?: LazyLoaderFunction;\n \n /**\n * Preferred direction for dropdown to open\n */\n @Input() preferredOpenDirection: 'auto' | 'up' | 'down' = 'auto';\n \n /**\n * Emit event when remove Option is clicked\n */\n @Output() removeOption: EventEmitter<RemoveOptionEvent> = new EventEmitter<RemoveOptionEvent>();\n \n /**\n * Emit event when select is closed, sending the selected data\n */\n @Output() closed: EventEmitter<any | any[]> = new EventEmitter<any | any[]>();\n \n /**\n * State tracking\n */\n public isOpen = false;\n public searchText = '';\n public searchInputValue = '';\n public searchFocused = false;\n public filteredOptions: SelectOption[] | any[] = [];\n public selectedDisplay = '';\n public labelText = '';\n public option: SelectOption | null = null;\n public canLoadMore = false;\n public isLoadingNow = false;\n private _searchDebounce: ReturnType<typeof setTimeout>;\n\n // Tree mode properties\n public treeFilteredDataSource: DataSource[] = [];\n public isSelectedAll = false;\n \n /**\n * Select Option Template for custom HTML\n */\n @ContentChild(ZenduSelectOptionDirective) optionTemplate: ZenduSelectOptionDirective;\n \n /**\n * Select Value Template for custom HTML\n */\n @ContentChild(ZenduSelectValueDirective) valueTemplate: ZenduSelectValueDirective;\n \n /**\n * Select Button Template for custom HTML\n */\n @ContentChild(ZenduSelectButtonDirective) buttonTemplate: ZenduSelectButtonDirective;\n \n constructor(private elementRef: ElementRef) {}\n\n /**\n * Get dropdown direction class based on preferredOpenDirection\n */\n getDropdownDirectionClass(): string {\n switch (this.preferredOpenDirection) {\n case 'up':\n return 'dropdown-up';\n case 'down':\n return 'dropdown-down';\n case 'auto':\n default:\n return this.shouldOpenUpward(320) ? 'dropdown-up' : 'dropdown-down';\n }\n }\n\n private shouldOpenUpward(dropdownHeight: number): boolean {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n return (window.innerHeight - rect.bottom) < dropdownHeight;\n }\n\n /**\n * Resolve icon path with fallback to assets folder\n */\n private resolveIconPath(iconName?: string): string | null {\n if (!iconName) return null;\n \n // If it's already a full path or URL, return as is\n if (iconName.includes('/') || iconName.includes('.')) {\n return iconName;\n }\n \n // Try assets folder with .svg extension\n return `assets/ng-zenduit/icons/${iconName}.svg`;\n }\n\n /**\n * Get icon for display (with fallback logic)\n */\n public getIconPath(option?: SelectOption, leadingIcon?: string): string | null {\n // Priority: leadingIcon -> option.icon -> option.iconName -> assets/{iconName}.svg\n if (leadingIcon) {\n return this.resolveIconPath(leadingIcon);\n }\n \n if (option?.icon) {\n return this.resolveIconPath(option.icon);\n }\n \n if (option?.iconName) {\n return this.resolveIconPath(option.iconName);\n }\n \n return null;\n }\n \n ngOnChanges(changeObj: { [key: string]: { currentValue: unknown; previousValue: unknown; firstChange: boolean } }): void {\n this.isTreeMode = this.options?.some((opt: any) => {\n const children = opt.children || opt.Children || opt.Childrens;\n return Array.isArray(children) && children.length > 0;\n }) ?? false;\n if (this.isTreeMode) {\n this.initTreeData();\n }\n this.updateDisplay();\n this.filterOptions();\n this.updateLabel();\n\n if (changeObj[\"selectModel\"]) {\n if (this.isLazyLoading && Array.isArray(this.selectModel) && this.selectModel.length) {\n if (!this.filteredOptions?.length && !this.isOpen) {\n // preload data to show the labels\n this.loadMore(true);\n }\n }\n }\n }\n \n /**\n * Toggle dropdown\n */\n toggleDropdown(): void {\n if (this.disabled) return;\n \n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.searchText = '';\n if (this.isLazyLoading) {\n // Load the first page (showing already-selected items on top) the first\n // time the dropdown is opened.\n if (!this.isLoadingNow && !this.filteredOptions?.length) {\n this.loadMore(true);\n }\n } else {\n this.filterOptions();\n }\n }\n }\n\n /**\n * Handle scroll on the options list — fetch the next page once the user\n * scrolls near the bottom (lazy loading only).\n */\n public onOptionsScroll(event: Event): void {\n if (!this.isLazyLoading || this.isLoadingNow || !this.canLoadMore) {\n return;\n }\n const el = event.target as HTMLElement;\n const threshold = 40;\n if (el.scrollHeight - el.scrollTop - el.clientHeight <= threshold) {\n this.loadMore(false);\n }\n }\n\n /**\n * Reset and re-fetch the first page when the search text changes in lazy\n * mode (debounced so we don't fire a request on every keystroke).\n */\n private reloadLazySearch(): void {\n clearTimeout(this._searchDebounce);\n this._searchDebounce = setTimeout(() => {\n this.filteredOptions = [];\n this.canLoadMore = true;\n this.loadMore(false);\n }, 300);\n }\n \n /**\n * Handle option selection\n */\n selectOption(option: SelectOption): void {\n this.option = option;\n const optionValue = this.returnOption ? option : this.getOptionValue(option);\n \n if (this.isMultiselect) {\n this.toggleMultiselectOption(optionValue);\n } else {\n this.selectModel = optionValue;\n this.isOpen = false;\n // Update search input value for search type\n if (this.leadingType === 'search') {\n this.searchInputValue = this.getOptionDisplay(option);\n }\n }\n \n this.emitChange();\n this.updateDisplay();\n }\n \n /**\n * Toggle option in multiselect mode\n */\n private toggleMultiselectOption(value: any): void {\n if (!Array.isArray(this.selectModel)) {\n this.selectModel = [];\n }\n \n const index = this.getElementIndex(value);\n \n if (index < 0) {\n this.selectModel.push(value);\n } else {\n this.selectModel.splice(index, 1);\n }\n \n this.updateLabel();\n }\n \n /**\n * Check if option is selected\n */\n isSelected(option: SelectOption): boolean {\n if (this.isModelEmpty()) {\n return false;\n }\n \n const optionId = this.getId(option);\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n return this.selectModel.findIndex(el => this.getId(el as SelectOption) === optionId) >= 0;\n } else {\n return this.getId(this.selectModel as SelectOption) === optionId;\n }\n }\n \n /**\n * Get display text for option\n */\n getOptionDisplay(option: any): string {\n if (typeof option === 'object' && option !== null) {\n if (this.displayProp) {\n const combinedProps = this.displayProp.split(\"|\")\n .map(i => this.getRecursiveProperty(option, i))\n .filter(v => v) // Filter out null values\n .join(\" \");\n return combinedProps || '';\n } else {\n console.error('App-Select: when using objects as model, a displayProp value is mandatory.');\n return \"\";\n }\n }\n return String(option);\n }\n \n /**\n * Alias for getOptionDisplay for backward compatibility\n */\n public getName(option: string | object): string {\n return this.getOptionDisplay(option);\n }\n \n \n /**\n * Get value for option (using idProp)\n */\n getOptionValue(option: SelectOption): string | number {\n return this.getId(option);\n }\n \n /**\n * Get id value from option\n */\n private getId(option: string | number | object): string | number {\n if (typeof option === 'object' && option !== null) {\n if (this.idProp) {\n return this.getRecursiveProperty(option as Record<string, unknown>, this.idProp);\n } else {\n console.error('App-Select: when using objects as model, a idProp value is mandatory.');\n return \"\";\n }\n } else {\n return option as string | number;\n }\n }\n \n /**\n * Update displayed text\n */\n private updateDisplay(): void {\n if (this.isModelEmpty()) {\n this.selectedDisplay = '';\n this.labelText = '';\n // Also clear search input for search type\n if (this.leadingType === 'search') {\n this.searchInputValue = '';\n }\n return;\n }\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n const option = this.findOptionByValue(this.selectModel[0]);\n this.selectedDisplay = option ? this.getOptionDisplay(option) : '';\n } else {\n this.selectedDisplay = `${this.selectModel.length} selected`;\n }\n // For multiselect search type, show count in search input when closed\n if (this.leadingType === 'search' && !this.searchFocused) {\n this.searchInputValue = this.selectedDisplay;\n }\n } else {\n const option = this.findOptionByValue(this.selectModel);\n this.selectedDisplay = option ? this.getOptionDisplay(option) : '';\n // Also update search input for search type\n if (this.leadingType === 'search' && option) {\n this.searchInputValue = this.getOptionDisplay(option);\n }\n }\n }\n \n /**\n * Find option by value\n */\n private findOptionByValue(value: any): SelectOption | null {\n if (this.returnOption) {\n return this.options.find(opt => opt === value) || null;\n }\n return this.options.find(opt => this.getId(opt) === value) || null;\n }\n \n /**\n * Check if model is empty\n */\n public isModelEmpty(): boolean {\n if (this.isMultiselect) {\n return !Array.isArray(this.selectModel) || !this.selectModel.length;\n } else {\n return this.selectModel === null || this.selectModel === void 0;\n }\n }\n \n /**\n * Get element index in multiselect array\n */\n private getElementIndex(value: any): number {\n if (!Array.isArray(this.selectModel)) return -1;\n \n if (typeof value === 'object') {\n const valueId = this.getId(value);\n return this.selectModel.findIndex(el => this.getId(el as SelectOption) === valueId);\n } else {\n return this.selectModel.indexOf(value);\n }\n }\n \n /**\n * Toggle all options in multiselect\n */\n public toggleAll(): void {\n const modelArray = Array.isArray(this.selectModel) ? this.selectModel : [];\n if (modelArray.length !== this.options.length) {\n this.selectModel = this.options.map((el: SelectOption) => this.returnOption ? el : this.getId(el));\n } else {\n this.selectModel = [];\n }\n \n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n \n /**\n * Toggle Select All option for flat multiselect\n */\n public toggleSelectAll(): void {\n if (this.isAllSelected()) {\n // Deselect all\n this.selectModel = [];\n } else {\n // Select all filtered options\n this.selectModel = this.filteredOptions.map((el: SelectOption) => \n this.returnOption ? el : this.getId(el)\n );\n }\n \n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n \n /**\n * Check if all filtered options are selected\n */\n public isAllSelected(): boolean {\n if (!this.isMultiselect || !Array.isArray(this.selectModel)) {\n return false;\n }\n \n if (this.filteredOptions.length === 0) {\n return false;\n }\n \n // Check if all filtered options are in the selectModel\n return this.filteredOptions.every(option => {\n const optionId = this.getId(option);\n return this.selectModel.some((selected: any) => {\n const selectedId = this.returnOption ? this.getId(selected) : selected;\n return selectedId === optionId;\n });\n });\n }\n \n /**\n * Get recursive property from nested object\n */\n private getRecursiveProperty(object: Record<string, unknown>, path: string): string | number {\n return path.split('.').reduce((obj, x) => {\n if (obj && typeof obj === 'object' && x in obj) {\n return (obj as Record<string, unknown>)[x];\n } else {\n return null;\n }\n }, object as unknown) as string | number;\n }\n \n /**\n * Update label text\n */\n public updateLabel(): void {\n if (this.isModelEmpty()) {\n this.labelText = '';\n return;\n }\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n const selectedCount = this.selectModel.length;\n \n if (selectedCount === 1) {\n this.labelText = this.getNameFromValue(this.selectModel[0]);\n } else {\n this.labelText = `${selectedCount} Selected`;\n }\n } else {\n this.labelText = this.getNameFromValue(this.selectModel);\n }\n }\n \n /**\n * Get name from value\n */\n public getNameFromValue(val: any): string {\n if (this.returnOption) {\n return this.getOptionDisplay(val as SelectOption);\n } else {\n if (this.isLazyLoading) {\n const opt = this.filteredOptions?.find(i => this.getId(i) == val);\n return opt ? this.getOptionDisplay(opt) : String(val);\n } else {\n if (!this.options || !this.options.length) {\n return '';\n }\n let option = this.options.find(el => this.getId(el) === val);\n return this.getOptionDisplay(option ?? val as SelectOption);\n }\n }\n }\n \n /**\n * Emit change event\n */\n private emitChange(): void {\n // notify with timeout\n // allow output property \"enabled\" applied by parent first and then emit the onChange\n setTimeout(() => {\n this.selectModelChange.emit(this.selectModel);\n }, 1);\n }\n \n /**\n * Filter options based on search\n */\n filterOptions(): void {\n // In lazy mode the filteredOptions are managed by loadMore(), not derived\n // from the static options array — leave them untouched here.\n if (this.isLazyLoading) {\n return;\n }\n if (!this.searchText) {\n this.filteredOptions = [...this.options];\n return;\n }\n\n const searchLower = this.searchText.toLowerCase();\n this.filteredOptions = this.options.filter(option => {\n const display = this.getOptionDisplay(option).toLowerCase();\n return display.includes(searchLower);\n });\n\n }\n \n /**\n * Handle search input\n */\n onSearchChange(): void {\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n\n clearSearch(): void {\n this.searchText = '';\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n \n /**\n * Handle search input change for search type\n */\n onSearchInputChange(): void {\n this.searchText = this.searchInputValue;\n if (!this.isOpen && this.searchInputValue) {\n this.isOpen = true;\n }\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n \n /**\n * Handle search input focus\n */\n onSearchFocus(): void {\n this.searchFocused = true;\n // Clear the search input when focused so user can type fresh\n this.searchInputValue = '';\n this.searchText = '';\n // Open dropdown to show all options\n this.isOpen = true;\n // Reset filtered options to show all\n this.filterOptions();\n }\n \n /**\n * Handle search input blur\n */\n onSearchBlur(event: FocusEvent): void {\n // Don't close immediately if clicking on dropdown\n setTimeout(() => {\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (!relatedTarget || !this.elementRef.nativeElement.contains(relatedTarget)) {\n this.searchFocused = false;\n if (!this.isOpen) {\n this.searchInputValue = this.selectedDisplay;\n }\n }\n }, 200);\n }\n \n /**\n * Get selected option for leading display\n */\n getSelectedOption(): SelectOption | null {\n if (this.isModelEmpty()) return null;\n\n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n return this.findOptionByValue(this.selectModel[0]);\n }\n return null;\n }\n\n return this.findOptionByValue(this.selectModel);\n }\n \n /**\n * Get selected secondary text for display\n */\n getSelectedSecondaryText(): string | null {\n if (!this.selectModel) return null;\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n const option = this.findOptionByValue(this.selectModel[0]);\n return option?.secondaryText || null;\n }\n // For multiple selection, we won't show secondary text to avoid confusion\n return null; \n }\n \n const option = this.findOptionByValue(this.selectModel);\n return option?.secondaryText || null;\n }\n \n /**\n * Close dropdown on outside click\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.hideDropDown(true);\n }\n }\n \n /**\n * Hide dropdown\n */\n public async hideDropDown(userAction: boolean = false): Promise<void> {\n // Only emit closed event if it was open AND triggered by user action\n if (userAction && this.isOpen) {\n this.closed.emit(this.selectModel);\n }\n \n this.isOpen = false;\n }\n \n /**\n * Handle Enter key on search input\n */\n onSearchEnter(event: Event): void {\n event.preventDefault();\n if (this.enableAddNewOption && this.filteredOptions.length === 0 && (this.searchText || this.searchInputValue)?.trim()) {\n this.handleAddNewOption();\n }\n }\n\n /**\n * Handle add new option\n */\n public handleAddNewOption(): void {\n this.addNewOption.emit({ value: this.searchText || this.searchInputValue });\n this.searchText = '';\n this.searchInputValue = '';\n this.filterOptions();\n this.hideDropDown(true);\n }\n \n /**\n * Handle remove option\n */\n public handleRemoveOption(): void {\n this.removeOption.emit({ removed: true });\n this.hideDropDown(true);\n }\n \n /**\n * Get state classes\n */\n getStateClasses(): string {\n const classes = ['app-select-container'];\n\n if (this.size) classes.push(`size-${this.size}`);\n if (this.isOpen) classes.push('open');\n if (this.disabled) classes.push('disabled');\n if (this.error) classes.push('error');\n if (this.destructive) classes.push('destructive');\n if (this.label) classes.push('with-label');\n if (this.supportingText) classes.push('with-supporting');\n \n return classes.join(' ');\n }\n \n /**\n * Load more items for lazy loading\n */\n public async loadMore(showSelectedOnTop: boolean): Promise<void> {\n try {\n this.isLoadingNow = true;\n if (!this.lazyLoader) {\n throw `loader is not available`;\n }\n if (!this.filteredOptions) {\n this.filteredOptions = [];\n }\n \n // load first 10 records for the first time\n const limit = (this.filteredOptions.length == 0) ? 10 : 100;\n let newItems: LazyLoaderResult[] = await this.lazyLoader({ text: this.searchText || \"\" }, this.filteredOptions.length, limit);\n \n this.canLoadMore = (newItems.length == limit);\n \n // the selectModel contains the selected items ids \n const checkedIds = Array.isArray(this.selectModel) \n ? this.selectModel.map(item => String(this.getId(item as SelectOption)))\n : [];\n \n if (showSelectedOnTop && checkedIds?.length) {\n // remove the checked items first\n this.filteredOptions = this.filteredOptions.filter(i => !checkedIds.includes(String(this.getId(i))));\n newItems = newItems.filter(i => !checkedIds.includes(String(i.id)));\n \n // add all checked items to the top\n const checkedItems: LazyLoaderResult[] = await this.lazyLoader({ ids: checkedIds }, 0, 100);\n this.filteredOptions = [...(checkedItems as SelectOption[]), ...this.filteredOptions];\n \n this.updateLabel();\n }\n \n // the filteredDataSource contains the items that is visible to user at the current moment\n this.filteredOptions = [...this.filteredOptions, ...(newItems as SelectOption[])];\n } catch (err) {\n console.error(err);\n } finally {\n this.isLoadingNow = false;\n }\n }\n\n /**\n * Initialize tree data by syncing selectModel IDs to DataSource checked flags\n */\n private initTreeData(): void {\n if (!this.isTreeMode || !this.options?.length) return;\n const selectedIds = new Set(\n Array.isArray(this.selectModel)\n ? this.selectModel.map(v => String(typeof v === 'object' ? this.getId(v) : v))\n : []\n );\n (this.options as any[]).forEach(opt => {\n opt.checked = selectedIds.has(String(opt[this.idProp]));\n });\n this.treeFilteredDataSource = [...this.options] as DataSource[];\n this.updateTreeSelectAllState();\n }\n\n /**\n * Handle checked change from zen-groups in tree mode\n */\n public onTreeCheckedChange(dsItem: DataSource): void {\n const checkedItems = (this.options as any[]).filter(opt => opt.checked);\n this.selectModel = checkedItems.map(opt =>\n this.returnOption ? opt : opt[this.idProp]\n );\n this.updateTreeSelectAllState();\n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n\n /**\n * Handle select all change from zen-groups in tree mode\n */\n public onTreeSelectAllChange(isSelectedAll: boolean): void {\n this.isSelectedAll = isSelectedAll;\n const checkedItems = (this.options as any[]).filter(opt => opt.checked);\n this.selectModel = checkedItems.map(opt =>\n this.returnOption ? opt : opt[this.idProp]\n );\n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n\n /**\n * Update the isSelectedAll flag based on current checked state\n */\n private updateTreeSelectAllState(): void {\n if (!this.options?.length) return;\n this.isSelectedAll = (this.options as any[]).every(opt => opt.checked);\n }\n\n}","<div [class]=\"getStateClasses()\">\n <!-- Label -->\n @if (label) {\n <label class=\"app-select-label text text-sm text-weight-medium\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n @if (required) {\n <span class=\"required-indicator\">*</span>\n }\n </label>\n }\n\n <!-- Select Input -->\n <div class=\"app-select-wrapper\">\n <!-- Custom Trigger Template (overrides built-in trigger) -->\n @if (buttonTemplate) {\n <div\n class=\"app-select-custom-trigger\"\n (click)=\"toggleDropdown()\">\n <ng-template [ngTemplateOutlet]=\"buttonTemplate.template\"\n [ngTemplateOutletContext]=\"{ isOpen: isOpen, selected: getSelectedOption(), display: selectedDisplay, disabled: disabled }\">\n </ng-template>\n </div>\n }\n\n <!-- Built-in Trigger (when no custom button template provided) -->\n @if (!buttonTemplate) {\n @switch (leadingType) {\n <!-- Default Select (no leading element) -->\n @case ('default') {\n <ng-container *ngTemplateOutlet=\"defaultSelectTemplate\"></ng-container>\n }\n <!-- Icon Leading Select -->\n @case ('icon') {\n <ng-container *ngTemplateOutlet=\"iconSelectTemplate\"></ng-container>\n }\n <!-- Avatar Leading Select -->\n @case ('avatar') {\n <ng-container *ngTemplateOutlet=\"avatarSelectTemplate\"></ng-container>\n }\n <!-- Dot Leading Select -->\n @case ('dot') {\n <ng-container *ngTemplateOutlet=\"dotSelectTemplate\"></ng-container>\n }\n <!-- Search Input Select -->\n @case ('search') {\n <ng-container *ngTemplateOutlet=\"searchInputTemplate\"></ng-container>\n }\n }\n }\n\n <!-- Dropdown Menu -->\n @if (isOpen) {\n <div class=\"app-select-dropdown\"\n [ngClass]=\"getDropdownDirectionClass()\"\n >\n <!-- Tree Mode: embed zen-groups inline -->\n @if (isTreeMode && isMultiselect) {\n <zen-groups [inline]=\"true\"\n [dataSource]=\"$any(options)\"\n [filteredDataSource]=\"treeFilteredDataSource\"\n [hideSelectAll]=\"hideSelectAll\"\n [hideSearch]=\"hideTreeSearch\"\n [idProp]=\"idProp\"\n [displayProp]=\"displayProp\"\n [(isSelectedAll)]=\"isSelectedAll\"\n (isSelectedAllChange)=\"onTreeSelectAllChange($event)\"\n (checkedChange)=\"onTreeCheckedChange($event)\">\n </zen-groups>\n } @else {\n <!-- Search Box for hasSearch (not for search type as it has inline search) -->\n @if (leadingType !== 'search' && hasSearch && !disabled) {\n <div class=\"app-select-search\">\n <zen-icon [name]=\"'search'\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange()\"\n (keydown.enter)=\"onSearchEnter($event)\"\n placeholder=\"Search\"\n class=\"app-select-search-input\">\n @if (searchText) {\n <zen-icon\n class=\"app-select-search-clear\"\n [name]=\"'x'\"\n [customColor]=\"'#667085'\"\n (click)=\"clearSearch(); $event.stopPropagation()\">\n </zen-icon>\n }\n </div>\n }\n <!-- Options List -->\n <div class=\"app-select-options\" (scroll)=\"onOptionsScroll($event)\">\n <!-- Select All Option for Multiselect -->\n @if (isMultiselect && !hideSelectAll && !isLazyLoading && filteredOptions.length > 0) {\n <button\n class=\"app-select-option select-all\"\n (click)=\"toggleSelectAll()\">\n <zen-checkbox class=\"app-select-checkbox\"\n [checked]=\"isAllSelected()\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n <span class=\"app-select-option-text\">\n Select All\n </span>\n </button>\n }\n <!-- Add New Option -->\n @if (enableAddNewOption && (showDefaultAddOption || searchText)) {\n <button\n class=\"app-select-option add-new-option\"\n (click)=\"handleAddNewOption(); $event.stopPropagation()\">\n <zen-icon [name]=\"'plus'\" [customColor]=\"'#136AB6'\"></zen-icon>\n <span class=\"app-select-option-text\">\n {{ (newOptionText || 'Add New Option') + (searchText ? ': \"' + searchText + '\"' : '') }}\n </span>\n </button>\n }\n <!-- Remove Option -->\n @if (enableRemoveOption) {\n <button\n class=\"app-select-option remove-option\"\n (click)=\"handleRemoveOption(); $event.stopPropagation()\">\n <zen-icon [name]=\"'user-x'\" [customColor]=\"'#344054'\"></zen-icon>\n <span class=\"app-select-option-text\">\n {{ removeOptionText || 'Remove' }}\n </span>\n </button>\n }\n @if (filteredOptions.length === 0 && !enableAddNewOption && !isLoadingNow) {\n <div class=\"app-select-no-options\">\n No matching options found\n </div>\n }\n @for (option of filteredOptions; track option) {\n <button\n class=\"app-select-option\"\n [class.selected]=\"isSelected(option)\"\n (click)=\"selectOption(option)\">\n <!-- Checkbox for Multiselect -->\n @if (isMultiselect) {\n <zen-checkbox class=\"app-select-checkbox\"\n [checked]=\"isSelected(option)\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n }\n <!-- Option Leading Element -->\n @if (leadingType !== 'default') {\n <div class=\"app-select-option-leading\">\n @switch (leadingType) {\n @case ('icon') {\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: option }\"></ng-container>\n }\n @case ('avatar') {\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: option }\"></ng-container>\n }\n @case ('dot') {\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: option }\"></ng-container>\n }\n }\n </div>\n }\n <!-- Option Text -->\n <div class=\"app-select-option-text-wrapper\">\n <!-- Use custom template if provided -->\n @if (!isMultiselect && optionTemplate) {\n <ng-template [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n } @else {\n <span class=\"app-select-option-text\" [class.app-select-option-truncate]=\"isTruncate\">\n {{ getName(option) | translate }}\n </span>\n @if (option.secondaryText) {\n <span class=\"app-select-option-secondary\">\n {{ option.secondaryText }}\n </span>\n }\n }\n </div>\n <!-- Check Icon for Single Select -->\n @if (!isMultiselect && isSelected(option)) {\n <zen-icon\n class=\"app-select-option-check\"\n [name]=\"'check'\"\n [customColor]=\"'#136AB6'\">\n </zen-icon>\n }\n </button>\n }\n <!-- Lazy loading spinner -->\n @if (isLazyLoading && isLoadingNow) {\n <div class=\"app-select-loading\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n }\n </div>\n }\n <!-- Flat List Mode (default) -->\n </div>\n }\n </div>\n\n <!-- Hint text / Error message -->\n @if ((destructive && errorMessage) || hintText) {\n <div\n class=\"app-select-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n @if (destructive) {\n <i class=\"material-icons-outlined hint-icon\">error_outline</i>\n }\n <span>{{ ((destructive && errorMessage) ? errorMessage : hintText) | translate }}</span>\n </div>\n }\n</div>\n\n<!-- ============================================= -->\n<!-- MAIN SELECT INPUT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Default Select Template (No Leading Element) -->\n<ng-template #defaultSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Icon Select Template -->\n<ng-template #iconSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: getSelectedOption(), icon: leadingIcon }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Avatar Select Template -->\n<ng-template #avatarSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: getSelectedOption(), avatar: leadingAvatar }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Dot Select Template -->\n<ng-template #dotSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: getSelectedOption(), color: leadingDotColor }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Search Input Template -->\n<ng-template #searchInputTemplate>\n <div class=\"app-select-input app-select-search-input\"\n [class.focused]=\"isOpen || searchFocused\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <!-- Search Icon -->\n <zen-icon [name]=\"'search'\"\n [customColor]=\"disabled ? '#9CA3AF' : '#667085'\">\n </zen-icon>\n\n <!-- Search Input Field -->\n <input type=\"text\"\n class=\"app-select-search-field\"\n [(ngModel)]=\"searchInputValue\"\n (ngModelChange)=\"onSearchInputChange()\"\n (keydown.enter)=\"onSearchEnter($event)\"\n (focus)=\"onSearchFocus()\"\n (blur)=\"onSearchBlur($event)\"\n [placeholder]=\"selectedDisplay || placeholder\"\n [disabled]=\"disabled\">\n </div>\n</ng-template>\n\n<!-- ============================================= -->\n<!-- SHARED COMPONENT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Select Value Display -->\n<ng-template #selectValueDisplay>\n <div class=\"app-select-value-wrapper\">\n @if (valueTemplate && !isModelEmpty()) {\n <ng-template [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: getSelectedOption(), display: selectedDisplay }\">\n </ng-template>\n } @else {\n <span class=\"app-select-value\" [class.placeholder]=\"isModelEmpty()\">\n {{ selectedDisplay || placeholder | translate }}\n </span>\n @if (getSelectedSecondaryText() && !isModelEmpty()) {\n <span class=\"app-select-secondary\">\n {{ getSelectedSecondaryText() }}\n </span>\n }\n }\n </div>\n</ng-template>\n\n<!-- Dropdown Arrow -->\n<ng-template #dropdownArrow>\n <zen-icon class=\"app-select-arrow\"\n [class.rotated]=\"isOpen\"\n [name]=\"'chevron-down'\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n</ng-template>\n\n<!-- ============================================= -->\n<!-- LEADING ELEMENT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Icon Leading Element (with smart resolution) -->\n<ng-template #iconLeadingElement let-option=\"option\" let-icon=\"icon\">\n @if (icon || option?.icon || option?.iconName) {\n @if (getIconPath(option, icon); as iconPath) {\n <!-- If icon contains / or . treat as SVG path -->\n @if ((icon && (icon.includes('/') || icon.includes('.'))) ||\n (option?.icon && (option.icon.includes('/') || option.icon.includes('.'))) ||\n (option?.iconName && (option.iconName.includes('/') || option.iconName.includes('.')))) {\n <!-- Use img tag for Excel to preserve colors -->\n @if (iconPath.includes('excel')) {\n <img\n [src]=\"iconPath\"\n alt=\"\"\n style=\"width: 20px; height: 20px;\">\n }\n <!-- Use zen-icon with src for other SVG files -->\n @if (!iconPath.includes('excel')) {\n <zen-icon\n [src]=\"iconPath\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n }\n }\n <!-- Otherwise treat as Material icon name or special cases -->\n @if (!((icon && (icon.includes('/') || icon.includes('.'))) ||\n (option?.icon && (option.icon.includes('/') || option.icon.includes('.'))) ||\n (option?.iconName && (option.iconName.includes('/') || option.iconName.includes('.'))))) {\n <!-- Special case for Excel icon - use img to preserve colors -->\n @if ((icon === 'excel') || (option?.icon === 'excel') || (option?.iconName === 'excel')) {\n <img\n src=\"assets/ng-zenduit/icons/excel.svg\"\n alt=\"Excel\"\n style=\"width: 20px; height: 20px;\">\n }\n <!-- Material icon names -->\n @if ((icon !== 'excel') && (option?.icon !== 'excel') && (option?.iconName !== 'excel')) {\n <zen-icon\n [name]=\"icon || option?.icon || option?.iconName\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n }\n }\n }\n }\n</ng-template>\n\n<!-- Avatar Leading Element -->\n<ng-template #avatarLeadingElement let-option=\"option\" let-avatar=\"avatar\">\n @if (avatar || option?.avatar) {\n <div class=\"app-select-avatar\" >\n <img [src]=\"avatar || option?.avatar\" alt=\"\">\n </div>\n }\n</ng-template>\n\n<!-- Dot Leading Element -->\n<ng-template #dotLeadingElement let-option=\"option\" let-color=\"color\">\n <div class=\"app-select-dot\"\n [style.background-color]=\"color || option?.dotColor || '#10B981'\">\n </div>\n</ng-template>","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { PageItem } from './pageItem';\n\n@Component({\n selector: 'zen-pagination-bar',\n templateUrl: './zendu-pagination-bar.component.html',\n styleUrls: ['./zendu-pagination-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduPaginationBarComponent implements OnChanges {\n @Input() page = 1;\n @Input() perPage = 10;\n @Input() count = 0;\n @Input() perPageOptions: number[] = [10, 20, 30, 40, 50];\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() perPageChange = new EventEmitter<number>();\n\n public totalPages = 1;\n public pages: PageItem[] = [];\n public rangeStart = 0;\n public rangeEnd = 0;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['count'] || changes['perPage'] || changes['page']) {\n this.recalculate();\n }\n }\n\n public goToPage(target: number): void {\n const clamped = Math.min(Math.max(1, target), this.totalPages);\n if (clamped === this.page) {\n return;\n }\n this.page = clamped;\n this.recalculate();\n this.pageChange.emit(this.page);\n }\n\n public onPerPageChange(value: number): void {\n this.perPage = value;\n this.page = 1;\n this.recalculate();\n this.perPageChange.emit(this.perPage);\n this.pageChange.emit(this.page);\n }\n\n private recalculate(): void {\n this.totalPages = Math.max(1, Math.ceil((this.count || 0) / (this.perPage || 1)));\n this.pages = this.buildPages(this.page, this.totalPages);\n this.rangeStart = this.count === 0 ? 0 : (this.page - 1) * this.perPage + 1;\n this.rangeEnd = Math.min(this.page * this.perPage, this.count);\n }\n\n private buildPages(current: number, total: number): PageItem[] {\n const result: PageItem[] = [];\n const push = (p: number) => result.push({ kind: 'page', page: p, active: p === current });\n\n if (total <= 7) {\n for (let i = 1; i <= total; i++) {\n push(i);\n }\n return result;\n }\n\n const window = new Set<number>([1, total, current - 1, current, current + 1]);\n if (current <= 3) {\n window.add(2).add(3);\n }\n if (current >= total - 2) {\n window.add(total - 1).add(total - 2);\n }\n\n const sorted = Array.from(window)\n .filter((p) => p >= 1 && p <= total)\n .sort((a, b) => a - b);\n\n let prev = 0;\n for (const p of sorted) {\n if (p - prev > 1) {\n result.push({ kind: 'ellipsis' });\n }\n push(p);\n prev = p;\n }\n return result;\n }\n}\n","<div class=\"pagination-component\">\n <p class=\"results-text\">\n {{ \"Showing\" | translate }} {{ rangeStart }} - {{ rangeEnd }}\n {{ \"of\" | translate }} {{ count }} {{ \"results\" | translate }}\n </p>\n\n <div class=\"page-navigation\">\n <zen-button\n buttonType=\"button-icon-only\"\n variant=\"tertiary-gray\"\n size=\"md\"\n icon=\"chevron-left\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPage(page - 1)\">\n </zen-button>\n\n <div class=\"pages\">\n @for (item of pages; track item; let i = $index) {\n @if (item.kind === 'page') {\n <button\n type=\"button\"\n class=\"page-btn\"\n [class.is-active]=\"item.active\"\n (click)=\"goToPage(item.page)\">\n {{ item.page }}\n </button>\n }\n @if (item.kind === 'ellipsis') {\n <span class=\"page-ellipsis\">…</span>\n }\n }\n </div>\n\n <zen-button\n buttonType=\"button-icon-only\"\n variant=\"tertiary-gray\"\n size=\"md\"\n icon=\"chevron-right\"\n [disabled]=\"page >= totalPages\"\n (click)=\"goToPage(page + 1)\">\n </zen-button>\n </div>\n\n <div class=\"rows-per-page\">\n <span class=\"rows-label\">{{ \"Rows per page\" | translate }}</span>\n <zen-select\n size=\"sm\"\n [options]=\"perPageOptions\"\n [(selectModel)]=\"perPage\"\n (selectModelChange)=\"onPerPageChange($event)\"\n preferredOpenDirection=\"up\">\n </zen-select>\n </div>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\n@Component({\n selector: 'zen-phone-input',\n templateUrl: './zendu-phone-input.component.html',\n styleUrls: ['./zendu-phone-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduPhoneInputComponent implements OnInit, OnChanges {\n\n @ViewChild('input') inputElement: ElementRef<HTMLInputElement>;\n\n @Input() phone: string;\n\n @Input() maxLength: number = 12;\n\n @Output() phoneChange = new EventEmitter<string>();\n\n @Output() validChange = new EventEmitter<boolean>();\n\n @Input() disabled = false;\n\n @Input() width: string;\n\n public phoneText = \"\";\n\n public countryList: { countryCode: string, countryName: string, countryCallingCode: string, flag: string }[] = [\n {\n countryCode: \"US\",\n countryName: \"America\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/USA.svg\"\n },\n {\n countryCode: \"CA\",\n countryName: \"Canada\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Canada.svg\"\n },\n {\n countryCode: \"MX\",\n countryName: \"Mexico\",\n countryCallingCode: \"+52\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Mexico.svg\"\n }\n ];\n\n public customCountry = {\n countryCode: \"\",\n countryName: \"Custom\",\n countryCallingCode: \"\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Custom.svg\"\n };\n\n public selectedCountry: { countryCode: string, countryName: string, countryCallingCode: string, flag: string };\n\n public isExpanded = false;\n\n public constructor() {\n this.selectedCountry = this.countryList[1];\n }\n\n public ngOnInit(): void {\n this.parseNumber();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"phone\"] && (!this.selectedCountry || !this.selectedCountry.countryCode)) {\n this.parseNumber();\n }\n }\n\n public parseNumber(): void {\n try {\n this.phoneText = this.phone || '';\n\n if (this.phone) {\n const countryFromList = this.countryList.find(country => this.phone.startsWith(country.countryCallingCode) || `+${this.phone}`.startsWith(country.countryCallingCode));\n if (countryFromList) {\n this.selectedCountry = countryFromList || this.customCountry;\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n const parsedPhone = phoneNumberUtil.parse(this.phone || \"\", 'US');\n setTimeout(() => {\n if (this.phoneText.startsWith('+')) {\n this.phoneText = this.phoneText.replace(`+${parsedPhone.getCountryCode()}`, \"\");\n } else if (this.phoneText.startsWith(parsedPhone.getCountryCode())) {\n this.phoneText = this.phoneText.replace(parsedPhone.getCountryCode(), \"\");\n }\n this.phoneChanged();\n });\n } else {\n this.selectedCountry = this.customCountry; \n }\n } else {\n this.selectedCountry = this.customCountry;\n }\n } catch (err) {\n console.warn(`Can't parse phone: ${this.phone}`, err);\n this.selectedCountry = this.customCountry;\n }\n }\n\n public countryChanged(country): void {\n this.isExpanded = false;\n this.selectedCountry = country;\n this.phoneChanged();\n }\n\n public phoneChanged(input?: HTMLInputElement): void {\n \n // allow + in custom country\n let custom = false;\n if (this.selectedCountry === this.customCountry && this.phoneText.includes('+')) {\n custom = true;\n }\n \n const phoneText = (this.phoneText || '').replace(/\\D/g, '');\n this.phoneText = custom ? `+${phoneText}`: phoneText\n if (input && input.value !== this.phoneText) {\n input.value = this.phoneText;\n }\n const fullNumber = `${this.selectedCountry.countryCallingCode}${this.phoneText}`;\n if (this.phone !== fullNumber) {\n this.phoneChange.emit(fullNumber);\n }\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n if (this.selectedCountry === this.customCountry) {\n this.validChange.emit(true);\n } else {\n try {\n this.validChange.emit(phoneNumberUtil.isValidNumber(phoneNumberUtil.parseAndKeepRawInput(fullNumber)));\n } catch {\n this.validChange.emit(false);\n }\n }\n }\n\n public hideDropDown(): void {\n this.isExpanded = false;\n }\n\n public toggle() {\n if (this.disabled) {\n return;\n }\n this.isExpanded = !this.isExpanded;\n }\n\n public focusInput(): void {\n if (this.inputElement) {\n this.inputElement.nativeElement.focus();\n }\n }\n}\n","<div class=\"zen-input-container\" [style.width]=\"width\">\n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n\n <!-- Leading dropdown: Country selector -->\n <div class=\"zen-input-leading-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggle(); $event.stopPropagation()\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"selectedCountry.flag\"\n [alt]=\"selectedCountry.countryName\">\n <span class=\"dropdown-label\">{{ selectedCountry.countryCallingCode }}</span>\n <i class=\"material-icons dropdown-icon\"\n [ngClass]=\"{'active': isExpanded}\">expand_more</i>\n </button>\n </div>\n\n <!-- Phone input field -->\n <input #input\n class=\"zen-input-field text text-md text-weight-regular\"\n type=\"text\"\n [(ngModel)]=\"phoneText\"\n (ngModelChange)=\"phoneChanged(input)\"\n (click)=\"isExpanded = false\"\n [disabled]=\"disabled\"\n country-code=\"selectedCountry.countryCode\"\n [maxlength]=\"maxLength\">\n </div>\n\n <!-- Country dropdown menu -->\n @if (isExpanded) {\n <div class=\"zen-dropdown-menu\"\n [ngClass]=\"{'open': isExpanded}\">\n <!-- Countries List -->\n @for (country of countryList; track country) {\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': selectedCountry.countryName === country.countryName}\"\n (click)=\"countryChanged(country)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"country.flag\"\n [alt]=\"country.countryName\">\n <span class=\"zen-phone-country-name\">{{ country.countryName }}</span>\n <span class=\"zen-phone-country-code\">{{ country.countryCallingCode }}</span>\n </button>\n }\n <!-- Custom Country -->\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"countryChanged(customCountry)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"customCountry.flag\"\n [alt]=\"customCountry.countryName\">\n <span class=\"zen-phone-country-name\">{{ customCountry.countryName }}</span>\n <span class=\"zen-phone-country-code\">{{ customCountry.countryCallingCode }}</span>\n </button>\n </div>\n }\n</div>\n\n<!-- Click outside handler for dropdown -->\n@if (isExpanded) {\n <div\n class=\"zen-dropdown-backdrop\"\n (click)=\"hideDropDown()\"></div>\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-sort',\n templateUrl: './zendu-sort-header.component.html',\n styleUrls: ['./zendu-sort-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSortHeaderComponent {\n\n @Input() sort!: 'asc' | 'desc' | '';\n\n @Output() sortChange = new EventEmitter<'asc' | 'desc'>();\n\n @Input() active!: boolean;\n\n public toggleSort() {\n switch (this.sort) {\n case 'asc':\n this.sort = 'desc';\n this.sortChange.emit(this.sort);\n break;\n case 'desc':\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n break;\n default:\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n }\n }\n}\n","<div class=\"sort-option\"\n (click)=\"toggleSort()\">\n <zen-icon class=\"sort-icon\"\n [class.sort-icon-active]=\"active\"\n [class.sort-icon-asc]=\"active && sort === 'asc'\"\n src=\"assets/ng-zenduit/icons/arrow-down.svg\"></zen-icon>\n</div>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle',\n templateUrl: './zendu-toggle.component.html',\n styleUrls: ['./zendu-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduToggleComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() disabled = false;\n\n @Input() label = '';\n\n @Input() supportingText = '';\n\n /**\n * Toggle state\n */\n public toggle() {\n if (this.disabled) return;\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<div class=\"zen-toggle-wrapper\"\n [class.zen-toggle--sm]=\"size === 'sm'\"\n [class.zen-toggle--md]=\"size === 'md'\"\n [class.zen-toggle--has-text]=\"label\">\n\n <button class=\"zen-toggle-track\"\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"enabled\"\n [attr.aria-disabled]=\"disabled\"\n [class.zen-toggle--active]=\"enabled\"\n [class.zen-toggle--disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\">\n <span class=\"zen-toggle-knob\"></span>\n </button>\n\n @if (label) {\n <div class=\"zen-toggle-text\">\n <span class=\"zen-toggle-label\">{{label}}</span>\n @if (supportingText) {\n <span class=\"zen-toggle-supporting\">{{supportingText}}</span>\n }\n </div>\n }\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-card-block',\n templateUrl: './zendu-card-block.component.html',\n styleUrls: ['./zendu-card-block.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduCardBlockComponent {\n\n @Input() icon: string;\n\n @Input() title: string;\n\n @Input() text: string;\n\n @Input() selected: boolean;\n\n}\n","<div class=\"component\">\n @if (icon) {\n <zen-icon\n [src]=\"icon\"></zen-icon>\n }\n\n <div class=\"title\">\n {{title}}\n </div>\n <div class=\"text\">\n {{text}}\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-map-preview',\n templateUrl: './zendu-map-preview.component.html',\n styleUrls: ['./zendu-map-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduMapPreviewComponent implements OnChanges {\n\n @Input() lat: number;\n\n @Input() lng: number;\n\n @Input() apiKey: string;\n\n public source = \"\";\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && this.lat && this.lng) {\n this.source = `https://image.maps.ls.hereapi.com/mia/1.6/mapview?apiKey=${this.apiKey}&c=${this.lat},${this.lng}` +\n `&z=14&w=222&h=80&&base=reduced.night&incidents=off&traffic=off`;\n }\n else {\n this.source = \"\";\n }\n }\n\n}\n","<div class=\"component\"\n [ngStyle]=\"{ 'background-image': 'url('+source+')' }\">\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n\n}","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScriptLoader {\n\n private static _loadedLibs: string[] = [];\n\n private static _lock = new LocalLock();\n\n public async loadScript(lib: \"flv\" | \"opencv\" | \"jscanify\") {\n try {\n await ScriptLoader._lock.lock();\n\n if (ScriptLoader._loadedLibs.includes(lib)) {\n // already loaded\n return;\n }\n\n console.log(`load library \"${lib}\"...`)\n\n // Storage bucket available here:\n // https://console.cloud.google.com/storage/browser/ng-zenduit/scripts?project=zendu-one\n\n let src = \"\";\n switch (lib) {\n case \"flv\":\n // load open cv script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/flv.js\");\n await this.waitInitalization(\"flvjs\");\n break;\n case \"opencv\":\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/opencv_4.7.0.js\");\n await this.waitInitalization(\"cv\");\n break;\n case \"jscanify\":\n // load jscanify script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/jscanify_1.2.0.js\");\n await this.waitInitalization(\"jscanify\");\n break;\n default:\n throw `unknown lib \"${lib}\"`\n }\n\n console.log(`Library \"${lib}\" loaded`)\n\n ScriptLoader._loadedLibs.push(lib);\n }\n finally {\n ScriptLoader._lock.release();\n }\n }\n\n private loadScriptBySrc(src: string) {\n const script = <HTMLScriptElement>document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n\n script.src = src;\n // insert script to document\n const node = document.getElementsByTagName('script')[0];\n if (node) {\n node.parentNode.insertBefore(script, node);\n } else {\n document.head.appendChild(script);\n }\n }\n\n private async waitInitalization(globalVarName: string) {\n\n const timeout = Date.now() + 60000;\n\n // wait cv first\n while (true) {\n if (window[globalVarName]) {\n break;\n }\n await Util.sleep(1000);\n\n if (Date.now() > timeout) {\n throw `Failed initalize OpenCV. Reason: timeout`\n }\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\nimport { ScriptLoader } from './script.loader.service';\n\nexport interface ScanifyCorners {\n topLeftCorner: { x: number, y: number };\n topRightCorner: { x: number, y: number };\n bottomLeftCorner: { x: number, y: number };\n bottomRightCorner: { x: number, y: number };\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenCVService {\n\n private static _isOpenCVLoaded = false;\n\n private static _lock = new LocalLock();\n\n constructor(\n private _scriptLoader: ScriptLoader\n ) { }\n\n /**\n * extract paper from the image\n * @returns\n */\n public async extractPaper(options: {\n src: string;\n height: number;\n width: number;\n corners: ScanifyCorners;\n }): Promise<HTMLCanvasElement> {\n // load open cv\n await this.loadOpenCv();\n\n const htmlImage = await this.loadImage(options.src);\n console.log(\"image is ready\");\n\n const scanner = new window[\"jscanify\"];\n\n return scanner.extractPaper(htmlImage, options.height, options.width, options.corners);\n }\n\n /**\n * Get the paper corners from the specific image\n * @param src\n * @returns\n */\n public async getPaperCorners(src: string, height: number, width: number): Promise<ScanifyCorners> {\n // load opencv\n await this.loadOpenCv();\n\n const cv = this.getCVInternal();\n\n const htmlImage = await this.loadImage(src);\n console.log(\"image is ready\", htmlImage);\n\n const scanner = new window[\"jscanify\"];\n\n const img = cv.imread(htmlImage);\n\n const maxContour = scanner.findPaperContour(img);\n if (!maxContour) {\n return null;\n }\n\n const res = scanner.getCornerPoints(maxContour, img);\n return res;\n }\n\n private loadImage(src: string) {\n return new Promise((resolve) => {\n const image = new Image();\n image.src = src;\n image.onload = function () {\n resolve(image);\n };\n })\n\n }\n\n private async loadOpenCv() {\n try {\n await OpenCVService._lock.lock();\n\n if (OpenCVService._isOpenCVLoaded) {\n return;\n }\n\n console.log(\"load opencv...\");\n\n await Promise.all([\n this._scriptLoader.loadScript(\"opencv\"),\n this._scriptLoader.loadScript(\"jscanify\")\n ]);\n\n console.log(\"OpenCV is ready\")\n\n OpenCVService._isOpenCVLoaded = true;\n }\n finally {\n OpenCVService._lock.release();\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { fabric } from 'fabric';\nimport {\n Component,\n ElementRef,\n Input,\n AfterViewInit,\n ViewChild,\n OnChanges,\n Output,\n EventEmitter,\n SimpleChanges,\n ChangeDetectorRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { OpenCVService } from '../services/opencv.service';\nimport { IText, Transform } from 'fabric/fabric-impl';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'zen-doc-scanner',\n templateUrl: './zendu-doc-scanner.component.html',\n styleUrls: ['./zendu-doc-scanner.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDocScanner implements AfterViewInit, OnChanges {\n @ViewChild('drawCanas') _canvasElement!: ElementRef<HTMLCanvasElement>;\n\n @ViewChild('componentWrapper') _component!: ElementRef<HTMLDivElement>;\n\n @Input() src = '';\n\n @Input() width = 0;\n\n @Input() height = 0;\n\n @Input() isScanStart: boolean = false;\n\n @Input() canAddText: boolean = false;\n\n @Input() canDoodle: boolean = false;\n\n currentStateIndex: number = -1;\n\n isLoading:BehaviorSubject<boolean> =new BehaviorSubject<boolean>(false);\n\n canvasStates: { state: string; customControl: any }[] = [];\n\n isResize: boolean = false;\n initialMouseY: number;\n originalFontSize: number;\n\n @Input() isRedoing: boolean = false;\n @Input() isUndoing: boolean = false;\n @Input() expandIconSrc: string;\n @Input() rotateIconSrc: string;\n @Input() crossIconSrc: string;\n @Input() set done(completed: boolean) {\n console.log('mark as completed', completed);\n if (completed) {\n this.completeScan(completed);\n }\n }\n\n @Output() extracted = new EventEmitter<HTMLCanvasElement>();\n\n @Output() cornersChanged = new EventEmitter<void>();\n\n @Output() getUndoingChange = new EventEmitter<boolean>()\n @Output() getRedoingChange = new EventEmitter<boolean>()\n\n @Output() canAddTextOrDoole = new EventEmitter<{}>();\n\n @Output() canRedoOrUndo = new EventEmitter<{\n canRedo: boolean;\n canUndo: boolean;\n }>();\n\n private screenPoints: { x: number; y: number }[] = [];\n\n private _canvas!: fabric.Canvas;\n\n private _cornersPg!: fabric.Polygon;\n\n private _scaleFactor = 1;\n\n private _controls: fabric.Circle[] = [];\n\n selectedColor: string = '#121212';\n\n isScaned: boolean = false;\n\n textAdded: boolean = false;\n\n icons = {\n cross: new Image(),\n rotate: new Image(),\n expand: new Image(),\n };\n private Image = {\n height: 0,\n width: 0,\n };\n borderWidth: number = 5;\n colors = [\n { hexCode: '#FFFFFF', selected: false },\n { hexCode: '#121212', selected: false },\n { hexCode: '#2188D9', selected: false },\n { hexCode: '#DC3E33', selected: false },\n { hexCode: '#219653', selected: false },\n { hexCode: '#F1B10B', selected: false },\n { hexCode: '#00F0FF', selected: false },\n ];\n resizeIcon: HTMLElement;\n rotateIcon: HTMLElement;\n removeIcon: HTMLElement;\n constructor(private _opencv: OpenCVService,private cdRef: ChangeDetectorRef) {}\n\n public ngAfterViewInit() {\n this.icons.cross.src = this.crossIconSrc;\n this.icons.rotate.src = this.rotateIconSrc;\n this.icons.expand.src = this.expandIconSrc;\n setTimeout(async () => {\n await this.init();\n // Add an event listener for canvas edits\n }, 1);\n }\n\n public onCanvasEdit() {\n let objects = this._canvas.getObjects();\n if (objects && objects.length)\n this._canvas._activeObject = objects[objects.length - 1];\n if (!this.isScanStart && !this.isRedoing && !this.isUndoing) {\n //Set canvas state as base state when user is done undo at last and than try to add new object\n if (this.canvasStates.length > 1 && this.currentStateIndex === 0)\n this.canvasStates = this.canvasStates.filter(\n (state, index) => index === 0\n );\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex >= 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.saveCanvasState();\n }\n\n}\n public ngOnChanges(changes: SimpleChanges) {\n // When src changes\n if (changes['src'] && this._canvas) {\n this.build();\n }\n //When user start scan\n if (changes['isScanStart'] && changes['isScanStart'].currentValue) {\n if (this.src && this._canvas && this.isScanStart) {\n this.isLoading.next(true);\n this.addPointsTodoc();\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScaned = true;\n this._canvas.selection = false;\n this.textAdded = false;\n }\n }\n // When user wants to draw\n if (\n changes['canDoodle'] &&\n changes['canDoodle'].currentValue &&\n this._canvas\n ) {\n\n if (this.canDoodle) {\n this._canvas.isDrawingMode = this.canDoodle;\n this._canvas.freeDrawingBrush = this.canDoodle\n ? new fabric.PencilBrush(this._canvas)\n : null;\n this._canvas.freeDrawingBrush.width = 10;\n this._canvas.freeDrawingBrush.color = this.selectedColor;\n this._canvas.selection = false;\n this.isScanStart = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n }\n // When user wants to add text\n if (\n changes['canAddText'] &&\n changes['canAddText'].currentValue &&\n this.canAddText &&\n this._canvas\n ) {\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScanStart = false;\n }\n if (\n changes['isUndoing'] &&\n this._canvas\n ){\n this.isUndoing = changes['isUndoing'].currentValue\n if(changes['isUndoing'].currentValue){\n setTimeout(() => {\n this.undo();\n }, 0);\n }\n }\n if (\n changes['isRedoing'] &&\n this._canvas\n ){\n this.isRedoing = changes['isRedoing'].currentValue;\n if(changes['isRedoing'].currentValue){\n setTimeout(() => {\n this.redo();\n }, 0);\n }\n }\n }\n // To change the color of brush or text\n chngClrTextOrBrush(color: string, changeFor: string) {\n this.selectedColor = color;\n this.colors.map((clr, index) => {\n this.colors[index] = { ...this.colors[index], selected: false };\n if (this.colors[index].hexCode === color) {\n this.colors[index] = { ...this.colors[index], selected: true };\n }\n });\n if (changeFor === 'text') {\n const activeObject = this._canvas.getActiveObject();\n if (activeObject && activeObject.type === 'i-text') {\n // Check if an active text object is selected\n activeObject.set('fill', this.selectedColor); // Update the fill color\n this._canvas.renderAll(); // Render the canvas to see the changes\n }\n this._canvas.renderAll();\n this.onCanvasEdit();\n } else {\n this._canvas.freeDrawingBrush.color = color;\n }\n this.selectedColor = color;\n }\n async addPointsTodoc() {\n const corners = await this._opencv.getPaperCorners(\n this._canvas.toDataURL({\n format: 'jpeg',\n quality: 1,\n }),\n\n this.Image.height,\n this.Image.width\n );\n if (corners) {\n this.screenPoints = [\n {x:corners.topLeftCorner.x + 15,y:corners.topLeftCorner.y},\n {x:corners.topRightCorner.x - 30,y:corners.topRightCorner.y},\n {x:corners.bottomRightCorner.x - 30,y:corners.bottomRightCorner.y},\n {x:corners.bottomLeftCorner.x + 15,y:corners.bottomLeftCorner.y},\n ];\n } else {\n console.error(`can't detect document corners`);\n const width = this._canvas.getWidth() / this._scaleFactor;\n const height = this._canvas.getHeight() / this._scaleFactor;\n const offset = 20;\n this.screenPoints = [\n { x: offset, y: 0 },\n { x: width - offset, y: 0 },\n { x: width - offset, y: height - offset },\n { x: offset, y: height - offset },\n ];\n }\n\n // add polygon\n //\n this._cornersPg = new fabric.Polygon(this.screenPoints, {\n stroke: '#2188d9',\n strokeWidth: 10,\n selectable: false,\n fill: 'rgba(33, 136, 217, 0.1)',\n hasBorders: true,\n objectCaching: false,\n });\n this._canvas.add(this._cornersPg);\n this.createControls(this._cornersPg);\n this.isLoading.next(false);\n }\n\n private async init(src?: string) {\n // Create canvas with new changed src\n if (src) {\n this.createCanvas();\n } else {\n try {\n if (!this._canvasElement || !this._canvasElement.nativeElement) {\n // canvas is not ready\n return;\n }\n\n if (this._canvas) {\n // canvas already initalized\n return;\n }\n this.createCanvas();\n } catch (err) {\n console.error(err);\n }\n }\n }\n\n async createCanvas() {\n // documentation: http://fabricjs.com/docs/fabric.Canvas.html\n let canvas = this._canvasElement.nativeElement;\n this._canvas = new fabric.Canvas(canvas, {\n backgroundColor: 'white',\n selection: false,\n });\n const { width, height } = this.getCanvasSize();\n\n this._canvas.setWidth(width);\n this._canvas.setHeight(height);\n this._canvas.on('object:added', this.onCanvasEdit.bind(this));\n this._canvas.on('object:modified', this.onCanvasEdit.bind(this));\n this._canvas.on('mouse:down', this.addTextOnClick.bind(this));\n this._canvas.on('object:scaling', function(obj:any){\n })\n if (this.src) {\n await this.build();\n }\n }\n\n renderIcon(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride,\n fabricObject: fabric.Object,\n iconName: string\n ) {\n var size = 40;\n var iconBackgroundSize = 45; // Adjust the size as needed\n ctx.save();\n\n // Draw a background circle behind the icon\n ctx.fillStyle = 'white'; // Set the background color\n ctx.beginPath();\n ctx.arc(left, top - 10, iconBackgroundSize / 2, 0, 2 * Math.PI);\n ctx.fill();\n\n var img = this.icons[iconName];\n ctx.translate(left, top - 10);\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\n ctx.drawImage(img, -size / 2, -size / 2, size, size);\n ctx.restore();\n }\n\n stopResizeText(event: any) {\n if (this.isResize) {\n this.saveCanvasState();\n this.isResize = false;\n }\n }\n resizeText(event: any) {\n if (this.isResize) {\n const target = event.target;\n const deltaY = event.e.touches[0].clientY - this.initialMouseY;\n\n // Limit the scaling factor to prevent excessive resizing\n const scalingFactor = Math.min(2, Math.max(0.5, 1 + deltaY / 100));\n\n // Calculate the new font size based on the original size and scaling factor\n const newFontSize = this.originalFontSize * scalingFactor;\n\n // Set the font size of the text object\n target.fontSize = newFontSize;\n\n // Re-render the canvas to see the live change\n event.target.canvas.renderAll();\n }\n }\n addTextOnClick(event: any) {\n if (event.transform && event.transform.corner === 'expandControl') {\n this.isResize = true;\n this.initialMouseY = event.e.clientY;\n this.originalFontSize = event.target.fontSize;\n }\n if (\n !this.textAdded &&\n !this.canDoodle &&\n !this.isScanStart &&\n this.canAddText\n ) {\n this.addTextBox(event);\n }\n if (!this.textAdded && this.canAddText && this.currentStateIndex === 0) {\n this.addTextBox(event);\n this.currentStateIndex = -1;\n this.canvasStates = [];\n }\n }\n\n // Add text box with custom controls to canvas\n addTextBox(event) {\n const fixedWidthPercentage = 0.2; // Set a fixed width as a percentage of canvas width\n const fixedHeightPercentage = 0.1; // Set a fixed height as a percentage of canvas height\n\n const canvasWidth = this._canvas.getWidth();\n const canvasHeight = this._canvas.getHeight();\n\n const fixedWidth = canvasWidth * fixedWidthPercentage;\n const fixedHeight = canvasHeight * fixedHeightPercentage;\n\n let _text: IText = new fabric.IText('Type your text here', {\n left: event.pointer.x,\n top: event.pointer.y,\n fill: this.selectedColor,\n fontSize: 40,\n fontFamily: 'Roboto',\n selectable: true,\n fontWeight: 400,\n borderScaleFactor: 3,\n borderColor: 'white',\n backgroundColor: 'transparent', // Set background color of the text box\n cornerColor: 'white', // Set corner (resize handle) color of the text box\n padding: 35, // Set padding inside the text box\n width: fixedWidth, // Set the initial width of the text box\n height: fixedHeight\n });\n //Custom controls for add text box\n let customControls = {\n removeControl: new fabric.Control({\n x: -0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'cross'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n var target = transform.target;\n var canvas = target.canvas;\n canvas.remove(target);\n this.canAddText = true;\n this.textAdded = false;\n // this.canAddTextOrDoole.emit({ key: 'text', value: false });\n canvas.requestRenderAll();\n this.saveCanvasState();\n return true;\n },\n }),\n\n rotateControl: new fabric.Control({\n x: 0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'rotate'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n let fabricObject = transform.target;\n const rotationIncrement = 30; // Rotation increment in degrees\n fabricObject.set(\n 'angle',\n (fabricObject.angle + rotationIncrement) % 360\n );\n fabricObject.setCoords(); // Update object's coordinates\n // debugger;\n this.saveCanvasState();\n return true;\n },\n }),\n\n expandControl: new fabric.Control({\n x: 0.5,\n y: 0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'grab',\n actionHandler: ((eventData: MouseEvent, transform: Transform, x: number, y: number) => {\n this.scaleFunction(eventData, transform,x,y)\n return true\n }),\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'expand'\n );\n },\n }),\n };\n\n _text.controls = customControls;\n this._canvas.add(_text);\n this._canvas.renderAll();\n this.textAdded = true;\n }\n scaleFunction(eventData: MouseEvent, transform: Transform, x: number, y: number){\n const target = transform.target;\n const corner = target.controls['expandControl'];\n const pointer = this._canvas.getPointer(eventData, true);\n\n const scaleX = (pointer.x - target.get('left')) / target.get('width');\n const scaleY = (pointer.y - target.get('top')) / target.get('height');\n\n target.set('scaleX', scaleX);\n target.set('scaleY', scaleY);\n}\n // Function to save the canvas state\n saveCanvasState() {\n const state = JSON.stringify(this._canvas.toJSON());\n // const state = this._canvas.getObjects()[this._canvas.getObjects.length - 1]\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.canvasStates.length = this.currentStateIndex + 1; // Remove future states\n }\n let activeObj = this._canvas.getActiveObject();\n\n if (activeObj && activeObj.type === 'path') {\n // set remove border and controls for drawing\n activeObj.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n }\n const customControl =\n activeObj && activeObj.controls ? activeObj.controls : null;\n this.canvasStates.push({ state, customControl });\n this.currentStateIndex++;\n }\n public redo() {\n // this.isRedoing = true;\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.currentStateIndex++;\n const nextState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(nextState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n if (activeObject && activeObject.type !== 'path') {\n activeObject.controls =\n nextState && nextState.customControl\n ? nextState.customControl\n : null;\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n this._canvas.selection = false;\n }\n this._canvas.renderAll();\n this.isRedoing = false\n this.getRedoingChange.emit(this.isRedoing)\n });\n }\n }\n public undo() {\n // this.isUndoing = true;\n if (this.currentStateIndex > 0) {\n this.currentStateIndex--;\n const previousState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(previousState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n if (activeObject) {\n if (activeObject.type !== 'path') {\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this._canvas.isDrawingMode = false;\n this._canvas.freeDrawingBrush = null;\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this._canvas.selection = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n }\n this._canvas.getActiveObject().controls =\n previousState && previousState.customControl\n ? previousState.customControl\n : null;\n }else{\n this.textAdded = false;\n }\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n this._canvas.renderAll();\n this.isUndoing = false\n this.cdRef.detectChanges()\n this.getUndoingChange.emit(this.isUndoing)\n });\n }\n }\n private getCanvasSize() {\n const img = new Image();\n img.src = this.src;\n const box = this._component.nativeElement.getBoundingClientRect();\n\n const width = this.width || box.width || 1;\n const height = this.height || box.height || 1;\n return { width, height };\n }\n\n /**\n * recognize paper corners\n */\n private async build() {\n if (!this.src || !this._canvas) {\n return;\n }\n const bg = await this.loadBackgroundImage(this.src);\n\n // Remove all the existing objects before add the new image to background\n this._canvas.clear();\n\n const imgSize = bg.getOriginalSize();\n this.Image = {\n height: imgSize.height * this._scaleFactor,\n width: imgSize.width * this._scaleFactor,\n };\n const scaleX = this._canvas.width / imgSize.width;\n const scaleY = this._canvas.height / imgSize.height;\n this._scaleFactor = Math.min(scaleY, scaleX);\n this._canvas.setDimensions(\n {\n width: imgSize.width,\n height: imgSize.height,\n },\n {\n backstoreOnly: true,\n }\n );\n this._canvas.setBackgroundImage(bg, () => {\n this._canvas.renderAll();\n });\n this.saveCanvasState();\n this._canvas.renderAll();\n }\n\n private createControls(polygon: fabric.Polygon) {\n // remove previous controls\n if (this._controls.length) {\n this._canvas.remove(...this._controls);\n this._controls = [];\n }\n if (polygon) {\n for (const [index, point] of polygon.points.entries()) {\n const circle = this.createControl(index, polygon);\n this._controls.push(circle);\n this._canvas.add(circle);\n }\n }\n }\n\n private createControl(index: number, polygon: fabric.Polygon) {\n const point = polygon.points[index];\n const circle = new fabric.Circle({\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: '#2188d9',\n radius: 20,\n hasRotatingPoint: false,\n hasBorders: false,\n hasControls: false,\n objectCaching: false,\n });\n circle.on('moving', (evt) => {\n if (evt.pointer) {\n polygon.points[index] = new fabric.Point(evt.pointer.x, evt.pointer.y);\n polygon.dirty = true;\n }\n });\n circle.on('mouseup', (evt) => {\n this.cornersChanged.emit();\n this.screenPoints[index] = polygon.points[index];\n });\n return circle;\n }\n\n private loadBackgroundImage(src: string): Promise<fabric.Image> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n let fabImage = new fabric.Image(img);\n resolve(fabImage);\n };\n img.src = src;\n });\n }\n\n public async completeScan(completed: boolean) {\n if (!completed) {\n return;\n }\n console.log(`complete scan & extract paper`);\n\n if (!this._cornersPg) {\n console.error(`Corner line is not available`);\n }\n if (this._cornersPg) {\n this._canvas.remove(this._cornersPg);\n this._canvas.remove(...this._controls);\n this._canvas.renderAll();\n }\n let output: HTMLCanvasElement;\n if (this.isScaned) {\n output = await this._opencv.extractPaper({\n src: this._canvas.toDataURL({ quality: 1 }),\n corners: {\n topLeftCorner: this.screenPoints[0],\n topRightCorner: this.screenPoints[1],\n bottomRightCorner: this.screenPoints[2],\n bottomLeftCorner: this.screenPoints[3],\n },\n height: this._canvas.height,\n width: this._canvas.width,\n });\n this._canvas.remove(...this._canvas.getObjects());\n this.isScaned = false;\n } else {\n output = this._canvas.toCanvasElement();\n }\n this.currentStateIndex = -1;\n this.canvasStates = [];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.extracted.emit(output);\n this.cleanupCanvas();\n }\n private cleanupCanvas() {\n this._canvas.getObjects().forEach((obj) => (obj.evented = false));\n this._canvas.selection = false;\n this._canvas.isDrawingMode = false;\n this.canDoodle = false;\n this.isScanStart = false;\n this.canAddText = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n}\n","<div #componentWrapper\n class=\"component\">\n <canvas #drawCanas [ngClass]=\"{display: !(isLoading | async) ? 'blurred' : null}\"></canvas>\n <div class=\"loading-overlay\" [ngStyle]=\"{display: !(isLoading | async) ? 'none' : 'block'}\">\n <!-- Add your loading message or spinner here -->\n Scaning...\n </div>\n @if (canDoodle || canAddText) {\n <div class=\"colors-container\">\n @for (color of colors; track color) {\n <div class=\"colors\" [ngStyle]=\"{'background': color.hexCode, 'border':color.selected ? '1.6px solid white' : 'none'}\" (click)=\"chngClrTextOrBrush(color.hexCode, canAddText ? 'text': 'doodle')\"></div>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { ZenDevice, ZenLogRecord, ZenMapTheme, ZenTrip } from '../map/map.types';\n\n@Injectable()\nexport class MapService {\n\n public createDeviceMarker(device: ZenDevice, minZoom?: number): H.map.DomMarker {\n const contentHtml = this.getDeviceContent(device);\n\n const lat = Math.max(Math.min(device.latitude, 180), -180);\n const lng = Math.max(Math.min(device.longitude, 180), -180);\n\n const deviceMarker = new H.map.DomMarker(\n new H.geo.Point(lat, lng),\n {\n zIndex: 10,\n icon: new H.map.DomIcon(contentHtml),\n data: device,\n min: minZoom ? minZoom : 0\n });\n\n return deviceMarker;\n }\n\n private getDeviceContent(device: ZenDevice): string {\n let devIcon = \"\";\n\n if (device.icon) {\n devIcon = device.icon;\n }\n else {\n // Default icon\n devIcon = \"https://storage.googleapis.com/ng-zenduit/icon/car.svg\";\n }\n\n let isDriving = device.isDriving || false;\n let driveClass = \"\";\n if (isDriving) {\n driveClass = \"driving-marker\";\n }\n\n\n let directionSvg = 'https://storage.googleapis.com/ng-zenduit/icon/device_direction.svg';\n\n let displayDirection = isDriving ? \"block\" : \"none\";\n\n let classList = isDriving ? \"moving\" : \"stopped\";\n\n const lblContent =\n `<div class='gotrax-label ${classList}'>` +\n ` <span>${device.name}</span>` +\n ` <div class='gotrax-speed-label'></div>` +\n `</div>`;\n\n const bearing = device.bearing || 0;\n\n let contentHtml =\n `<div>` +\n `<div class='g-marker-vehilce-wrapper'>` +\n `<div class='g-marker-vehilce'>` +\n `<div class='${driveClass} gotrax-img'>\n ${lblContent}\n <div class='g-marker-icon ${classList}'><img class=\"g-marker-img svg-color white\" src=${devIcon} />\n <div class=\"direction-arrow\" style=\"display: ${displayDirection};transform: rotate(${bearing}deg); background-image: url('${directionSvg}');\"></div>\n </div></div>` +\n `</div>` +// close g-marker-vehilce\n `</div>` + // close g-marker-vehilce-wrapper\n `</div>`;\n return contentHtml;\n }\n\n\n public zoomToBounds(map: H.Map, bounds: H.geo.Rect) {\n if (!bounds || bounds.isEmpty()) {\n return;\n }\n\n if (isNaN(bounds.getCenter().lat) ||\n isNaN(bounds.getCenter().lng)) {\n return;\n }\n\n this.zoomToLatLngs(map, [bounds.getTopLeft(), bounds.getBottomRight()]);\n }\n\n private zoomToLatLngs(map: H.Map, pnts: Array<{ lat: number, lng: number }>, zoom: number = 15) {\n\n if (!pnts || pnts.length == 0) {\n return;\n }\n if (pnts.length == 1) {\n map.setZoom(zoom);\n map.setCenter(new H.geo.Point(pnts[0].lat, pnts[0].lng));\n return;\n }\n\n const latLngs: number[] = [];\n pnts.forEach(p => latLngs.push(p.lat, p.lng, 0));\n\n const bounds = H.geo.Rect.coverLatLngAlts(latLngs) as H.geo.Rect;\n\n const minSize = 0.001;\n\n if (bounds.getWidth() < minSize &&\n bounds.getHeight() < minSize) {\n map.setCenter(bounds.getCenter());\n map.setZoom(17);\n }\n else {\n const p1 = bounds.getBottomRight();\n const p2 = bounds.getTopLeft();\n const width = Math.max(bounds.getWidth(), minSize);\n const height = Math.max(bounds.getHeight(), minSize);\n\n // add offset for zooming\n const targetBox = H.geo.Rect.coverLatLngAlts(\n [\n p1.lat - (height * 0.15),\n p2.lng - (width * 0.15),\n 0,\n p2.lat + (height * 0.15),\n p1.lng + (width * 0.15),\n 0\n ]\n ) as H.geo.Rect;\n\n map.getViewPort().resize();\n map.getViewModel().setLookAtData({ bounds: targetBox });\n }\n }\n\n /**\n * Create polylines for given trip and date range.\n * Method create separte polylines for logs outside the date range.\n */\n public createTripPolyline(trip: ZenTrip, map: H.Map, theme: ZenMapTheme): {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n } {\n\n let result = {\n } as {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n };\n\n let coords = new Array<number>();\n\n trip.logs.forEach(log => {\n let latLng = new H.geo.Point(log.latitude, log.longitude);\n\n coords.push(latLng.lat, latLng.lng);\n });\n\n if (coords.length < 2) {\n // Skip the empty path\n return result;\n }\n\n if (theme == \"black\") {\n const pl = this.createPl(coords, \"#000000\", 2);\n pl.setZIndex(1);\n result.polyline = pl;\n\n map.addObject(pl);\n }\n else {\n const pl = this.createPl(coords, \"#9510e6\", 5);\n pl.setZIndex(1);\n result.polyline = pl;\n\n let arrow = this.createArrow(coords);\n result.arrows = arrow;\n\n map.addObjects([pl, arrow]);\n\n // store additional information about polyline\n pl.setData({ type: \"trip\", trip: trip });\n arrow.setData({ type: \"trip\", trip: trip });\n }\n\n\n return result;\n }\n\n private createPl(coords: Array<number>, color: string, strokeWeight: number): H.map.Polyline {\n const pl = new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n strokeColor: color,\n lineWidth: strokeWeight\n },\n arrows: {\n fillColor: \"#ffffff\"\n },\n zIndex: 0\n });\n return pl;\n }\n\n private createArrow(coords: Array<number>): H.map.Polyline {\n return new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n lineWidth: 5,\n fillColor: 'white',\n strokeColor: 'rgba(255, 255, 255, 1)',\n lineDash: [0, 5],\n lineTailCap: 'arrow-tail',\n lineHeadCap: 'arrow-head'\n } as any,\n zIndex: 1\n });\n }\n\n public createStopMarker(map: H.Map, log: ZenLogRecord, stopIdx: number, tag: any, theme: ZenMapTheme) {\n\n let icon: H.map.DomIcon;\n if (theme == \"black\") {\n const src = \"https://storage.googleapis.com/ng-zenduit/icon/stop-icon-black.svg\";\n icon = new H.map.DomIcon(`<div class=\"g-stop-img\"><img src=\"${src}\"/></div>`)\n }\n else {\n // deafault\n icon = new H.map.DomIcon(`<div class=\"g-stop\"><label>${stopIdx}</label></div>`)\n }\n\n let stop = new H.map.DomMarker(\n new H.geo.Point(log.latitude, log.longitude),\n {\n icon: icon,\n zIndex: 2\n });\n map.addObject(stop);\n stop.setData(tag);\n return stop;\n }\n}","import { Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { MapService } from '../services/map.service';\nimport { ZenDevice, ZenMapTheme, ZenTrip } from './map.types';\n\n@Component({\n selector: 'zen-map',\n templateUrl: './zendu-map.component.html',\n styleUrls: ['./zendu-map.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduMapComponent implements OnChanges {\n\n @ViewChild(\"map\") _mapElement!: ElementRef<HTMLDivElement>;\n\n @Input() apiKey: string;\n\n @Input() trips: ZenTrip[] = [];\n\n @Input() devices: ZenDevice[] = [];\n\n @Input() theme: ZenMapTheme = 'default';\n\n private _platform: H.service.Platform;\n\n private _map!: H.Map;\n\n private _objects: H.map.Object[] = [];\n\n private _mapService = new MapService();\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && !this._platform) {\n this.init();\n }\n\n if (changes[\"trips\"] || changes[\"devices\"]) {\n this.updateEntities();\n }\n }\n\n private init() {\n this._platform = new H.service.Platform({\n apikey: this.apiKey\n });\n\n setTimeout(() => {\n this.initMap();\n this.updateEntities();\n }, 1000);\n }\n\n\n private initMap() {\n\n // Obtain the default map types from the platform object\n const defaultLayers = this._platform.createDefaultLayers();\n\n this._map = new H.Map(this._mapElement.nativeElement,\n defaultLayers.vector.normal.map,\n {\n zoom: 3,\n center: { lat: 34.366, lng: -89.519 }\n });\n\n\n // Create the default UI\n const ui = H.ui.UI.createDefault(this._map, defaultLayers);\n\n const mapSettings = ui.getControl('mapsettings');\n mapSettings.setAlignment(H.ui.LayoutAlignment.RIGHT_TOP);\n mapSettings.setVisibility(false);\n\n const scalebar = ui.getControl('scalebar');\n scalebar.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM)\n\n const zoom = ui.getControl('zoom');\n zoom.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM);\n\n this._map.getBaseLayer().setMin(3);\n\n // MapEvents enables the event system\n // Behavior implements default interactions for pan/zoom (also on mobile touch environments)\n const behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(this._map));\n }\n\n private updateEntities() {\n if (!this._map) {\n // map is not ready\n return;\n }\n\n this.clearEntities();\n\n this.createTrips();\n\n this.createDevices();\n }\n\n private createTrips() {\n if (!this.trips || !this.trips.length) {\n return;\n }\n\n let box: H.geo.Rect = null;\n\n for (const trip of this.trips) {\n const res = this._mapService.createTripPolyline(trip, this._map, this.theme);\n if (res.polyline) {\n this._objects.push(res.polyline);\n if (box) {\n box = box.mergeRect(res.polyline.getBoundingBox());\n }\n else {\n box = res.polyline.getBoundingBox()\n }\n }\n if (res.arrows) {\n this._objects.push(res.arrows);\n }\n }\n\n // create stop points\n //\n for (const [stopIdx, trip] of this.trips.entries()) {\n let stopLog = trip.logs[trip.logs.length - 1];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, stopIdx + 1, trip, this.theme));\n }\n\n if (this.theme == \"black\") {\n // create a marker for first stop as well\n let stopLog = this.trips[0].logs[0];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, 0, this.trips[0], this.theme));\n }\n\n if (box) {\n this._mapService.zoomToBounds(this._map, box);\n }\n }\n\n private createDevices() {\n if (!this.devices || !this.devices.length) {\n return;\n }\n\n for (const device of this.devices) {\n const marker = this._mapService.createDeviceMarker(device)\n this._map.addObject(marker);\n this._objects.push(marker);\n }\n }\n\n private clearEntities() {\n if (!this._map) {\n return;\n }\n this._map.removeObjects(this._objects)\n this._objects = [];\n }\n\n\n\n\n\n}\n","<div class=\"component\">\n <div #map\n class=\"zen-map\"></div>\n</div>\n","import { Component, EventEmitter, HostListener, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-file-upload',\n templateUrl: './zendu-file-upload.component.html',\n styleUrls: ['./zendu-file-upload.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFileUpload {\n\n @Input() fileTypes: string = `image/*`;\n\n @Input() uploadState: \"\" | \"uploading\" | \"done\" = \"\";\n\n /**\n * fire when user clicked on \"Upload now\"\n */\n @Output() uploadFile = new EventEmitter<File[]>();\n\n /**\n * fired when user click \"Cancel\"\n */\n @Output() uploadCancelled = new EventEmitter<void>();\n\n public isFileSelected = false;\n\n public isFileDragover = false;\n\n public filename = \"\";\n\n private _selectedFiles: File[] = [];\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n\n let target = (evt.dataTransfer as DataTransfer);\n if (target && target.files?.length) {\n this.handleFiles(target.files);\n }\n console.log('File Dropped');\n }\n\n\n public async onFileInput(evt: Event) {\n const target: HTMLInputElement | null = evt.target as HTMLInputElement;\n if (target && target.files) {\n await this.handleFiles(target.files);\n }\n }\n\n public async handleFiles(files: FileList): Promise<void> {\n console.log(`handle files`, files)\n if (!files.length) {\n return;\n }\n this.filename = files.item(0).name;\n\n this._selectedFiles = [];\n for (let idx = 0; idx < files.length; idx++) {\n this._selectedFiles.push(files[idx]);\n }\n\n this.isFileSelected = true;\n this.uploadState = '';\n }\n\n public uploadNow() {\n if (!this._selectedFiles.length) {\n console.error(`no files for uploading`)\n return;\n }\n\n this.uploadFile.emit(this._selectedFiles);\n }\n\n public clear() {\n this.isFileSelected = false;\n this.isFileDragover = false;\n this.filename = \"\";\n this._selectedFiles = [];\n this.uploadState = \"\";\n }\n\n public cancelUploading() {\n this.uploadCancelled.emit();\n this.clear();\n }\n}\n","<div class=\"component\">\n <div class=\"title\">\n @if (uploadState != 'done') {\n <span>Upload File</span>\n }\n @if (uploadState == 'done') {\n <span>Uploaded File</span>\n }\n </div>\n @if (uploadState != 'done') {\n <div class=\"drop-area\"\n [class.dragover]=\"isFileDragover\"\n >\n @if (!isFileSelected) {\n <div class=\"box\"\n >\n <div>\n <zen-icon class=\"doc-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/document.svg\"></zen-icon>\n </div>\n <div>\n <div>Drag and Drop Here</div>\n <div>or</div>\n <span class=\"browse\"\n (click)=\"fileIp.click()\">Browse</span>\n <form><input type=\"file\"\n [accept]=\"fileTypes\"\n #fileIp\n (change)=\"onFileInput($event)\" /></form>\n </div>\n </div>\n }\n @if (isFileSelected) {\n <!-- File selected state -->\n @if (uploadState == '') {\n <div class=\"box-selected-file\">\n <div class=\"close-wrapper\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n <div>\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n </div>\n <div class=\"filename\">\n {{filename}}\n </div>\n </div>\n }\n <!-- Uploading state -->\n @if (uploadState == 'uploading') {\n <div class=\"box-file-uploading\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon-sm\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image-sm.svg\"></zen-icon>\n <div>{{filename}}</div>\n </div>\n <div class=\"progress\">\n <div class=\"progress-bar-value\"></div>\n </div>\n </div>\n }\n }\n </div>\n }\n\n\n <!-- Uploading done -->\n @if (uploadState == 'done') {\n <div\n class=\"box-upload-done\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n <div class=\"filename\">{{filename}}</div>\n <div class=\"close-btn\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n </div>\n </div>\n }\n\n <div class=\"btn-upload-wrapper\">\n\n @if (uploadState == '') {\n <button\n (click)=\"uploadNow()\"\n class=\"button-flat full-width\"\n [disabled]=\"!isFileSelected\">\n Upload Now\n </button>\n }\n\n @if (uploadState == 'uploading') {\n <button\n (click)=\"cancelUploading()\"\n class=\"button-alert full-width\"\n [disabled]=\"!isFileSelected\">\n Cancel\n </button>\n }\n </div>\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\ninterface CircleSizeConfig {\n containerSize: number;\n radius: number;\n strokeWidth: number;\n fontSize: number;\n labelFontSize: number;\n letterSpacing: number;\n}\n\nconst CIRCLE_SIZE_MAP: Record<string, CircleSizeConfig> = {\n xxs: { containerSize: 64, radius: 26, strokeWidth: 5, fontSize: 14, labelFontSize: 12, letterSpacing: 0 },\n xs: { containerSize: 160, radius: 64, strokeWidth: 8, fontSize: 24, labelFontSize: 12, letterSpacing: 0 },\n sm: { containerSize: 200, radius: 80, strokeWidth: 10, fontSize: 30, labelFontSize: 12, letterSpacing: 0 },\n md: { containerSize: 240, radius: 96, strokeWidth: 12, fontSize: 36, labelFontSize: 14, letterSpacing: -0.72 },\n lg: { containerSize: 280, radius: 112, strokeWidth: 14, fontSize: 48, labelFontSize: 14, letterSpacing: -0.96 },\n};\n\n@Component({\n selector: 'zen-progress',\n templateUrl: './zendu-progress.component.html',\n styleUrls: ['./zendu-progress.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduProgress {\n\n @Input() type: \"bar\" | \"circle\" | \"half-circle\" = \"bar\";\n\n /**\n * Label position for bar type.\n */\n @Input() label: 'none' | 'right' | 'bottom' | 'top-floating' | 'bottom-floating' = 'none';\n\n /**\n * Size for circle/half-circle types.\n */\n @Input() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * progress value [0, 100]\n */\n @Input() value = 20;\n\n /**\n * progress text (shown as label above percentage in circle types)\n */\n @Input() text = \"\";\n\n /**\n * Custom color for the progress fill (bar, circle stroke).\n * Accepts any valid CSS color value.\n */\n @Input() color = \"\";\n\n /**\n * Custom color for the progress track/background.\n * Accepts any valid CSS color value.\n */\n @Input() trackColor = \"\";\n\n get sizeConfig(): CircleSizeConfig {\n return CIRCLE_SIZE_MAP[this.size] || CIRCLE_SIZE_MAP['md'];\n }\n\n get circleCenter(): number {\n return this.sizeConfig.containerSize / 2;\n }\n\n get circumference(): number {\n return 2 * Math.PI * this.sizeConfig.radius;\n }\n\n get halfCircumference(): number {\n return Math.PI * this.sizeConfig.radius;\n }\n\n get circleOffset(): number {\n const clampedValue = Math.max(0, Math.min(100, this.value));\n return this.circumference * (1 - clampedValue / 100);\n }\n\n get halfCircleOffset(): number {\n const clampedValue = Math.max(0, Math.min(100, this.value));\n return this.halfCircumference * (1 - clampedValue / 100);\n }\n\n get halfCircleContainerHeight(): number {\n return this.sizeConfig.containerSize / 2 + this.sizeConfig.strokeWidth;\n }\n}\n","<div class=\"component\">\n <!-- Progress bar -->\n @if (type == 'bar') {\n <div class=\"bar-wrapper\"\n [class.bar-label-right]=\"label === 'right'\"\n [class.bar-label-bottom]=\"label === 'bottom'\"\n [class.bar-label-top-floating]=\"label === 'top-floating'\"\n [class.bar-label-bottom-floating]=\"label === 'bottom-floating'\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-bg\" [ngStyle]=\"trackColor ? { 'background-color': trackColor } : {}\"></div>\n <div class=\"progress-bar-fill\" [ngStyle]=\"{ 'width': value + '%', 'background-color': color || null }\">\n <!-- Top floating tooltip -->\n @if (label === 'top-floating') {\n <div class=\"floating-tooltip floating-tooltip-top\">\n <div class=\"tooltip-content\">\n <span class=\"tooltip-text\">{{value}}%</span>\n </div>\n <div class=\"tooltip-arrow tooltip-arrow-down\">\n <svg width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M6.58579 4.41421L2.34315 0.171573C1.41421 -0.757359 0 0 0 0H16C16 0 14.5858 -0.757359 13.6569 0.171573L9.41421 4.41421C8.63316 5.19527 7.36684 5.19527 6.58579 4.41421Z\" fill=\"white\"/>\n </svg>\n </div>\n </div>\n }\n <!-- Bottom floating tooltip -->\n @if (label === 'bottom-floating') {\n <div class=\"floating-tooltip floating-tooltip-bottom\">\n <div class=\"tooltip-arrow tooltip-arrow-up\">\n <svg width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M9.41421 1.58579L13.6569 5.82843C14.5858 6.75736 16 6 16 6H0C0 6 1.41421 6.75736 2.34315 5.82843L6.58579 1.58579C7.36684 0.804738 8.63316 0.804738 9.41421 1.58579Z\" fill=\"white\"/>\n </svg>\n </div>\n <div class=\"tooltip-content\">\n <span class=\"tooltip-text\">{{value}}%</span>\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right label -->\n @if (label === 'right') {\n <span class=\"bar-label\">{{value}}%</span>\n }\n <!-- Bottom label -->\n @if (label === 'bottom') {\n <span class=\"bar-label\">{{value}}%</span>\n }\n <!-- Text description (legacy support) -->\n @if (text && (label === 'none')) {\n <div class=\"progress-text\">{{text}}</div>\n }\n </div>\n }\n\n <!-- Circle progress -->\n @if (type == 'circle') {\n <div class=\"circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': sizeConfig.containerSize\n }\">\n <svg class=\"circle-svg\"\n [attr.width]=\"sizeConfig.containerSize\"\n [attr.height]=\"sizeConfig.containerSize\"\n [attr.viewBox]=\"'0 0 ' + sizeConfig.containerSize + ' ' + sizeConfig.containerSize\">\n <!-- Background ring -->\n <circle class=\"circle-bg\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [style.stroke]=\"trackColor || null\"\n fill=\"none\" />\n <!-- Progress ring -->\n <circle class=\"circle-progress\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"circleOffset\"\n [style.stroke]=\"color || null\"\n fill=\"none\"\n stroke-linecap=\"round\" />\n </svg>\n <div class=\"circle-label\">\n @if (text) {\n <span class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\n }\n <span class=\"circle-value\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.fontSize,\n 'letter-spacing.px': sizeConfig.letterSpacing\n }\">{{value}}%</span>\n </div>\n </div>\n }\n\n <!-- Half-Circle progress -->\n @if (type == 'half-circle') {\n <div class=\"half-circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': halfCircleContainerHeight\n }\">\n <svg class=\"circle-svg\"\n [attr.width]=\"sizeConfig.containerSize\"\n [attr.height]=\"sizeConfig.containerSize\"\n [attr.viewBox]=\"'0 0 ' + sizeConfig.containerSize + ' ' + sizeConfig.containerSize\">\n <!-- Background arc (bottom half) -->\n <circle class=\"circle-bg half-circle-ring\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"circumference / 2\"\n [style.stroke]=\"trackColor || null\"\n fill=\"none\" />\n <!-- Progress arc -->\n <circle class=\"circle-progress half-circle-ring\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"halfCircumference + ' ' + circumference\"\n [attr.stroke-dashoffset]=\"halfCircleOffset\"\n [style.stroke]=\"color || null\"\n fill=\"none\"\n stroke-linecap=\"round\" />\n </svg>\n <div class=\"half-circle-label\">\n @if (text) {\n <span class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\n }\n <span class=\"circle-value\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.fontSize,\n 'letter-spacing.px': sizeConfig.letterSpacing\n }\">{{value}}%</span>\n </div>\n </div>\n }\n</div>\n","import { Injectable } from \"@angular/core\";\n\ninterface IGeocodingRes {\n name: string;\n\n city: string;\n\n country: string;\n\n postalCode: string;\n\n street: string;\n\n state: string;\n\n bounds: { xmin: number, ymin: number, xmax: number, ymax: number };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeocodingService {\n private _platform: H.service.Platform;\n\n public setAPIKey(apiKey: string) {\n this._platform = new H.service.Platform({\n apikey: apiKey\n });\n }\n\n public async geocode(searchText: string): Promise<Array<IGeocodingRes>> {\n return new Promise((resolve, reject) => {\n if (!this._platform) {\n reject(\"API KEY NOT SET\");\n return;\n }\n const geocoder = this._platform.getGeocodingService();\n geocoder.geocode({ searchText: searchText },\n (res: any) => {\n let locations = res.Response.View[0] ? res.Response.View[0].Result : []\n\n let outItems = new Array<IGeocodingRes>();\n let boxOffset = 0.001;\n for (let location of locations) {\n let lat = location.Location.DisplayPosition.Latitude;\n let lng = location.Location.DisplayPosition.Longitude;\n let p1 = new H.geo.Point(lat - boxOffset, lng - boxOffset);\n let p2 = new H.geo.Point(lat + boxOffset, lng + boxOffset);\n let bounds = H.geo.Rect.coverPoints([p1, p2]);\n\n let street = location.Location.Address.Street;\n if (location.Location.Address.HouseNumber) {\n street += \" \" + location.Location.Address.HouseNumber;\n }\n\n outItems.push({\n name: location.Location.Address.Label,\n city: location.Location.Address.City,\n country: location.Location.Address.Country,\n postalCode: location.Location.Address.PostalCode,\n state: location.Location.Address.State,\n street: street,\n bounds: {\n xmin: bounds.getLeft(),\n xmax: bounds.getRight(),\n ymin: Math.min(bounds.getBottom(), bounds.getTop()),\n ymax: Math.max(bounds.getBottom(), bounds.getTop())\n }\n });\n }\n\n resolve(outItems);\n },\n (e: any) => {\n console.warn(e);\n resolve([]);\n }\n );\n })\n }\n\n}\n","import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { GeocodingService } from '../services/geoconding.service';\nimport { Cancellation, LocationAddress } from './location.address';\n\n@Component({\n selector: 'zen-location-search',\n templateUrl: './zendu-location-search.component.html',\n styleUrls: ['./zendu-location-search.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduLocationSearch {\n /**\n * HERE MAPS API Key\n */\n @Input() set apiKey(apiKey: string) {\n this._geocoding.setAPIKey(apiKey);\n }\n\n @Input() address!: string;\n\n @Input() displaySearchIcon: boolean = true;\n\n @Output() addressChange = new EventEmitter<string>();\n\n @Input() materialStyle = true;\n\n @Input() placeholder: string = \"Search address\";\n\n @Input() disabled = false;\n\n @Output() public onSelect = new EventEmitter<LocationAddress>;\n\n // it will apply to input element text and icon color:\n // ie. input like { color: blue}\n @Input() customStyles: any = {};\n\n private addressSearchChanged: Subject<string> = new Subject<string>();\n\n public isSearching: boolean = false;\n\n public ignoreFirstLoad: boolean = false;\n\n public addressList: LocationAddress[] = [];\n\n private _cancelation!: Cancellation;\n\n constructor(\n private _geocoding: GeocodingService,\n private _cdRef: ChangeDetectorRef) {\n\n this.addressSearchChanged\n .pipe(\n debounceTime(200),\n distinctUntilChanged()\n )\n .subscribe((addressSearch: string) => {\n\n this.address = addressSearch\n this.isSearching = true;\n\n if (this._cancelation) {\n // cancel previous\n this._cancelation.cancelled = true;\n }\n\n this._cancelation = { cancelled: false }\n\n this.ignoreFirstLoad = true;\n this.makeSearch(this._cancelation);\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['address'] && this.address) {\n this._cancelation = { cancelled: false }\n await this.makeSearch(this._cancelation);\n const address = this.addressList.find(addr => addr.name === this.address);\n if (address) {\n this.selectAddress(address);\n }\n }\n }\n\n public addressChanged(text: string) {\n this.isSearching = true;\n this.addressChange.emit(text);\n this.addressSearchChanged.next(text);\n\n this._cdRef.detectChanges();\n }\n\n private async makeSearch(cancellation: Cancellation) {\n try {\n if (!this.ignoreFirstLoad) {\n this.ignoreFirstLoad = true;\n return;\n }\n this.addressList = [];\n\n if (!this.address) {\n this.isSearching = false;\n return;\n }\n\n this.addressList = [];\n\n let locations = await this._geocoding.geocode(this.address);\n\n if (this._cancelation.cancelled) {\n // request cancelled\n return;\n }\n\n for (let location of locations) {\n this.addressList.push({\n name: location.name,\n bounds: location.bounds\n });\n }\n this.addressList = [...new Map(this.addressList.map((item: LocationAddress) => [item.name, item])).values()];\n if (this.addressList.length > 20) {\n this.addressList = this.addressList.slice(0, 20);\n }\n\n this.isSearching = false;\n } catch (err) {\n console.error(err);\n } finally {\n this._cdRef.detectChanges();\n }\n }\n\n public selectAddress(address: LocationAddress) {\n this.address = address.name;\n if (this.onSelect) {\n this.addressList = [];\n this.onSelect.emit(address);\n }\n }\n}\n","<div class=\"component\">\n\n <div class=\"search-input-wrapper\"\n [class.boundaries]=\"!materialStyle\">\n @if (displaySearchIcon) {\n <zen-icon src=\"https://storage.googleapis.com/ng-zenduit/icon/search.svg\"\n class=\"search-icon\"\n [style]=\"{'background-color': customStyles.color}\"></zen-icon>\n }\n\n <input type=\"text\"\n class=\"material-input\"\n [style]=\"customStyles\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"address\"\n [ngClass]=\"{'no-icon': !displaySearchIcon}\"\n (ngModelChange)='addressChanged($event)'>\n </div>\n\n @if (address) {\n <div class=\"search-list\"\n [class.boundaries]=\"!materialStyle\"\n appClickOutside\n (clickOutside)=\"addressList = [];\">\n @if (addressList.length || isSearching) {\n <ul class=\"search-item-list\"\n >\n @if (isSearching) {\n <li>Searching</li>\n }\n @if (!isSearching) {\n <div>\n @for (address of addressList; track address) {\n <li\n (click)=\"selectAddress(address)\">\n {{address.name}}\n </li>\n }\n </div>\n }\n </ul>\n }\n </div>\n }\n</div>\n","export class CEvent<T> {\n private index: number = 0;\n\n private handlers: {\n id: number;\n func: (data?: T) => void;\n }[] = [];\n\n public on(handler: (data?: T) => void ): number\n {\n this.index++;\n this.handlers.push({ func: handler, id: this.index });\n return this.index;\n }\n\n public off(id: number)\n {\n this.handlers = this.handlers.filter(h => h.id !== id);\n }\n\n public fire(data?: T)\n {\n if(this.handlers)\n {\n this.handlers.slice(0).forEach(h => h.func(data));\n }\n }\n}","import { CEvent } from \"../core/cevent\";\n\nexport class PlayerControl {\n\tprivate _stopEvent: CEvent<void> = new CEvent();\n\n\tprivate _playEvent: CEvent<void> = new CEvent();\n\n\tprivate _seekEvent: CEvent<number> = new CEvent();\n\n\tprivate _dataEvent: CEvent<number> = new CEvent();\n\n\t/**\n\t * Subscribe to data event\n\t */\n\t public OnData(callback: () => void): number {\n\t\treturn this._dataEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to play event\n\t */\n\t public OnPlay(callback: () => void): number {\n\t\treturn this._playEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to stop event\n\t */\n\t public OnStop(callback: () => void): number {\n\t\treturn this._stopEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to seek event\n\t */\n\tpublic OnSeek(callback: (position: number) => void): number {\n\t\treturn this._seekEvent.on(callback as any);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffPlay(id: number): void {\n\t\tthis._playEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffStop(id: number): void {\n\t\tthis._stopEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffSeek(id: number): void {\n\t\tthis._seekEvent.off(id);\n\t}\n\n\t/**\n\t * Emit the play event\n\t */\n\tpublic Play(): void {\n\t\tthis._playEvent.fire();\n\t}\n\n\t/**\n\t * Emit the stop event\n\t */\n\tpublic Stop(): void {\n\t\tthis._stopEvent.fire();\n\t}\n\n\t/**\n\t * Emit the seek event\n\t */\n\tpublic Seek(position: number) {\n\t\tthis._seekEvent.fire(position);\n\t}\n\n\t/**\n\t * Emit the data event\n\t */\n\tpublic EmitData() {\n\t\tthis._dataEvent.fire();\n\t}\n}","import { Component, Input, OnChanges, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-html5-video-player',\n templateUrl: './html5-video-player.component.html',\n styleUrls: ['./html5-video-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenHTML5VideoPlayerComponent implements OnChanges {\n\t@Input() source!: string;\n\n\t@Input() control!: PlayerControl;\n\n\tpublic async ngOnChanges() {\n\t\tif (this.source) {\n console.log(`Created the html5 video player for source \"${this.source}\"`);\n\t\t}\n\t}\n}\n","<div class=\"html5-player-component\">\n\t<video controls\n\t\t muted\n\t\t autoplay\n\t\t [src]=\"source\">\n\t</video>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { ScriptLoader } from \"../../services/script.loader.service\";\nimport { PlayerControl } from \"../player.control\";\nimport { FlvJs } from \"./flv\"\n\ndeclare var flvjs: {\n createPlayer(mediaDataSource: FlvJs.MediaDataSource, config?: FlvJs.Config): FlvJs.Player;\n isSupported(): boolean;\n getFeatureList(): FlvJs.FeatureList;\n}\n\n@Component({\n selector: 'zen-flv-player',\n templateUrl: './flv-player.component.html',\n styleUrls: ['./flv-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenFlvPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n private _flv!: FlvJs.Player | null;\n\n public IsVideoFilterVisible = false;\n\n public constructor(\n private _element: ElementRef,\n private _scriptLoader: ScriptLoader) {\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.source) {\n this.reload();\n }\n\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private async reload() {\n // load the script first\n await this._scriptLoader.loadScript(\"flv\");\n // update the player\n this.update();\n }\n\n private update(): void {\n this.destroy(Boolean(this.source));\n\n if (!this.source) {\n return;\n }\n\n this._flv = flvjs.createPlayer({\n url: this.source,\n type: \"flv\"\n }, {\n // Enable/Disable IO stash buffer. \n // Set to false if you need realtime (minimal latency) for live stream playback, but may stalled if there's network jittering.\n enableStashBuffer: false\n });\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n this._flv.attachMediaElement(element as HTMLVideoElement);\n this._flv.load();\n this._flv.muted = true;\n this._flv.play();\n\n let previousFrame = 0;\n\n this._flv.on(\"statistics_info\", (event: { decodedFrames: number }) => {\n if (event && event.decodedFrames) {\n if (previousFrame != event.decodedFrames) {\n previousFrame = event.decodedFrames;\n if (this.control) {\n // fired event when video is playing\n this.control.EmitData();\n }\n }\n }\n })\n\n this._flv.on(\"loading_complete\", () => {\n console.log(\"loading completed\");\n\n this.destroy(true);\n })\n\n\n console.log(`Created the flv player for source \"${this.source}\"`);\n }\n\n private destroy(skipNotify?: boolean) {\n if (this._flv) {\n console.log(\"Destroyed the flv player\");\n this._flv.pause();\n this._flv.unload();\n this._flv.destroy();\n this._flv = null;\n\n if (!skipNotify) {\n // this.onStop.emit();\n }\n }\n }\n\n\n}\n","<div class=\"flv-player-component\">\n <video controls\n muted></video>\n\n</div>\n","export class Thread {\n public static sleep(ms: number): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n });\n }\n}","import HLS, { ErrorTypes } from \"hls.js\";\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, Output, ViewChild, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { Thread } from \"../../core/thread\";\n\n@Component({\n selector: 'zen-hls-player',\n templateUrl: './hls-player.component.html',\n styleUrls: ['./hls-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenHlsPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control!: PlayerControl;\n\n @ViewChild(\"video_container\") _video?: ElementRef<HTMLVideoElement>;\n\n public isVideoFilterVisible = false;\n\n private _hls: HLS | null = null;\n\n private _stopCallback!: number;\n\n private _playCallback!: number;\n\n\n private _isDestroyed = false;\n\n public ngOnChanges(changeObj: any): void {\n if (this.source) {\n this.reload()\n }\n if (changeObj.control &&\n changeObj.control.currentValue) {\n this.setControl(changeObj.control.currentValue);\n }\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.destroy();\n }\n\n private async reload() {\n if (!this.source) {\n return;\n }\n\n if (this._isDestroyed) {\n return;\n }\n\n if (!this._video) {\n // wait for component\n await this.waitForComponent();\n }\n\n if (!this._video || this._isDestroyed) {\n return;\n }\n\n if (!HLS.isSupported()) {\n console.log(\"HLS not supported. Set url to the native video player\")\n // just attached the link to video player\n this._video.nativeElement.src = this.source;\n return;\n }\n\n // destroy previous\n this.destroy();\n\n console.log(`[HlsPlayerComponent] start playing for the source [${this.source}]`)\n\n // HLS configuration: https://github.com/video-dev/hls.js/blob/v1.3.0/docs/API.md\n this._hls = new HLS({\n fragLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 3,\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetryTimeout: 10000,\n maxBufferHole: 10,\n lowLatencyMode: false,\n fragLoadingMaxRetry: 1,\n // backBufferLength: 90,\n autoStartLoad: true,\n testBandwidth: false\n });\n this._hls.attachMedia(this._video.nativeElement);\n\n this._hls.loadSource(this.source);\n\n this._hls.on(HLS.Events.FRAG_LOADED, () => {\n // fired event when video is playing\n this.onData();\n });\n\n this._hls.on(HLS.Events.ERROR, (err, data) => {\n if (data.fatal) {\n console.error(\"HLS error:\", err, data);\n // reload source\n console.log(\"HLS reload source\")\n this.destroy();\n this.reload();\n }\n });\n\n console.log(`Created the hls player for source \"${this.source}\"`);\n }\n\n private async waitForComponent() {\n while (!this._video) {\n await Thread.sleep(100);\n if (this._isDestroyed) {\n return;\n }\n }\n }\n\n private setControl(control: PlayerControl): void {\n if (this.control) {\n this.control.OffStop(this._stopCallback);\n this.control.OffStop(this._playCallback);\n }\n\n this.control = control;\n\n if (this.control) {\n this._stopCallback = this.control.OnStop(() => {\n this.destroy();\n });\n\n this._playCallback = this.control.OnPlay(() => {\n this.reload();\n });\n }\n }\n\n\n private destroy() {\n if (this._hls) {\n this._hls.destroy();\n this._hls = null;\n console.log(\"Destroyed the HLS player\");\n }\n }\n\n private onData() {\n console.log(\"HLS on data event\")\n\n if (this.control) {\n this.control.EmitData();\n }\n }\n\n private onError() {\n console.log(\"HLS error\")\n\n if (this.control) {\n this.control.Stop();\n }\n }\n\n\n public toggleFilter(evt: MouseEvent): void {\n this.isVideoFilterVisible = !this.isVideoFilterVisible;\n evt.stopPropagation();\n }\n\n public hideFiler() {\n this.isVideoFilterVisible = false;\n }\n\n}\n","<div class=\"hls-player-component\">\n\t<video #video_container\n\t\t controls\n\t\t muted\n\t\t autoplay></video>\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n}","import { Injectable } from \"@angular/core\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { LocalLock } from \"../core/local.lock\";\nimport { Thread } from \"../core/thread\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenHttpService {\n private cache: {\n [key: string]: {\n lock: LocalLock,\n data: unknown,\n expiry: Date\n }\n } = {};\n\n constructor(private _http: HttpClient) { }\n\n /**\n * https post request\n * @param url the url path\n * @param data the POST payload\n * @param cacheTtl cache ttl in ms\n * @param retires number of retires\n * @returns\n */\n public async post<T>(url: string, data?: unknown, cacheTtl?: number, retires?: number) {\n\n if (cacheTtl) {\n return await this.doCachedPost(url, cacheTtl, data) as T;\n }\n else {\n\n let attemp = 0;\n while (true) {\n attemp++;\n try {\n return await this.doPost(url, data) as T;\n }\n catch (err) {\n if (retires) {\n if (attemp <= retires) {\n console.warn(`[HttpService] retry (${attemp}) for request: ${url}`)\n await Thread.sleep(1000);\n continue;\n }\n }\n throw err;\n }\n }\n }\n }\n\n private async doCachedPost(url: string, cacheTtl: number, data: any) {\n\n const cacheKey = `${url}_${JSON.stringify(data || {})}`\n\n if (!this.cache[cacheKey]) {\n this.cache[cacheKey] = {\n lock: new LocalLock(),\n data: null,\n expiry: new Date(Date.now() + cacheTtl)\n }\n }\n\n let cacheItem = this.cache[cacheKey];\n\n try {\n await cacheItem.lock.lock();\n\n if (cacheItem.data) {\n // return data from cache\n return cacheItem.data;\n }\n cacheItem.data = await this.doPost(url, data);\n return cacheItem.data;\n }\n finally {\n cacheItem.lock.release();\n }\n }\n\n private async doPost<T>(url: string, data?: any) {\n const res = await this._http.post(url,\n data ? data : {}).toPromise();\n return res as T;\n }\n\n public async get<T>(url: string, timeout?: number) {\n\n let httpOptions = {\n timeout: timeout || 60000,\n headers: new HttpHeaders()\n };\n\n const res = await this._http.get(`${url}`, httpOptions).toPromise();\n return res as T;\n }\n\n\n}\n","import { Component, Input, OnChanges, OnDestroy, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { ZenHttpService } from \"../../services/http.service\";\n\n@Component({\n selector: 'zen-snapshot-player',\n templateUrl: './snapshot-player.component.html',\n styleUrls: ['./snapshot-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSnapshotPlayerComponent implements OnChanges, OnDestroy {\n @Input() source!: string;\n\n @Input() channel!: number;\n\n @Input() control?: PlayerControl;\n\n /**\n * Interval to render a snapshot\n */\n @Input() interval!: number;\n\n public snapshot: string;\n\n private _timer: unknown;\n\n private _isRunning = false;\n\n public IsVideoFilterVisible = false;\n\n private _isDestroyed = false;\n\n public constructor(\n private _http: ZenHttpService) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlay();\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.control) {\n this.setControl(changeObj.control.currentValue);\n }\n\n this.update();\n }\n\n private setControl(control: PlayerControl): void {\n if (control) {\n this.control = control;\n this.control.OnPlay(() => {\n this.startPlay();\n });\n this.control.OnStop(() => {\n this.stopPlay();\n });\n }\n }\n\n private update(): void {\n if (this.source) {\n this.startPlay();\n }\n else {\n this.stopPlay();\n }\n }\n\n private startPlay(): void {\n this.stopPlay();\n this._isRunning = true;\n this.render();\n }\n\n private async render(): Promise<void> {\n if (!this._isRunning ||\n this._isDestroyed) {\n return;\n }\n\n await this.renderFrame();\n this._timer = setTimeout(async () => {\n this.render();\n }, this.interval || 1000);\n }\n\n private async renderFrame(): Promise<void> {\n if (this._isDestroyed) {\n return;\n }\n console.log('Request Snapshot');\n const data = await this._http.post<{ image: string }>(this.source);\n console.log('Render Snapshot');\n if (data && data.image) {\n\n this.snapshot = \"\";\n if (data.image.startsWith(\"http\")) {\n this.snapshot = data.image;\n }\n else {\n this.snapshot = `data:image/jpeg;base64,${data.image}`;\n }\n }\n }\n\n private stopPlay(): void {\n this._isRunning = false;\n clearTimeout(this._timer as number);\n }\n\n\n\n\n}\n","<div class=\"snapshot-player-component\">\n <div class=\"image\"\n [ngStyle]=\"{ 'background-image': snapshot }\"></div>\n\n</div>\n","import { CEvent } from \"../../core/cevent\";\n\nexport class WebRTC {\n\tprivate _peerId!: any;\n\n\tprivate _msg!: any;\n\n\tprivate _wsConnect!: any;\n\n\tprivate _startPlayEvent = new CEvent();\n\n\tprivate _errorServerEvent = new CEvent();\n\n\tprivate _disconnectServerEvent = new CEvent();\n\n\tprivate _onDataEvent = new CEvent();\n\n\tprivate _connectAttempts = 0;\n\n\tprivate _peerConnection!: any\n\n\t/**\n\t * Promise for local stream after constraints are approved by the user\n\t */\n\tprivate local_stream_promise!: any\n\n\tprivate _wsServer!: any;\n\n\tprivate _wsPort!: any\n\n\t// Set this to use a specific peer id instead of a random one\n\tprivate _defaultPeerId!: any\n\n\t// Override with your own STUN servers if you want\n\tprivate rtc_configuration = {\n\t\ticeServers: [{ urls: \"stun:stun.services.mozilla.com\" },\n\t\t{ urls: \"stun:stun.l.google.com:19302\" }]\n\t};\n\n\tprivate _originalSource!: any;\n\n\tprivate _socketConnectionTimer: any = null;\n\n\tpublic constructor(\n\t\tprivate _source: string,\n\t\tprivate _videoElement: HTMLVideoElement) {\n\t}\n\n\tpublic Start(): void {\n\t\tthis.CreateVideoWebRTC();\n\t}\n\n\tpublic Stop(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic Destroy(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic OnPlay(callback: () => void): void {\n\t\tthis._startPlayEvent.on(callback);\n\t}\n\n\tpublic OnData(callback: () => void): void {\n\t\tthis._onDataEvent.on(callback);\n\t}\n\n\tpublic OnError(callback: () => void): void {\n\t\tthis._errorServerEvent.on(callback);\n\t}\n\n\tpublic OnClose(callback: () => void): void {\n\t\tthis._disconnectServerEvent.on(callback);\n\t}\n\n\tprivate CreateVideoWebRTC(): void {\n\t\tthis.DestroyWebRTC();\n\t\tthis._originalSource = this._source;\n\n\t\t// Set this to override the automatic detection in websocketServerConnect()\n\t\tthis.WebsocketServerConnect();\n\t}\n\n\tprivate SetError(errorMsg: string): void {\n\t\tthis.Close();\n\t\tconsole.error(errorMsg);\n\t\tthis._errorServerEvent.fire();\n\t}\n\n\tprivate GetId() {\n\t\treturn Math.floor(Math.random() * (1000000 - 10) + 10).toString();\n\t}\n\n\tprivate WebsocketServerConnect(): void {\n\t\tthis._connectAttempts++;\n\t\tif (this._connectAttempts > 20) {\n\t\t\treturn this.SetError(\"Too many connection attempts, aborting. Refresh page to try again\");\n\t\t}\n\n\t\t// Fetch the peer id to use\n\t\tthis._peerId = this._defaultPeerId || this.GetId();\n\t\tthis._wsPort = this._wsPort || '8443';\n\t\tif (window.location.protocol.indexOf(\"file\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || \"0.0.0.0\";\n\t\t}\n\t\telse if (window.location.protocol.indexOf(\"http\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || window.location.hostname;\n\t\t}\n\t\telse {\n\t\t\treturn this.SetError(\"Don't know how to connect to the signalling server with uri\" + window.location);\n\t\t}\n\t\t//ws_server=\"devmedia1.surfsolutions.com\";\n\t\tconst mediacore_domain = new URL(this._originalSource).hostname;\n\n\t\tthis._wsServer = mediacore_domain;\n\t\tconst ws_url = 'wss://' + this._wsServer + ':' + this._wsPort;\n\t\tthis._wsConnect = new WebSocket(ws_url);\n\n\t\t/* When connected, immediately register with the server */\n\t\tthis._wsConnect.addEventListener('open', (event: any) => {\n\t\t\tthis._wsConnect.send('HELLO ' + this._peerId);\n\t\t\tthis._connectAttempts = 0;\n\t\t});\n\t\tthis._wsConnect.addEventListener('error', this.OnServerError.bind(this));\n\t\tthis._wsConnect.addEventListener('message', this.OnServerMessage.bind(this));\n\t\tthis._wsConnect.addEventListener('close', this.OnServerClose.bind(this));\n\t}\n\n\tprivate OnServerMessage(event: any): void {\n\t\tif (event.data.startsWith(\"ERROR\")) {\n\t\t\tthis.handleIncomingError(event.data);\n\t\t\treturn;\n\t\t}\n\t\tif (event.data.startsWith(\"HELLO\")) {\n\t\t\tlet arr = event.data.split(\" \");\n\t\t\tthis._peerId = arr[1];\n\t\t\tthis.SendMessageToStartCall();\n\t\t\treturn;\n\t\t}\n\t\t// Handle incoming JSON SDP and ICE messages\n\t\ttry {\n\t\t\tthis._msg = JSON.parse(event.data);\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof SyntaxError) {\n\t\t\t\tthis.handleIncomingError(\"Error parsing incoming JSON: \" + event.data);\n\t\t\t} else {\n\t\t\t\tthis.handleIncomingError(\"Unknown error parsing response: \" + event.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Incoming JSON signals the beginning of a call\n\t\tif (!this._peerConnection) {\n\t\t\tthis.CreateCall(this._msg);\n\t\t}\n\n\t\tif (this._msg.sdp != null) {\n\t\t\tthis.OnIncomingSDP(this._msg.sdp);\n\t\t}\n\t\telse if (this._msg.ice != null) {\n\t\t\tthis.OnIncomingICE(this._msg.ice);\n\t\t}\n\t\telse {\n\t\t\tthis.handleIncomingError(\"Unknown incoming JSON: \" + this._msg);\n\t\t}\n\t}\n\n\tprivate CreateCall(msg: any): void {\n\t\t// Reset connection attempts because we connected successfully\n\t\tthis._connectAttempts = 0;\n\n\t\tthis._peerConnection = new RTCPeerConnection(this.rtc_configuration);\n\t\tthis._peerConnection.ontrack = this.OnTrack.bind(this);\n\t\tthis.local_stream_promise = new Promise<void>((resolve, reject) => { resolve() });\n\n\t\t// run checks interval to see if we have a live connection\n\t\tthis.RunDataInterval();\n\n\t\tif (!msg.sdp) {\n\t\t\tconsole.warn(\"WARNING: First message wasn't an SDP message!?\");\n\t\t}\n\n\t\tthis._peerConnection.onicecandidate = (event: any) => {\n\t\t\t// We have a candidate, send it to the remote party with the\n\t\t\t// same uuid\n\t\t\tif (event.candidate == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._wsConnect.send(JSON.stringify({ ice: event.candidate }));\n\t\t};\n\t\tthis._peerConnection.oniceconnectionstatechange = (event: any) => {\n\t\t\tif (this._peerConnection && this._peerConnection.iceConnectionState) {\n\t\t\t\tif (this._peerConnection.iceConnectionState == 'failed') {\n\t\t\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\t\t\tthis.SetError('Failed ice connection state');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate RunDataInterval() {\n\n\t\tlet prevFrames = 0;\n\n\t\tconst interval = setInterval(async () => {\n\t\t\tif (!this._peerConnection) {\n\t\t\t\t// stop checking and exit\n\t\t\t\tclearInterval(interval);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(\"WebRTC state:\", this._peerConnection.connectionState);\n\t\t\tif (this._peerConnection.connectionState == \"connected\") {\n\t\t\t\tconst stat = await this._peerConnection.getStats();\n\n\t\t\t\tfor (const val of stat.values()) {\n\t\t\t\t\tif (val.id && val.type == \"track\") {\n\t\t\t\t\t\tif (typeof val.framesDecoded == \"number\") {\n\t\t\t\t\t\t\tconst framesDecoded = val.framesDecoded;\n\t\t\t\t\t\t\tconst diff = framesDecoded - prevFrames;\n\t\t\t\t\t\t\tconsole.log(`WebRTC frames decoded: ${framesDecoded}`);\n\t\t\t\t\t\t\tif (diff > 1) { \n\t\t\t\t\t\t\t\tprevFrames = framesDecoded;\n\t\t\t\t\t\t\t\tthis._onDataEvent.fire();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 5000);\n\t}\n\n\tprivate OnTrack(event: any): void {\n\n\t\tconsole.log(\"on track\")\n\n\t\tif (!event.streams && event.streams.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stream = event.streams[0];\n\t\tconst videoTracks = stream.getVideoTracks();\n\n\t\tif (videoTracks.length > 0) {\n\t\t\tthis._videoElement.srcObject = stream;\n\t\t\tthis._startPlayEvent.fire();\n\n\t\t} else {\n\t\t\tthis.handleIncomingError('Stream with unknown tracks added, resetting');\n\t\t}\n\t}\n\n\tprivate httpGetAnswer(): void {\n\t\t/* none */\n\t}\n\n\tprivate SendMessageToStartCall(): void {\n\t\tlet theUrl = this._originalSource.replace(\"#PEERID#\", this._peerId.toString());\n\t\t// making the https get call\n\t\tthis.HttpGetAsync(theUrl, this.httpGetAnswer.bind(this));\n\t}\n\n\tprivate HttpGetAsync(theUrl: string, callback: any): void {\n\t\tlet xmlHttp = new XMLHttpRequest();\n\t\txmlHttp.onreadystatechange = () => {\n\t\t\tif (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\n\t\t\t\tcallback(xmlHttp.responseText);\n\t\t\t}\n\t\t\telse if (xmlHttp.readyState == 4) {\n\t\t\t\tif (this._socketConnectionTimer) {\n\t\t\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t\t\t}\n\t\t\t\tthis.SetError(`Wrong response status '${xmlHttp.status}' for request ${theUrl}`);\n\t\t\t}\n\t\t}\n\t\txmlHttp.open(\"GET\", theUrl, true); // true for asynchronous \n\t\txmlHttp.send(null);\n\t}\n\n\tprivate OnIncomingSDP(sdp: any): void {\n\t\tthis._peerConnection.setRemoteDescription(sdp).then(() => {\n\t\t\tif (sdp.type != \"offer\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.local_stream_promise.then((stream: any) => {\n\t\t\t\tthis._peerConnection.createAnswer()\n\t\t\t\t\t.then(this.OnLocalDescription.bind(this)).catch(this.SetError);\n\t\t\t}).catch(this.SetError);\n\t\t}).catch(this.SetError);\n\t}\n\n\t// Local description was set, send it to peer\n\tprivate OnLocalDescription(desc: any): void {\n\t\tthis._peerConnection.setLocalDescription(desc).then(() => {\n\t\t\tlet sdp = { sdp: this._peerConnection.localDescription }\n\t\t\tthis._wsConnect.send(JSON.stringify(sdp));\n\t\t});\n\t}\n\n\t// ICE candidate received from peer, add it to the peer connection\n\tprivate OnIncomingICE(ice: any): void {\n\t\tlet candidate = new RTCIceCandidate(ice);\n\t\tthis._peerConnection.addIceCandidate(candidate).catch(this.SetError);\n\t}\n\n\tprivate ResetState(): void {\n\t\t// This will call OnServerClose()\n\t\tthis._wsConnect.close();\n\t}\n\n\tprivate handleIncomingError(error: any): void {\n\t\tthis.Close();\n\t\tthis.SetError(\"ERROR: \" + error);\n\t}\n\n\tprivate Close(): void {\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\t}\n\n\tprivate OnServerClose(event: any): void {\n\t\tthis.Close();\n\t\tthis._disconnectServerEvent.fire();\n\t}\n\n\tprivate OnServerError(event: any) {\n\t\tthis.SetError(\"Server Connection Error. Reconnecting shortly.....\");\n\t}\n\n\tprivate StopVideo(): void {\n\t\tthis._videoElement.pause();\n\t\tthis._videoElement.src = \"\";\n\t}\n\n\tprivate DestroyWebRTC(): void {\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\n\t\tif (this._wsConnect) {\n\t\t\tthis._wsConnect.close(4000, \"stop\");\n\t\t}\n\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\t}\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { WebRTC } from \"./web-rtc\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-web-rtc-player',\n templateUrl: './web-rtc-player.component.html',\n styleUrls: ['./web-rtc-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenWebRTCPlayerComponent implements OnChanges, OnDestroy {\n\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n @Output() onStartPlay = new EventEmitter<void>();\n\n @Output() onServerError = new EventEmitter<void>();\n\n @Output() onServerDisconnect = new EventEmitter<void>();\n\n public IsLoading = true;\n\n public IsVideoFilterVisible = false;\n\n private _webrtc!: WebRTC;\n\n private _isDestroyed = false;\n\n public constructor(\n private _element: ElementRef\n ) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlayback();\n }\n\n public ngOnChanges(changeObj: any): void {\n\n if (changeObj.source) {\n this.source = changeObj.source.currentValue;\n if (this.source) {\n this.createWebRTC();\n this.Play();\n }\n else {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n }\n }\n }\n\n private createWebRTC(): void {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n\n this._webrtc = new WebRTC(this.source, this.getVideoElement());\n this._webrtc.OnPlay(this.invokeOnStartPlay.bind(this));\n this._webrtc.OnError(this.invokeOnServerError.bind(this));\n this._webrtc.OnClose(this.invokeOnServerDisconnect.bind(this));\n this._webrtc.OnData(this.invokeOnData.bind(this));\n }\n\n private stopPlayback() {\n if (this._webrtc) {\n this._webrtc.Stop();\n }\n }\n\n private Play() {\n if (this._isDestroyed) {\n return;\n }\n if (this._webrtc) {\n this._webrtc.Start();\n }\n }\n\n private getVideoElement() {\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n return element as HTMLVideoElement;\n }\n\n private invokeOnStartPlay(): void {\n if (this._isDestroyed) {\n return;\n }\n }\n\n private invokeOnData() {\n if (this._isDestroyed) {\n return;\n }\n if (!this.control) {\n return;\n }\n this.control.EmitData();\n }\n\n private invokeOnServerError(): void {\n if (this.onServerError) {\n this.onServerError.emit();\n }\n }\n\n private invokeOnServerDisconnect(): void {\n if (this.onServerDisconnect) {\n this.onServerDisconnect.emit();\n }\n }\n\n}\n","<div class=\"web-rtc-player\">\n\n <video class=\"web-rtc-player-id\"\n ng-hide=\"IsShowSnapshotPlayer\"\n muted\n controls\n webkit-playsinline=\"true\"\n playsinline=\"true\"\n autoplay=\"\"></video>\n\n</div>\n\n<div class=\"customEventDiv\"></div>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\nexport type ZenLiveViewPlayerType = 'html5' | 'flv' | 'webrtc' | 'snapshot' | 'hls' | 'unknown';\n\n@Component({\n selector: 'zen-live-view-player',\n templateUrl: './live-view-player.component.html',\n styleUrls: ['./live-view-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenLiveViewPlayerComponent implements OnDestroy {\n @Input() control!: PlayerControl;\n\n @Input() source!: string;\n\n @Input() playerType: ZenLiveViewPlayerType = \"unknown\";\n\n @Input() snapshotInterval!: number;\n\n /**\n * Playback timeout. It uses for streamax live streaming. \n */\n @Input() timeout!: number;\n\n @Output() onData = new EventEmitter<void>();\n\n private _controlPlayHander!: number;\n\n private _controlStopHander!: number;\n\n public IsLoading = true;\n\n constructor() {\n this.control = new PlayerControl();\n this.control.OnData(() => {\n this.onData.emit();\n })\n }\n\n public ngOnDestroy(): void {\n if (this.control) {\n if (this._controlPlayHander) {\n this.control.OffPlay(this._controlPlayHander);\n }\n\n if (this._controlStopHander) {\n this.control.OffStop(this._controlStopHander);\n }\n }\n }\n\n\n\n}\n","@if (playerType == 'webrtc') {\n <zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n ></zen-web-rtc-player>\n}\n\n@if (playerType == 'snapshot') {\n <zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n ></zen-snapshot-player>\n}\n\n@if (playerType == 'flv') {\n <zen-flv-player [source]=\"source\"\n [control]=\"control\"\n ></zen-flv-player>\n}\n\n@if (playerType == 'hls') {\n <zen-hls-player [source]=\"source\"\n [control]=\"control\"\n ></zen-hls-player>\n}\n\n@if (playerType == 'html5') {\n <zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n ></zen-html5-video-player>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\n\nexport type TimePickerMode = 'clock' | 'duration';\n\nexport interface TimePickerValue {\n hours: number;\n minutes: number;\n seconds: number;\n period?: 'AM' | 'PM';\n}\n\n@Component({\n selector: 'zen-timepicker',\n templateUrl: './zendu-timepicker.component.html',\n styleUrls: ['./zendu-timepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduTimepickerComponent implements OnInit, OnChanges {\n @Input() mode: TimePickerMode = 'clock';\n @Input() label: string;\n @Input() value: TimePickerValue;\n @Input() showSeconds: boolean = false;\n @Input() showHours: boolean = true;\n @Input() disabled: boolean = false;\n @Input() readonly: boolean = false;\n @Input() placeholder: string;\n @Input() width: string;\n\n @Output() valueChange = new EventEmitter<TimePickerValue>();\n @Output() apply = new EventEmitter<TimePickerValue>();\n @Output() clear = new EventEmitter<void>();\n\n isPickerVisible = false;\n\n selectedHours = 0;\n selectedMinutes = 0;\n selectedSeconds = 0;\n selectedPeriod: 'AM' | 'PM' = 'AM';\n\n // Zero-padded display strings for the input fields\n hoursDisplay = '00';\n minutesDisplay = '00';\n secondsDisplay = '00';\n\n right = false;\n bottom = false;\n\n private maxHour = 12;\n private minHour = 1;\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideClick(event: MouseEvent): void {\n if (!document.body.contains(event.target as Node)) {\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.isPickerVisible = false;\n }\n\n get defaultLabel(): string {\n return this.mode === 'clock' ? 'Select a time' : 'Stop Duration';\n }\n\n get defaultPlaceholder(): string {\n if (this.placeholder) return this.placeholder;\n if (this.mode === 'clock') return 'Select Time';\n if (!this.showHours && this.showSeconds) return '0 min 0 sec';\n if (!this.showHours) return '0 min';\n return '0 min';\n }\n\n get formattedDisplayValue(): string {\n if (!this.value) return '';\n\n if (this.mode === 'clock') {\n const h = this.formatNum(this.value.hours);\n const m = this.formatNum(this.value.minutes);\n const s = this.formatNum(this.value.seconds);\n\n if (!this.showHours) {\n return this.showSeconds ? `${m}.${s} ${this.value.period || 'AM'}` : `${m} ${this.value.period || 'AM'}`;\n }\n if (this.showSeconds) {\n return `${h}.${m}.${s} ${this.value.period || 'AM'}`;\n }\n return `${h}.${m} ${this.value.period || 'AM'}`;\n }\n\n // Duration mode\n const parts: string[] = [];\n if (this.showHours && this.value.hours > 0) {\n parts.push(`${this.value.hours} hr`);\n }\n if (this.value.minutes > 0) {\n parts.push(`${this.value.minutes} min`);\n }\n if (this.showSeconds && this.value.seconds > 0) {\n parts.push(`${this.value.seconds} sec`);\n }\n return parts.length > 0 ? parts.join(' ') : '0 min';\n }\n\n ngOnInit(): void {\n this.updateHourLimits();\n if (this.value) {\n this.applyValue(this.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['mode']) {\n this.updateHourLimits();\n }\n if (changes['value'] && this.value) {\n this.applyValue(this.value);\n }\n }\n\n togglePicker(): void {\n if (this.disabled || this.readonly) return;\n this.isPickerVisible = !this.isPickerVisible;\n if (this.isPickerVisible) {\n if (this.value) {\n this.applyValue(this.value);\n }\n this.updatePlacement();\n }\n }\n\n // ─── Increment / Decrement ───\n\n incrementHours(): void {\n this.selectedHours = this.selectedHours >= this.maxHour ? this.minHour : this.selectedHours + 1;\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n decrementHours(): void {\n this.selectedHours = this.selectedHours <= this.minHour ? this.maxHour : this.selectedHours - 1;\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n incrementMinutes(): void {\n this.selectedMinutes = this.selectedMinutes >= 59 ? 0 : this.selectedMinutes + 1;\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n decrementMinutes(): void {\n this.selectedMinutes = this.selectedMinutes <= 0 ? 59 : this.selectedMinutes - 1;\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n incrementSeconds(): void {\n this.selectedSeconds = this.selectedSeconds >= 59 ? 0 : this.selectedSeconds + 1;\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n decrementSeconds(): void {\n this.selectedSeconds = this.selectedSeconds <= 0 ? 59 : this.selectedSeconds - 1;\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n // ─── Direct Input ───\n\n onHoursInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedHours = this.minHour;\n this.hoursDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val <= this.maxHour) {\n this.selectedHours = Math.max(this.minHour, val);\n this.hoursDisplay = raw;\n } else {\n input.value = this.hoursDisplay;\n }\n }\n\n onMinutesInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedMinutes = 0;\n this.minutesDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this.selectedMinutes = val;\n this.minutesDisplay = raw;\n } else {\n input.value = this.minutesDisplay;\n }\n }\n\n onSecondsInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedSeconds = 0;\n this.secondsDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this.selectedSeconds = val;\n this.secondsDisplay = raw;\n } else {\n input.value = this.secondsDisplay;\n }\n }\n\n onFocus(event: Event): void {\n const input = event.target as HTMLInputElement;\n input.select();\n }\n\n clampHours(): void {\n this.selectedHours = Math.max(this.minHour, Math.min(this.maxHour, this.selectedHours));\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n clampMinutes(): void {\n this.selectedMinutes = Math.max(0, Math.min(59, this.selectedMinutes));\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n clampSeconds(): void {\n this.selectedSeconds = Math.max(0, Math.min(59, this.selectedSeconds));\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n onInputKeydown(event: KeyboardEvent, type: 'hours' | 'minutes' | 'seconds'): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hours') this.incrementHours();\n else if (type === 'minutes') this.incrementMinutes();\n else this.incrementSeconds();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hours') this.decrementHours();\n else if (type === 'minutes') this.decrementMinutes();\n else this.decrementSeconds();\n }\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod = period;\n }\n\n formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n onApply(): void {\n const val = this.getCurrentValue();\n this.value = val;\n this.valueChange.emit(val);\n this.apply.emit(val);\n this.isPickerVisible = false;\n }\n\n onClear(): void {\n this.selectedHours = this.mode === 'clock' ? 12 : 0;\n this.selectedMinutes = 0;\n this.selectedSeconds = 0;\n this.selectedPeriod = 'AM';\n this.hoursDisplay = this.formatNum(this.selectedHours);\n this.minutesDisplay = '00';\n this.secondsDisplay = '00';\n this.value = null;\n this.valueChange.emit(null);\n this.clear.emit();\n this.isPickerVisible = false;\n }\n\n // ─── Private ───\n\n private updatePlacement(): void {\n this.right = false;\n this.bottom = false;\n const el = this._element.nativeElement;\n const rect = el.getBoundingClientRect();\n if (rect.left > window.innerWidth / 2) {\n this.right = true;\n }\n if (rect.top > window.innerHeight / 2) {\n this.bottom = true;\n }\n }\n\n private updateHourLimits(): void {\n if (this.mode === 'clock') {\n this.maxHour = 12;\n this.minHour = 1;\n if (this.selectedHours === 0 && this.showHours) this.selectedHours = 12;\n } else {\n this.maxHour = 23;\n this.minHour = 0;\n }\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n private applyValue(val: TimePickerValue): void {\n this.selectedHours = Math.max(this.minHour, Math.min(this.maxHour, val.hours || 0));\n this.selectedMinutes = Math.max(0, Math.min(59, val.minutes || 0));\n this.selectedSeconds = Math.max(0, Math.min(59, val.seconds || 0));\n this.hoursDisplay = this.formatNum(this.selectedHours);\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n if (val.period) {\n this.selectedPeriod = val.period;\n }\n }\n\n private getCurrentValue(): TimePickerValue {\n const val: TimePickerValue = {\n hours: this.selectedHours,\n minutes: this.selectedMinutes,\n seconds: this.selectedSeconds,\n };\n if (this.mode === 'clock') {\n val.period = this.selectedPeriod;\n }\n return val;\n }\n}\n","<div class=\"zen-tp\">\n <!-- Input toggle button -->\n <button class=\"zen-tp__toggle zen-tp__toggle--box\"\n [class.zen-tp__toggle--active]=\"isPickerVisible\"\n [class.zen-tp__toggle--disabled]=\"disabled\"\n [class.zen-tp__toggle--readonly]=\"readonly\"\n [style.width]=\"width || null\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\">\n <span class=\"zen-tp__display\" [class.zen-tp__display--placeholder]=\"!value\">\n {{ value ? formattedDisplayValue : defaultPlaceholder }}\n </span>\n <zen-icon class=\"zen-tp__icon\"\n [class.zen-tp__icon--filled]=\"value\"\n src=\"assets/ng-zenduit/icons/time.svg\">\n </zen-icon>\n </button>\n\n <!-- Picker dropdown -->\n @if (isPickerVisible) {\n <div class=\"zen-tp__dropdown\"\n #pickerPopup\n [class.zen-tp__dropdown--right]=\"right\"\n [class.zen-tp__dropdown--bottom]=\"bottom\">\n <div class=\"zen-tp__popup\">\n <!-- Header -->\n <div class=\"zen-tp__popup-label\">{{ label || defaultLabel }}</div>\n <!-- Time fields -->\n <div class=\"zen-tp__fields\">\n <!-- Hours -->\n @if (showHours) {\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Hours\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"hoursDisplay\"\n (input)=\"onHoursInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampHours()\"\n (keydown)=\"onInputKeydown($event, 'hours')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementHours()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementHours()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">HRS</span>\n </div>\n }\n @if (showHours) {\n <span class=\"zen-tp__colon\">:</span>\n }\n <!-- Minutes -->\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Minutes\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"minutesDisplay\"\n (input)=\"onMinutesInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampMinutes()\"\n (keydown)=\"onInputKeydown($event, 'minutes')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementMinutes()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementMinutes()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">MIN</span>\n </div>\n <!-- Seconds (duration mode or when showSeconds) -->\n @if (showSeconds) {\n <span class=\"zen-tp__colon\">:</span>\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Seconds\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"secondsDisplay\"\n (input)=\"onSecondsInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampSeconds()\"\n (keydown)=\"onInputKeydown($event, 'seconds')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementSeconds()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementSeconds()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">SEC</span>\n </div>\n }\n <!-- AM/PM Toggle (Clock mode only) -->\n @if (mode === 'clock') {\n <div class=\"zen-tp__period\">\n <button class=\"zen-tp__period-btn\"\n type=\"button\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'AM'\"\n (click)=\"selectPeriod('AM')\">\n AM\n </button>\n <button class=\"zen-tp__period-btn\"\n type=\"button\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'PM'\"\n (click)=\"selectPeriod('PM')\">\n PM\n </button>\n </div>\n }\n </div>\n <!-- Divider -->\n <div class=\"zen-tp__divider\"></div>\n <!-- Actions -->\n <div class=\"zen-tp__actions\">\n <button class=\"zen-tp__btn zen-tp__btn--clear\" type=\"button\" (click)=\"onClear()\">Clear</button>\n <button class=\"zen-tp__btn zen-tp__btn--apply\" type=\"button\" (click)=\"onApply()\">Apply</button>\n </div>\n </div>\n </div>\n }\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport type DatePickerDropdownType = 'single' | 'range';\n\nexport interface DatePickerPreset {\n label: string;\n getRange: () => { start: Date; end: Date };\n}\n\nexport const ZEN_DATE_PICKER_DEFAULT_PRESETS =\n new InjectionToken<DatePickerPreset[]>('ZEN_DATE_PICKER_DEFAULT_PRESETS');\n\nexport interface DateRangeValue {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface DatePickerMarker {\n title?: string;\n color?: string;\n dates: number[];\n}\n","import {\n Component, ElementRef, EventEmitter, HostListener, Inject, Input,\n OnChanges, OnDestroy, OnInit, Optional, Output, SimpleChanges, ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from '../datepicker/date-picker-day';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n DatePickerDropdownType, DatePickerMarker, DatePickerPreset, DateRangeValue,\n ZEN_DATE_PICKER_DEFAULT_PRESETS\n} from './date-picker-dropdown.types';\n\nconst MOBILE_BREAKPOINT = 768;\n\n@Component({\n selector: 'zen-date-picker-dropdown',\n templateUrl: './zendu-date-picker-dropdown.component.html',\n styleUrls: ['./zendu-date-picker-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDatePickerDropdownComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() type: DatePickerDropdownType = 'single';\n @Input() date: Date | null = null;\n @Output() dateChange = new EventEmitter<Date | null>();\n\n @Input() startDate: Date | null = null;\n @Output() startDateChange = new EventEmitter<Date | null>();\n\n @Input() endDate: Date | null = null;\n @Output() endDateChange = new EventEmitter<Date | null>();\n\n @Output() rangeChange = new EventEmitter<DateRangeValue>();\n\n @Input() presets: DatePickerPreset[] | null = null;\n @Input() minDate: Date | null = null;\n @Input() maxDate: Date | null = null;\n @Input() disabled: boolean = false;\n @Input() dateMarkers: DatePickerMarker[] = [];\n @Input() placeholder: string = '';\n @Input() mobileBreakpoint: number = MOBILE_BREAKPOINT;\n @Input() timePicker: boolean = false;\n @Input() autoApply: boolean = false;\n\n @ViewChild('triggerBtn') triggerBtn!: ElementRef;\n\n mobile = false;\n isOpen = false;\n dropdownStyle: { [key: string]: string } = {};\n\n // Left calendar state\n leftCurrentSlot = new Date();\n leftDayRows: Array<{ days: DatePickerDay[] }> = [];\n leftDaysTitle = '';\n\n // Right calendar state (for range desktop)\n rightCurrentSlot = new Date();\n rightDayRows: Array<{ days: DatePickerDay[] }> = [];\n rightDaysTitle = '';\n\n weekDays = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sat', 'Su'];\n\n // Internal selection state\n _selectedDate: Date | null = null;\n _selectedStart: Date | null = null;\n _selectedEnd: Date | null = null;\n _activePreset: string | null = null;\n _appliedPresetLabel: string | null = null;\n _appliedPresetStartTime: number | null = null;\n _appliedPresetEndTime: number | null = null;\n\n // Time picker state\n _hours: number = 12;\n _minutes: number = 0;\n _period: 'AM' | 'PM' = 'AM';\n _hoursDisplay: string = '12';\n _minutesDisplay: string = '00';\n\n defaultPresets: DatePickerPreset[] = [\n {\n label: 'Today',\n getRange: () => ({\n start: moment().startOf('day').toDate(),\n end: moment().endOf('day').toDate()\n })\n },\n {\n label: 'Yesterday',\n getRange: () => ({\n start: moment().subtract(1, 'day').startOf('day').toDate(),\n end: moment().subtract(1, 'day').endOf('day').toDate()\n })\n },\n {\n label: 'This week',\n getRange: () => ({\n start: moment().startOf('isoWeek').toDate(),\n end: moment().endOf('isoWeek').toDate()\n })\n },\n {\n label: 'Last week',\n getRange: () => ({\n start: moment().subtract(1, 'week').startOf('isoWeek').toDate(),\n end: moment().subtract(1, 'week').endOf('isoWeek').toDate()\n })\n },\n {\n label: 'This month',\n getRange: () => ({\n start: moment().startOf('month').toDate(),\n end: moment().endOf('month').toDate()\n })\n },\n {\n label: 'Last month',\n getRange: () => ({\n start: moment().subtract(1, 'month').startOf('month').toDate(),\n end: moment().subtract(1, 'month').endOf('month').toDate()\n })\n }\n ];\n\n constructor(\n private _element: ElementRef,\n private _translate: TranslateService,\n @Optional() @Inject(ZEN_DATE_PICKER_DEFAULT_PRESETS) globalPresets: DatePickerPreset[] | null\n ) {\n if (globalPresets && globalPresets.length) {\n this.defaultPresets = globalPresets;\n }\n }\n\n ngOnInit(): void {\n this.checkMobile();\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.mobile = window.innerWidth < this.mobileBreakpoint;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['date'] && this.date) {\n this._selectedDate = new Date(this.date);\n }\n if (changes['startDate'] && this.startDate) {\n this._selectedStart = new Date(this.startDate);\n }\n if (changes['endDate'] && this.endDate) {\n this._selectedEnd = new Date(this.endDate);\n }\n }\n\n ngOnDestroy(): void { }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isOpen) return;\n if (!document.body.contains(event.target as Node)) return;\n if (this._element.nativeElement.contains(event.target)) return;\n this.close();\n }\n\n get activePresets(): DatePickerPreset[] {\n return this.presets || this.defaultPresets;\n }\n\n get showPresetsSidebar(): boolean {\n return this.type === 'range' && !this.mobile;\n }\n\n get showDualCalendars(): boolean {\n return this.type === 'range' && !this.mobile;\n }\n\n get triggerLabel(): string {\n if (this.type === 'single') {\n if (this.date) {\n return this.formatDate(this.date);\n }\n return this.placeholder || this._translate.instant('Select date');\n }\n if (this.startDate && this.endDate) {\n if (this._appliedPresetLabel\n && this.startDate.getTime() === this._appliedPresetStartTime\n && this.endDate.getTime() === this._appliedPresetEndTime) {\n return this._translate.instant(this._appliedPresetLabel);\n }\n return `${this.formatDate(this.startDate)} - ${this.formatDate(this.endDate)}`;\n }\n return this.placeholder || this._translate.instant('Select dates');\n }\n\n get legendMarkers(): DatePickerMarker[] {\n return (this.dateMarkers || []).filter(m => !!m.title);\n }\n\n get hasValue(): boolean {\n if (this.type === 'single') return !!this.date;\n return !!(this.startDate && this.endDate);\n }\n\n get formattedSelectedDate(): string {\n return this._selectedDate ? this.formatDate(this._selectedDate) : '';\n }\n\n get formattedStartDate(): string {\n return this._selectedStart ? this.formatDate(this._selectedStart) : '';\n }\n\n get formattedEndDate(): string {\n return this._selectedEnd ? this.formatDate(this._selectedEnd) : '';\n }\n\n formatDate(date: Date): string {\n const enMonth = moment(date).format('MMM');\n const translatedMonth = this._translate.instant(enMonth);\n let formatted = moment(date).format('MMM D, YYYY').replace(enMonth, translatedMonth);\n if (this.timePicker) {\n formatted += ' ' + this.formatTime(date);\n }\n return formatted;\n }\n\n private formatTime(date: Date): string {\n let h = date.getHours();\n const m = date.getMinutes();\n const period = h >= 12 ? 'PM' : 'AM';\n if (h === 0) h = 12;\n else if (h > 12) h -= 12;\n return `${this.formatNum(h)}:${this.formatNum(m)} ${period}`;\n }\n\n toggle() {\n if (this.disabled) return;\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open() {\n this.isOpen = true;\n this._selectedDate = this.date ? new Date(this.date) : null;\n this._selectedStart = this.startDate ? new Date(this.startDate) : null;\n this._selectedEnd = this.endDate ? new Date(this.endDate) : null;\n this._activePreset = (this._appliedPresetLabel\n && this.startDate?.getTime() === this._appliedPresetStartTime\n && this.endDate?.getTime() === this._appliedPresetEndTime)\n ? this._appliedPresetLabel\n : null;\n\n if (this.timePicker) {\n this.initTimeFromDate(this.type === 'single' ? this.date : this.startDate);\n }\n\n if (this.type === 'single') {\n this.leftCurrentSlot = this._selectedDate ? new Date(this._selectedDate) : new Date();\n } else {\n this.leftCurrentSlot = this._selectedStart ? new Date(this._selectedStart) : new Date();\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n\n this.updateCalendars();\n this.updateDropdownPosition();\n }\n\n private updateDropdownPosition() {\n if (!this.triggerBtn) return;\n\n setTimeout(() => {\n const rect = this.triggerBtn.nativeElement.getBoundingClientRect();\n const dropdownEl = this._element.nativeElement.querySelector('.dropdown-menu');\n const dropdownHeight = dropdownEl ? dropdownEl.scrollHeight : 500;\n const spaceBelow = window.innerHeight - rect.bottom - 8;\n const spaceAbove = rect.top - 8;\n const margin = 16;\n const viewportHeight = window.innerHeight;\n\n const style: { [key: string]: string } = { left: `${rect.left}px` };\n\n if (spaceBelow >= dropdownHeight) {\n // Fits below the trigger\n style['top'] = `${rect.bottom + 8}px`;\n } else if (spaceAbove >= dropdownHeight) {\n // Fits above the trigger\n style['bottom'] = `${viewportHeight - rect.top + 8}px`;\n } else {\n // Doesn't fit either way — pin to viewport so full content is visible\n const top = Math.max(margin, viewportHeight - dropdownHeight - margin);\n style['top'] = `${top}px`;\n style['max-height'] = `${viewportHeight - top - margin}px`;\n }\n\n this.dropdownStyle = style;\n });\n }\n\n close() {\n this.isOpen = false;\n }\n\n // Calendar navigation\n leftPrevMonth() {\n this.leftCurrentSlot = moment(this.leftCurrentSlot).subtract(1, 'month').toDate();\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n leftNextMonth() {\n this.leftCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n rightPrevMonth() {\n this.rightCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.leftCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.updateCalendars();\n }\n\n rightNextMonth() {\n this.rightCurrentSlot = moment(this.rightCurrentSlot).add(1, 'month').toDate();\n this.leftCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.updateCalendars();\n }\n\n // For mobile/single mode when there's only one calendar\n prevMonth() {\n this.leftPrevMonth();\n }\n\n nextMonth() {\n this.leftNextMonth();\n }\n\n selectDay(day: DatePickerDay) {\n if (day.isDisabled || day.isOutside) return;\n\n if (this.type === 'single') {\n this._selectedDate = new Date(day.date);\n if (this.autoApply) {\n this.apply();\n return;\n }\n } else {\n // Range selection logic — start anchors to start-of-day, end to end-of-day,\n // so a same-day pick spans the full 24h (matches preset semantics).\n if (!this._selectedStart || (this._selectedStart && this._selectedEnd)) {\n // Start new selection\n this._selectedStart = moment(day.date).startOf('day').toDate();\n this._selectedEnd = null;\n this._activePreset = null;\n } else {\n // Complete the range\n const newDay = moment(day.date).startOf('day').toDate();\n if (moment(newDay).isBefore(this._selectedStart)) {\n this._selectedEnd = moment(this._selectedStart).endOf('day').toDate();\n this._selectedStart = newDay;\n } else {\n this._selectedEnd = moment(newDay).endOf('day').toDate();\n }\n }\n }\n this.updateCalendars();\n }\n\n selectPreset(preset: DatePickerPreset) {\n const range = preset.getRange();\n this._selectedStart = range.start;\n this._selectedEnd = range.end;\n this._activePreset = preset.label;\n this.leftCurrentSlot = new Date(range.start);\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n goToToday() {\n const today = new Date();\n this._selectedDate = moment(today).startOf('day').toDate();\n this.leftCurrentSlot = new Date(today);\n this.updateCalendars();\n }\n\n // Time picker methods\n private formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n incrementHours() {\n this._hours = this._hours >= 12 ? 1 : this._hours + 1;\n this._hoursDisplay = this.formatNum(this._hours);\n }\n\n decrementHours() {\n this._hours = this._hours <= 1 ? 12 : this._hours - 1;\n this._hoursDisplay = this.formatNum(this._hours);\n }\n\n incrementMinutes() {\n this._minutes = this._minutes >= 59 ? 0 : this._minutes + 1;\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n\n decrementMinutes() {\n this._minutes = this._minutes <= 0 ? 59 : this._minutes - 1;\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n\n onHoursInput(event: Event) {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this._hours = 1;\n this._hoursDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 1 && val <= 12) {\n this._hours = val;\n this._hoursDisplay = raw;\n } else {\n input.value = this._hoursDisplay;\n }\n }\n\n onMinutesInput(event: Event) {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this._minutes = 0;\n this._minutesDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this._minutes = val;\n this._minutesDisplay = raw;\n } else {\n input.value = this._minutesDisplay;\n }\n }\n\n clampHours() {\n this._hours = Math.max(1, Math.min(12, this._hours));\n this._hoursDisplay = this.formatNum(this._hours);\n }\n\n clampMinutes() {\n this._minutes = Math.max(0, Math.min(59, this._minutes));\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n\n onTimeFocus(event: Event) {\n const input = event.target as HTMLInputElement;\n input.select();\n }\n\n onTimeKeydown(event: KeyboardEvent, type: 'hours' | 'minutes') {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hours') this.incrementHours();\n else this.incrementMinutes();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hours') this.decrementHours();\n else this.decrementMinutes();\n }\n }\n\n setPeriod(period: 'AM' | 'PM') {\n this._period = period;\n }\n\n private applyTimeToDate(date: Date): Date {\n const result = new Date(date);\n let hours = this._hours;\n if (this._period === 'AM' && hours === 12) {\n hours = 0;\n } else if (this._period === 'PM' && hours !== 12) {\n hours += 12;\n }\n result.setHours(hours, this._minutes, 0, 0);\n return result;\n }\n\n private initTimeFromDate(date: Date | null) {\n if (!date) {\n this._hours = 12;\n this._minutes = 0;\n this._period = 'AM';\n } else {\n let h = date.getHours();\n this._minutes = date.getMinutes();\n if (h === 0) {\n this._hours = 12;\n this._period = 'AM';\n } else if (h < 12) {\n this._hours = h;\n this._period = 'AM';\n } else if (h === 12) {\n this._hours = 12;\n this._period = 'PM';\n } else {\n this._hours = h - 12;\n this._period = 'PM';\n }\n }\n this._hoursDisplay = this.formatNum(this._hours);\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n\n apply() {\n if (this.type === 'single') {\n if (this._selectedDate) {\n this.date = this.timePicker\n ? this.applyTimeToDate(this._selectedDate)\n : new Date(this._selectedDate);\n this.dateChange.emit(this.date);\n }\n } else {\n if (this._selectedStart) {\n this.startDate = this.timePicker\n ? this.applyTimeToDate(this._selectedStart)\n : new Date(this._selectedStart);\n this.startDateChange.emit(this.startDate);\n }\n if (this._selectedEnd) {\n this.endDate = this.timePicker\n ? this.applyTimeToDate(this._selectedEnd)\n : new Date(this._selectedEnd);\n this.endDateChange.emit(this.endDate);\n }\n if (this._selectedStart && this._selectedEnd) {\n this.rangeChange.emit({ start: this.startDate, end: this.endDate });\n }\n if (this._activePreset && this.startDate && this.endDate) {\n this._appliedPresetLabel = this._activePreset;\n this._appliedPresetStartTime = this.startDate.getTime();\n this._appliedPresetEndTime = this.endDate.getTime();\n } else {\n this._appliedPresetLabel = null;\n this._appliedPresetStartTime = null;\n this._appliedPresetEndTime = null;\n }\n }\n this.close();\n }\n\n cancel() {\n this.close();\n }\n\n get canApply(): boolean {\n if (this.type === 'single') return !!this._selectedDate;\n return !!(this._selectedStart && this._selectedEnd);\n }\n\n private updateCalendars() {\n this.updateDays(this.leftCurrentSlot, 'left');\n if (this.showDualCalendars) {\n this.updateDays(this.rightCurrentSlot, 'right');\n }\n }\n\n private updateDays(slot: Date, side: 'left' | 'right') {\n const title = moment(slot).format('MMMM YYYY');\n\n const dayRows: Array<{ days: DatePickerDay[] }> = [];\n let current = moment(slot).startOf('month').startOf('isoWeek');\n const end = moment(slot).endOf('month').endOf('isoWeek');\n const currentMonth = moment(slot).month();\n\n while (current.isSameOrBefore(end)) {\n const row = { days: [] as DatePickerDay[] };\n dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n const isOutside = currentMonth !== current.month();\n\n let isDisabled = false;\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let markerColors: (string | undefined)[] | undefined;\n if (!isOutside && this.dateMarkers && this.dateMarkers.length) {\n const ts = current.valueOf();\n const colors: (string | undefined)[] = [];\n for (const m of this.dateMarkers) {\n if (m.dates && m.dates.indexOf(ts) >= 0) {\n colors.push(m.color);\n }\n }\n if (colors.length) markerColors = colors;\n }\n\n const isSelected = isOutside ? false : this.isDaySelected(current);\n\n row.days.push({\n date: current.toDate(),\n lbl: isOutside ? '' : current.date().toString(),\n isOutside,\n selected: isSelected,\n isDisabled: isOutside ? true : isDisabled,\n isHighlighted: false,\n markerColors\n });\n\n current = current.clone().add(1, 'day');\n }\n }\n\n if (side === 'left') {\n this.leftDayRows = dayRows;\n this.leftDaysTitle = title;\n } else {\n this.rightDayRows = dayRows;\n this.rightDaysTitle = title;\n }\n }\n\n private isDaySelected(date: moment.Moment): boolean {\n if (this.type === 'single') {\n return this._selectedDate ? date.isSame(moment(this._selectedDate), 'day') : false;\n }\n if (this._selectedStart && date.isSame(moment(this._selectedStart), 'day')) return true;\n if (this._selectedEnd && date.isSame(moment(this._selectedEnd), 'day')) return true;\n return false;\n }\n\n isToday(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n return moment(day.date).isSame(moment(), 'day');\n }\n\n isInRange(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedStart || !this._selectedEnd) return false;\n const d = moment(day.date);\n return d.isAfter(moment(this._selectedStart), 'day') && d.isBefore(moment(this._selectedEnd), 'day');\n }\n\n isRangeStart(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedStart) return false;\n return moment(day.date).isSame(moment(this._selectedStart), 'day');\n }\n\n isRangeEnd(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedEnd) return false;\n return moment(day.date).isSame(moment(this._selectedEnd), 'day');\n }\n}\n","<div class=\"zen-dpd\">\n <!-- Trigger Button -->\n <button class=\"dropdown-trigger\"\n #triggerBtn\n [disabled]=\"disabled\"\n [class.active]=\"isOpen\"\n [class.has-value]=\"hasValue\"\n (click)=\"toggle()\">\n <zen-icon class=\"trigger-icon\"\n src=\"assets/ng-zenduit/icons/calendar.svg\">\n </zen-icon>\n <span class=\"trigger-label\">{{ triggerLabel }}</span>\n </button>\n\n <!-- Dropdown Panel -->\n @if (isOpen) {\n <div class=\"dropdown-menu\" [class.mobile]=\"mobile\" [ngStyle]=\"dropdownStyle\">\n <!-- RANGE DESKTOP: presets sidebar + dual calendar -->\n @if (type === 'range' && !mobile) {\n <!-- Presets sidebar -->\n <div class=\"presets-sidebar\">\n @for (preset of activePresets; track preset) {\n <div class=\"preset-item\"\n [class.active]=\"_activePreset === preset.label\"\n (click)=\"selectPreset(preset)\">\n {{ preset.label | translate }}\n </div>\n }\n </div>\n <div class=\"sidebar-divider\"></div>\n <!-- Calendars + bottom panel -->\n <div class=\"calendars-container\">\n <div class=\"dual-calendars\">\n <!-- Left calendar -->\n <div class=\"calendar-panel\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"leftPrevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"leftNextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n </div>\n <div class=\"calendar-divider\"></div>\n <!-- Right calendar -->\n <div class=\"calendar-panel\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"rightPrevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ rightDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"rightNextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: rightDayRows }\"></ng-container>\n </div>\n </div>\n </div>\n <!-- Time Picker -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n }\n <div class=\"bottom-divider\"></div>\n <!-- Bottom panel: inputs (or legend) + actions -->\n <div class=\"bottom-panel\">\n @if (legendMarkers.length) {\n <div class=\"marker-legend\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n } @else {\n <div class=\"input-fields\">\n <div class=\"date-input\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedStart\">\n {{ _selectedStart ? formattedStartDate : ('Start date' | translate) }}\n </span>\n </div>\n <span class=\"date-separator\">–</span>\n <div class=\"date-input\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedEnd\">\n {{ _selectedEnd ? formattedEndDate : ('End date' | translate) }}\n </span>\n </div>\n </div>\n }\n <div class=\"actions\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n </div>\n }\n <!-- RANGE MOBILE: single calendar with dual inputs on top -->\n @if (type === 'range' && mobile) {\n <div class=\"single-calendar-container\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"nextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <!-- Range inputs -->\n <div class=\"mobile-range-inputs\">\n <div class=\"date-input compact\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedStart\">\n {{ _selectedStart ? formattedStartDate : ('Select date' | translate) }}\n </span>\n </div>\n <span class=\"date-separator\">–</span>\n <div class=\"date-input compact\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedEnd\">\n {{ _selectedEnd ? formattedEndDate : ('Select date' | translate) }}\n </span>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n <!-- Time Picker -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n }\n @if (legendMarkers.length) {\n <div class=\"marker-legend standalone\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n }\n <div class=\"bottom-divider\"></div>\n <div class=\"bottom-panel compact\">\n <div class=\"actions full-width\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n </div>\n }\n <!-- SINGLE DATE: single calendar + input + today button -->\n @if (type === 'single') {\n <div class=\"single-calendar-container\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"nextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <!-- Date input + Today button -->\n <div class=\"single-actions-row\">\n <div class=\"date-input flex-1\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedDate\">\n {{ _selectedDate ? formattedSelectedDate : ('Select date' | translate) }}\n </span>\n </div>\n <button class=\"btn-today\" (click)=\"goToToday()\">{{ 'Today' | translate }}</button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n <!-- Time Picker -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n }\n @if (legendMarkers.length) {\n <div class=\"marker-legend standalone single\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n }\n @if (!autoApply) {\n <div class=\"bottom-divider\"></div>\n <div class=\"bottom-panel compact\">\n <div class=\"actions full-width\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Shared time picker template -->\n<ng-template #timePickerSection>\n <div class=\"time-picker-container\">\n <div class=\"time-picker-content\">\n <span class=\"time-picker-label\">{{ 'Select a time' | translate }}</span>\n <div class=\"time-picker-row\">\n <div class=\"time-fields\">\n <!-- Hours -->\n <div class=\"time-input-group\">\n <div class=\"time-input-box\">\n <input class=\"time-input\"\n type=\"text\"\n aria-label=\"Hours\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"_hoursDisplay\"\n (input)=\"onHoursInput($event)\"\n (focus)=\"onTimeFocus($event)\"\n (blur)=\"clampHours()\"\n (keydown)=\"onTimeKeydown($event, 'hours')\"\n maxlength=\"2\" />\n <div class=\"time-arrows\">\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"incrementHours()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </button>\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"decrementHours()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </button>\n </div>\n </div>\n <span class=\"time-input-label\">{{ 'HRS' | translate }}</span>\n </div>\n\n <!-- Colon separator -->\n <div class=\"time-colon\">:</div>\n\n <!-- Minutes -->\n <div class=\"time-input-group\">\n <div class=\"time-input-box\">\n <input class=\"time-input\"\n type=\"text\"\n aria-label=\"Minutes\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"_minutesDisplay\"\n (input)=\"onMinutesInput($event)\"\n (focus)=\"onTimeFocus($event)\"\n (blur)=\"clampMinutes()\"\n (keydown)=\"onTimeKeydown($event, 'minutes')\"\n maxlength=\"2\" />\n <div class=\"time-arrows\">\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"incrementMinutes()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </button>\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"decrementMinutes()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </button>\n </div>\n </div>\n <span class=\"time-input-label\">{{ 'MIN' | translate }}</span>\n </div>\n </div>\n\n <!-- AM/PM toggle -->\n <div class=\"time-period-toggle\">\n <button class=\"time-period-btn\"\n [class.active]=\"_period === 'AM'\"\n (click)=\"setPeriod('AM')\">\n AM\n </button>\n <button class=\"time-period-btn\"\n [class.active]=\"_period === 'PM'\"\n (click)=\"setPeriod('PM')\">\n PM\n </button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- Shared calendar grid template -->\n<ng-template #calendarGrid let-dayRows>\n <div class=\"dates-grid\">\n <!-- Week day headers -->\n <div class=\"week-header\">\n @for (wd of weekDays; track wd) {\n <div class=\"cell header-cell\">{{ wd | translate }}</div>\n }\n </div>\n <!-- Day rows -->\n @for (row of dayRows; track row) {\n <div class=\"day-row\">\n @for (day of row.days; track day) {\n <div class=\"cell day-cell\"\n [class.outside]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.today]=\"isToday(day)\"\n [class.disabled]=\"day.isDisabled\"\n [class.in-range]=\"isInRange(day)\"\n [class.range-start]=\"isRangeStart(day)\"\n [class.range-end]=\"isRangeEnd(day)\"\n (click)=\"selectDay(day)\">\n <span class=\"day-number\">{{ day.lbl }}</span>\n @if (day.markerColors?.length) {\n <div class=\"marker-dots\">\n @for (c of day.markerColors; track c) {\n <span class=\"marker-dot\"\n [style.background]=\"c || null\"></span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FileUploadItem, FileUploaderProgressType } from './file-uploader.types';\n\n@Component({\n selector: 'zen-file-uploader',\n templateUrl: './zendu-file-uploader.component.html',\n styleUrls: ['./zendu-file-uploader.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFileUploaderComponent {\n\n @Input() accept: string = '*';\n @Input() multiple: boolean = true;\n @Input() maxFileSize: number = 0;\n @Input() disabled: boolean = false;\n @Input() description: string = '';\n @Input() progressType: FileUploaderProgressType = 'bar';\n @Input() files: FileUploadItem[] = [];\n\n @Output() filesSelected = new EventEmitter<File[]>();\n @Output() fileRemoved = new EventEmitter<FileUploadItem>();\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n isDragover = false;\n\n @HostListener('dragover', ['$event'])\n onDragOver(evt: DragEvent) {\n if (this.disabled) return;\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = false;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(evt: DragEvent) {\n if (this.disabled) return;\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = false;\n\n const dt = evt.dataTransfer;\n if (dt && dt.files.length) {\n const filtered = this.filterFiles(dt.files);\n if (filtered.length) {\n this.filesSelected.emit(filtered);\n }\n }\n }\n\n openFileDialog() {\n if (this.disabled) return;\n this.fileInput.nativeElement.click();\n }\n\n onFileInput(evt: Event) {\n const input = evt.target as HTMLInputElement;\n if (input.files && input.files.length) {\n const files: File[] = [];\n for (let i = 0; i < input.files.length; i++) {\n files.push(input.files[i]);\n }\n this.filesSelected.emit(files);\n }\n input.value = '';\n }\n\n removeFile(item: FileUploadItem) {\n this.fileRemoved.emit(item);\n }\n\n getFileIcon(fileType: string): string {\n switch (fileType) {\n case 'video': return 'assets/ng-zenduit/icons/film.svg';\n case 'misc': return 'assets/ng-zenduit/icons/upload-cloud.svg';\n default: return 'assets/ng-zenduit/icons/file-upload.svg';\n }\n }\n\n formatFileSize(bytes: number): string {\n if (!bytes) return '0 B';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n }\n\n private filterFiles(fileList: FileList): File[] {\n const files: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList[i];\n if (this.maxFileSize && file.size > this.maxFileSize) continue;\n if (this.accept && this.accept !== '*') {\n const accepted = this.accept.split(',').map(t => t.trim());\n const match = accepted.some(type => {\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.replace('/*', '/'));\n }\n return file.type === type;\n });\n if (!match) continue;\n }\n files.push(file);\n }\n return files;\n }\n}\n","<div class=\"zen-fu\" [class.disabled]=\"disabled\">\n <!-- Drop Zone -->\n <div class=\"drop-zone\"\n [class.dragover]=\"isDragover\"\n (click)=\"openFileDialog()\">\n <div class=\"drop-zone-icon\">\n <zen-icon src=\"assets/ng-zenduit/icons/upload-cloud.svg\"></zen-icon>\n </div>\n <div class=\"drop-zone-text\">\n <span class=\"click-text\">{{ 'Click to upload' | translate }}</span>\n <span class=\"drag-text\">{{ 'or drag and drop' | translate }}</span>\n </div>\n <p class=\"drop-zone-description\">\n {{ description || ('SVG, PNG, JPG or GIF (max. 800x400px)' | translate) }}\n </p>\n </div>\n\n <input type=\"file\"\n #fileInput\n style=\"display:none\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"onFileInput($event)\" />\n\n <!-- File Queue -->\n @if (files?.length) {\n <div class=\"file-queue\">\n <!-- Progress Bar Type -->\n @if (progressType === 'bar') {\n @for (item of files; track item) {\n <div class=\"file-item bar-type\"\n [class.complete]=\"item.status === 'complete'\">\n <div class=\"file-item-content\">\n <div class=\"file-icon-wrap\">\n <zen-icon class=\"file-icon\"\n [src]=\"getFileIcon(item.fileType)\">\n </zen-icon>\n </div>\n <div class=\"file-info\">\n <div class=\"file-text\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n <p class=\"file-size\">{{ formatFileSize(item.file.size) }}</p>\n </div>\n <div class=\"progress-row\">\n <div class=\"progress-track\">\n <div class=\"progress-fill\" [style.width.%]=\"item.progress\"></div>\n </div>\n <span class=\"progress-label\">{{ item.progress }}%</span>\n </div>\n </div>\n </div>\n @if (item.status === 'uploading') {\n <button class=\"file-action\"\n (click)=\"removeFile(item)\">\n <zen-icon class=\"trash-icon\"\n src=\"assets/ng-zenduit/icons/trash.svg\">\n </zen-icon>\n </button>\n }\n @if (item.status === 'complete') {\n <zen-icon class=\"check-icon\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n }\n </div>\n }\n }\n <!-- Progress Fill Type -->\n @if (progressType === 'fill') {\n @for (item of files; track item) {\n <div class=\"file-item fill-type\"\n >\n <div class=\"fill-bg\" [style.width.%]=\"item.progress\"></div>\n <div class=\"file-item-content\">\n <div class=\"file-icon-wrap\">\n <zen-icon class=\"file-icon\"\n [src]=\"getFileIcon(item.fileType)\">\n </zen-icon>\n </div>\n <div class=\"file-info\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n <p class=\"file-size\">{{ formatFileSize(item.file.size) }} – {{ item.progress }}% {{ 'uploaded' | translate }}</p>\n </div>\n </div>\n @if (item.status === 'uploading') {\n <zen-spinner\n class=\"file-spinner\"\n size=\"small\">\n </zen-spinner>\n }\n @if (item.status === 'complete') {\n <zen-icon class=\"check-icon\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n }\n </div>\n }\n }\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type ZenduAvatarStatusIcon = 'none' | 'online' | 'company';\n\n@Component({\n selector: 'zendu-avatar',\n templateUrl: './zendu-avatar.component.html',\n styleUrls: ['./zendu-avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarComponent {\n\n @Input() size: ZenduAvatarSize = 'md';\n @Input() src: string;\n @Input() text: string;\n @Input() statusIcon: ZenduAvatarStatusIcon = 'none';\n @Input() companyImgSrc: string;\n @Input() focused = false;\n\n get showImage(): boolean {\n return !!this.src;\n }\n\n get showText(): boolean {\n return !this.src && !!this.text;\n }\n\n get showPlaceholder(): boolean {\n return !this.src && !this.text;\n }\n\n get cssClasses(): Record<string, boolean> {\n return {\n ['zendu-avatar--' + this.size]: true,\n 'zendu-avatar--focused': this.focused\n };\n }\n}\n","<div class=\"zendu-avatar\" [ngClass]=\"cssClasses\">\n <!-- Image avatar -->\n @if (showImage) {\n <img [src]=\"src\" class=\"zendu-avatar__img\" alt=\"\" />\n }\n\n <!-- Text initials -->\n @if (showText) {\n <span class=\"zendu-avatar__text\">{{ text }}</span>\n }\n\n <!-- Placeholder user icon -->\n @if (showPlaceholder) {\n <div class=\"zendu-avatar__placeholder\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6666 17.5C16.6666 16.337 16.6666 15.7555 16.4942 15.2824C16.1544 14.3491 15.4008 13.5955 14.4675 13.2558C13.9944 13.0833 13.4129 13.0833 12.2499 13.0833H7.74992C6.58694 13.0833 6.00545 13.0833 5.53237 13.2558C4.59907 13.5955 3.84542 14.3491 3.50567 15.2824C3.33325 15.7555 3.33325 16.337 3.33325 17.5M13.7499 6.25C13.7499 8.32107 12.0710 10 9.99992 10C7.92885 10 6.24992 8.32107 6.24992 6.25C6.24992 4.17893 7.92885 2.5 9.99992 2.5C12.0710 2.5 13.7499 4.17893 13.7499 6.25Z\" stroke=\"currentColor\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- Online indicator -->\n @if (statusIcon === 'online') {\n <div class=\"zendu-avatar__online-dot\"></div>\n }\n\n <!-- Company icon -->\n @if (statusIcon === 'company') {\n <div class=\"zendu-avatar__company-icon\">\n @if (companyImgSrc) {\n <img [src]=\"companyImgSrc\" alt=\"\" />\n }\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarGroupSize = 'xs' | 'sm' | 'md';\n\n@Component({\n selector: 'zendu-avatar-group',\n templateUrl: './zendu-avatar-group.component.html',\n styleUrls: ['./zendu-avatar-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarGroupComponent {\n\n @Input() size: ZenduAvatarGroupSize = 'md';\n @Input() images: string[] = [];\n @Input() moreCount = 0;\n @Input() showAddButton = false;\n}\n","<div class=\"zendu-avatar-group\" [ngClass]=\"'zendu-avatar-group--' + size\">\n <div class=\"zendu-avatar-group__avatars\">\n @for (img of images; track img) {\n <div class=\"zendu-avatar-group__wrap\">\n <div class=\"zendu-avatar-group__avatar\">\n <img [src]=\"img\" alt=\"\" />\n </div>\n </div>\n }\n\n @if (moreCount > 0) {\n <div class=\"zendu-avatar-group__more\">\n <span>+{{ moreCount }}</span>\n </div>\n }\n </div>\n\n @if (showAddButton) {\n <div class=\"zendu-avatar-group__add-btn\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 3.333v9.334M3.333 8h9.334\" stroke=\"currentColor\" stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenduAvatarSize, ZenduAvatarStatusIcon } from './zendu-avatar.component';\n\nexport type ZenduAvatarLabelGroupSize = 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'zendu-avatar-label-group',\n templateUrl: './zendu-avatar-label-group.component.html',\n styleUrls: ['./zendu-avatar-label-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarLabelGroupComponent {\n\n @Input() size: ZenduAvatarLabelGroupSize = 'md';\n @Input() src: string;\n @Input() text: string;\n @Input() name: string;\n @Input() subtitle: string;\n @Input() statusIcon: ZenduAvatarStatusIcon = 'none';\n @Input() companyImgSrc: string;\n @Input() focused = false;\n\n get avatarSize(): ZenduAvatarSize {\n return this.size as ZenduAvatarSize;\n }\n}\n","<div class=\"zendu-avatar-label-group\" [ngClass]=\"'zendu-avatar-label-group--' + size\">\n <zendu-avatar\n [size]=\"avatarSize\"\n [src]=\"src\"\n [text]=\"text\"\n [statusIcon]=\"statusIcon\"\n [companyImgSrc]=\"companyImgSrc\"\n [focused]=\"focused\">\n </zendu-avatar>\n\n <div class=\"zendu-avatar-label-group__text\">\n <span class=\"zendu-avatar-label-group__name\">{{ name }}</span>\n @if (subtitle) {\n <span class=\"zendu-avatar-label-group__subtitle\">{{ subtitle }}</span>\n }\n </div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarProfilePhotoSize = 'md' | 'lg';\n\n@Component({\n selector: 'zendu-avatar-profile-photo',\n templateUrl: './zendu-avatar-profile-photo.component.html',\n styleUrls: ['./zendu-avatar-profile-photo.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarProfilePhotoComponent {\n\n @Input() size: ZenduAvatarProfilePhotoSize = 'lg';\n @Input() src: string;\n @Input() text: string;\n\n get showImage(): boolean {\n return !!this.src;\n }\n\n get showText(): boolean {\n return !this.src && !!this.text;\n }\n\n get showPlaceholder(): boolean {\n return !this.src && !this.text;\n }\n}\n","<div class=\"zendu-avatar-profile-photo\" [ngClass]=\"'zendu-avatar-profile-photo--' + size\">\n <!-- Image -->\n @if (showImage) {\n <img [src]=\"src\" class=\"zendu-avatar-profile-photo__img\" alt=\"\" />\n }\n\n <!-- Placeholder icon -->\n @if (showPlaceholder) {\n <div class=\"zendu-avatar-profile-photo__placeholder\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6666 17.5C16.6666 16.337 16.6666 15.7555 16.4942 15.2824C16.1544 14.3491 15.4008 13.5955 14.4675 13.2558C13.9944 13.0833 13.4129 13.0833 12.2499 13.0833H7.74992C6.58694 13.0833 6.00545 13.0833 5.53237 13.2558C4.59907 13.5955 3.84542 14.3491 3.50567 15.2824C3.33325 15.7555 3.33325 16.337 3.33325 17.5M13.7499 6.25C13.7499 8.32107 12.0710 10 9.99992 10C7.92885 10 6.24992 8.32107 6.24992 6.25C6.24992 4.17893 7.92885 2.5 9.99992 2.5C12.0710 2.5 13.7499 4.17893 13.7499 6.25Z\" stroke=\"currentColor\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- Text initials -->\n @if (showText) {\n <span class=\"zendu-avatar-profile-photo__text\">{{ text }}</span>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduSliderLabel = 'none' | 'bottom' | 'bottom-floating' | 'top-floating';\n\n@Component({\n selector: 'zendu-slider',\n templateUrl: './zendu-slider.component.html',\n styleUrls: ['./zendu-slider.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSliderComponent implements OnDestroy {\n\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() lowValue = 0;\n @Input() highValue = 100;\n @Input() label: ZenduSliderLabel = 'none';\n @Input() suffix = '%';\n @Input() disabled = false;\n\n @Output() lowValueChange = new EventEmitter<number>();\n @Output() highValueChange = new EventEmitter<number>();\n\n @ViewChild('track', { static: true }) trackRef: ElementRef<HTMLElement>;\n\n private activeThumb: 'low' | 'high' | null = null;\n private boundMouseMove = this.onMouseMove.bind(this);\n private boundMouseUp = this.onMouseUp.bind(this);\n private boundTouchMove = this.onTouchMove.bind(this);\n private boundTouchEnd = this.onTouchEnd.bind(this);\n\n get lowPercent(): number {\n return ((this.lowValue - this.min) / (this.max - this.min)) * 100;\n }\n\n get highPercent(): number {\n return ((this.highValue - this.min) / (this.max - this.min)) * 100;\n }\n\n formatValue(value: number): string {\n return `${value}${this.suffix}`;\n }\n\n onTrackClick(event: MouseEvent): void {\n if (this.disabled) return;\n const percent = this.getPercentFromEvent(event);\n const value = this.percentToValue(percent);\n const distToLow = Math.abs(value - this.lowValue);\n const distToHigh = Math.abs(value - this.highValue);\n if (distToLow <= distToHigh) {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n onThumbMouseDown(event: MouseEvent, thumb: 'low' | 'high'): void {\n if (this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.activeThumb = thumb;\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('mouseup', this.boundMouseUp);\n }\n\n onThumbTouchStart(event: TouchEvent, thumb: 'low' | 'high'): void {\n if (this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.activeThumb = thumb;\n document.addEventListener('touchmove', this.boundTouchMove, { passive: false });\n document.addEventListener('touchend', this.boundTouchEnd);\n }\n\n ngOnDestroy(): void {\n this.removeListeners();\n }\n\n private onMouseMove(event: MouseEvent): void {\n if (!this.activeThumb) return;\n const percent = this.getPercentFromEvent(event);\n const value = this.percentToValue(percent);\n if (this.activeThumb === 'low') {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n private onMouseUp(): void {\n this.activeThumb = null;\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n }\n\n private onTouchMove(event: TouchEvent): void {\n if (!this.activeThumb || !event.touches.length) return;\n event.preventDefault();\n const touch = event.touches[0];\n const percent = this.getPercentFromTouch(touch);\n const value = this.percentToValue(percent);\n if (this.activeThumb === 'low') {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n private onTouchEnd(): void {\n this.activeThumb = null;\n document.removeEventListener('touchmove', this.boundTouchMove);\n document.removeEventListener('touchend', this.boundTouchEnd);\n }\n\n private getPercentFromEvent(event: MouseEvent): number {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n return Math.max(0, Math.min(100, (x / rect.width) * 100));\n }\n\n private getPercentFromTouch(touch: Touch): number {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n const x = touch.clientX - rect.left;\n return Math.max(0, Math.min(100, (x / rect.width) * 100));\n }\n\n private percentToValue(percent: number): number {\n const raw = this.min + (percent / 100) * (this.max - this.min);\n return Math.round(raw / this.step) * this.step;\n }\n\n private updateLow(value: number): void {\n value = Math.max(this.min, Math.min(value, this.highValue));\n if (value !== this.lowValue) {\n this.lowValue = value;\n this.lowValueChange.emit(value);\n }\n }\n\n private updateHigh(value: number): void {\n value = Math.max(this.lowValue, Math.min(value, this.max));\n if (value !== this.highValue) {\n this.highValue = value;\n this.highValueChange.emit(value);\n }\n }\n\n private removeListeners(): void {\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n document.removeEventListener('touchmove', this.boundTouchMove);\n document.removeEventListener('touchend', this.boundTouchEnd);\n }\n}\n","<div class=\"zendu-slider\" [class.zendu-slider--disabled]=\"disabled\">\n\n <!-- Top floating labels -->\n @if (label === 'top-floating') {\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--top\" [style.left.%]=\"lowPercent\">\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(lowValue) }}</div>\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--down\"></div>\n </div>\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--top\" [style.left.%]=\"highPercent\">\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(highValue) }}</div>\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--down\"></div>\n </div>\n }\n\n <!-- Track -->\n <div class=\"zendu-slider__track\" #track (mousedown)=\"onTrackClick($event)\">\n <div class=\"zendu-slider__track-bg\"></div>\n <div class=\"zendu-slider__track-fill\"\n [style.left.%]=\"lowPercent\"\n [style.right.%]=\"100 - highPercent\"></div>\n\n <!-- Low thumb -->\n <div class=\"zendu-slider__thumb\"\n [style.left.%]=\"lowPercent\"\n (mousedown)=\"onThumbMouseDown($event, 'low')\"\n (touchstart)=\"onThumbTouchStart($event, 'low')\"></div>\n\n <!-- High thumb -->\n <div class=\"zendu-slider__thumb\"\n [style.left.%]=\"highPercent\"\n (mousedown)=\"onThumbMouseDown($event, 'high')\"\n (touchstart)=\"onThumbTouchStart($event, 'high')\"></div>\n </div>\n\n <!-- Bottom floating labels -->\n @if (label === 'bottom-floating') {\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--bottom\" [style.left.%]=\"lowPercent\">\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--up\"></div>\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(lowValue) }}</div>\n </div>\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--bottom\" [style.left.%]=\"highPercent\">\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--up\"></div>\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(highValue) }}</div>\n </div>\n }\n\n <!-- Bottom plain labels -->\n @if (label === 'bottom') {\n <div class=\"zendu-slider__label zendu-slider__label--bottom\" [style.left.%]=\"lowPercent\">\n {{ formatValue(lowValue) }}\n </div>\n <div class=\"zendu-slider__label zendu-slider__label--bottom\" [style.left.%]=\"highPercent\">\n {{ formatValue(highValue) }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenBadgeSize = 'sm' | 'md' | 'lg';\nexport type ZenBadgeColor =\n | 'gray' | 'primary' | 'error' | 'warning' | 'success'\n | 'blue-gray' | 'blue-light' | 'blue' | 'indigo' | 'purple'\n | 'pink' | 'rose' | 'orange';\nexport type ZenBadgeIconDirection = 'left' | 'right';\nexport type ZenBadgeGroupTheme = 'light' | 'medium' | 'dark';\nexport type ZenBadgeGroupBadgePosition = 'leading' | 'trailing';\n\n@Component({\n selector: 'zen-badge',\n templateUrl: './zen-badge.component.html',\n styleUrls: ['./zen-badge.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenBadgeComponent {\n\n @Input() size: ZenBadgeSize = 'md';\n @Input() color: ZenBadgeColor = 'primary';\n @Input() dot = false;\n @Input() removable = false;\n @Input() iconOnly = false;\n\n /** Icon name (resolved via zen-icon's iconBasePath) */\n @Input() icon: string;\n /** Direct icon src URL (use instead of name) */\n @Input() iconSrc: string;\n /** Icon placement direction */\n @Input() iconDirection: ZenBadgeIconDirection = 'left';\n\n /** Image src (country flag or avatar) — shown as a round image left of text */\n @Input() imgSrc: string;\n\n /** Badge group mode — renders as a pill with inner badge + message */\n @Input() group = false;\n /** Badge group: inner badge label text */\n @Input() badgeLabel: string;\n /** Badge group: badge position (leading = left, trailing = right) */\n @Input() badgePosition: ZenBadgeGroupBadgePosition = 'leading';\n /** Badge group: theme variant */\n @Input() theme: ZenBadgeGroupTheme = 'light';\n /** Badge group: show arrow icon */\n @Input() showIcon = false;\n\n @Output() remove = new EventEmitter<void>();\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n get hasIcon(): boolean {\n return !!(this.icon || this.iconSrc);\n }\n\n get hostClasses(): string {\n const classes = [\n 'zen-badge',\n `zen-badge--${this.size}`,\n `zen-badge--${this.color}`,\n ];\n if (this.dot) classes.push('zen-badge--dot');\n if (this.removable) classes.push('zen-badge--removable');\n if (this.iconOnly) classes.push('zen-badge--icon-only');\n if (this.imgSrc) classes.push('zen-badge--has-img');\n if (this.hasIcon && !this.iconOnly && this.iconDirection === 'left') classes.push('zen-badge--icon-left');\n if ((this.hasIcon && !this.iconOnly && this.iconDirection === 'right') || this.removable) classes.push('zen-badge--icon-right');\n return classes.join(' ');\n }\n\n get groupClasses(): string {\n const classes = [\n 'zen-badge-group',\n `zen-badge-group--${this.size}`,\n `zen-badge-group--${this.color}`,\n `zen-badge-group--${this.theme}`,\n `zen-badge-group--${this.badgePosition}`,\n ];\n if (this.showIcon) classes.push('zen-badge-group--has-icon');\n return classes.join(' ');\n }\n\n onClick(event: MouseEvent): void {\n this.clicked.emit(event);\n }\n\n onRemove(event: MouseEvent): void {\n event.stopPropagation();\n this.remove.emit();\n }\n}\n","<!-- Badge Group mode -->\n@if (group) {\n <div [class]=\"groupClasses\" (click)=\"onClick($event)\">\n <!-- Leading: inner badge first -->\n @if (badgePosition === 'leading') {\n <span class=\"zen-badge-group__badge\">{{ badgeLabel }}</span>\n <span class=\"zen-badge-group__content\">\n <span class=\"zen-badge-group__message\"><ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container></span>\n @if (showIcon) {\n <zen-icon class=\"zen-badge-group__icon\" name=\"arrow-right\"></zen-icon>\n }\n </span>\n }\n <!-- Trailing: message first, badge with optional icon last -->\n @if (badgePosition === 'trailing') {\n <span class=\"zen-badge-group__message\"><ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container></span>\n <span class=\"zen-badge-group__badge\">\n {{ badgeLabel }}\n @if (showIcon) {\n <zen-icon class=\"zen-badge-group__badge-icon\" name=\"arrow-right\"></zen-icon>\n }\n </span>\n }\n </div>\n} @else {\n <div [class]=\"hostClasses\" (click)=\"onClick($event)\">\n @if (dot) {\n <span class=\"zen-badge__dot\"></span>\n }\n @if (imgSrc) {\n <img class=\"zen-badge__img\" [src]=\"imgSrc\" alt=\"\">\n }\n @if (hasIcon && !iconOnly && iconDirection === 'left') {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (!iconOnly) {\n <span class=\"zen-badge__text\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </span>\n }\n @if (iconOnly && hasIcon) {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (hasIcon && !iconOnly && iconDirection === 'right') {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (removable) {\n <button class=\"zen-badge__close\" (click)=\"onRemove($event)\" type=\"button\" aria-label=\"Remove\">\n <zen-icon class=\"zen-badge__icon\" name=\"x\"></zen-icon>\n </button>\n }\n </div>\n}\n\n<!-- Standard badge mode -->\n\n<ng-template #contentTpl><ng-content></ng-content></ng-template>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\n\nexport interface DropdownMenuItem {\n label?: string;\n icon?: string;\n shortcut?: string;\n checked?: boolean;\n divider?: boolean;\n disabled?: boolean;\n}\n\nexport interface DropdownMenuHeader {\n name: string;\n email: string;\n avatarSrc?: string;\n}\n\nexport type DropdownTriggerType = 'list-header' | 'icon' | 'button' | 'avatar';\n\n@Component({\n selector: 'zen-dropdown-menu',\n templateUrl: './zen-dropdown-menu.component.html',\n styleUrls: ['./zen-dropdown-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenDropdownMenuComponent implements AfterViewInit, OnDestroy {\n\n // Trigger-related inputs\n @Input() triggerType: DropdownTriggerType = 'button';\n @Input() buttonText: string = 'Account';\n @Input() avatarSrc?: string;\n\n // Menu-related inputs\n @Input() items: DropdownMenuItem[] = [];\n @Input() showCheckbox: boolean = false;\n @Input() showShortcut: boolean = false;\n @Input() showIcon: boolean = false;\n @Input() showCount: boolean = false;\n @Input() headerUser?: DropdownMenuHeader;\n @Input() showHeader: boolean = true;\n\n // Positioning inputs\n @Input() position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right' | 'bottom' | '' = '';\n @Input() offset: number = 0;\n @Input() closeOnOutsideClick: boolean = true;\n @Input() scrollHandler: string = '';\n\n @Output() itemClick = new EventEmitter<DropdownMenuItem>();\n @Output() itemCheck = new EventEmitter<{item: DropdownMenuItem, checked: boolean}>();\n @Output() openChange = new EventEmitter<boolean>();\n @Output() onClose = new EventEmitter();\n\n @ViewChild('dropdown', { static: false }) dropdownElement!: ElementRef<HTMLElement>;\n\n isOpen = false;\n dropdownVisible = false;\n private scrollSubscription: Subscription = new Subscription();\n\n constructor(private elementRef: ElementRef) {}\n\n ngAfterViewInit(): void {\n if (this.scrollHandler) {\n this.scrollSubscription = fromEvent(\n document.getElementsByClassName(this.scrollHandler)[0],\n 'scroll'\n ).subscribe(() => {\n this.closeDropdown();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.scrollSubscription.unsubscribe();\n }\n\n toggleDropdown(): void {\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n openDropdown(): void {\n this.isOpen = true;\n this.openChange.emit(this.isOpen);\n \n // Position dropdown before making it visible to prevent jerk\n setTimeout(() => {\n if (this.dropdownElement) {\n this.updateDropdownPosition();\n this.dropdownVisible = true;\n }\n }, 0);\n }\n\n closeDropdown(): void {\n if (this.isOpen) {\n this.dropdownVisible = false;\n this.isOpen = false;\n this.openChange.emit(this.isOpen);\n this.onClose.emit();\n }\n }\n\n updateDropdownPosition(): void {\n if (!this.dropdownElement) return;\n\n const container = this.elementRef.nativeElement as HTMLElement;\n const dropdown = this.dropdownElement.nativeElement;\n const pos = container.getBoundingClientRect();\n \n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const dropdownWidth = 240; // Dropdown width\n const position = this.position || 'bottom-right'; // Default to bottom-right\n\n // Set positioning properties\n dropdown.style.position = 'fixed';\n dropdown.style.zIndex = '1000';\n dropdown.style.minWidth = '240px';\n\n // Parse position string to determine vertical and horizontal alignment\n const isTop = position.includes('top');\n const isBottom = position.includes('bottom') || (!isTop && position !== 'left' && position !== 'right');\n const isLeft = position.includes('left') || position === 'left';\n const isRight = position.includes('right') || position === 'right';\n\n // Vertical positioning\n if (isTop) {\n // Position above the trigger\n dropdown.style.bottom = `${viewportHeight - pos.top + 8}px`;\n dropdown.style.top = 'unset';\n } else {\n // Position below the trigger (default)\n dropdown.style.top = `${pos.bottom + 8}px`;\n dropdown.style.bottom = 'unset';\n }\n\n // Horizontal positioning\n // 'right' means dropdown extends to the right (left edge aligned with trigger's left edge)\n // 'left' means dropdown extends to the left (right edge aligned with trigger's right edge)\n if (isRight) {\n // Dropdown extends rightward: align left edges\n dropdown.style.left = `${pos.left + this.offset}px`;\n dropdown.style.right = 'unset';\n\n // Make sure dropdown doesn't go off-screen on the right\n const dropdownRight = pos.left + dropdownWidth;\n if (dropdownRight > viewportWidth) {\n dropdown.style.right = `${Math.max(8, viewportWidth - pos.right + this.offset)}px`;\n dropdown.style.left = 'unset';\n }\n } else if (isLeft) {\n // Dropdown extends leftward: align right edges\n const rightPosition = viewportWidth - pos.right + this.offset;\n dropdown.style.right = `${rightPosition}px`;\n dropdown.style.left = 'unset';\n\n // Make sure dropdown doesn't go off-screen on the left\n const dropdownLeft = pos.right - dropdownWidth;\n if (dropdownLeft < 0) {\n dropdown.style.left = `${Math.max(8, pos.left + this.offset)}px`;\n dropdown.style.right = 'unset';\n }\n }\n\n // Legacy support for old position values\n if (position === 'bottom') {\n dropdown.style.left = `${pos.left + this.offset}px`;\n dropdown.style.right = 'unset';\n }\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.closeOnOutsideClick) return;\n if (!document.body.contains(event.target as Node)) return;\n if (!this.dropdownElement) return;\n if (!this.isOpen) return;\n if (this.dropdownElement.nativeElement.contains(event.target as Node)) return;\n if (this.elementRef.nativeElement.contains(event.target as Node)) return;\n \n this.closeDropdown();\n }\n\n @HostListener('window:wheel', ['$event'])\n handleMouseScroll(event: WheelEvent): void {\n if (!this.dropdownElement || !this.isOpen) return;\n if (this.dropdownElement.nativeElement.contains(event.target as Node)) return;\n \n this.closeDropdown();\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent): void {\n if (!this.isOpen) return;\n \n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Escape'\n ) {\n this.closeDropdown();\n }\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this.isOpen && this.dropdownElement) {\n this.updateDropdownPosition();\n }\n }\n\n // Trigger type getters\n get showListHeader(): boolean {\n return this.triggerType === 'list-header';\n }\n\n get showIconTrigger(): boolean {\n return this.triggerType === 'icon';\n }\n\n get showButton(): boolean {\n return this.triggerType === 'button';\n }\n\n get showAvatar(): boolean {\n return this.triggerType === 'avatar';\n }\n\n onItemClick(item: DropdownMenuItem, event?: MouseEvent): void {\n if (!item.disabled && !item.divider) {\n // If showCheckbox is true, toggle the checkbox state when clicking the item\n if (this.showCheckbox && event) {\n // Check if click was directly on checkbox (which will have stopPropagation)\n const target = event.target as HTMLElement;\n const isCheckboxClick = target.closest('zen-checkbox');\n if (!isCheckboxClick) {\n // Toggle checkbox when clicking elsewhere on the item\n item.checked = !item.checked;\n this.itemCheck.emit({ item, checked: item.checked });\n }\n } else {\n // For non-checkbox items, emit the click event\n this.itemClick.emit(item);\n }\n }\n }\n\n onCheckboxChange(item: DropdownMenuItem, checked: boolean): void {\n if (!item.disabled) {\n item.checked = checked;\n this.itemCheck.emit({ item, checked });\n }\n }\n\n}","<div class=\"zen-dropdown-menu\" [class.zen-dropdown-menu--open]=\"isOpen\">\n\n <!-- TRIGGERS SECTION -->\n\n <!-- List Header Trigger -->\n @if (showListHeader) {\n <div\n class=\"zen-dropdown-menu__list-header\"\n (click)=\"toggleDropdown()\">\n <div class=\"zen-dropdown-menu__user-info\">\n <img\n class=\"zen-dropdown-menu__user-avatar\"\n [src]=\"headerUser?.avatarSrc\"\n [alt]=\"headerUser?.name || 'User'\">\n <div class=\"zen-dropdown-menu__user-details\">\n <div class=\"zen-dropdown-menu__user-name text text-sm text-weight-medium\">{{ (headerUser?.name || 'User') | translate }}</div>\n <div class=\"zen-dropdown-menu__user-email text text-sm text-weight-regular\">{{ headerUser?.email }}</div>\n </div>\n </div>\n </div>\n }\n\n <!-- Icon Button Trigger -->\n @if (showIconTrigger) {\n <button\n class=\"zen-dropdown-menu__icon-button\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <zen-icon name=\"more-vertical\" [customColor]=\"'#667085'\"></zen-icon>\n </button>\n }\n\n <!-- Button Trigger -->\n @if (showButton) {\n <button\n class=\"zen-dropdown-menu__button\"\n [class.zen-dropdown-menu__button--focused]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <span class=\"zen-dropdown-menu__button-text text text-sm text-weight-medium\">{{ buttonText | translate }}</span>\n <zen-icon\n [name]=\"isOpen ? 'chevron-up' : 'chevron-down'\"\n [customColor]=\"'#667085'\"\n class=\"zen-dropdown-menu__button-icon\">\n </zen-icon>\n </button>\n }\n\n <!-- Avatar Trigger -->\n @if (showAvatar) {\n <button\n class=\"zen-dropdown-menu__avatar\"\n [class.zen-dropdown-menu__avatar--focused]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <img\n class=\"zen-dropdown-menu__avatar-img\"\n [src]=\"avatarSrc\"\n alt=\"User Avatar\">\n </button>\n }\n\n <!-- DROPDOWN CONTENT SECTION -->\n @if (isOpen) {\n <div class=\"zen-dropdown-menu__dropdown\" #dropdown\n [style.position]=\"'fixed'\"\n [style.opacity]=\"dropdownVisible ? 1 : 0\"\n [style.visibility]=\"dropdownVisible ? 'visible' : 'hidden'\">\n <!-- Header Section -->\n @if (showHeader && headerUser) {\n <div class=\"zen-dropdown-menu__header\">\n <div class=\"zen-dropdown-menu__header-info\">\n <img\n class=\"zen-dropdown-menu__header-avatar\"\n [src]=\"headerUser.avatarSrc\"\n [alt]=\"headerUser.name\">\n <div class=\"zen-dropdown-menu__header-details\">\n <div class=\"zen-dropdown-menu__header-name text text-sm text-weight-medium\">{{ headerUser.name | translate }}</div>\n <div class=\"zen-dropdown-menu__header-email text text-sm text-weight-regular\">{{ headerUser.email }}</div>\n </div>\n </div>\n </div>\n }\n <!-- Divider after header -->\n @if (showHeader && headerUser) {\n <div class=\"zen-dropdown-menu__divider\"></div>\n }\n <!-- Menu Items -->\n <div class=\"zen-dropdown-menu__content\">\n @for (item of items; track item) {\n <!-- Divider -->\n @if (item.divider) {\n <div class=\"zen-dropdown-menu__divider\"></div>\n }\n <!-- Menu Item -->\n @if (!item.divider) {\n <div\n class=\"zen-dropdown-menu__item\"\n [class.zen-dropdown-menu__item--disabled]=\"item.disabled\"\n (click)=\"onItemClick(item, $event)\">\n <!-- Checkbox variant -->\n @if (showCheckbox) {\n <zen-checkbox\n class=\"zen-dropdown-menu__checkbox\"\n [checked]=\"item.checked || false\"\n [disabled]=\"item.disabled\"\n [size]=\"'sm'\"\n [label]=\"''\"\n (checkedChange)=\"onCheckboxChange(item, $event)\"\n (click)=\"$event.stopPropagation()\">\n </zen-checkbox>\n }\n <!-- Icon -->\n @if (showIcon && item.icon) {\n <zen-icon\n class=\"zen-dropdown-menu__item-icon\"\n [name]=\"item.icon\"\n [customColor]=\"'#344054'\">\n </zen-icon>\n }\n <!-- Item Content -->\n <div class=\"zen-dropdown-menu__item-content\">\n <!-- Label -->\n <span class=\"zen-dropdown-menu__label text text-sm text-weight-regular\">\n {{ item.label | translate }}\n </span>\n <!-- Count number (shown at the end of the row) -->\n @if (showCount && item.shortcut) {\n <span\n class=\"zen-dropdown-menu__count text text-xs text-weight-regular\">\n {{ item.shortcut }}\n </span>\n }\n <!-- Shortcut -->\n @if (showShortcut && item.shortcut && !showCount) {\n <span\n class=\"zen-dropdown-menu__shortcut text text-xs text-weight-regular\">\n {{ item.shortcut | translate }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n\n</div>","import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\n\nexport type ZenTooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right';\nexport type ZenTooltipTheme = 'dark' | 'light';\n\n@Component({\n selector: 'zen-tooltip-popup',\n templateUrl: './zen-tooltip.component.html',\n styleUrls: ['./zen-tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class ZenTooltipPopupComponent {\n @Input() text = '';\n @Input() supportingText = '';\n @Input() theme: ZenTooltipTheme = 'dark';\n @Input() position: ZenTooltipPosition = 'top';\n\n get arrowPosition(): string {\n switch (this.position) {\n case 'top': return 'bottom-center';\n case 'bottom': return 'top-center';\n case 'left': return 'right';\n case 'right': return 'left';\n case 'top-left': return 'bottom-left';\n case 'top-right': return 'bottom-right';\n default: return 'bottom-center';\n }\n }\n\n get hasSupportingText(): boolean {\n return !!this.supportingText;\n }\n}\n","<div class=\"zen-tooltip\"\n [class.zen-tooltip--dark]=\"theme === 'dark'\"\n [class.zen-tooltip--light]=\"theme === 'light'\"\n [class.zen-tooltip--has-supporting]=\"hasSupportingText\"\n [attr.data-arrow]=\"arrowPosition\">\n\n <!-- Arrow: top (for bottom tooltip) — points up toward element -->\n @if (arrowPosition === 'top-center') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--top\"\n width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 6L6.59 0.91C7.37 0.13 8.63 0.13 9.41 0.91L16 6H0Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Arrow: left (for right tooltip) — points left toward element -->\n @if (arrowPosition === 'left') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--left\"\n width=\"6\" height=\"16\" viewBox=\"0 0 6 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 0L0.91 6.59C0.13 7.37 0.13 8.63 0.91 9.41L6 16V0Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Content -->\n <div class=\"zen-tooltip__content\">\n <p class=\"zen-tooltip__title\">{{ text }}</p>\n @if (hasSupportingText) {\n <p class=\"zen-tooltip__supporting\">{{ supportingText }}</p>\n }\n </div>\n\n <!-- Arrow: bottom (for top tooltip) — points down toward element -->\n @if (arrowPosition === 'bottom-center' || arrowPosition === 'bottom-left' || arrowPosition === 'bottom-right') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--bottom\"\n [class.zen-tooltip__arrow--bottom-left]=\"arrowPosition === 'bottom-left'\"\n [class.zen-tooltip__arrow--bottom-right]=\"arrowPosition === 'bottom-right'\"\n width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16 0L9.41 5.09C8.63 5.87 7.37 5.87 6.59 5.09L0 0H16Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Arrow: right (for left tooltip) — points right toward element -->\n @if (arrowPosition === 'right') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--right\"\n width=\"6\" height=\"16\" viewBox=\"0 0 6 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 16L5.09 9.41C5.87 8.63 5.87 7.37 5.09 6.59L0 0V16Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n</div>\n","import {\n Directive,\n Input,\n ElementRef,\n OnDestroy,\n ComponentRef,\n ViewContainerRef,\n HostListener,\n} from '@angular/core';\nimport {\n Overlay,\n OverlayRef,\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ZenTooltipPopupComponent, ZenTooltipPosition, ZenTooltipTheme } from './zen-tooltip.component';\n\n@Directive({\n selector: '[zenTooltip]',\n standalone: false\n})\nexport class ZenTooltipDirective implements OnDestroy {\n\n @Input('zenTooltip') text = '';\n @Input() tooltipSupportingText = '';\n @Input() tooltipPosition: ZenTooltipPosition = 'top';\n @Input() tooltipTheme: ZenTooltipTheme = 'dark';\n @Input() tooltipDisabled = false;\n\n private _overlayRef: OverlayRef | null = null;\n private _tooltipRef: ComponentRef<ZenTooltipPopupComponent> | null = null;\n\n constructor(\n private _overlay: Overlay,\n private _elementRef: ElementRef,\n private _viewContainerRef: ViewContainerRef,\n ) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltipDisabled || !this.text) return;\n this._show();\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this._hide();\n }\n\n @HostListener('focus')\n onFocus(): void {\n if (this.tooltipDisabled || !this.text) return;\n this._show();\n }\n\n @HostListener('blur')\n onBlur(): void {\n this._hide();\n }\n\n ngOnDestroy(): void {\n this._hide();\n }\n\n private _show(): void {\n if (this._overlayRef) return;\n\n const positionStrategy = this._getPositionStrategy();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.close(),\n panelClass: 'zen-tooltip-overlay',\n });\n\n const portal = new ComponentPortal(\n ZenTooltipPopupComponent,\n this._viewContainerRef\n );\n\n this._tooltipRef = this._overlayRef.attach(portal);\n this._tooltipRef.instance.text = this.text;\n this._tooltipRef.instance.supportingText = this.tooltipSupportingText;\n this._tooltipRef.instance.theme = this.tooltipTheme;\n this._tooltipRef.instance.position = this.tooltipPosition;\n this._tooltipRef.changeDetectorRef.markForCheck();\n }\n\n private _hide(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n this._tooltipRef = null;\n }\n }\n\n private _getPositionStrategy(): FlexibleConnectedPositionStrategy {\n const positions = this._getPositions();\n\n return this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n\n private _getPositions(): ConnectedPosition[] {\n const offset = 4;\n\n switch (this.tooltipPosition) {\n case 'top':\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n ];\n case 'bottom':\n return [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n ];\n case 'left':\n return [\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n ];\n case 'right':\n return [\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n ];\n case 'top-left':\n return [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\n ];\n case 'top-right':\n return [\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },\n ];\n default:\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n ];\n }\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenEldStatusType = 'on-duty' | 'off-duty' | 'driving' | 'sleeper' | 'personal-conveyance' | 'yard-move';\n\nconst STATUS_ABBREVIATIONS: Record<ZenEldStatusType, string> = {\n 'on-duty': 'ON',\n 'off-duty': 'OFF',\n 'driving': 'D',\n 'sleeper': 'SB',\n 'personal-conveyance': 'PC',\n 'yard-move': 'YM',\n};\n\n@Component({\n selector: 'zen-eld-status',\n templateUrl: './zen-eld-status.component.html',\n styleUrls: ['./zen-eld-status.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenEldStatusComponent {\n\n @Input() status: ZenEldStatusType = 'off-duty';\n\n get hostClasses(): string {\n return `zen-eld-status zen-eld-status--${this.status}`;\n }\n\n get abbreviation(): string {\n return STATUS_ABBREVIATIONS[this.status] || 'OFF';\n }\n}\n","<span [class]=\"hostClasses\">{{ abbreviation }}</span>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-nav-search',\n templateUrl: './zen-nav-search.component.html',\n styleUrls: ['./zen-nav-search.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenNavSearchComponent {\n\n @Input() placeholder = 'Search';\n @Input() value = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() search = new EventEmitter<string>();\n\n hovered = false;\n\n get hostClasses(): string {\n const classes = ['zen-nav-search'];\n if (this.hovered) classes.push('zen-nav-search--hover');\n return classes.join(' ');\n }\n\n onInput(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.value = val;\n this.valueChange.emit(val);\n }\n\n onSearch(): void {\n this.search.emit(this.value);\n }\n}\n","<div [class]=\"hostClasses\"\n (mouseenter)=\"hovered = true\"\n (mouseleave)=\"hovered = false\">\n <zen-icon class=\"zen-nav-search__icon\" name=\"search\" [customColor]=\"'#D0D5DD'\"></zen-icon>\n <input class=\"zen-nav-search__input\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (keyup.enter)=\"onSearch()\" />\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-submodule-item',\n templateUrl: './zen-submodule-item.component.html',\n styleUrls: ['./zen-submodule-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSubmoduleItemComponent {\n\n @Input() label = 'Submodule';\n @Input() icon: string;\n @Input() current = false;\n\n @Output() activate = new EventEmitter<void>();\n\n get hostClasses(): string {\n const classes = ['zen-submodule-item'];\n if (this.current) classes.push('zen-submodule-item--current');\n return classes.join(' ');\n }\n\n get iconColor(): string {\n return this.current ? '#FFFFFF' : '#667085';\n }\n\n onActivate(): void {\n this.activate.emit();\n }\n}\n","<button [class]=\"hostClasses\" (click)=\"onActivate()\" type=\"button\">\n @if (icon) {\n <zen-icon class=\"zen-submodule-item__icon\"\n [name]=\"icon\" [customColor]=\"iconColor\"></zen-icon>\n }\n <span class=\"zen-submodule-item__label\">{{ label }}</span>\n</button>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenEldStatusType } from '../eld-status/zen-eld-status.component';\n\nexport type ZenSubpageItemType = 'vehicle' | 'driver';\nexport type ZenSubpageItemState = 'default' | 'hover' | 'focused';\n\n@Component({\n selector: 'zen-subpage-item',\n templateUrl: './zen-subpage-item.component.html',\n styleUrls: ['./zen-subpage-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSubpageItemComponent {\n\n @Input() type: ZenSubpageItemType = 'vehicle';\n @Input() state: ZenSubpageItemState = 'default';\n @Input() label = '';\n @Input() eldStatus: ZenEldStatusType;\n\n @Output() activate = new EventEmitter<void>();\n\n private _hovered = false;\n\n get hostClasses(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n const classes = [\n 'zen-subpage-item',\n `zen-subpage-item--${this.type}`,\n `zen-subpage-item--${activeState}`,\n ];\n return classes.join(' ');\n }\n\n get typeIcon(): string {\n return this.type === 'vehicle' ? 'truck' : 'user';\n }\n\n get iconColor(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n return activeState === 'focused' ? '#FFFFFF' : '#1D2939';\n }\n\n onActivate(): void {\n this.activate.emit();\n }\n\n onMouseEnter(): void {\n this._hovered = true;\n }\n\n onMouseLeave(): void {\n this._hovered = false;\n }\n}\n","<div [class]=\"hostClasses\"\n (click)=\"onActivate()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <zen-icon class=\"zen-subpage-item__icon\"\n [name]=\"typeIcon\"\n [customColor]=\"iconColor\"></zen-icon>\n <span class=\"zen-subpage-item__label\">{{ label }}</span>\n @if (type === 'driver' && eldStatus) {\n <zen-eld-status\n [status]=\"eldStatus\"\n class=\"zen-subpage-item__eld\"></zen-eld-status>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenModulePopupModule =\n | 'fleet' | 'safety' | 'operations' | 'reports'\n | 'bus' | 'fuel' | 'maintain' | 'efficiency' | 'inventory' | 'more';\n\nexport interface ZenModulePopupItem {\n label: string;\n route?: string;\n tag?: unknown;\n}\n\nconst MODULE_LABELS: Record<ZenModulePopupModule, string> = {\n fleet: 'Fleet',\n safety: 'Safety',\n operations: 'Operate',\n reports: 'Reports',\n bus: 'Bus',\n fuel: 'Fuel',\n maintain: 'Maintain',\n efficiency: 'Efficiency',\n inventory: 'Inventory',\n more: 'More',\n};\n\nconst MODULE_ICONS: Record<ZenModulePopupModule, string> = {\n fleet: 'truck',\n safety: 'shield',\n operations: 'briefcase',\n reports: 'bar-chart-2',\n bus: 'bus',\n fuel: 'droplet',\n maintain: 'tool',\n efficiency: 'trending-up',\n inventory: 'package',\n more: 'more-vertical',\n};\n\n@Component({\n selector: 'zen-module-popup',\n templateUrl: './zen-module-popup.component.html',\n styleUrls: ['./zen-module-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenModulePopupComponent {\n\n @Input() module: ZenModulePopupModule = 'fleet';\n @Input() items: ZenModulePopupItem[] = [];\n @Input() isOpen = false;\n\n @Output() itemClick = new EventEmitter<ZenModulePopupItem>();\n @Output() close = new EventEmitter<void>();\n\n constructor(private _elementRef: ElementRef) {}\n\n get moduleLabel(): string {\n return MODULE_LABELS[this.module] || this.module;\n }\n\n get moduleIcon(): string {\n return MODULE_ICONS[this.module] || 'circle';\n }\n\n get hostClasses(): string {\n const classes = ['zen-module-popup'];\n if (this.module === 'more') classes.push('zen-module-popup--more');\n return classes.join(' ');\n }\n\n onItemClick(item: ZenModulePopupItem): void {\n this.itemClick.emit(item);\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.isOpen && !this._elementRef.nativeElement.contains(event.target)) {\n this.close.emit();\n }\n }\n}\n","@if (isOpen) {\n <div [class]=\"hostClasses\">\n <!-- Header -->\n <div class=\"zen-module-popup__header\">\n <zen-icon class=\"zen-module-popup__header-icon\"\n [name]=\"moduleIcon\"\n [customColor]=\"'#98A2B3'\"></zen-icon>\n <span class=\"zen-module-popup__header-label\">{{ moduleLabel }}</span>\n </div>\n <div class=\"zen-module-popup__divider\"></div>\n <!-- Items -->\n <div class=\"zen-module-popup__items\">\n @for (item of items; track item) {\n <div\n class=\"zen-module-popup__item\"\n (click)=\"onItemClick(item)\">\n {{ item.label }}\n </div>\n }\n </div>\n </div>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ElementRef,\n AfterViewInit,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { ChartConfiguration, ChartData, ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { ZenChartStyle, ZenChartLegend, ZenChartDataset } from './zen-chart.types';\n\nconst DEFAULT_LINE_COLORS = ['#136AB6', '#48A2E8', '#12497A'];\nconst DEFAULT_BAR_COLORS = ['#105494', '#2188D9', '#88C1F1'];\n\n@Component({\n selector: 'zen-chart',\n templateUrl: './zen-chart.component.html',\n styleUrls: ['./zen-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenChartComponent implements OnChanges, AfterViewInit {\n\n @Input() chartStyle: ZenChartStyle = 'line';\n @Input() legend: ZenChartLegend = 'false';\n @Input() axisLabels: boolean = true;\n @Input() labels: string[] = [];\n @Input() datasets: ZenChartDataset[] = [];\n @Input() xAxisLabel: string = '';\n @Input() yAxisLabel: string = '';\n @Input() stacked: boolean = true;\n @Input() colors: string[];\n @Input() breakpoint: 'desktop' | 'mobile' = 'desktop';\n\n @Output() pointClick = new EventEmitter<{ datasetIndex: number; index: number; value: number }>();\n\n @ViewChild(BaseChartDirective) chart?: BaseChartDirective;\n\n chartData: ChartData = { labels: [], datasets: [] };\n chartOptions: ChartConfiguration['options'] = {};\n\n private initialized = false;\n\n private get defaultPalette(): string[] {\n return this.chartStyle === 'line' ? DEFAULT_LINE_COLORS : DEFAULT_BAR_COLORS;\n }\n\n get hostClasses(): string {\n const classes = ['zen-chart', `zen-chart--legend-${this.legend}`];\n if (this.breakpoint === 'mobile') classes.push('zen-chart--mobile');\n return classes.join(' ');\n }\n\n getColor(index: number): string {\n const palette = this.colors || this.defaultPalette;\n return palette[index % palette.length];\n }\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.buildChart();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.initialized) {\n this.buildChart();\n }\n }\n\n onChartClick(event: any): void {\n if (event?.active?.length) {\n const active = event.active[0];\n const value = this.datasets[active.datasetIndex]?.data[active.index];\n this.pointClick.emit({\n datasetIndex: active.datasetIndex,\n index: active.index,\n value: value ?? 0\n });\n }\n }\n\n private buildChart(): void {\n const palette = this.colors || this.defaultPalette;\n\n const datasets = this.datasets.map((ds, i) => {\n const color = ds.color || palette[i % palette.length];\n\n if (this.chartStyle === 'line') {\n return {\n label: ds.label,\n data: ds.data,\n borderColor: color,\n backgroundColor: i === 0 ? this.hexToRgba(color, 0.04) : 'transparent',\n fill: i === 0,\n tension: 0.4,\n pointRadius: 0,\n pointHoverRadius: 3,\n pointHoverBorderWidth: 2,\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: color,\n borderWidth: 1.5\n };\n }\n\n return {\n label: ds.label,\n data: ds.data,\n backgroundColor: color,\n borderRadius: 4,\n borderSkipped: 'bottom' as const,\n maxBarThickness: 32,\n categoryPercentage: 0.4,\n barPercentage: 0.9\n };\n });\n\n this.chartData = {\n labels: this.labels,\n datasets\n };\n\n const isStacked = this.chartStyle === 'bar' && this.stacked;\n\n this.chartOptions = {\n responsive: true,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n mode: 'index'\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n backgroundColor: '#101828',\n titleFont: { family: 'Inter', size: 12 },\n bodyFont: { family: 'Inter', size: 12 },\n padding: 8,\n cornerRadius: 8,\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: 8,\n boxPadding: 4\n }\n },\n scales: {\n x: {\n stacked: isStacked,\n grid: {\n display: false\n },\n border: {\n display: false\n },\n ticks: {\n font: { family: 'Inter', size: 12, weight: 400 },\n color: '#667085'\n }\n },\n y: {\n stacked: isStacked,\n grid: {\n color: '#F2F4F7'\n },\n border: {\n display: false,\n dash: [4, 4]\n },\n ticks: {\n font: { family: 'Inter', size: 12, weight: 400 },\n color: '#667085',\n callback: (value: any) => {\n return typeof value === 'number' ? value.toLocaleString() : value;\n }\n }\n }\n }\n };\n\n // Apply gradient fills for line charts after next render cycle\n if (this.chartStyle === 'line' && this.chart?.chart) {\n setTimeout(() => this.applyGradients(), 0);\n }\n }\n\n private applyGradients(): void {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n\n const ctx = chartInstance.ctx;\n const chartArea = chartInstance.chartArea;\n if (!chartArea) return;\n\n const palette = this.colors || this.defaultPalette;\n\n const firstDs = chartInstance.data.datasets[0] as any;\n if (firstDs) {\n const color = this.datasets[0]?.color || palette[0];\n const gradient = ctx.createLinearGradient(0, chartArea.top, 0, chartArea.bottom);\n gradient.addColorStop(0, this.hexToRgba(color, 0.06));\n gradient.addColorStop(1, this.hexToRgba(color, 0.01));\n firstDs.backgroundColor = gradient;\n }\n\n chartInstance.update('none');\n }\n\n private hexToRgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- Legend: top position -->\n @if (legend === 'top') {\n <div class=\"zen-chart__legend\">\n @for (ds of datasets; track ds; let i = $index) {\n <div class=\"zen-chart__legend-item\">\n <span class=\"zen-chart__legend-dot\" [style.background-color]=\"getColor(i)\"></span>\n <span class=\"zen-chart__legend-label\">{{ ds.label }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Y-axis label + chart canvas -->\n <div class=\"zen-chart__body\">\n @if (axisLabels && yAxisLabel) {\n <div class=\"zen-chart__y-label\">\n <span>{{ yAxisLabel }}</span>\n </div>\n }\n <div class=\"zen-chart__canvas-wrapper\">\n <canvas baseChart\n [type]=\"chartStyle\"\n [data]=\"chartData\"\n [options]=\"chartOptions\"\n (chartClick)=\"onChartClick($event)\">\n </canvas>\n </div>\n </div>\n\n <!-- X-axis label -->\n @if (axisLabels && xAxisLabel) {\n <div class=\"zen-chart__x-label\">\n <span>{{ xAxisLabel }}</span>\n </div>\n }\n\n <!-- Legend: right position -->\n @if (legend === 'right') {\n <div class=\"zen-chart__legend\">\n @for (ds of datasets; track ds; let i = $index) {\n <div class=\"zen-chart__legend-item\">\n <span class=\"zen-chart__legend-dot\" [style.background-color]=\"getColor(i)\"></span>\n <span class=\"zen-chart__legend-label\">{{ ds.label }}</span>\n </div>\n }\n </div>\n }\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStepBaseType\n} from './zen-progress-steps.types';\n\nexport { ZenStepBaseType } from './zen-progress-steps.types';\n\n@Component({\n selector: 'zen-step-base',\n templateUrl: './zen-step-base.component.html',\n styleUrls: ['./zen-step-base.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenStepBaseComponent {\n\n /** Layout type of the step */\n @Input() type: ZenStepBaseType = 'top';\n\n /** Size variant */\n @Input() size: ZenProgressStepsSize = 'sm';\n\n /** Theme variant */\n @Input() theme: ZenProgressStepsTheme = 'light';\n\n /** Status of this step */\n @Input() status: ZenStepStatus = 'incomplete';\n\n /** Step title */\n @Input() title: string = '';\n\n /** Step description / supporting text */\n @Input() description: string = '';\n\n /** Whether to show the vertical connector (icon-left type) */\n @Input() showConnector: boolean = false;\n\n get hostClasses(): string {\n return [\n 'zen-step-base',\n `zen-step-base--${this.type}`,\n `zen-step-base--${this.size}`,\n `zen-step-base--${this.theme}`,\n `zen-step-base--${this.status}`,\n ].join(' ');\n }\n\n get dotSize(): number {\n switch (this.size) {\n case 'sm': return 8;\n case 'md': return 10;\n case 'lg': return 12;\n }\n }\n\n get checkSize(): number {\n switch (this.size) {\n case 'sm': return 10;\n case 'md': return 14;\n case 'lg': return 16;\n }\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ============ TYPE: TOP (icons-centered) ============ -->\n @if (type === 'top') {\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n <!-- ============ TYPE: ICON ONLY (minimal-icons) ============ -->\n @if (type === 'icon-only') {\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n }\n\n <!-- ============ TYPE: TEXT LINE ============ -->\n @if (type === 'text-line') {\n <div class=\"zen-step-base__bar\"></div>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n <!-- ============ TYPE: ICON LEFT (icons-text vertical) ============ -->\n @if (type === 'icon-left') {\n <div class=\"zen-step-base__icon-col\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n @if (showConnector) {\n <div\n class=\"zen-step-base__connector\"\n [class.zen-step-base__connector--complete]=\"status === 'complete'\"\n [class.zen-step-base__connector--incomplete]=\"status !== 'complete'\">\n </div>\n }\n </div>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n</div>\n\n<!-- ============ ICON TEMPLATE ============ -->\n<ng-template #iconTpl>\n <div class=\"zen-step-base__icon\"\n [class.zen-step-base__icon--complete]=\"status === 'complete'\"\n [class.zen-step-base__icon--current]=\"status === 'current'\"\n [class.zen-step-base__icon--incomplete]=\"status === 'incomplete'\">\n <!-- Complete: checkmark -->\n @if (status === 'complete') {\n <svg\n [attr.width]=\"checkSize\" [attr.height]=\"checkSize\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.3334 4L6.00008 11.3333L2.66675 8\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n <!-- Current / Incomplete: dot -->\n @if (status !== 'complete') {\n <span\n class=\"zen-step-base__dot\"\n [style.width.px]=\"dotSize\"\n [style.height.px]=\"dotSize\">\n </span>\n }\n </div>\n</ng-template>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ZenProgressStepsType,\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStep\n} from './zen-progress-steps.types';\n\nexport {\n ZenProgressStepsType,\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStep\n} from './zen-progress-steps.types';\n\n@Component({\n selector: 'zen-progress-steps',\n templateUrl: './zen-progress-steps.component.html',\n styleUrls: ['./zen-progress-steps.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenProgressStepsComponent {\n\n @Input() type: ZenProgressStepsType = 'icons-centered';\n @Input() size: ZenProgressStepsSize = 'sm';\n @Input() theme: ZenProgressStepsTheme = 'light';\n @Input() steps: ZenStep[] = [];\n @Input() currentStep: number = 0;\n @Input() showText: boolean = true;\n @Input() connector: boolean = true;\n\n get hostClasses(): string {\n const classes = [\n 'zen-progress-steps',\n `zen-progress-steps--${this.type}`,\n `zen-progress-steps--${this.size}`,\n `zen-progress-steps--${this.theme}`,\n ];\n if (!this.showText) classes.push('zen-progress-steps--no-text');\n if (!this.connector) classes.push('zen-progress-steps--no-connector');\n return classes.join(' ');\n }\n\n getStepStatus(index: number): ZenStepStatus {\n if (index < this.currentStep) return 'complete';\n if (index === this.currentStep) return 'current';\n return 'incomplete';\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ============ ICONS CENTERED ============ -->\n @if (type === 'icons-centered') {\n <div class=\"zen-progress-steps__row\">\n <!-- Lines behind icons -->\n <div class=\"zen-progress-steps__lines\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n @if (!last) {\n <div\n class=\"zen-progress-steps__line\"\n [class.zen-progress-steps__line--complete]=\"i < currentStep\"\n [class.zen-progress-steps__line--incomplete]=\"i >= currentStep\">\n </div>\n }\n }\n </div>\n <!-- Step columns -->\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"top\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n\n <!-- ============ MINIMAL ICONS / MINIMAL ICONS CONNECTED ============ -->\n @if (type === 'minimal-icons' || type === 'minimal-icons-connected') {\n <div class=\"zen-progress-steps__row zen-progress-steps__row--inline\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n <zen-step-base class=\"zen-progress-steps__step--minimal\"\n type=\"icon-only\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\">\n </zen-step-base>\n @if (!last) {\n <div\n class=\"zen-progress-steps__line zen-progress-steps__line--horizontal\"\n [class.zen-progress-steps__line--complete]=\"i < currentStep\"\n [class.zen-progress-steps__line--incomplete]=\"i >= currentStep\">\n </div>\n }\n }\n </div>\n <!-- Optional text row -->\n @if (showText) {\n <div class=\"zen-progress-steps__text-row\">\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__text-step\"\n type=\"text-line\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n }\n\n <!-- ============ TEXT LINE ============ -->\n @if (type === 'text-line') {\n <div class=\"zen-progress-steps__row zen-progress-steps__row--text-line\">\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"text-line\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n\n <!-- ============ ICONS TEXT (Vertical) ============ -->\n @if (type === 'icons-text') {\n <div class=\"zen-progress-steps__column\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"icon-left\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\"\n [showConnector]=\"connector && !last\">\n </zen-step-base>\n }\n </div>\n }\n\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ZenduCheckboxComponent } from './checkbox/zendu-checkbox.component';\nimport { ZenduColorPickerComponent } from './colorpicker/zendu-colorpicker.component';\nimport { ZenduColumnConfigurationComponent } from './column-configuration/zendu-column-configuration.component';\nimport { ZenduDatepickerComponent } from './datepicker/zendu-datepicker.component';\nimport { ZenduFilterComponent } from './filter/zendu-filter.component';\nimport { ZenduGroupsComponent } from './groups/zendu-groups.component';\nimport { ZenduPaginationBarComponent } from './pagination-bar/zendu-pagination-bar.component';\nimport { ZenduPhoneInputComponent } from './phone-input/zendu-phone-input.component';\nimport { ZenduRadioButtonComponent } from './radio-button/radio-button.component';\nimport { ZenduSearchBoxComponent } from './search-box/zendu-search-box.component';\nimport { ZenduSelectComponent } from './select/zendu-select.component';\nimport { ZenduSelectOptionDirective } from './select/templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './select/templates/zendu-select-value.directive';\nimport { ZenduSortHeaderComponent } from './sort-header/zendu-sort-header.component';\nimport { ZenduToggleSlideComponent } from './toggle-slide/zendu-toggle-slide.component';\nimport { ZenduToggleComponent } from './toggle/zendu-toggle.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ZenduIconComponent } from './icon/zendu-icon.component';\nimport { ZenduCardBlockComponent } from './card-block/zendu-card-block.component';\nimport { ZenduMapPreviewComponent } from './map-preview/zendu-map-preview.component';\nimport { ZenduSpinner } from './spinner/zendu-spinner.component';\nimport { ZenduDocScanner } from './doc-scanner/zendu-doc-scanner.component';\nimport { ZenduMapComponent } from './map/zendu-map.component';\nimport { ZenduFileUpload } from './file-upload/zendu-file-upload.component';\nimport { ZenduProgress } from './progress/zendu-progress.component';\nimport { OpenCVService } from './services/opencv.service';\nimport { ZenduLocationSearch } from './location-search/zendu-location-search.component';\nimport { SignaturePadComponent } from '@almothafar/angular-signature-pad';\nimport { provideHttpClient, withInterceptorsFromDi, withXhr } from '@angular/common/http';\nimport { ZenLiveViewPlayerComponent } from './live-view-player/live-view-player/live-view-player.component';\nimport { ZenHTML5VideoPlayerComponent } from './live-view-player/html5-video-player/html5-video-player.component';\nimport { ZenFlvPlayerComponent } from './live-view-player/flv-player/flv-player.component';\nimport { ZenHlsPlayerComponent } from './live-view-player/hls-player/hls-player.component';\nimport { ZenWebRTCPlayerComponent } from './live-view-player/web-rtc/web-rtc-player.component';\nimport { ZenSnapshotPlayerComponent } from './live-view-player/snapshot-player/snapshot-player.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { ZenduSelectButtonDirective } from './select/templates/zendu-select-button.directive';\nimport { ZenduTimepickerComponent } from './timepicker/zendu-timepicker.component';\nimport { ZenduDatePickerDropdownComponent } from './date-picker-dropdown/zendu-date-picker-dropdown.component';\nimport { ZenduFileUploaderComponent } from './file-uploader/zendu-file-uploader.component';\nimport { ZenduAvatarComponent } from './avatar/zendu-avatar.component';\nimport { ZenduAvatarGroupComponent } from './avatar/zendu-avatar-group.component';\nimport { ZenduAvatarLabelGroupComponent } from './avatar/zendu-avatar-label-group.component';\nimport { ZenduAvatarProfilePhotoComponent } from './avatar/zendu-avatar-profile-photo.component';\nimport { ZenduSliderComponent } from './slider/zendu-slider.component';\nimport { ZenBadgeComponent } from './badge/zen-badge.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { ZenButtonComponent } from './button/zen-button.component';\nimport { ZenduInputComponent } from './input/zendu-input.component';\nimport { ZenDropdownMenuComponent } from './dropdown-menu/zen-dropdown-menu.component';\nimport { ZenTooltipDirective } from './tooltip/zen-tooltip.directive';\nimport { ZenTooltipPopupComponent } from './tooltip/zen-tooltip.component';\nimport { ZenEldStatusComponent } from './eld-status/zen-eld-status.component';\nimport { ZenNavSearchComponent } from './nav-search/zen-nav-search.component';\nimport { ZenSubmoduleItemComponent } from './submodule-item/zen-submodule-item.component';\nimport { ZenSubpageItemComponent } from './subpage-item/zen-subpage-item.component';\nimport { ZenModulePopupComponent } from './module-popup/zen-module-popup.component';\nimport { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts';\nimport { ZenChartComponent } from './chart/zen-chart.component';\nimport { ZenProgressStepsComponent } from './progress-steps/zen-progress-steps.component';\nimport { ZenStepBaseComponent } from './progress-steps/zen-step-base.component';\n\n@NgModule({ declarations: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenHTML5VideoPlayerComponent,\n ZenFlvPlayerComponent,\n ZenHlsPlayerComponent,\n ZenSnapshotPlayerComponent,\n ZenWebRTCPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduDatePickerDropdownComponent,\n ZenduFileUploaderComponent,\n ZenduAvatarComponent,\n ZenduAvatarGroupComponent,\n ZenduAvatarLabelGroupComponent,\n ZenduAvatarProfilePhotoComponent,\n ZenduSliderComponent,\n ZenduInputComponent,\n ZenButtonComponent,\n ZenDropdownMenuComponent,\n ZenBadgeComponent,\n ZenTooltipDirective,\n ZenTooltipPopupComponent,\n ZenEldStatusComponent,\n ZenNavSearchComponent,\n ZenSubmoduleItemComponent,\n ZenSubpageItemComponent,\n ZenModulePopupComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent\n ],\n exports: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduDatePickerDropdownComponent,\n ZenduFileUploaderComponent,\n ZenduAvatarComponent,\n ZenduAvatarGroupComponent,\n ZenduAvatarLabelGroupComponent,\n ZenduAvatarProfilePhotoComponent,\n ZenduSliderComponent,\n ZenduInputComponent,\n ZenButtonComponent,\n ZenDropdownMenuComponent,\n ZenBadgeComponent,\n ZenTooltipDirective,\n ZenTooltipPopupComponent,\n ZenEldStatusComponent,\n ZenNavSearchComponent,\n ZenSubmoduleItemComponent,\n ZenSubpageItemComponent,\n ZenModulePopupComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent\n ], imports: [CommonModule,\n FormsModule,\n DragDropModule,\n SignaturePadComponent,\n ReactiveFormsModule,\n OverlayModule,\n BaseChartDirective,\n TranslateModule.forRoot({\n loader: provideTranslateHttpLoader({\n prefix: '/assets/i18n/',\n suffix: '.json'\n })\n })], providers: [\n OpenCVService,\n provideCharts(withDefaultRegisterables()),\n provideHttpClient(withXhr(), withInterceptorsFromDi()),\n ] })\nexport class NgZenduitModule { }\n\n","/*\n * Public API of ng-zenduit\n */\nexport * from \"./lib/services/zendu-notify.service\";\nexport * from './lib/ng-zenduit.module';\n\n/**\n * Types\n */\nexport * from './lib/filter/filtersConfig';\nexport * from './lib/filter/numberRange';\nexport * from './lib/column-configuration/columnState';\nexport * from './lib/map/map.types';\nexport * from './lib/location-search/location.address';\nexport * from './lib/datepicker/datepicker';\nexport * from './lib/datepicker/date-picker-hint';\nexport * from './lib/date-picker-dropdown/date-picker-dropdown.types';\nexport * from './lib/file-uploader/file-uploader.types';\n\n/**\n * Components\n */\nexport * from \"./lib/checkbox/zendu-checkbox.component\";\nexport * from \"./lib/colorpicker/zendu-colorpicker.component\";\nexport * from \"./lib/column-configuration/zendu-column-configuration.component\";\nexport * from \"./lib/datepicker/zendu-datepicker.component\";\nexport * from \"./lib/filter/zendu-filter.component\";\nexport * from \"./lib/groups/zendu-groups.component\";\nexport * from \"./lib/pagination-bar/zendu-pagination-bar.component\";\nexport * from \"./lib/phone-input/zendu-phone-input.component\";\nexport * from \"./lib/radio-button/radio-button.component\";\nexport * from \"./lib/search-box/zendu-search-box.component\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/select/templates/zendu-select-value.directive\";\nexport * from \"./lib/select/templates/zendu-select-option.directive\";\nexport * from \"./lib/select/templates/zendu-select-button.directive\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/sort-header/zendu-sort-header.component\";\nexport * from \"./lib/toggle/zendu-toggle.component\";\nexport * from \"./lib/toggle-slide/zendu-toggle-slide.component\";\nexport * from \"./lib/icon/zendu-icon.component\";\nexport * from \"./lib/icon/icon-config\";\nexport * from \"./lib/card-block/zendu-card-block.component\";\nexport * from \"./lib/map-preview/zendu-map-preview.component\";\nexport * from \"./lib/spinner/zendu-spinner.component\";\nexport * from \"./lib/doc-scanner/zendu-doc-scanner.component\";\nexport * from \"./lib/map/zendu-map.component\";\nexport * from \"./lib/file-upload/zendu-file-upload.component\";\nexport * from \"./lib/progress/zendu-progress.component\";\nexport * from \"./lib/location-search/zendu-location-search.component\";\nexport * from \"./lib/live-view-player/live-view-player/live-view-player.component\";\nexport * from \"./lib/timepicker/zendu-timepicker.component\";\nexport * from \"./lib/date-picker-dropdown/zendu-date-picker-dropdown.component\";\nexport * from \"./lib/file-uploader/zendu-file-uploader.component\";\nexport * from \"./lib/avatar/zendu-avatar.component\";\nexport * from \"./lib/avatar/zendu-avatar-group.component\";\nexport * from \"./lib/avatar/zendu-avatar-label-group.component\";\nexport * from \"./lib/avatar/zendu-avatar-profile-photo.component\";\nexport * from \"./lib/slider/zendu-slider.component\";\nexport * from \"./lib/button/zen-button.component\";\nexport * from \"./lib/input/zendu-input.component\";\nexport * from \"./lib/dropdown-menu/zen-dropdown-menu.component\";\nexport * from \"./lib/badge/zen-badge.component\";\nexport * from \"./lib/tooltip/zen-tooltip.directive\";\nexport * from \"./lib/tooltip/zen-tooltip.component\";\nexport * from \"./lib/eld-status/zen-eld-status.component\";\nexport * from \"./lib/nav-search/zen-nav-search.component\";\nexport * from \"./lib/submodule-item/zen-submodule-item.component\";\nexport * from \"./lib/subpage-item/zen-subpage-item.component\";\nexport * from \"./lib/module-popup/zen-module-popup.component\";\nexport * from \"./lib/chart/zen-chart.component\";\nexport * from \"./lib/chart/zen-chart.types\";\nexport * from \"./lib/progress-steps/zen-progress-steps.component\";\nexport * from \"./lib/progress-steps/zen-step-base.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["showSnackbar","i1","i2.ZenduInputComponent","i3","i2","i3.ZenduCheckboxComponent","i4.ZenduSearchBoxComponent","i4","i5.ZenduIconComponent","i2.ZenduCheckboxComponent","i3.ZenduSearchBoxComponent","i1.ZenduIconComponent","i4.ZenduToggleSlideComponent","i5.ZenduSearchBoxComponent","i6.ZenduDatepickerComponent","i7.ZenduGroupsComponent","i8.ZenduRadioButtonComponent","i9.ZenduIconComponent","i10.ZenduSpinner","i11.ZenButtonComponent","i12","i4.ZenduGroupsComponent","i6.ZenduSpinner","i7","i1.ZenduSelectComponent","i2.ZenButtonComponent","LocalLock","i1.ScriptLoader","i1.OpenCVService","i2.ZenduIconComponent","i1.GeocodingService","i4.ZenduIconComponent","i1.ZenHttpService","i1.ZenHTML5VideoPlayerComponent","i2.ZenFlvPlayerComponent","i3.ZenHlsPlayerComponent","i4.ZenSnapshotPlayerComponent","i5.ZenWebRTCPlayerComponent","i3.ZenduIconComponent","i2.ZenduSpinner","i2.ZenduAvatarComponent","i1.ZenduCheckboxComponent","i2.ZenEldStatusComponent","i1.ZenStepBaseComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;MAMa,gBAAgB,CAAA;AAElB,IAAA,IAAI,CACP,GAAW,EACX,WAAmB,IAAI,EACvB,aAAsB,IAAI,EAAA;AAE1B,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAEhB,QAAAA,IAAY,CAAC;AACT,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,UAAU,EAAE;AACf,SAAA,CAAC;IACN;AAEO,IAAA,OAAO,CACV,GAAW,EACX,WAAmB,IAAI,EACvB,aAAsB,IAAI,EAAA;AAE1B,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,QAAAA,IAAY,CAAC;AACT,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,SAAS,EAAE,OAAO;YAClB,eAAe,EAAE,SAAS;AAC1B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,UAAU,EAAE;AACf,SAAA,CAAC;IACN;AAEO,IAAA,IAAI,CACP,GAAW,EACX,WAAmB,IAAI,EACvB,aAAsB,IAAI,EAAA;AAE1B,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACjB,QAAAA,IAAY,CAAC;AACT,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,SAAS,EAAE,OAAO;YAClB,eAAe,EAAE,SAAS;AAC1B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,UAAU,EAAE;AACf,SAAA,CAAC;IACN;AAEO,IAAA,KAAK,CACR,GAAY,EACZ,WAAmB,IAAI,EACvB,aAAsB,IAAI,EAAA;AAE1B,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,QAAAA,IAAY,CAAC;AACT,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AAC/B,YAAA,SAAS,EAAE,OAAO;YAClB,eAAe,EAAE,SAAS;AAC1B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,UAAU,EAAE;AACf,SAAA,CAAC;IACN;AAEQ,IAAA,eAAe,CAAC,EAAO,EAAA;QAC3B,IAAI,CAAC,EAAE,EAAE;AACL,YAAA,OAAO,EAAE;QACb;AAEA,QAAA,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;AACxB,YAAA,OAAO,EAAE;QACb;AACK,aAAA,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE;YACnC,OAAO,EAAE,CAAC,KAAK;QACnB;aACK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE;AACnC,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO;QAC3B;AACK,aAAA,IAAI,EAAE,CAAC,OAAO,EAAE;YACjB,OAAO,EAAE,CAAC,OAAO;QACrB;aACK,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,EAAE;YACjC,OAAO,CAAA,WAAA,EAAc,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,CAAA,CAAE;QACrD;AACK,aAAA,IAAI,EAAE,CAAC,UAAU,EAAE;YACpB,OAAO,EAAE,CAAC,UAAU;QACxB;aACK;AACD,YAAA,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,EAAE,CAAC;AAC7D,YAAA,OAAO,EAAE;QACb;IACJ;8GArGS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA;;2FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCIY,sBAAsB,CAAA;AAPnC,IAAA,WAAA,GAAA;AAWc,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;QAE5C,IAAA,CAAA,KAAK,GAAoB,QAAQ;QAEjC,IAAA,CAAA,UAAU,GAAW,EAAE;QAEvB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAE1B,IAAA,CAAA,aAAa,GAAG,KAAK;QAIrB,IAAA,CAAA,IAAI,GAAgB,IAAI;AAiBpC,IAAA;AAbG;;AAEG;IACI,MAAM,GAAA;QACT,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC1C;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAE1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACzC;8GAlCS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,sWCTnC,skCAsCA,EAAA,MAAA,EAAA,CAAA,ghGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD7Ba,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,skCAAA,EAAA,MAAA,EAAA,CAAA,ghGAAA,CAAA,EAAA;;sBAIhB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;;MEpBQ,yBAAyB,CAAA;AA6BpC,IAAA,eAAe,CAAC,KAAK,EAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;YAEzC;QACF;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACtD;QACF;QACA,IAAI,CAAC,UAAU,EAAE;IACnB;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,WAAA,CACU,QAAoB,EAAA;QAApB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AA1CR,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAEzC,IAAA,CAAA,IAAI,GAAG,MAAM;QAIb,IAAA,CAAA,QAAQ,GAAG,IAAI;QAEjB,IAAA,CAAA,MAAM,GAAG,KAAK;QAEd,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,OAAO,GAAG,EAAE;QAEZ,IAAA,CAAA,UAAU,GAAG,EAAE;AACf,QAAA,IAAA,CAAA,UAAU,GAA2B;YAC1C,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YAC1H,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;SAC3H;IAqBG;AAEG,IAAA,WAAW,CAAC,OAAsB,EAAA;QACvC,IAAI,OAAO,CAAC,cAAc,CAAC;AACzB,YAAA,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY;YACpC,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E;QACA,IAAI,CAAC,eAAe,EAAE;IACxB;AAEO,IAAA,WAAW,CAAC,GAAe,EAAA;QAChC,IAAI,CAAC,MAAM,EAAE;QACb,GAAG,CAAC,eAAe,EAAE;IACvB;IAEO,MAAM,GAAA;QACX,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;IAC5B;IAEO,eAAe,GAAA;AAEpB,QAAA,IAAI,SAAsB;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,SAAS,GAAG,IAAI,CAAC,YAAY;QAC/B;aACK;AACH,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAA4B;AAC5D,YAAA,SAAS,GAAG,SAAS,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAgB;QAC9F;QAEA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI;QACnD,MAAM,GAAG,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG;QACjD,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM;QAEvD,MAAM,MAAM,GAAG,CAAC;AAEhB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,EAAG,IAAI,IAAI;AAC3B,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG;AACnD,QAAA,IAAI,kBAAkB,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,GAAG,CAAA,EAAG,MAAM,GAAG,MAAM,IAAI;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACtB;aACK;YACH,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG,GAAG,MAAM;AACrD,YAAA,IAAI,CAAC,UAAU,GAAG,CAAA,EAAG,WAAW,IAAI;AACpC,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACnB;IACF;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;AAEO,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;8GAzGW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,6UCTtC,mrDA4DA,EAAA,MAAA,EAAA,CAAA,yzDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDnDa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,mrDAAA,EAAA,MAAA,EAAA,CAAA,yzDAAA,CAAA,EAAA;;sBAIlB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAkBA,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;sBAY3C,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE;;;MEjCtB,IAAI,CAAA;AAGf,IAAA,WAAA,GAAA;;;;IAIF;AACW,IAAA,OAAO,QAAQ,CAAC,IAAS,EAAE,IAAY,EAAE,SAAmB,EAAA;AAC/D,QAAA,IAAI,OAAY;QAChB,MAAM,OAAO,GAAQ,IAAI;AAEzB,QAAA,OAAO,SAAS,gBAAgB,GAAA;YAC5B,MAAM,IAAI,GAAG,SAAS;AAEtB,YAAA,MAAM,KAAK,GAAG,YAAA;gBACV,OAAO,GAAG,IAAI;gBACd,IAAI,CAAC,SAAS,EAAE;AACZ,oBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;gBAC7B;AACJ,YAAA,CAAC;AAED,YAAA,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO;YAErC,YAAY,CAAC,OAAO,CAAC;AAErB,YAAA,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;YAEjC,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;YAC7B;AACJ,QAAA,CAAC;IACL;IAEO,OAAO,KAAK,CAAI,MAAS,EAAA;QAE5B,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAChC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAE5B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;;;;QAKxB,KAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAClC;AACI,YAAA,MAAM,GAAG,GAAI,MAAc,CAAC,GAAG,CAAC;AAChC,YAAA,IAAG,GAAG;gBACF,OAAO,GAAG,IAAI,QAAQ;AACtB,gBAAA,OAAO,GAAG,CAAC,OAAO,IAAI,UAAU;AAChC,gBAAA,OAAO,GAAG,CAAC,OAAO,IAAI,UAAU,EACpC;gBACI,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YAC/B;QACJ;AAEA,QAAA,OAAO,MAAM;IACjB;AAIA;;;AAGG;IACK,OAAO,WAAW,CAAC,GAAQ,EAAA;QAE/B,IAAG,CAAC,GAAG,EACP;YACI;QACJ;AACA,QAAA,IAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EACrB;AACI,YAAA,KAAI,IAAI,IAAI,IAAI,GAAG,EACnB;gBACI,IAAG,CAAC,IAAI,EACR;oBACI,IAAI,GAAG,IAAI;gBACf;AACA,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC1B;YACA;QACJ;AAEA,QAAA,IAAI,IAAI,GAAG,OAAO,GAAG;QACrB,IAAG,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,EACvC;YACI;QACJ;;QAGA,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAEjB,YAAA,IAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;AACZ,gBAAA,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EACjB;AACI,gBAAA,OAAO,GAAG,CAAC,GAAG,CAAC;gBACf;YACJ;AAEA,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAClB,YAAA,IAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EACrB;gBACI,IAAI,GAAG,GAAe,GAAG;AACzB,gBAAA,KAAI,IAAI,CAAC,IAAI,GAAG,EAChB;AACI,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvB;YACJ;AACK,iBAAA,IAAG,OAAO,GAAG,IAAI,QAAQ,EAC9B;AACI,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACzB;AACJ,QAAA,CAAC,CAAC;IACN;AAGO,IAAA,OAAO,cAAc,CAAC,MAAW,EAAE,IAAS,EAAA;QAE/C,KAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAClC;YACI,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QAC3B;IACJ;IAEO,OAAO,KAAK,CAAC,EAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,UAAU,CAAC,MAAK;AACZ,gBAAA,OAAO,EAAE;YACb,CAAC,EAAE,EAAE,CAAC;AACV,QAAA,CAAC,CAAC;IACN;AACH;;MChHY,mBAAmB,CAAA;AAdhC,IAAA,WAAA,GAAA;AAkBI;;AAEG;QACM,IAAA,CAAA,IAAI,GAAwE,MAAM;AAE3F;;AAEG;QACM,IAAA,CAAA,OAAO,GAAwH,SAAS;AAEjJ;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,EAAE;AAEzB;;AAEG;QACM,IAAA,CAAA,KAAK,GAAG,EAAE;AAEnB;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,EAAE;AAEtB;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,EAAE;AAEzB;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEzB;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,mBAAmB;AAE1C;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,KAAK;AAE5B;;AAEG;QACM,IAAA,CAAA,YAAY,GAAG,EAAE;AAE1B;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEzB;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK;AAiBzB;;AAEG;QACM,IAAA,CAAA,YAAY,GAAG,KAAK;AAE7B;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,EAAE;AAElB;;AAEG;QACM,IAAA,CAAA,EAAE,GAAG,EAAE;AAEhB;;AAEG;QACM,IAAA,CAAA,sBAAsB,GAAqB,EAAE;AAEtD;;AAEG;QACM,IAAA,CAAA,oBAAoB,GAAoB,EAAE;AAEnD;;AAEG;QACM,IAAA,CAAA,0BAA0B,GAAG,QAAQ;AAE9C;;AAEG;QACM,IAAA,CAAA,uBAAuB,GAAqB,EAAE;AAEvD;;AAEG;QACM,IAAA,CAAA,qBAAqB,GAAoB,EAAE;AAEpD;;AAEG;QACM,IAAA,CAAA,2BAA2B,GAAG,QAAQ;AAE/C;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,EAAE;AAEzB;;AAEG;QACM,IAAA,CAAA,YAAY,GAAG,EAAE;AAE1B;;AAEG;QACM,IAAA,CAAA,IAAI,GAAgB,IAAI;AAEjC;;AAEG;QACM,IAAA,CAAA,kBAAkB,GAAG,KAAK;AAEnC;;AAEG;QACM,IAAA,CAAA,cAAc,GAAW,EAAE;AAEpC;;AAEG;QACM,IAAA,CAAA,KAAK,GAAW,EAAE;AAO3B;;AAEG;AACO,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAElD;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAc;AAErD;;AAEG;AACO,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAc;AAEpD;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAiB;AAE1D;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB;AAExD;;AAEG;AACO,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAmB;AAErE;;AAEG;AACO,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,YAAY,EAAmB;AAE1E;;AAEG;AACO,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAmB;AAEtE;;AAEG;AACO,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,YAAY,EAAmB;AAE3E;;AAEG;AACO,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAc;AAExD;;AAEG;AACO,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAElD;;AAEG;AACO,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAW;AAEnD;;AAEG;AACO,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAc;;QAGpD,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,mBAAmB,GAAG,KAAK;QAC3B,IAAA,CAAA,oBAAoB,GAAG,KAAK;;QAG5B,IAAA,CAAA,SAAS,GAAG,EAAE;AACd,QAAA,IAAA,CAAA,WAAW,GAA6F;AAC3G,YAAA;AACI,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA;AACI,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,IAAI,EAAE;AACT,aAAA;AACD,YAAA;AACI,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,IAAI,EAAE;AACT;SACJ;AAEM,QAAA,IAAA,CAAA,aAAa,GAAG;AACnB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,kBAAkB,EAAE,EAAE;AACtB,YAAA,IAAI,EAAE;SACT;QAGM,IAAA,CAAA,uBAAuB,GAAG,KAAK;;AAG9B,QAAA,IAAA,CAAA,QAAQ,GAA4B,MAAK,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AA6R3C,IAAA;AA3RG,IAAA,IACI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI;IACf;IAEA,QAAQ,GAAA;;AAEJ,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,EAAE,GAAG,CAAA,UAAA,EAAa,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;QACpE;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;YACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE;YACzG,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;;AAGA,IAAA,UAAU,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC9B;;AAGA,IAAA,aAAa,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAE/C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;;AAErB,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QAC/B;aAAO;;AAEH,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC;IACJ;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEA,IAAA,OAAO,CAAC,KAAoB,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,uBAAuB,CAAC,KAAsB,EAAA;AAC1C,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;IACpC;AAEA,IAAA,wBAAwB,CAAC,KAAsB,EAAA;AAC3C,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;IACrC;IAEA,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB;AACpD,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;QACrC;IACJ;IAEA,sBAAsB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,oBAAoB;AACtD,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QACpC;IACJ;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe;AAC5C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;IACrC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;IAC/E;AAEA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK;IACvB;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IACvE;AAEA,IAAA,IAAI,eAAe,GAAA;QACf,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;YACvC,OAAO,IAAI,CAAC,YAAY;QAC5B;QACA,OAAO,IAAI,CAAC,QAAQ;IACxB;AAEA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACxD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,OAAO,GAAG,aAAa,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,EAAE;QAC/C;QACA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAE;IAC7B;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,MAAM,OAAO,GAAG,CAAC,qBAAqB,CAAC;AAEvC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3B;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1B;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAC5B;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/B;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,OAAO,CAAC,IAAI,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;QACrC;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,OAAO,CAAA,CAAE,CAAC;QAC3C;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B;IAEA,uBAAuB,GAAA;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,oBAAoB,CAAC;AACjG,QAAA,OAAO,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,0BAA0B;IACtE;IAEA,wBAAwB,GAAA;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,qBAAqB,CAAC;AACnG,QAAA,OAAO,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,2BAA2B;IACvE;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE;QAC3C;IACJ;;IAGA,gBAAgB,GAAA;AACZ,QAAA,IAAI;YACA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;AAEjC,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,IACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACjD,oBAAA,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAC1D;gBACD,IAAI,eAAe,EAAE;oBACjB,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC,aAAa;AAC5D,oBAAA,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE;AACrD,oBAAA,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC;oBACjE,UAAU,CAAC,MAAK;wBACZ,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAChC,4BAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC;wBACnF;AAAO,6BAAA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE;AAChE,4BAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC;wBAC7E;wBACA,IAAI,CAAC,cAAc,EAAE;AACzB,oBAAA,CAAC,CAAC;gBACN;qBAAO;AACH,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa;gBAC7C;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa;YAC7C;QACJ;QAAE,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,IAAI,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC;AACrD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa;QAC7C;IACJ;AAEA,IAAA,gBAAgB,CAAC,OAAO,EAAA;AACpB,QAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;QAC9B,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA,IAAA,cAAc,CAAC,KAAwB,EAAA;;QAEnC,IAAI,MAAM,GAAG,KAAK;AAClB,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC7E,MAAM,GAAG,IAAI;QACjB;AAEA,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,SAAS;QACrD,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AACzC,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;QAChC;AACA,QAAA,MAAM,UAAU,GAAG,CAAA,EAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAA,EAAG,IAAI,CAAC,SAAS,EAAE;AAChF,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;;AAEjC,YAAA,IAAI,CAAC,KAAK,GAAG,UAAU;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC;AACA,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE;QACrD,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,aAAa,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B;aAAO;AACH,YAAA,IAAI;AACA,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,eAAe,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1G;AAAE,YAAA,MAAM;AACJ,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC;QACJ;IACJ;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;IACxC;IAEA,mBAAmB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AACA,QAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,CAAC,uBAAuB;IAChE;AAEA,IAAA,kBAAkB,CAAC,KAAY,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAChC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;;QAGjC,IAAI,CAAC,UAAU,EAAE;IACrB;8GAtiBS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,SAAA,EAVjB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE;AACV;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjCL,ivSAoQC,EAAA,MAAA,EAAA,CAAA,yoaAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD/NY,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAd/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,SAAA,EAGV;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE;AACV;AACJ,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,KAAK,EAAA,UAAA,EAClC,KAAK,EAAA,QAAA,EAAA,ivSAAA,EAAA,MAAA,EAAA,CAAA,yoaAAA,CAAA,EAAA;;sBAIhB,SAAS;uBAAC,cAAc;;sBAKxB;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBA8CA,WAAW;uBAAC,yBAAyB;;;ME9R7B,uBAAuB,CAAA;IAKlC,IAAa,KAAK,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACpB;IAYA,WAAA,CAA2B,QAAoB,EAAU,OAAe,EAAA;QAA7C,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAsB,IAAA,CAAA,OAAO,GAAP,OAAO;AAhBtD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;QAMxC,IAAA,CAAA,SAAS,GAAG,IAAI;QAEhB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAET,IAAA,CAAA,WAAW,GAAG,QAAQ;QAI9B,IAAA,CAAA,cAAc,GAAG,CAAC;AAGxB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACpB;IAEO,QAAQ,GAAA;;QAEb,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,OAAO,EAAE;YAChB;QACF,CAAC,EAAE,GAAG,CAAC;IACT;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEO,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;IAChB;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;QACd,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;YACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAK;YACzC,IAAI,CAAC,YAAY,EAAE;QACrB,CAAC,EAAE,KAAK,CAAC;IACX;IAEO,OAAO,GAAA;QACZ,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE;;YAE7B;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QACxD,IAAI,CAAC,KAAK,EAAE;;YAEV,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,OAAO,EAAE;YAChB,CAAC,EAAE,GAAG,CAAC;YACP;QACF;;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY;AACjC,QAAA,IAAI,MAAM,IAAI,CAAC,EAAE;;YAEf,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,OAAO,EAAE;YAChB,CAAC,EAAE,GAAG,CAAC;YACP;QACF;;QAGA,UAAU,CAAC,MAAK;YACd,KAAK,CAAC,KAAK,EAAE;QACf,CAAC,EAAE,CAAC,CAAC;IACP;AAEQ,IAAA,QAAQ,CAAC,OAA2B,EAAA;QAC1C,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,EAAE;AAC/B,YAAA,OAAO,OAA2B;QACpC;AAEA,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACtD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACrC,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,IAAI,OAAO,EAAE;AAChC,gBAAA,OAAO,EAAsB;YAC/B;QACF;;AAGA,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACtD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACrC,IAAI,CAAC,EAAE,EAAE;gBACP;YACF;YACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAiB,CAAC;YAChD,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,OAAO;YAChB;QACF;AAEA,QAAA,OAAO,IAAI;IACb;8GApHW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,sOCnBpC,qdAeA,EAAA,MAAA,EAAA,CAAA,0cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,cAAA,EAAA,MAAA,EAAA,IAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,4BAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,aAAA,EAAA,cAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,4BAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDIa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,qdAAA,EAAA,MAAA,EAAA,CAAA,0cAAA,CAAA,EAAA;;sBAGlB;;sBAEA;;sBAEA;;sBAIA;;sBAEA;;sBAEA;;;MEVU,iCAAiC,CAAA;AAkC5C,IAAA,WAAA,CAAoB,QAAoB,EAAA;QAApB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAjC5B;;AAEG;AACO,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAiB;AAEjE;;AAEG;QACM,IAAA,CAAA,aAAa,GAAkB,EAAE;AAE1C;;AAEG;QACM,IAAA,CAAA,oBAAoB,GAAkB,EAAE;AAEjD;;AAEG;QACM,IAAA,CAAA,gBAAgB,GAAqB,OAAO;AAErD;;AAEG;QACK,IAAA,CAAA,oBAAoB,GAAkB,EAAE;QAEzC,IAAA,CAAA,uBAAuB,GAAkB,EAAE;QAE3C,IAAA,CAAA,4BAA4B,GAAkB,EAAE;QAEhD,IAAA,CAAA,SAAS,GAAY,KAAK;QAE1B,IAAA,CAAA,UAAU,GAAG,EAAE;IAEqB;AAG3C,IAAA,eAAe,CAAC,KAAK,EAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;YAEzC;QACF;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACtD;QACF;;QAEA,IAAI,CAAC,IAAI,EAAE;IACb;AAEA,IAAA,WAAW,CAAC,OAAY,EAAA;QACtB,IAAI,OAAO,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;YAC5D,IAAI,CAAC,QAAQ,EAAE;QACjB;IACF;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QAC7D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1D,IAAI,CAAC,WAAW,EAAE;IACpB;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;;AAEhC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;YAElB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACtE;QACA,IAAI,CAAC,WAAW,EAAE;IACpB;IAEO,KAAK,GAAA;QACV,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;;QAE7D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACpE,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;IACnD;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;AAEO,IAAA,MAAM,CAAC,KAA4B,EAAA;AACxC,QAAA,eAAe,CACb,IAAI,CAAC,4BAA4B,EACjC,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CACnB;AACD,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,4BAA4B;IAClE;IAEO,KAAK,GAAA;QACV,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;;YAEjE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACtE;aAAO;;AAEL,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAC/C,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACvB;QACF;QACA,IAAI,CAAC,WAAW,EAAE;IACpB;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CACrE,CAAC,GAAG,KACF,GAAG,CAAC;AACD,aAAA,WAAW;AACX,aAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CACpD;IACH;8GAjHW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,2WCtB9C,k7CAyCA,EAAA,MAAA,EAAA,CAAA,8sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDnBa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,k7CAAA,EAAA,MAAA,EAAA,CAAA,8sBAAA,CAAA,EAAA;;sBAMlB;;sBAKA;;sBAKA;;sBAKA;;sBAiBA,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;IE1DlC;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EANW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;;MCMlB,eAAe,GAAG,IAAI,cAAc,CAAgB,iBAAiB,EAAE;AAClF,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,kDAAkD,EAAE;AACrF,CAAA;;MCIY,kBAAkB,CAAA;IAY7B,WAAA,CACU,KAAiB,EACQ,OAAsB,EAAA;QAD/C,IAAA,CAAA,KAAK,GAAL,KAAK;QACoB,IAAA,CAAA,OAAO,GAAP,OAAO;QAJ1C,IAAA,CAAA,UAAU,GAAG,KAAK;IAKd;AAEG,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEvC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,MAAM;QACpE;AAAO,aAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG;QAC7B;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;AAE3D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAA4B;AAEpD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;;AAEnB,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;AAC/C,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC;QAC/C;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,EAAE;;YAE3B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,WAAW,CAAA,CAAA,CAAG;YACrD,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,WAAW,CAAA,CAAA,CAAG;AAC7D,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW;YAC/C;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC;YAC/C;QACF;IACF;AA5CW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,4CAcnB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAdd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,8QCb/B,iYAWA,EAAA,MAAA,EAAA,CAAA,i/NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDEa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAV9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,IAAA,EAGd;AACF,wBAAA,4BAA4B,EAAE;AACjC,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,KAAK,EAAA,UAAA,EAClC,KAAK,EAAA,QAAA,EAAA,iYAAA,EAAA,MAAA,EAAA,CAAA,i/NAAA,CAAA,EAAA;;0BAgBhB,MAAM;2BAAC,eAAe;;sBAZxB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AEPH,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,aAAa,GAAG,IAAI;AAC1B,MAAM,cAAc,GAAG,IAAI;MASd,wBAAwB,CAAA;AA0FjC,IAAA,WAAA,CACY,QAAoB,EACpB,OAAgB,EAChB,gBAAkC,EAClC,UAA4B,EAAA;QAH5B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,UAAU,GAAV,UAAU;AAvFtB;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;QAEtC,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,WAAW,GAAG,KAAK;QAEnB,IAAA,CAAA,QAAQ,GAAG,IAAI;QAEf,IAAA,CAAA,eAAe,GAAuB,IAAI;QAQ1C,IAAA,CAAA,SAAS,GAAY,KAAK;QAE1B,IAAA,CAAA,aAAa,GAAa,EAAE;QAE5B,IAAA,CAAA,WAAW,GAAY,KAAK;AAIrC;;AAEG;QACM,IAAA,CAAA,cAAc,GAAY,KAAK;QAE/B,IAAA,CAAA,QAAQ,GAAY,KAAK;QAEzB,IAAA,CAAA,QAAQ,GAAY,KAAK;AAEzB,QAAA,IAAA,CAAA,SAAS,GAAwB,mBAAmB,CAAC,IAAI;AAEzD,QAAA,IAAA,CAAA,SAAS,GAAwB,mBAAmB,CAAC,IAAI;QAEzD,IAAA,CAAA,iBAAiB,GAAY,KAAK;AAUpC,QAAA,IAAA,CAAA,YAAY,GAA6C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QAElF,IAAA,CAAA,eAAe,GAAG,KAAK;QAEvB,IAAA,CAAA,OAAO,GAAqC,EAAE;QAE9C,IAAA,CAAA,SAAS,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AAEtD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,IAAI,EAAE;QAExB,IAAA,CAAA,IAAI,GAAG,YAAY;QAEnB,IAAA,CAAA,GAAG,GAAG,aAAa;QAEnB,IAAA,CAAA,GAAG,GAAG,cAAc;QAEpB,IAAA,CAAA,IAAI,GAAG,KAAK;QAIZ,IAAA,CAAA,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QAE7F,IAAA,CAAA,KAAK,GAAG,EAAE;QAEV,IAAA,CAAA,kBAAkB,GAAY,KAAK;QAEnC,IAAA,CAAA,iBAAiB,GAAY,KAAK;QAEzC,IAAA,CAAA,KAAK,GAAY,KAAK;QACtB,IAAA,CAAA,MAAM,GAAY,KAAK;IAOnB;AAIJ,IAAA,eAAe,CAAC,KAAK,EAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;YAEvC;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACpD;QACJ;QACA,IAAI,CAAC,cAAc,EAAE;IACzB;IAGA,MAAM,GAAA;QACF,IAAI,CAAC,eAAe,EAAE;IAC1B;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAErC,IAAI,CAAC,YAAY,GAAG;gBAChB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;gBAC7B,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;gBAChC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO;aACjC;QACL;IACJ;IAEO,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,IAAI,IAAI,IAAI,CAAC,0BAA0B,EAAE,KAAK,mBAAmB,CAAC,IAAI,EAAE;AAC/G,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACrB;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,IAAI,IAAI,IAAI,CAAC,wBAAwB,EAAE,KAAK,mBAAmB,CAAC,GAAG,EAAE;AAC5G,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACtB;QACA,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,KAAK,EAAE;AAC9C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACrB;QACA,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,GAAG,EAAE;AAC5C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACtB;IACJ;IAEQ,wBAAwB,GAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG;AAC/C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW;QACjC,IAAI,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE;YACpB,OAAO,mBAAmB,CAAC,GAAG;QAClC;aACK;YACD,OAAO,mBAAmB,CAAC,MAAM;QACrC;IACJ;AAEA;;;AAGG;IACK,0BAA0B,GAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,IAAI;AACjD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU;QAC/B,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACpB,OAAO,mBAAmB,CAAC,IAAI;QACnC;aACK;YACD,OAAO,mBAAmB,CAAC,KAAK;QACpC;IACJ;IAGO,YAAY,GAAA;QACf,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAExD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe;AAC5C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE;YAChD,IAAI,CAAC,UAAU,EAAE;QACrB;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,YAAY,GAAG;gBAChB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;gBAC7B,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;gBAChC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO;aACjC;AAED,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBAE3B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC1B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;YACtC;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,aAAa,EAAE;YACxB;iBAAO;gBACH,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,yBAAyB,EAAE;YACpC;QACJ;IACJ;IAEQ,aAAa,GAAA;AACjB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,EAAE;AACzD,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,EAAE;AAE7D,QAAA,MAAM,QAAQ,GAAsB;AAChC,YAAA,OAAO,EAAE,mBAAmB,KAAK,mBAAmB,CAAC,KAAK,GAAG,OAAO,GAAG,KAAK;AAC5E,YAAA,OAAO,EAAE,iBAAiB,KAAK,mBAAmB,CAAC,MAAM,GAAG,QAAQ,GAAG,KAAK;AAC5E,YAAA,QAAQ,EAAE,mBAAmB,KAAK,mBAAmB,CAAC,KAAK,GAAG,OAAO,GAAG,KAAK;AAC7E,YAAA,QAAQ,EAAE,iBAAiB,KAAK,mBAAmB,CAAC,MAAM,GAAG,KAAK,GAAG;SACxE;;AAGD,QAAA,MAAM,OAAO,GAAG,iBAAiB,KAAK,mBAAmB,CAAC,MAAM;AAChE,QAAA,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE;AAEjC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;AACzC,aAAA,mBAAmB,CAAC,IAAI,CAAC,aAAa;AACtC,aAAA,aAAa,CAAC;YACX;SACH;;aAEA,sBAAsB,CAAC,KAAK;;aAE5B,kBAAkB,CAAC,OAAO;;aAE1B,QAAQ,CAAC,KAAK,CAAC;QAGpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAClC,gBAAgB;AAChB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,iBAAiB;AAChC,YAAA,UAAU,EAAE,gBAAgB;AAC/B,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAExF,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAChC,QAAA,CAAC,CAAC;IAEN;;IAGO,WAAW,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;QAC5B;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAChC;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAC7B;IACJ;IAEQ,cAAc,GAAA;QAClB,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS;YAC5D;QACJ,CAAC,EAAE,CAAC,CAAC;IACT;IAEQ,yBAAyB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE;YACrB;QACJ;QAEA,UAAU,CAAC,MAAK;YACZ,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,EAAE;YACvE,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;;YAG/D,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC;YAE9D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,qBAAqB,EAAE;YAC1E,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,MAAM,GAAG,GAAG;YACxC,IAAI,CAAC,cAAc,EAAE;QACzB,CAAC,EAAE,CAAC,CAAC;IACT;IAEQ,oBAAoB,CAAC,WAAoB,EAAE,UAAmB,EAAA;AAClE,QAAA,IAAI,GAAW;QACf,IAAI,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;QAC3C;aAAO;YACH,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QAC3C;AACA,QAAA,OAAO,GAAG;IACd;IAEQ,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE;QACjC;AAEA,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACtD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;QAExD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AAC9F,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACjB,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;QACrF,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;QAE7E,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;QAErD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,QAAA,OAAO,OAAO,IAAI,GAAG,EAAE;AACnB,YAAA,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAqB,EAAE;AAC3C,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;gBAE9B,IAAI,UAAU,GAAG,KAAK;gBACtB,IAAI,IAAI,EAAE;oBACN,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;wBACtC,IAAI,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE;gBACvC;gBAEA,IAAI,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE;gBAE/C,IAAI,UAAU,GAAG,KAAK;AAEtB,gBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;oBACjD,UAAU,GAAG,IAAI;gBACrB;AAAO,qBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;oBACxD,UAAU,GAAG,IAAI;gBACrB;gBAEA,IAAI,aAAa,GAAG,KAAK;gBAEzB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AACjD,oBAAA,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBACtE;AAEA,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACV,oBAAA,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE;oBACtB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;AACtC,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,UAAU;AACtB,oBAAA,aAAa,EAAE;AAClB,iBAAA,CAAC;AAEF,gBAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;YAC3C;QACJ;IACJ;IAEO,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;QACpE,IAAI,CAAC,UAAU,EAAE;IACrB;IAEO,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;QACzE,IAAI,CAAC,UAAU,EAAE;IACrB;IAEO,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE;QACnE,IAAI,CAAC,UAAU,EAAE;IACrB;IAEO,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE;QACxE,IAAI,CAAC,UAAU,EAAE;IACrB;IAEO,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;IAClD;IAEO,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;IAClD;AAEO,IAAA,SAAS,CAAC,GAAkB,EAAA;AAC/B,QAAA,IAAI,GAAG,CAAC,UAAU,EAAE;;YAEhB;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;QACtI;aAAO;YACH,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;YAChB;QACJ;QAEA,IAAI,CAAC,UAAU,EAAE;IACrB;AAEO,IAAA,WAAW,CAAC,KAAa,EAAA;QAC5B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1C,QAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;QAC1B,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACnC;AAEO,IAAA,UAAU,CAAC,IAAY,EAAA;QAC1B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1C,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;QAC1B,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAClC;IAEO,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAChC;IACJ;IAGO,WAAW,GAAA;QACd,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAEnD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YAC3B;QACJ;QAEA,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YAChC;QACJ;QAEA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAExB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QACvB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AAEtB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YACvB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1B;QAEA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA,CAAE,EAAE,SAAS,CAAC;QAElF,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE;AAChB,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;AACnB,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO;SACpB;;;AAID,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;QAC7I;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;QAC9H;;AAGA,QAAA,IAAI,IAAI,GAAG,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,EAAE;QAC1B;aACK;AACD,YAAA,IAAI,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,EAAE;QACzB;AAEA,QAAA,IAAI,GAAG,GAAG,EAAE,EAAE;AACV,YAAA,IAAI,CAAC,GAAG,GAAG,CAAA,CAAA,EAAI,GAAG,EAAE;QACxB;aACK;AACD,YAAA,IAAI,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,EAAE;QACvB;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,GAAG,GAAG,EAAE,EAAE;AACV,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAA,CAAA,EAAI,GAAG,EAAE;YACxB;iBACK;AACD,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,EAAE;YACvB;QACJ;IAEJ;IAEO,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,YAAA,OAAO,EAAE;QACb;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE;AAC7D,YAAA,OAAO,OAAO;QAClB;;AAGA,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;AAEpD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;YAEpD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB;AAC7C,iBAAA,OAAO,CAAC,KAAK,EAAE,aAAa;AAC5B,iBAAA,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;QAC1C;AAEA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;IACnF;IAEO,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,YAAA,OAAO,EAAE;QACb;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAChD;QACA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7C;IAEO,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;QACtB,IAAI,CAAC,WAAW,EAAE;IACtB;IAEO,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;IAClC;IAEO,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1F,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB;IACJ;IAEO,MAAM,GAAA;QACT,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YACb;QACJ;AACA,QAAA,IAAI,EAAE;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC3B,IAAI,CAAC,WAAW,EAAE;IACtB;IAEO,QAAQ,GAAA;QACX,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YACb;QACJ;AACA,QAAA,IAAI,EAAE;AACN,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC3B,IAAI,CAAC,WAAW,EAAE;IACtB;IAEO,KAAK,GAAA;QACR,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ;QACJ;AACA,QAAA,GAAG,EAAE;AACL,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE;QACzB,IAAI,CAAC,WAAW,EAAE;IACtB;IAEO,OAAO,GAAA;QACV,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ;QACJ;AACA,QAAA,GAAG,EAAE;AACL,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE;QACzB,IAAI,CAAC,WAAW,EAAE;IACtB;IAEO,KAAK,GAAA;QACR,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ;QACJ;AACA,QAAA,GAAG,EAAE;AACL,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE;QACzB,IAAI,CAAC,WAAW,EAAE;IACtB;IAEO,OAAO,GAAA;QACV,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACZ;QACJ;AACA,QAAA,GAAG,EAAE;AACL,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE;QACzB,IAAI,CAAC,WAAW,EAAE;IACtB;IAEO,KAAK,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;;YAEjB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAAG,KAAK,aAAa,IAAI,IAAI,CAAC,GAAG,KAAK,cAAc,EAAE;gBAC1G,IAAI,CAAC,WAAW,EAAE;YACtB;YAEA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACzC;QACA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;IACvE;IAEO,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;IACvE;IAEO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY;AACxB,QAAA,IAAI,CAAC,GAAG,GAAG,aAAa;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,CAAC,KAAK,EAAE;IAChB;IAEO,OAAO,GAAA;;QAEV,QAAQ,IAAI;AACR,YAAA,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;;AAE/B,gBAAA,OAAO,kCAAkC;AAC7C,YAAA,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;;AAEhC,gBAAA,OAAO,sCAAsC;AACjD,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;;AAEhC,gBAAA,OAAO,kCAAkC;AAC7C,YAAA;AACI,gBAAA,OAAO,kCAAkC;;IAErD;AAEO,IAAA,cAAc,CAAC,IAAU,EAAA;QAC5B,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;YAC7B;QACJ;QAEA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACxB,YAAA,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;AAC3B,YAAA,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;SAC5B;AAED,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,KAAK,EAAE;QAChB;QAEA,IAAI,CAAC,UAAU,EAAE;IACrB;8GA/pBS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,k/BCxBrC,2nUA2RA,EAAA,MAAA,EAAA,CAAA,wpPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDnQa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,2nUAAA,EAAA,MAAA,EAAA,CAAA,wpPAAA,CAAA,EAAA;;sBAOhB;;sBAKA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAKA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA,SAAS;uBAAC,UAAU;;sBAEpB,SAAS;uBAAC,eAAe;;sBAEzB,SAAS;uBAAC,kBAAkB;;sBA6C5B,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;sBAY3C,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE;;;ME7HxB,yBAAyB,CAAA;AAPtC,IAAA,WAAA,GAAA;AAWY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;AAWtD,IAAA;AAPC;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;8GAdW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,gLCTtC,+QASA,EAAA,MAAA,EAAA,CAAA,yjCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDAa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,+QAAA,EAAA,MAAA,EAAA,CAAA,yjCAAA,CAAA,EAAA;;sBAIlB;;sBAEA;;sBAEA;;;MEKU,oBAAoB,CAAA;AAuB/B,IAAA,WAAA,CAAoB,WAAuB,EAAA;QAAvB,IAAA,CAAA,WAAW,GAAX,WAAW;QAtBtB,IAAA,CAAA,UAAU,GAAiB,EAAE;QAC7B,IAAA,CAAA,kBAAkB,GAAiB,EAAE;QACrC,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,KAAK,GAAG,OAAO;QACf,IAAA,CAAA,WAAW,GAAG,cAAc;QAC5B,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,MAAM,GAAW,IAAI;QACrB,IAAA,CAAA,WAAW,GAAW,MAAM;AAE3B,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAW;AACjD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAc;QAEjD,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,UAAU,GAAG,EAAE;QACd,IAAA,CAAA,yBAAyB,GAAwB,IAAI;AAErD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA+B;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAA2B;IAEf;AAEtC,IAAA,WAAW,CAAC,IAAS,EAAA;QAC3B,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS;IACzD;AAEO,IAAA,WAAW,CAAC,IAAS,EAAA;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACvC,OAAO,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;IAC1C;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YACzB,IAAI,CAAC,eAAe,EAAE;QACxB;QACA,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC;AACzD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE;YAC3D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACvE;IACF;AAGA,IAAA,cAAc,CAAC,KAAiB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AACjC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;IACF;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;AAC1B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;QAC9C;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;QACvC;IACF;AAEQ,IAAA,gBAAgB,CAAC,cAAsB,EAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACnE,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc;IAC5D;AAEA,IAAA,IAAW,iBAAiB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,yBAAyB,KAAK,IAAI,EAAE;YAC3C,OAAO,IAAI,CAAC,yBAAyB;QACvC;QACA,OAAO,IAAI,CAAC,kBAAkB;IAChC;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;YACrC;QACF;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AACjD,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB;AAE9C,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9G,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC5C,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;gBAEhC,IAAI,OAAO,GAAG,EAAE;AAChB,gBAAA,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC/B,oBAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AACjC,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AAClD,oBAAA,IAAI,CAAC,MAAM;wBAAE;oBACb,OAAO,GAAG,MAAM;gBAClB;YACF;QACF;QAEA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;AAG7E,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;AACxB,gBAAA,EAAE,CAAC,MAAM,GAAG,IAAI;YAClB;QACF;QAEA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC/D;AAEA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC;IAC5D;AAEA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa;QAChC,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;AAC1B,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AACjD,YAAA,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;QACvD;QACA,OAAO,CAAA,EAAG,KAAK,CAAA,SAAA,CAAW;IAC5B;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK;IACvD;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;IACnD;AAEO,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;IACjC;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM;YAAE;AAC9B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA+B;AAClD,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;QAClC;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;AAEnB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,QAAQ,EAAE,MAAM,EAAE;AACpB,gBAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;oBAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC9B,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;wBACnC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;oBACpC;gBACF;YACF;QACF;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,OAAO,GAAG,IAAI;AAClB,YAAA,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC/B,gBAAA,KAAK,EAAE;gBACP,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxC,gBAAA,IAAI,CAAC,MAAM;oBAAE;gBACb,OAAO,GAAG,MAAM;YAClB;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QACpB;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,MAAM,aAAa,GAAG,CAAC,IAAgB,KAAY;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,QAAQ,EAAE,MAAM;AAAE,gBAAA,OAAO,CAAC;YAC/B,IAAI,KAAK,GAAG,CAAC;AACb,YAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC9B,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC;AACxC,oBAAA,KAAK,IAAI,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC;gBAC5C;YACF;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AACD,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;YACnE;QACF;IACF;AAEO,IAAA,aAAa,CAAC,KAAmB,EAAA;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB;QAC1C,MAAM,OAAO,GAAiB,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAgB,KAAI;YACjC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAAE;YACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAAE;YACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,QAAQ,EAAE,MAAM,EAAE;AACpB,gBAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;oBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;oBACxC,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,KAAK,CAAC;oBACd;gBACF;YACF;AACF,QAAA,CAAC;AACD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;gBACzB,KAAK,CAAC,IAAI,CAAC;YACb;QACF;AACA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;AACnC,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB;QACF;AACA,QAAA,OAAO,OAAO;IAChB;AAEO,IAAA,iBAAiB,CAAC,MAAkB,EAAA;AACzC,QAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;QACb;QACA,OAAO,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACxD;AAEO,IAAA,cAAc,CAAC,MAAkB,EAAA;AACtC,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM;IAChC;AAEO,IAAA,aAAa,CAAC,MAAkB,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IAC5D;AAEO,IAAA,uBAAuB,CAAC,MAAkB,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,KAAK;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AACxC,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;QACjE,OAAO,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,cAAc,CAAC,MAAM;IACjE;AAEQ,IAAA,iBAAiB,CAAC,MAAkB,EAAA;QAC1C,MAAM,MAAM,GAAiB,EAAE;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,MAAM;AAAE,YAAA,OAAO,MAAM;AACpC,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;YACxC,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC/C;QACF;AACA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,wBAAwB,CAAC,MAAkB,EAAA;AACjD,QAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI;YAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAAE;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AACrD,QAAA,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AACvD,QAAA,MAAM,CAAC,OAAO,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;IACvC;AAEQ,IAAA,iBAAiB,CAAC,IAAgB,EAAA;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,MAAM;YAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;AAC7B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC1C;YACF;AACA,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC3B,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC1B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC9B;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,iBAAiB,CAAC,MAAkB,EAAA;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;QAE5B,MAAM,WAAW,GAAc,EAAE;QACjC,IAAI,OAAO,GAA2B,MAAM;AAE5C,QAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAQ,CAAC,QAAS,CAAC;AACpD,YAAA,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS;AACpE,YAAA,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE;AAC3B,gBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB;iBAAO;gBACL,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,gBAAA,WAAW,CAAC,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC;YACzD;YACA,OAAO,GAAG,MAAM;QAClB;QAEA,WAAW,CAAC,OAAO,EAAE;QAErB,MAAM,MAAM,GAAa,EAAE;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,WAAW,IAAI,CAAC,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,YAAA,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;YAE7B,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;YAC1C;iBAAO;AACL,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;YAC1C;QACF;AACA,QAAA,OAAO,MAAM;IACf;IAEO,UAAU,GAAA;QACf,OAAO,IAAI,CAAC,QAAQ;IACtB;8GA3UW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,khBCpBjC,iiHAuGA,EAAA,MAAA,EAAA,CAAA,mtGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDnFa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,iiHAAA,EAAA,MAAA,EAAA,CAAA,mtGAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBA+BA,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;MEvDjC,yBAAyB,CAAA;AAsBpC,IAAA,WAAA,GAAA;AAlBU,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAQzC,IAAA,CAAA,QAAQ,GAAG,KAAK;QAIhB,IAAA,CAAA,IAAI,GAAgB,IAAI;IAMjB;IAEhB,QAAQ,GAAA;IACR;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;AACvB,YAAA,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE;AACpC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK;YACjC;iBACK;AACH,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;YACzB;QACF;IACF;AAEO,IAAA,UAAU,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;QACA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3C;8GA3CW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,gTCTtC,k3BAkCA,EAAA,MAAA,EAAA,CAAA,08EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDzBa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,k3BAAA,EAAA,MAAA,EAAA,CAAA,08EAAA,CAAA,EAAA;;sBAIlB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;;MElBU,YAAY,CAAA;AAPzB,IAAA,WAAA,GAAA;QAQa,IAAA,CAAA,IAAI,GAAyB,SAAS;AAClD,IAAA;8GAFY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,kGCTzB,kFAGA,EAAA,MAAA,EAAA,CAAA,4aAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDMa,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EAGN,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,kFAAA,EAAA,MAAA,EAAA,CAAA,4aAAA,CAAA,EAAA;;sBAGhB;;;MEDQ,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,OAAO,GAAqG,SAAS;QAErH,IAAA,CAAA,UAAU,GAAkG,QAAQ;QAGpH,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,IAAI,GAAsC,IAAI;QAC9C,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,SAAS,GAAY,KAAK;QAC1B,IAAA,CAAA,IAAI,GAAkC,QAAQ;AA8DxD,IAAA;AA5DC,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,kBAAkB;IAC/C;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,MAAM,OAAO,GAAG,EAAE;;AAGlB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;AAC9B,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;QAC7B;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,EAAE;AAC5C,YAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACvC;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE;AACvC,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC;QACxC;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,eAAe,EAAE;AAC3C,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACtC;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;AACtC,YAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACvC;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE;AACvC,YAAA,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAClC;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;AAClC,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACnC;;QAGA,OAAO,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;;AAGnC,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACpC;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACnD,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACpC;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACpC;;AAGA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;QAC7B;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAClC;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;QAC5B;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;IAEA,WAAW,GAAA;;AAET,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,QAAQ;IAC9B;8GAzEW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,iRCT/B,8rBA8BS,EAAA,MAAA,EAAA,CAAA,2kTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDrBI,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,8rBAAA,EAAA,MAAA,EAAA,CAAA,2kTAAA,CAAA,EAAA;;sBAIlB;;sBAEA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEYU,oBAAoB,CAAA;AAyD/B,IAAA,WAAA,CAAmB,QAAmB,EAAA;QAAnB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAxDlB,QAAA,IAAA,CAAA,MAAM,GAAkB,EAAE,KAAK,EAAE,EAAE,EAAE;QAIrC,IAAA,CAAA,QAAQ,GAAG,OAAO;QAElB,IAAA,CAAA,aAAa,GAAwB,OAAO;AAE3C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;QAE1C,IAAA,CAAA,SAAS,GAAG,KAAK;AAEhB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAW;QAE9C,IAAA,CAAA,aAAa,GAAG,KAAK;QAYrB,IAAA,CAAA,cAAc,GAAyB,OAAO;QAEhD,IAAA,CAAA,UAAU,GAAG,EAAE;QAEf,IAAA,CAAA,SAAS,GAAG,KAAK;QAEhB,IAAA,CAAA,iBAAiB,GAAQ,EAAE;QAI5B,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,SAAS,GAAG,KAAK;QAEjB,IAAA,CAAA,OAAO,GAAG,KAAK;QAEf,IAAA,CAAA,UAAU,GAAG,KAAK;QAIlB,IAAA,CAAA,YAAY,GAAa,EAAE;QAE3B,IAAA,CAAA,kBAAkB,GAAG,mBAAmB;QAExC,IAAA,CAAA,wBAAwB,GAA8B,EAAE;IAMtB;AAElC,IAAA,WAAW,CAAC,OAAY,EAAA;QAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE;;YAEjD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACpC,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;0BACnB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU;0BAC5C,EAAE;gBACR;qBAAO,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACvD,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;;oBAG3C,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE;AAC/D,wBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,EAAE;oBAC3D;gBACF;qBAAO,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC3D,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;gBACvB;AAEA,gBAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AACtC,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACtB;YACF;YAEA,IAAI,CAAC,WAAW,EAAE;AAElB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE;AAC3C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;YACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAClD;QAEA,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE;AACjD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;YAEhE,IAAI,CAAC,kBAAkB,EAAE;QAC3B;QAEA,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE;AACvD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;YACzC,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;AAGA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;;YAEnC;QACF;QACA,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACzD;QACF;;QAGA,IAAI,CAAC,IAAI,EAAE;;QAGX,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAGA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;IAC3C;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;IAC3C;AAGA,IAAA,eAAe,CAAC,KAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;QACF;AAEA,QAAA,IACE,KAAK,CAAC,GAAG,KAAK,SAAS;YACvB,KAAK,CAAC,GAAG,KAAK,WAAW;YACzB,KAAK,CAAC,GAAG,KAAK,QAAQ;YACtB,KAAK,CAAC,GAAG,KAAK,UAAU;YACxB,KAAK,CAAC,GAAG,KAAK,MAAM;AACpB,YAAA,KAAK,CAAC,GAAG,KAAK,KAAK,EACnB;AACA,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;YAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACnC;YACF;YAEA,IACE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrD,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAC5C;gBACA;YACF;YACA,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,sBAAsB,EAAE;QAC/B;IACF;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;IAC1B;AAEO,IAAA,eAAe,CAAC,IAAuB,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AACnD,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,CAAC;YAC5C;AACA,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,UAAU,EAAE;AAC9C,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACnC,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,uBAAuB,CAC7B,KAGG,EAAA;QAEH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAI;AAChC,YAAA,OAAO,OAAO,CACZ,OAAO,EAAE,CAAC,EAAE,KAAK;AACf,kBAAE,OAAO,EAAE,CAAC,EAAE,KAAK;kBACjB,EAAE,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK;AAC9B,sBAAE,OAAO,EAAE,CAAC,IAAI,KAAK;AACrB,sBAAE,EAAE,CAAC,IAAI,CACZ;AACH,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;;AAE9C,QAAA,SAAS,CAAC,OAAO,CACf,CAAC,EAAmB,EAAE,KAAa,MAAM,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,CAC3D;AACD,QAAA,OAAO,SAAS;IAClB;AAEO,IAAA,WAAW,CAAC,IAAuB,EAAA;QACxC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IAClE;AAEO,IAAA,YAAY,CAAC,IAAuB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC;AAC/D,YAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM;AACnE,YAAA,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC;QAChC;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC;QACpD;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AACtC,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9D;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AACpC,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAC5D;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B;aAAO;AACL,YAAA,OAAO,KAAK;QACd;IACF;IAEO,iBAAiB,GAAA;;;AAGtB,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAEnC,IAAI,CAAC,WAAW,EAAE;IACpB;IAEQ,MAAM,uBAAuB,CAAC,iBAA0B,EAAA;QAC9D,MAAM,QAAQ,GAAG,EAAE;QACnB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC1C,YAAA,IAAI,UAAU,CAAC,aAAa,EAAE;AAC5B,gBAAA,UAAU,CAAC,WAAW,GAAG,IAAI;AAC7B,gBAAA,UAAU,CAAC,kBAAkB,GAAG,EAAE;AAClC,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YAC7D;QACF;AAEA,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;;QAG3B,IAAI,CAAC,WAAW,EAAE;IACpB;IAEQ,WAAW,GAAA;QACjB,IAAI,OAAO,GAAG,KAAK;QAEnB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC1C,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE;AACrC,gBAAA,IAAI,UAAU,CAAC,aAAa,EAAE;AAC5B,oBAAA,IAAI,UAAU,CAAC,YAAY,EAAE;;wBAE3B,OAAO,GAAG,IAAI;oBAChB;AAAO,yBAAA,IAAI,UAAU,CAAC,kBAAkB,EAAE,MAAM,EAAE;wBAChD,OAAO,GAAG,IAAI;oBAChB;gBACF;qBAAO;oBACL,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC3C,oBAAA,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;;AAE7B,wBAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B;AACvD,wBAAA,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE;4BACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;wBACzB;;AAGA,wBAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB;AAC9C,wBAAA,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE;4BACtC,MAAM,YAAY,GAChB,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;AAC5D,4BAAA,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE;AACtE,gCAAA,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;;gCAEtB,IAAI,OAAO,GAAG,EAAE;AAChB,gCAAA,OAAO,OAAO,CAAC,QAAQ,EAAE;AACvB,oCAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;oCACjC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxC,oCAAA,IAAI,CAAC,OAAO;wCAAE;gCAChB;4BACF;wBACF;wBACA,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAC1D,CAAC,EAAE,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAC/B;;AAED,wBAAA,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,kBAAkB,EAAE;AAC9C,4BAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE;AACvB,gCAAA,EAAE,CAAC,MAAM,GAAG,IAAI;4BAClB;wBACF;AACA,wBAAA,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,EAAE,QAAQ,CAAC;oBAC7F;yBAAO;AACL,wBAAA,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,KAAI;4BAClE,MAAM,YAAY,GAChB,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;AAC5D,4BAAA,OAAO;AACJ,iCAAA,WAAW;iCACX,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAC5C,wBAAA,CAAC,CAAC;wBACF,IAAI,MAAM,EAAE;AACV,4BAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B;AACvD,4BAAA,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE;gCACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;4BACzB;AACA,4BAAA,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,EAAE,QAAQ,CAAC;wBAC7F;oBACF;AAEA,oBAAA,IAAI,UAAU,CAAC,kBAAkB,CAAC,MAAM,EAAE;wBACxC,OAAO,GAAG,IAAI;oBAChB;gBACF;YACF;AAAO,iBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE;gBAC1C,IACE,IAAI,CAAC,UAAU;AACf,oBAAA,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAChE;AACA,oBAAA,UAAU,CAAC,kBAAkB,GAAG,EAAE;gBACpC;YACF;AAAO,iBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE;gBAC5C,IACE,IAAI,CAAC,UAAU;AACf,oBAAA,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,EAClE;AACA,oBAAA,UAAU,CAAC,kBAAkB,GAAG,EAAE;gBACpC;YACF;QACF;QAEA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO;IACvD;AAEO,IAAA,MAAM,QAAQ,CAAC,IAAuB,EAAE,iBAA0B,EAAA;AACvE,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,MAAM,yBAAyB;YACjC;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC9B;;AAGA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;YAC5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CACpC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,EAC/B,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAC9B,KAAK,CACN;YAED,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,KAAK;;YAG3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAGlE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC;iBACrB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO;iBACvB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAEnB,IAAI,iBAAiB,EAAE;;gBAErB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACtD,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAClC;;AAED,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;gBAC7D,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACxE;iBAAO;;AAEL,gBAAA,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE;oBAC1C,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjD;YACF;QACF;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QACpB;gBAAU;AACR,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B;IACF;AAEO,IAAA,UAAU,CAAC,IAAuB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;AAE9B,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE;AAClE,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC5B;YACF;QACF;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS;AAChD,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;QAElC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAE9B,gBAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;AACpC,oBAAA,MAAM,CAAC,OAAO,GAAG,SAAS;gBAC5B;YACF;AAEA,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;YAC7C;AAEA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE;YAC7C;AAEA,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE;YACxB;AACA,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC1B,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACtB;AACA,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACzB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;oBAC9B,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,EAAE;AAC/B,wBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;oBACnB;yBAAO;AACL,wBAAA,CAAC,CAAC,QAAQ,GAAG,KAAK;oBACpB;AACF,gBAAA,CAAC,CAAC;YACJ;QACF;IACF;IAEQ,sBAAsB,GAAA;QAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACpC,YAAA,QAAQ,IAAI,CAAC,IAAI;AACf,gBAAA,KAAK,aAAa;AAChB,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;wBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;AAElD,wBAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;4BACtC,QAAQ,CAAC,OAAO,GAAG;kCACf,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;kCAC9B,KAAK;wBACX;oBACF;oBACA;AACF,gBAAA,KAAK,WAAW;oBACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AACnD,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,GAAG,EAAE,IAAI;qBACV;oBACD;AACF,gBAAA,KAAK,aAAa;AAChB,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;oBACzD;AACF,gBAAA,KAAK,QAAQ;oBACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;oBACjD;AACF,gBAAA,KAAK,MAAM;oBACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC5C;AACF,gBAAA,KAAK,OAAO;oBACV,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;oBACrD;;QAEN;IACF;IAEO,KAAK,GAAA;QACV,IAAI,CAAC,YAAY,EAAE;AAEnB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AACpC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE;AAE3C,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACrC;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACpC,IAAI,QAAQ,GAAG,KAAK;QACpB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE;gBACb,QAAQ,GAAG,IAAI;YACjB;QACF;QACA,IAAI,QAAQ,EAAE;AACZ,YAAA,UAAU,CAAC,OAAO,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;YAChD;QACF;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACxB;QACA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAEhD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;QAGnC,IAAI,CAAC,kBAAkB,EAAE;QAEzB,IAAI,CAAC,IAAI,EAAE;IACb;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;QAEtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;;gBAE/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;;AAGjD,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,CAAC,CAAa,EAAE,CAAa,KAC3B,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAClD;YACH;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;;;AAGtB,gBAAA,IACE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAClE;AACA,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;gBACvB;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACvB;QACF;QAEA,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;AAC9D,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAA,CAAE,CAAC;QACpE;QACA,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACrD;IACF;IAEQ,eAAe,GAAA;QACrB,MAAM,MAAM,GAAG,EAAE;QAEjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACpC,YAAA,QAAQ,IAAI,CAAC,IAAI;AACf,gBAAA,KAAK,aAAa;oBAChB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAC7C,wBAAA,MAAM,UAAU,GAAG,IAAI,CAAC;6BACrB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO;6BACvB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAEnB,wBAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,4BAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU;wBAC/B;oBACF;oBACA;AACF,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;wBAChE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS;oBACnC;oBACA;AACF,gBAAA,KAAK,aAAa;oBAChB,IACE,IAAI,CAAC,WAAW;AAChB,wBAAA,OAAO,IAAI,EAAE,WAAW,EAAE,IAAI,KAAK,QAAQ;wBAC3C,OAAO,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,QAAQ,EACzC;wBACA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW;oBACrC;oBACA;AACF,gBAAA,KAAK,QAAQ;oBACX,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK;oBACxC;AACF,gBAAA,KAAK,MAAM;AACT,oBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;wBACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI;oBAC9B;oBACA;AACF,gBAAA,KAAK,OAAO;oBACV,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAClE;;QAEN;AAEA,QAAA,OAAO,MAAM;IACf;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;IAEO,YAAY,CAAC,KAAa,EAAE,IAAuB,EAAA;QACxD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IACvE;IAEO,YAAY,CAAC,IAAgB,EAAE,UAA6B,EAAA;AACjE,QAAA,IAAI,UAAU,CAAC,aAAa,EAAE;;YAE5B,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YACpE,IAAI,SAAS,EAAE;AACb,gBAAA,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;YAClC;iBAAO;AACL,gBAAA,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAClC;;AAEA,YAAA,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;QACxE;;IAEF;IAEO,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;QACzC,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;QACpC;IACF;AAEO,IAAA,eAAe,CAAC,IAAuB,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,IACE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ;AACzC,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,QAAQ;gBACvC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,EAC3C;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,CAAA,2EAAA,CAA6E,CAC9E;AACD,gBAAA,OAAO,KAAK;YACd;QACF;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AAC7B,YAAA,IACE,IAAI,CAAC,SAAS,CAAC,KAAK;gBACpB,IAAI,CAAC,SAAS,CAAC,GAAG;AAClB,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAC7D;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,CAAA,gEAAA,CAAkE,CACnE;AACD,gBAAA,OAAO,KAAK;YACd;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAEO,eAAe,CAAC,MAA4B,OAAO,EAAA;AACxD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAA4B;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAgB;AACpE,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,MAAM,IAAI,GACR,GAAG,KAAK;AACN,cAAE,IAAI,CAAC,qBAAqB;AAC5B,cAAE,SAAS,CAAC,qBAAqB,EAAE;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG;AAEvC,QAAA,IAAI,GAAG,KAAK,UAAU,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC;QAC/C;aAAO;YACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC;QAClD;AAEA,QAAA,IAAI,GAAG,KAAK,OAAO,EAAE;YACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACvD,gBAAA,IAAI,CAAC,SAAS;AACZ,oBAAA,kBAAkB,KAAK;AACrB,0BAAE,CAAA,EAAG,MAAM,CAAC,UAAU,GAAG,KAAK,CAAA,EAAA;0BAC5B,OAAO;AACb,gBAAA,IAAI,CAAC,QAAQ,GAAG,kBAAkB,KAAK,OAAO,GAAG,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI,GAAG,OAAO;YACxE;iBAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACzC,IAAI,CAAC,SAAS,GAAG,CAAA,EAAG,MAAM,CAAC,UAAU,GAAG,KAAK,CAAA,EAAA,CAAI;AACjD,gBAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;YACzB;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,EAAG,IAAI,IAAI;AAC3B,gBAAA,IAAI,CAAC,SAAS,GAAG,OAAO;YAC1B;YAEA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACnD,gBAAA,IAAI,CAAC,OAAO;AACV,oBAAA,gBAAgB,KAAK,QAAQ,GAAG,CAAA,EAAG,GAAG,GAAG,EAAE,CAAA,EAAA,CAAI,GAAG,OAAO;AAC3D,gBAAA,IAAI,CAAC,UAAU,GAAG,gBAAgB,KAAK,KAAK,GAAG,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,GAAG,OAAO;YACxE;iBAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO;gBACtB,IAAI,CAAC,UAAU,GAAG,CAAA,EAAG,MAAM,GAAG,EAAE,IAAI;YACtC;iBAAO;gBACL,IAAI,CAAC,OAAO,GAAG,CAAA,EAAG,GAAG,GAAG,EAAE,IAAI;AAC9B,gBAAA,IAAI,CAAC,UAAU,GAAG,OAAO;YAC3B;QACF;aAAO;YACL,IAAI,aAAa,GAAG,EAAE;YACtB,IAAI,eAAe,GAAG,EAAE;YAExB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,gBAAA,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC9C,gBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAC5C;iBAAO;AACL,gBAAA,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO;AACnE,gBAAA,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ;YAClE;AACA,YAAA;gBACE,eAAe;gBACf,gBAAgB;gBAChB,cAAc;gBACd,iBAAiB;AAClB,aAAA,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA,SAAA,EAAY,eAAe,CAAA,CAAE,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA,SAAA,EAAY,aAAa,CAAA,CAAE,CAAC;QAChE;IACF;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,GAAG,GACP,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG;AAClE,QAAA,OAAO,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,KAAK,GAAG,QAAQ;IACxD;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,IAAI,GACR,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI;AACnE,QAAA,OAAO,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO;IACxD;IAEO,0BAA0B,GAAA;QAI/B,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,SAAS,EAAE;oBACT,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;oBACvC,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AACpC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE;AACT,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AAC3D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AACxD,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE;oBACT,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;oBACxC,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AACrC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE;AACT,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AAC5D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AACzD,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE;oBACT,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;oBACzC,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AACtC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE;AACT,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAC9D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAC3D,iBAAA;AACF,aAAA;SACF;IACH;IAEQ,aAAa,CAAC,KAAmB,EAAE,OAAyC,EAAA;AAClF,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB;QAC1C,MAAM,OAAO,GAAiB,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAgB,KAAI;AACjC,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE;AAC3B,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACzB,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;oBAClC,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,KAAK,CAAC;oBACd;gBACF;YACF;AACF,QAAA,CAAC;AACD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;gBACzB,KAAK,CAAC,IAAI,CAAC;YACb;QACF;AACA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACzB,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB;QACF;AACA,QAAA,OAAO,OAAO;IAChB;AAEO,IAAA,WAAW,CAAC,UAA6B,EAAA;QAC9C,OAAO,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK;IAC1E;IAEO,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAA;AAC5C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;QACjC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI;IACvD;AAEO,IAAA,0BAA0B,CAAC,IAAI,EAAA;QACpC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ;IACpD;AAEO,IAAA,mBAAmB,CAAC,IAAI,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;QACvE;IACF;AAEA,IAAA,IAAW,mBAAmB,GAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC3B,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,CACrE;IACH;AAEA,IAAA,IAAW,aAAa,GAAA;QACtB,IAAI,KAAK,GAAG,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACpC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE;AAClD,gBAAA,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;YAC1D;QACF;AACA,QAAA,OAAO,KAAK;IACd;8GAv2BW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,i4BCjCjC,irdAuTA,EAAA,MAAA,EAAA,CAAA,27JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,yBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,aAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,YAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDtRa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,irdAAA,EAAA,MAAA,EAAA,CAAA,27JAAA,CAAA,EAAA;;sBAGlB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBA0BA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAExC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBA+C5C,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;sBAsB3C,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE;;sBAShC,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE;;sBAShC,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MEzK/B,0BAA0B,CAAA;AAEnC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAsB;8GAFxC,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,yBAAyB,CAAA;AAElC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAsB;8GAFxC,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,0BAA0B,CAAA;AAErC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAsB;8GAFtC,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCqDY,oBAAoB,CAAA;AA6E/B;;AAEG;IACH,IACI,WAAW,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;AACA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,aAAa;IAC3B;AAqJA,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;AApO9B;;AAEG;AACO,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAe;AAE7D;;AAEG;QACM,IAAA,CAAA,OAAO,GAA2B,EAAE;AAY7C;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,EAAE;AAEtB;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,QAAQ;AAE/B;;AAEG;QACM,IAAA,CAAA,WAAW,GAAqD,SAAS;AAiBlF;;AAEG;QACM,IAAA,CAAA,WAAW,GAAW,MAAM;AAErC;;AAEG;QACM,IAAA,CAAA,MAAM,GAAW,IAAI;AAE9B;;AAEG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK;AAE1B;;AAEG;QACM,IAAA,CAAA,aAAa,GAAG,KAAK;AAa9B;;AAEG;QACI,IAAA,CAAA,UAAU,GAAG,KAAK;AAEzB;;AAEG;QACM,IAAA,CAAA,aAAa,GAAG,KAAK;AAE9B;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,KAAK;AAE/B;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEzB;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEzB;;AAEG;QACM,IAAA,CAAA,KAAK,GAAG,KAAK;AAOtB;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,KAAK;AAE5B;;AAEG;QACM,IAAA,CAAA,IAAI,GAAgB,IAAI;AAEjC;;;AAGG;QACM,IAAA,CAAA,YAAY,GAAY,KAAK;AAGtC;;AAEG;QACM,IAAA,CAAA,UAAU,GAAY,KAAK;AAEpC;;AAEG;QACM,IAAA,CAAA,kBAAkB,GAAY,KAAK;AAE5C;;AAEG;QACM,IAAA,CAAA,oBAAoB,GAAY,IAAI;AAQ7C;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAiC,IAAI,YAAY,EAAkB;AAEzF;;AAEG;QACM,IAAA,CAAA,kBAAkB,GAAY,KAAK;AAO5C;;AAEG;QACM,IAAA,CAAA,aAAa,GAAG,KAAK;AAO9B;;AAEG;QACM,IAAA,CAAA,sBAAsB,GAA2B,MAAM;AAEhE;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAoC,IAAI,YAAY,EAAqB;AAE/F;;AAEG;AACO,QAAA,IAAA,CAAA,MAAM,GAA8B,IAAI,YAAY,EAAe;AAE7E;;AAEG;QACI,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,eAAe,GAA2B,EAAE;QAC5C,IAAA,CAAA,eAAe,GAAG,EAAE;QACpB,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,MAAM,GAAwB,IAAI;QAClC,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,YAAY,GAAG,KAAK;;QAIpB,IAAA,CAAA,sBAAsB,GAAiB,EAAE;QACzC,IAAA,CAAA,aAAa,GAAG,KAAK;IAiBiB;AAE7C;;AAEG;IACH,yBAAyB,GAAA;AACvB,QAAA,QAAQ,IAAI,CAAC,sBAAsB;AACjC,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,aAAa;AACtB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,eAAe;AACxB,YAAA,KAAK,MAAM;AACX,YAAA;AACE,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,eAAe;;IAEzE;AAEQ,IAAA,gBAAgB,CAAC,cAAsB,EAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAClE,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc;IAC5D;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,QAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;;AAG1B,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpD,YAAA,OAAO,QAAQ;QACjB;;QAGA,OAAO,CAAA,wBAAA,EAA2B,QAAQ,CAAA,IAAA,CAAM;IAClD;AAEA;;AAEG;IACI,WAAW,CAAC,MAAqB,EAAE,WAAoB,EAAA;;QAE5D,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;QAC1C;AAEA,QAAA,IAAI,MAAM,EAAE,IAAI,EAAE;YAChB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1C;AAEA,QAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;YACpB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9C;AAEA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,WAAW,CAAC,SAAqG,EAAA;AAC/G,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAQ,KAAI;AAChD,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS;AAC9D,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QACvD,CAAC,CAAC,IAAI,KAAK;AACX,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;QACrB;QACA,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE;AAC5B,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACpF,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEjD,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACrB;YACF;QACF;IACF;AAEA;;AAEG;IACH,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;AAC1B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;;;AAGtB,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AACvD,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACrB;YACF;iBAAO;gBACL,IAAI,CAAC,aAAa,EAAE;YACtB;QACF;IACF;AAEA;;;AAGG;AACI,IAAA,eAAe,CAAC,KAAY,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACjE;QACF;AACA,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAqB;QACtC,MAAM,SAAS,GAAG,EAAE;AACpB,QAAA,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,IAAI,SAAS,EAAE;AACjE,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB;IACF;AAEA;;;AAGG;IACK,gBAAgB,GAAA;AACtB,QAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACrC,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,CAAC,EAAE,GAAG,CAAC;IACT;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,MAAoB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAE5E,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC;QAC3C;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;AAEnB,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YACvD;QACF;QAEA,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA;;AAEG;AACK,IAAA,uBAAuB,CAAC,KAAU,EAAA;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACvB;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAEzC,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B;aAAO;YACL,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC;QAEA,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,MAAoB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACzD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAkB,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC;QAC3F;aAAO;YACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAA2B,CAAC,KAAK,QAAQ;QAClE;IACF;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,MAAW,EAAA;QAC1B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;AACjD,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG;AAC7C,qBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC;qBAC7C,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;qBACd,IAAI,CAAC,GAAG,CAAC;gBACZ,OAAO,aAAa,IAAI,EAAE;YAC5B;iBAAO;AACL,gBAAA,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC;AAC3F,gBAAA,OAAO,EAAE;YACX;QACF;AACA,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB;AAEA;;AAEG;AACI,IAAA,OAAO,CAAC,MAAuB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACtC;AAGA;;AAEG;AACH,IAAA,cAAc,CAAC,MAAoB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B;AAEA;;AAEG;AACK,IAAA,KAAK,CAAC,MAAgC,EAAA;QAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;AACjD,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAiC,EAAE,IAAI,CAAC,MAAM,CAAC;YAClF;iBAAO;AACL,gBAAA,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC;AACtF,gBAAA,OAAO,EAAE;YACX;QACF;aAAO;AACL,YAAA,OAAO,MAAyB;QAClC;IACF;AAEA;;AAEG;IACK,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAEnB,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;AACjC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;YAC5B;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACzD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE;YACpE;iBAAO;gBACL,IAAI,CAAC,eAAe,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAA,SAAA,CAAW;YAC9D;;YAEA,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACxD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe;YAC9C;QACF;aAAO;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,YAAA,IAAI,CAAC,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE;;YAElE,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,EAAE;gBAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YACvD;QACF;IACF;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC,IAAI,IAAI;QACxD;QACA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI;IACpE;AAEA;;AAEG;IACI,YAAY,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM;QACrE;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;QACjE;IACF;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,KAAU,EAAA;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO,CAAC,CAAC;AAE/C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAkB,CAAC,KAAK,OAAO,CAAC;QACrF;aAAO;YACL,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;QACxC;IACF;AAEA;;AAEG;IACI,SAAS,GAAA;QACd,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE;QAC1E,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAgB,KAAK,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpG;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACvB;QAEA,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;AAEG;IACI,eAAe,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;;AAExB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACvB;aAAO;;AAEL,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAgB,KAC3D,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CACxC;QACH;QAEA,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;AAEG;IACI,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC3D,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,KAAK;QACd;;QAGA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,IAAG;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACnC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAa,KAAI;AAC7C,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ;gBACtE,OAAO,UAAU,KAAK,QAAQ;AAChC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,oBAAoB,CAAC,MAA+B,EAAE,IAAY,EAAA;AACxE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;YACvC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAI,GAAG,EAAE;AAC9C,gBAAA,OAAQ,GAA+B,CAAC,CAAC,CAAC;YAC5C;iBAAO;AACL,gBAAA,OAAO,IAAI;YACb;QACF,CAAC,EAAE,MAAiB,CAAoB;IAC1C;AAEA;;AAEG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACzD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;AAE7C,YAAA,IAAI,aAAa,KAAK,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7D;iBAAO;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAA,EAAG,aAAa,WAAW;YAC9C;QACF;aAAO;YACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1D;IACF;AAEA;;AAEG;AACI,IAAA,gBAAgB,CAAC,GAAQ,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAmB,CAAC;QACnD;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AACjE,gBAAA,OAAO,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;YACvD;iBAAO;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACzC,oBAAA,OAAO,EAAE;gBACX;gBACA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC;gBAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,GAAmB,CAAC;YAC7D;QACF;IACF;AAEA;;AAEG;IACK,UAAU,GAAA;;;QAGhB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/C,CAAC,EAAE,CAAC,CAAC;IACP;AAEA;;AAEG;IACH,aAAa,GAAA;;;AAGX,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YACxC;QACF;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;QACjD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAG;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;AAC3D,YAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;AACtC,QAAA,CAAC,CAAC;IAEJ;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACF;QACA,IAAI,CAAC,aAAa,EAAE;IACtB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACF;QACA,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;AACA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACF;QACA,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAEzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;AAEpB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;QAElB,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAiB,EAAA;;QAE5B,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAA4B;AACxD,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC5E,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe;gBAC9C;YACF;QACF,CAAC,EAAE,GAAG,CAAC;IACT;AAEA;;AAEG;IACH,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,OAAO,IAAI;AAEpC,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACzD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpD;AACA,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;IACjD;AAEA;;AAEG;IACH,wBAAwB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AAElC,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACzD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1D,gBAAA,OAAO,MAAM,EAAE,aAAa,IAAI,IAAI;YACtC;;AAEA,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,QAAA,OAAO,MAAM,EAAE,aAAa,IAAI,IAAI;IACtC;AAEA;;AAEG;AAEH,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACzB;IACF;AAEA;;AAEG;AACI,IAAA,MAAM,YAAY,CAAC,UAAA,GAAsB,KAAK,EAAA;;AAEnD,QAAA,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACpC;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,KAAY,EAAA;QACxB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,EAAE,EAAE;YACtH,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;AAEA;;AAEG;IACI,kBAAkB,GAAA;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC3E,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;QAC1B,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzB;AAEA;;AAEG;IACI,kBAAkB,GAAA;QACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzB;AAEA;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,MAAM,OAAO,GAAG,CAAC,sBAAsB,CAAC;QAExC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;QAChD,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACrC,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;QAC1C,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAExD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA;;AAEG;IACI,MAAM,QAAQ,CAAC,iBAA0B,EAAA;AAC9C,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,MAAM,yBAAyB;YACjC;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,gBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;YAC3B;;AAGA,YAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG;YAC3D,IAAI,QAAQ,GAAuB,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;YAE7H,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC;;YAG7C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW;kBAC7C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAoB,CAAC,CAAC;kBACrE,EAAE;AAEN,YAAA,IAAI,iBAAiB,IAAI,UAAU,EAAE,MAAM,EAAE;;AAE3C,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpG,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGnE,gBAAA,MAAM,YAAY,GAAuB,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAC3F,gBAAA,IAAI,CAAC,eAAe,GAAG,CAAC,GAAI,YAA+B,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;gBAErF,IAAI,CAAC,WAAW,EAAE;YACpB;;AAGA,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,GAAI,QAA2B,CAAC;QACnF;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QACpB;gBAAU;AACR,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B;IACF;AAEA;;AAEG;IACK,YAAY,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;YAAE;AAC/C,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW;AAC5B,cAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;cAC3E,EAAE,CACP;AACA,QAAA,IAAI,CAAC,OAAiB,CAAC,OAAO,CAAC,GAAG,IAAG;AACpC,YAAA,GAAG,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,sBAAsB,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAiB;QAC/D,IAAI,CAAC,wBAAwB,EAAE;IACjC;AAEA;;AAEG;AACI,IAAA,mBAAmB,CAAC,MAAkB,EAAA;AAC3C,QAAA,MAAM,YAAY,GAAI,IAAI,CAAC,OAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,IACrC,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAC3C;QACD,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;AAEG;AACI,IAAA,qBAAqB,CAAC,aAAsB,EAAA;AACjD,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,MAAM,YAAY,GAAI,IAAI,CAAC,OAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,IACrC,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAC3C;QACD,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;AAEG;IACK,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;YAAE;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAI,IAAI,CAAC,OAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;IACxE;8GAt7BW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,4wCA+NjB,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAK1B,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKzB,0BAA0B,qECnS1C,47fA0Zc,EAAA,MAAA,EAAA,CAAA,ovXAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhB,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAgB,oBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,YAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDhWD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,47fAAA,EAAA,MAAA,EAAA,CAAA,ovXAAA,CAAA,EAAA;;sBAOlB;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAgBA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAMA;;sBAMA;;sBAKA;;sBAKA;;sBAKA;;sBAMA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAwBA,YAAY;uBAAC,0BAA0B;;sBAKvC,YAAY;uBAAC,yBAAyB;;sBAKtC,YAAY;uBAAC,0BAA0B;;sBA4iBvC,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MEr0B/B,2BAA2B,CAAA;AAPxC,IAAA,WAAA,GAAA;QAQW,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,KAAK,GAAG,CAAC;AACT,QAAA,IAAA,CAAA,cAAc,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;QAE7C,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,KAAK,GAAe,EAAE;QACtB,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,QAAQ,GAAG,CAAC;AAkEpB,IAAA;AAhEQ,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7D,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEO,IAAA,QAAQ,CAAC,MAAc,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAC9D,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,EAAE;YACzB;QACF;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO;QACnB,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;AAEO,IAAA,eAAe,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACb,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AACxD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC;AAC3E,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IAChE;IAEQ,UAAU,CAAC,OAAe,EAAE,KAAa,EAAA;QAC/C,MAAM,MAAM,GAAe,EAAE;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAS,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC;AAEzF,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC/B,IAAI,CAAC,CAAC,CAAC;YACT;AACA,YAAA,OAAO,MAAM;QACf;QAEA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AAC7E,QAAA,IAAI,OAAO,IAAI,CAAC,EAAE;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB;AACA,QAAA,IAAI,OAAO,IAAI,KAAK,GAAG,CAAC,EAAE;AACxB,YAAA,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QACtC;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM;AAC7B,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK;AAClC,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAExB,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE;gBAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YACnC;YACA,IAAI,CAAC,CAAC,CAAC;YACP,IAAI,GAAG,CAAC;QACV;AACA,QAAA,OAAO,MAAM;IACf;8GA7EW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,2QCVxC,+hDAsDA,EAAA,MAAA,EAAA,CAAA,00CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,cAAA,EAAA,aAAA,EAAA,MAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,wBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAtB,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD5Ca,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,+hDAAA,EAAA,MAAA,EAAA,CAAA,00CAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;MEPU,wBAAwB,CAAA;AAkDnC,IAAA,WAAA,GAAA;QA5CS,IAAA,CAAA,SAAS,GAAW,EAAE;AAErB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAExC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAW;QAE1C,IAAA,CAAA,QAAQ,GAAG,KAAK;QAIlB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,WAAW,GAA6F;AAC7G,YAAA;AACE,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA;AACE,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA;AACE,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,IAAI,EAAE;AACP;SACF;AAEM,QAAA,IAAA,CAAA,aAAa,GAAG;AACrB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,kBAAkB,EAAE,EAAE;AACtB,YAAA,IAAI,EAAE;SACP;QAIM,IAAA,CAAA,UAAU,GAAG,KAAK;QAGvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5C;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;IACpB;AAEO,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE;YACpF,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI;YACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;AAEjC,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACtK,IAAI,eAAe,EAAE;oBACnB,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,IAAI,CAAC,aAAa;AAC5D,oBAAA,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE;AACrD,oBAAA,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC;oBACjE,UAAU,CAAC,MAAK;wBACd,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAClC,4BAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC;wBACjF;AAAO,6BAAA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE;AAClE,4BAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC;wBAC3E;wBACA,IAAI,CAAC,YAAY,EAAE;AACrB,oBAAA,CAAC,CAAC;gBACJ;qBAAO;AACL,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa;gBAC3C;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa;YAC3C;QACF;QAAE,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC;AACrD,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa;QAC3C;IACF;AAEO,IAAA,cAAc,CAAC,OAAO,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;QAC9B,IAAI,CAAC,YAAY,EAAE;IACrB;AAEO,IAAA,YAAY,CAAC,KAAwB,EAAA;;QAG1C,IAAI,MAAM,GAAG,KAAK;AAClB,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC/E,MAAM,GAAG,IAAI;QACf;AAEA,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAE,SAAS;QACpD,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC3C,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;QAC9B;AACA,QAAA,MAAM,UAAU,GAAG,CAAA,EAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAA,EAAG,IAAI,CAAC,SAAS,EAAE;AAChF,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC;AACA,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE;QACrD,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,aAAa,EAAE;AAC/C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B;aAAO;AACL,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,eAAe,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;YACxG;AAAE,YAAA,MAAM;AACN,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9B;QACF;IACF;IAEO,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;IACzB;IAEO,MAAM,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU;IACpC;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE;QACzC;IACF;8GAhJW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,uWCVrC,woFAqEA,EAAA,MAAA,EAAA,CAAA,q+LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD3Da,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,woFAAA,EAAA,MAAA,EAAA,CAAA,q+LAAA,CAAA,EAAA;;sBAIlB,SAAS;uBAAC,OAAO;;sBAEjB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;;MEfU,wBAAwB,CAAA;AAPrC,IAAA,WAAA,GAAA;AAWY,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkB;AAmB1D,IAAA;IAfQ,UAAU,GAAA;AACf,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM;gBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC/B;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK;gBACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC/B;AACF,YAAA;AACE,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK;gBACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;IAErC;8GAtBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,wJCTrC,oSAOA,EAAA,MAAA,EAAA,CAAA,oVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDEa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EAGH,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,oSAAA,EAAA,MAAA,EAAA,CAAA,oVAAA,CAAA,EAAA;;sBAIlB;;sBAEA;;sBAEA;;;MENU,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;AAWY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;QAE5C,IAAA,CAAA,IAAI,GAAgB,IAAI;QAExB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,KAAK,GAAG,EAAE;QAEV,IAAA,CAAA,cAAc,GAAG,EAAE;AAU7B,IAAA;AARC;;AAEG;IACI,MAAM,GAAA;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;8GArBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,0OCTjC,+wBA2BA,EAAA,MAAA,EAAA,CAAA,ygEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDlBa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,+wBAAA,EAAA,MAAA,EAAA,CAAA,ygEAAA,CAAA,EAAA;;sBAIlB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;;MEZU,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,yJCTpC,6MAaA,EAAA,MAAA,EAAA,CAAA,upBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDJa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,6MAAA,EAAA,MAAA,EAAA,CAAA,upBAAA,CAAA,EAAA;;sBAIhB;;sBAEA;;sBAEA;;sBAEA;;;MERQ,wBAAwB,CAAA;AAPrC,IAAA,WAAA,GAAA;QAeW,IAAA,CAAA,MAAM,GAAG,EAAE;AAYrB,IAAA;AAVU,IAAA,WAAW,CAAC,OAAsB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,GAAG,CAAA,yDAAA,EAA4D,IAAI,CAAC,MAAM,CAAA,GAAA,EAAM,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAA,CAAE;AAC7G,gBAAA,CAAA,8DAAA,CAAgE;QACxE;aACK;AACD,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QACpB;IACJ;8GAlBS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,uJCTrC,mGAGA,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDMa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,mGAAA,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA;;sBAIhB;;sBAEA;;sBAEA;;;wBEfQ,SAAS,CAAA;AAKlB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC/B;IAEO,IAAI,GAAA;AACP,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,IAAG;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,gBAAA,OAAO,EAAE;gBACT;YACJ;AAEA,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;AACxC,QAAA,CAAC,CAAC;IACN;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;YAEjB;QACJ;QACA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAkB;AAC9D,YAAA,OAAO,EAAE;QACb;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QAC1B;IACJ;IAGO,MAAM,GAAA;QAET,OAAO,IAAI,CAAC,SAAS;IACzB;AAEH;;MClCY,YAAY,CAAA;aAEN,IAAA,CAAA,WAAW,GAAa,EAAb,CAAgB;AAE3B,IAAA,SAAA,IAAA,CAAA,KAAK,GAAG,IAAIe,WAAS,EAAE,CAAC;IAEhC,MAAM,UAAU,CAAC,GAAkC,EAAA;AACtD,QAAA,IAAI;AACA,YAAA,MAAM,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;YAE/B,IAAI,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;gBAExC;YACJ;AAEA,YAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAA,IAAA,CAAM,CAAC;;;YAKvC,IAAI,GAAG,GAAG,EAAE;YACZ,QAAQ,GAAG;AACP,gBAAA,KAAK,KAAK;;AAEN,oBAAA,IAAI,CAAC,eAAe,CAAC,0DAA0D,CAAC;AAChF,oBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;oBACrC;AACJ,gBAAA,KAAK,QAAQ;AACT,oBAAA,IAAI,CAAC,eAAe,CAAC,mEAAmE,CAAC;AACzF,oBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAClC;AACJ,gBAAA,KAAK,UAAU;;AAEX,oBAAA,IAAI,CAAC,eAAe,CAAC,qEAAqE,CAAC;AAC3F,oBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;oBACxC;AACJ,gBAAA;oBACI,MAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAA,CAAG;;AAGpC,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAA,QAAA,CAAU,CAAC;AAEtC,YAAA,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QACtC;gBACQ;AACJ,YAAA,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE;QAChC;IACJ;AAEQ,IAAA,eAAe,CAAC,GAAW,EAAA;QAC/B,MAAM,MAAM,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAClE,QAAA,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC;AAE9C,QAAA,MAAM,CAAC,GAAG,GAAG,GAAG;;QAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;QAC9C;aAAO;AACH,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACrC;IACJ;IAEQ,MAAM,iBAAiB,CAAC,aAAqB,EAAA;QAEjD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;;QAGlC,OAAO,IAAI,EAAE;AACT,YAAA,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;gBACvB;YACJ;AACA,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAEtB,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE;AACtB,gBAAA,MAAM,0CAA0C;YACpD;QACJ;IACJ;IAEQ,aAAa,GAAA;AACjB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;IACvB;8GAlFS,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFT,MAAM,EAAA,CAAA,CAAA;;2FAET,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCUY,aAAa,CAAA;aAEP,IAAA,CAAA,eAAe,GAAG,KAAH,CAAS;AAExB,IAAA,SAAA,IAAA,CAAA,KAAK,GAAG,IAAIA,WAAS,EAAE,CAAC;AAEvC,IAAA,WAAA,CACY,aAA2B,EAAA;QAA3B,IAAA,CAAA,aAAa,GAAb,aAAa;IACrB;AAEJ;;;AAGG;IACI,MAAM,YAAY,CAAC,OAKzB,EAAA;;AAEG,QAAA,MAAM,IAAI,CAAC,UAAU,EAAE;QAEvB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;AACnD,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAE7B,QAAA,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC;AAEtC,QAAA,OAAO,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IAC1F;AAEA;;;;AAIG;AACI,IAAA,MAAM,eAAe,CAAC,GAAW,EAAE,MAAc,EAAE,KAAa,EAAA;;AAEnE,QAAA,MAAM,IAAI,CAAC,UAAU,EAAE;AAEvB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;QAE/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAC3C,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC;AAExC,QAAA,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC;QAEtC,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;QAEhC,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,OAAO,IAAI;QACf;QAEA,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC;AACpD,QAAA,OAAO,GAAG;IACd;AAEQ,IAAA,SAAS,CAAC,GAAW,EAAA;AACzB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3B,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,YAAA,KAAK,CAAC,GAAG,GAAG,GAAG;YACf,KAAK,CAAC,MAAM,GAAG,YAAA;gBACX,OAAO,CAAC,KAAK,CAAC;AAClB,YAAA,CAAC;AACL,QAAA,CAAC,CAAC;IAEN;AAEQ,IAAA,MAAM,UAAU,GAAA;AACpB,QAAA,IAAI;AACA,YAAA,MAAM,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE;AAEhC,YAAA,IAAI,aAAa,CAAC,eAAe,EAAE;gBAC/B;YACJ;AAEA,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAE7B,MAAM,OAAO,CAAC,GAAG,CAAC;AACd,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;AACvC,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU;AAC3C,aAAA,CAAC;AAEF,YAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAE9B,YAAA,aAAa,CAAC,eAAe,GAAG,IAAI;QACxC;gBACQ;AACJ,YAAA,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE;QACjC;IACJ;IAEQ,aAAa,GAAA;AACjB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;IACvB;8GA/FS,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA,CAAA;;2FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCUY,eAAe,CAAA;IAgC1B,IAAa,IAAI,CAAC,SAAkB,EAAA;AAClC,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,CAAC;QAC3C,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QAC9B;IACF;IAsDA,WAAA,CAAoB,OAAsB,EAAS,KAAwB,EAAA;QAAvD,IAAA,CAAA,OAAO,GAAP,OAAO;QAAwB,IAAA,CAAA,KAAK,GAAL,KAAK;QAtF/C,IAAA,CAAA,GAAG,GAAG,EAAE;QAER,IAAA,CAAA,KAAK,GAAG,CAAC;QAET,IAAA,CAAA,MAAM,GAAG,CAAC;QAEV,IAAA,CAAA,WAAW,GAAY,KAAK;QAE5B,IAAA,CAAA,UAAU,GAAY,KAAK;QAE3B,IAAA,CAAA,SAAS,GAAY,KAAK;QAEnC,IAAA,CAAA,iBAAiB,GAAW,CAAC,CAAC;AAE9B,QAAA,IAAA,CAAA,SAAS,GAA2B,IAAI,eAAe,CAAU,KAAK,CAAC;QAEvE,IAAA,CAAA,YAAY,GAA4C,EAAE;QAE1D,IAAA,CAAA,QAAQ,GAAY,KAAK;QAIhB,IAAA,CAAA,SAAS,GAAY,KAAK;QAC1B,IAAA,CAAA,SAAS,GAAY,KAAK;AAWzB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAqB;AAEjD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;AAEzC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW;AAC9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAW;AAE9C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAM;AAE1C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAGtC;QAEI,IAAA,CAAA,YAAY,GAA+B,EAAE;QAM7C,IAAA,CAAA,YAAY,GAAG,CAAC;QAEhB,IAAA,CAAA,SAAS,GAAoB,EAAE;QAEvC,IAAA,CAAA,aAAa,GAAW,SAAS;QAEjC,IAAA,CAAA,QAAQ,GAAY,KAAK;QAEzB,IAAA,CAAA,SAAS,GAAY,KAAK;AAE1B,QAAA,IAAA,CAAA,KAAK,GAAG;YACN,KAAK,EAAE,IAAI,KAAK,EAAE;YAClB,MAAM,EAAE,IAAI,KAAK,EAAE;YACnB,MAAM,EAAE,IAAI,KAAK,EAAE;SACpB;AACO,QAAA,IAAA,CAAA,KAAK,GAAG;AACd,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,KAAK,EAAE,CAAC;SACT;QACD,IAAA,CAAA,WAAW,GAAW,CAAC;AACvB,QAAA,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;SACxC;IAI6E;IAEvE,eAAe,GAAA;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa;QAC1C,UAAU,CAAC,YAAW;AACpB,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;;QAEnB,CAAC,EAAE,CAAC,CAAC;IACP;IAEO,YAAY,GAAA;QACf,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AACvC,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;AAE3D,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC;gBAChE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAC9C,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,CAC5B;AACD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK;AACnD,gBAAA,OAAO,EACP,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACrE,aAAA,CAAC;YACF,IAAI,CAAC,eAAe,EAAE;QACxB;IAEJ;AACS,IAAA,WAAW,CAAC,OAAsB,EAAA;;QAEvC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,KAAK,EAAE;QACd;;AAEA,QAAA,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,YAAY,EAAE;AACjE,YAAA,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AAChD,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,cAAc,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK;AAClC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB;QACF;;QAEA,IACE,OAAO,CAAC,WAAW,CAAC;AACpB,YAAA,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY;YACjC,IAAI,CAAC,OAAO,EACV;AAEF,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS;AAC3C,gBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;sBACnC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO;sBACnC,IAAI;gBACN,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,GAAG,EAAE;gBACxC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa;AACxD,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B;QACF;;QAEA,IACE,OAAO,CAAC,YAAY,CAAC;AACrB,YAAA,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;AAClC,YAAA,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,OAAO,EACV;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK;AAClC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B;QACA,IACE,OAAO,CAAC,WAAW,CAAC;YACpB,IAAI,CAAC,OAAO,EACb;YACC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY;AAClD,YAAA,IAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,EAAC;gBACpC,UAAU,CAAC,MAAK;oBACf,IAAI,CAAC,IAAI,EAAE;gBACZ,CAAC,EAAE,CAAC,CAAC;YACN;QACF;QACA,IACE,OAAO,CAAC,WAAW,CAAC;YACpB,IAAI,CAAC,OAAO,EACb;YACC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY;AAClD,YAAA,IAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,EAAC;gBACnC,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,IAAI,EAAE;gBACb,CAAC,EAAE,CAAC,CAAC;YACP;QACF;IACF;;IAEA,kBAAkB,CAAC,KAAa,EAAE,SAAiB,EAAA;AACjD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC/D,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,KAAK,EAAE;AACxC,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChE;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YACnD,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE;;gBAElD,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC3B;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;YACL,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK;QAC7C;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;AACA,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACrB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,CAAC;AACX,SAAA,CAAC,EAEF,IAAI,CAAC,KAAK,CAAC,MAAM,EACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CACf;QACH,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,YAAY,GAAG;AAClB,gBAAA,EAAC,CAAC,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAC;AAC1D,gBAAA,EAAC,CAAC,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAC;AAC5D,gBAAA,EAAC,CAAC,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAC;AAClE,gBAAA,EAAC,CAAC,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAC,CAAC,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAC;aACjE;QACH;aAAO;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,6BAAA,CAA+B,CAAC;AAC9C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY;AACzD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,YAAY;YAC3D,MAAM,MAAM,GAAG,EAAE;YACjB,IAAI,CAAC,YAAY,GAAG;AAClB,gBAAA,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;gBACnB,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;gBAC3B,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;gBACzC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;aAClC;QACH;;;QAIA,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE;AACtD,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,IAAI,EAAE,yBAAyB;AAC/B,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;IAEQ,MAAM,IAAI,CAAC,GAAY,EAAA;;QAE7B,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;AACL,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;;oBAE9D;gBACF;AAEA,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;oBAEhB;gBACF;gBACA,IAAI,CAAC,YAAY,EAAE;YACrB;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YACpB;QACF;IACF;AAEA,IAAA,MAAM,YAAY,GAAA;;AAEhB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa;QAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AACvC,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;AAE9C,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,UAAS,GAAO,EAAA;AAClD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,MAAM,IAAI,CAAC,KAAK,EAAE;QACpB;IACF;IAEA,UAAU,CACR,GAA6B,EAC7B,IAAY,EACZ,GAAW,EACX,aAAa,EACb,YAA2B,EAC3B,QAAgB,EAAA;QAEhB,IAAI,IAAI,GAAG,EAAE;AACb,QAAA,IAAI,kBAAkB,GAAG,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,EAAE;;AAGV,QAAA,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QACxB,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,kBAAkB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,IAAI,EAAE;QAEV,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9B,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC;AAC7B,QAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5D,QAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;QACpD,GAAG,CAAC,OAAO,EAAE;IACf;AAEA,IAAA,cAAc,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACvB;IACF;AACA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa;;YAG9D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC;;AAGlE,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAG,aAAa;;AAGzD,YAAA,MAAM,CAAC,QAAQ,GAAG,WAAW;;AAG7B,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;QACjC;IACF;AACA,IAAA,cAAc,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,eAAe,EAAE;AACjE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO;YACpC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ;QAC/C;QACA,IACE,CAAC,IAAI,CAAC,SAAS;YACf,CAAC,IAAI,CAAC,SAAS;YACf,CAAC,IAAI,CAAC,WAAW;YACjB,IAAI,CAAC,UAAU,EACf;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACxB;IACF;;AAGA,IAAA,UAAU,CAAC,KAAK,EAAA;AACd,QAAA,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,QAAA,MAAM,qBAAqB,GAAG,GAAG,CAAC;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAE7C,QAAA,MAAM,UAAU,GAAG,WAAW,GAAG,oBAAoB;AACrD,QAAA,MAAM,WAAW,GAAG,YAAY,GAAG,qBAAqB;QAExD,IAAI,KAAK,GAAU,IAAI,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;AACzD,YAAA,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACrB,YAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,EAAE,IAAI,CAAC,aAAa;AACxB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,iBAAiB,EAAE,CAAC;AACpB,YAAA,WAAW,EAAE,OAAO;YACpB,eAAe,EAAE,aAAa;YAC9B,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,UAAU;AACjB,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;;AAEF,QAAA,IAAI,cAAc,GAAG;AACnB,YAAA,aAAa,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;gBAChC,CAAC,EAAE,CAAC,GAAG;gBACP,CAAC,EAAE,CAAC,GAAG;AACP,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,KAAI;AACtD,oBAAA,OAAO,IAAI,CAAC,UAAU,CACpB,GAAG,EACH,IAAI,EACJ,GAAG,EACH,aAAa,EACb,YAAY,EACZ,OAAO,CACR;gBACH,CAAC;AACD,gBAAA,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,KAAI;AACvC,oBAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AAC7B,oBAAA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;AAC1B,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACrB,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;oBAEtB,MAAM,CAAC,gBAAgB,EAAE;oBACzB,IAAI,CAAC,eAAe,EAAE;AACtB,oBAAA,OAAO,IAAI;gBACb,CAAC;aACF,CAAC;AAEF,YAAA,aAAa,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;AAChC,gBAAA,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,CAAC,GAAG;AACP,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,KAAI;AACtD,oBAAA,OAAO,IAAI,CAAC,UAAU,CACpB,GAAG,EACH,IAAI,EACJ,GAAG,EACH,aAAa,EACb,YAAY,EACZ,QAAQ,CACT;gBACH,CAAC;AACD,gBAAA,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,KAAI;AACvC,oBAAA,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM;AACnC,oBAAA,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,oBAAA,YAAY,CAAC,GAAG,CACd,OAAO,EACP,CAAC,YAAY,CAAC,KAAK,GAAG,iBAAiB,IAAI,GAAG,CAC/C;AACD,oBAAA,YAAY,CAAC,SAAS,EAAE,CAAC;;oBAEzB,IAAI,CAAC,eAAe,EAAE;AACtB,oBAAA,OAAO,IAAI;gBACb,CAAC;aACF,CAAC;AAEF,YAAA,aAAa,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC;AAChC,gBAAA,CAAC,EAAE,GAAG;AACN,gBAAA,CAAC,EAAE,GAAG;AACN,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,KAAK,EAAC,EAAE;AACR,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,MAAM;gBACnB,aAAa,GAAG,CAAC,SAAqB,EAAE,SAAoB,EAAE,CAAS,EAAE,CAAS,KAAI;oBACpF,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC;AAC5C,oBAAA,OAAO,IAAI;AACb,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,KAAI;AACtD,oBAAA,OAAO,IAAI,CAAC,UAAU,CACpB,GAAG,EACH,IAAI,EACJ,GAAG,EACH,aAAa,EACb,YAAY,EACZ,QAAQ,CACT;gBACH,CAAC;aACF,CAAC;SACH;AAED,QAAA,KAAK,CAAC,QAAQ,GAAG,cAAc;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACvB;AACA,IAAA,aAAa,CAAC,SAAqB,EAAE,SAAoB,EAAE,CAAS,EAAE,CAAS,EAAA;AAC7E,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC;QAExD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QACrE,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;AAErE,QAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC5B,QAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;IAChC;;IAEE,eAAe,GAAA;AACb,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;;AAEnD,QAAA,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACxD;QACA,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;QAE9C,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;;YAE1C,SAAS,CAAC,GAAG,CAAC;AACZ,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,KAAK;AAClB,aAAA,CAAC;QACJ;AACA,QAAA,MAAM,aAAa,GACjB,SAAS,IAAI,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,GAAG,IAAI;QAC7D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QAChD,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IACO,IAAI,GAAA;;AAET,QAAA,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACzD,IAAI,CAAC,iBAAiB,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC3D,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AAClD,gBAAA,OAAO,EACL,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACvE,aAAA,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,MAAK;gBAC9C,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gBACjD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACxC,oBAAA,IAAI,GAAG,KAAK,YAAY,EAAE;AACxB,wBAAA,GAAG,CAAC,OAAO,GAAG,KAAK;oBACrB;AACF,gBAAA,CAAC,CAAC;gBACF,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;AAChD,oBAAA,YAAY,CAAC,QAAQ;wBACnB,SAAS,IAAI,SAAS,CAAC;8BACnB,SAAS,CAAC;8BACV,IAAI;oBACV,YAAY,CAAC,GAAG,CAAC;AACf,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,iBAAiB,EAAE,CAAC;AACpB,wBAAA,WAAW,EAAE,OAAO;AACrB,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC5D,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC3D;qBAAO;oBACL,YAAY,CAAC,GAAG,CAAC;AACf,wBAAA,WAAW,EAAE,KAAK;AAClB,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,UAAU,EAAE,KAAK;AAClB,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1D,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC3D,oBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK;gBAChC;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5C,YAAA,CAAC,CAAC;QACJ;IACF;IACO,IAAI,GAAA;;AAET,QAAA,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE;YAC9B,IAAI,CAAC,iBAAiB,EAAE;YACxB,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC/D,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AAClD,gBAAA,OAAO,EACL,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACvE,aAAA,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,MAAK;gBAClD,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gBACjD,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;wBAChC,YAAY,CAAC,GAAG,CAAC;AACf,4BAAA,OAAO,EAAE,EAAE;AACX,4BAAA,iBAAiB,EAAE,CAAC;AACpB,4BAAA,WAAW,EAAE,OAAO;AACrB,yBAAA,CAAC;AACF,wBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK;AAClC,wBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI;AACpC,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC5D,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAC3D;yBAAO;wBACL,YAAY,CAAC,GAAG,CAAC;AACf,4BAAA,WAAW,EAAE,KAAK;AAClB,4BAAA,UAAU,EAAE,KAAK;AAClB,yBAAA,CAAC;AACF,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,wBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK;AAC9B,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1D,wBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAC7D;AACA,oBAAA,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ;wBACrC,aAAa,IAAI,aAAa,CAAC;8BAC3B,aAAa,CAAC;8BACd,IAAI;gBACZ;qBAAK;AACH,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACxB;gBACA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACxC,oBAAA,IAAI,GAAG,KAAK,YAAY,EAAE;AACxB,wBAAA,GAAG,CAAC,OAAO,GAAG,KAAK;oBACrB;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5C,YAAA,CAAC,CAAC;QACJ;IACF;IACQ,aAAa,GAAA;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,QAAA,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAEjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;AAC7C,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;IAC1B;AAEA;;AAEG;AACK,IAAA,MAAM,KAAK,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAC9B;QACF;QACA,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGnD,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAEpB,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC,eAAe,EAAE;QACpC,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY;AAC1C,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;SACzC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CACxB;YACE,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,EACD;AACE,YAAA,aAAa,EAAE,IAAI;AACpB,SAAA,CACF;QACD,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAK;AACvC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC1B;AAEQ,IAAA,cAAc,CAAC,OAAuB,EAAA;;AAE5C,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AACtC,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACrB;QACA,IAAI,OAAO,EAAE;AACX,YAAA,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;gBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;AACjD,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1B;QACF;IACF;IAEQ,aAAa,CAAC,KAAa,EAAE,OAAuB,EAAA;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC;YAC/B,IAAI,EAAE,KAAK,CAAC,CAAC;YACb,GAAG,EAAE,KAAK,CAAC,CAAC;AACZ,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,aAAa,EAAE,KAAK;AACrB,SAAA,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAI;AAC1B,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,gBAAA,OAAO,CAAC,KAAK,GAAG,IAAI;YACtB;AACF,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,KAAI;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAClD,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,mBAAmB,CAAC,GAAW,EAAA;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,YAAA,GAAG,CAAC,MAAM,GAAG,MAAK;gBAChB,IAAI,QAAQ,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;gBACpC,OAAO,CAAC,QAAQ,CAAC;AACnB,YAAA,CAAC;AACD,YAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACf,QAAA,CAAC,CAAC;IACJ;IAEO,MAAM,YAAY,CAAC,SAAkB,EAAA;QAC1C,IAAI,CAAC,SAAS,EAAE;YACd;QACF;AACA,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,6BAAA,CAA+B,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,4BAAA,CAA8B,CAAC;QAC/C;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AACtC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAC1B;AACA,QAAA,IAAI,MAAyB;AAC7B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACvC,gBAAA,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC3C,gBAAA,OAAO,EAAE;AACP,oBAAA,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACnC,oBAAA,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACpC,oBAAA,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,oBAAA,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,iBAAA;AACD,gBAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AAC3B,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;AAC1B,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AACjD,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACvB;aAAO;AACL,YAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;QACzC;AACA,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,YAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AAClD,YAAA,OAAO,EACL,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;AACvE,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,aAAa,EAAE;IACtB;IACQ,aAAa,GAAA;QACnB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC1B;8GAxwBW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,8yBCzB5B,urBAeA,EAAA,MAAA,EAAA,CAAA,oXAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAxB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDUa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,urBAAA,EAAA,MAAA,EAAA,CAAA,oXAAA,CAAA,EAAA;;sBAGlB,SAAS;uBAAC,WAAW;;sBAErB,SAAS;uBAAC,kBAAkB;;sBAE5B;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAYA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAOA;;sBAEA;;sBAEA;;sBACA;;sBAEA;;sBAEA;;;MErEU,UAAU,CAAA;IAEZ,kBAAkB,CAAC,MAAiB,EAAE,OAAgB,EAAA;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAEjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;QAE3D,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CACpC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EACzB;AACI,YAAA,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;AACpC,YAAA,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG;AAC5B,SAAA,CAAC;AAEN,QAAA,OAAO,YAAY;IACvB;AAEQ,IAAA,gBAAgB,CAAC,MAAiB,EAAA;QACtC,IAAI,OAAO,GAAG,EAAE;AAEhB,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,GAAG,MAAM,CAAC,IAAI;QACzB;aACK;;YAED,OAAO,GAAG,wDAAwD;QACtE;AAEA,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK;QACzC,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,SAAS,EAAE;YACX,UAAU,GAAG,gBAAgB;QACjC;QAGA,IAAI,YAAY,GAAG,qEAAqE;QAExF,IAAI,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM;QAEnD,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS;AAEhD,QAAA,MAAM,UAAU,GACZ,CAAA,yBAAA,EAA4B,SAAS,CAAA,EAAA,CAAI;YACzC,CAAA,QAAA,EAAW,MAAM,CAAC,IAAI,CAAA,OAAA,CAAS;YAC/B,CAAA,wCAAA,CAA0C;AAC1C,YAAA,CAAA,MAAA,CAAQ;AAEZ,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;QAEnC,IAAI,WAAW,GACX,CAAA,KAAA,CAAO;YACP,CAAA,sCAAA,CAAwC;YACxC,CAAA,8BAAA,CAAgC;AAChC,YAAA,CAAA,YAAA,EAAe,UAAU,CAAA;cACvB,UAAU;AACgB,sCAAA,EAAA,SAAS,mDAAmD,OAAO,CAAA;2DAChD,gBAAgB,CAAA,mBAAA,EAAsB,OAAO,CAAA,6BAAA,EAAgC,YAAY,CAAA;AAC3H,wBAAA,CAAA;AACb,YAAA,CAAA,MAAA,CAAQ;AACR,YAAA,CAAA,MAAA,CAAQ;AACR,YAAA,CAAA,MAAA,CAAQ;AACZ,QAAA,OAAO,WAAW;IACtB;IAGO,YAAY,CAAC,GAAU,EAAE,MAAkB,EAAA;QAC9C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE;YAC7B;QACJ;QAEA,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC;YAC7B,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE;YAC/B;QACJ;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3E;AAEQ,IAAA,aAAa,CAAC,GAAU,EAAE,IAAyC,EAAE,OAAe,EAAE,EAAA;QAE1F,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAC3B;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AAClB,YAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YACjB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxD;QACJ;QAEA,MAAM,OAAO,GAAa,EAAE;QAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAEhD,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAe;QAEhE,MAAM,OAAO,GAAG,KAAK;AAErB,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,OAAO;AAC3B,YAAA,MAAM,CAAC,SAAS,EAAE,GAAG,OAAO,EAAE;YAC9B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;AACjC,YAAA,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACnB;aACK;AACD,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE;AAClC,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC;AAClD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC;;YAGpD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CACxC;AACI,gBAAA,EAAE,CAAC,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC;AACxB,gBAAA,EAAE,CAAC,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC;gBACvB,CAAC;AACD,gBAAA,EAAE,CAAC,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC;AACxB,gBAAA,EAAE,CAAC,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC;gBACvB;AACH,aAAA,CACU;AAEf,YAAA,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE;AAC1B,YAAA,GAAG,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC3D;IACJ;AAEA;;;AAGG;AACI,IAAA,kBAAkB,CAAC,IAAa,EAAE,GAAU,EAAE,KAAkB,EAAA;QAKnE,IAAI,MAAM,GAAG,EAIZ;AAED,QAAA,IAAI,MAAM,GAAG,IAAI,KAAK,EAAU;AAEhC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AACpB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC;YAEzD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;AACvC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnB,YAAA,OAAO,MAAM;QACjB;AAEA,QAAA,IAAI,KAAK,IAAI,OAAO,EAAE;AAClB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9C,YAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACf,YAAA,MAAM,CAAC,QAAQ,GAAG,EAAE;AAEpB,YAAA,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACrB;aACK;AACD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9C,YAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACf,YAAA,MAAM,CAAC,QAAQ,GAAG,EAAE;YAEpB,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACpC,YAAA,MAAM,CAAC,MAAM,GAAG,KAAK;YAErB,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;;AAG3B,YAAA,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxC,YAAA,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/C;AAGA,QAAA,OAAO,MAAM;IACjB;AAEQ,IAAA,QAAQ,CAAC,MAAqB,EAAE,KAAa,EAAE,YAAoB,EAAA;AACvE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CACzB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,EACxC;AACI,YAAA,KAAK,EAAE;AACH,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,SAAS,EAAE;AACd,aAAA;AACD,YAAA,MAAM,EAAE;AACJ,gBAAA,SAAS,EAAE;AACd,aAAA;AACD,YAAA,MAAM,EAAE;AACX,SAAA,CAAC;AACN,QAAA,OAAO,EAAE;IACb;AAEQ,IAAA,WAAW,CAAC,MAAqB,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CACrB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,EACxC;AACI,YAAA,KAAK,EAAE;AACH,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,WAAW,EAAE,wBAAwB;AACrC,gBAAA,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAChB,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,WAAW,EAAE;AACT,aAAA;AACR,YAAA,MAAM,EAAE;AACX,SAAA,CAAC;IACV;IAEO,gBAAgB,CAAC,GAAU,EAAE,GAAiB,EAAE,OAAe,EAAE,GAAQ,EAAE,KAAkB,EAAA;AAEhG,QAAA,IAAI,IAAmB;AACvB,QAAA,IAAI,KAAK,IAAI,OAAO,EAAE;YAClB,MAAM,GAAG,GAAG,oEAAoE;AAChF,YAAA,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA,kCAAA,EAAqC,GAAG,CAAA,SAAA,CAAW,CAAC;QACjF;aACK;;AAED,YAAA,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA,2BAAA,EAA8B,OAAO,CAAA,cAAA,CAAgB,CAAC;QACnF;QAEA,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,EAC5C;AACI,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE;AACX,SAAA,CAAC;AACN,QAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACjB,QAAA,OAAO,IAAI;IACf;8GA1OS,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAV,UAAU,EAAA,CAAA,CAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB;;;MCQY,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;QAaa,IAAA,CAAA,KAAK,GAAc,EAAE;QAErB,IAAA,CAAA,OAAO,GAAgB,EAAE;QAEzB,IAAA,CAAA,KAAK,GAAgB,SAAS;QAM/B,IAAA,CAAA,QAAQ,GAAmB,EAAE;AAE7B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,UAAU,EAAE;AAuIzC,IAAA;AArIU,IAAA,WAAW,CAAC,OAAsB,EAAA;QACrC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAChC,IAAI,CAAC,IAAI,EAAE;QACf;QAEA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACxC,IAAI,CAAC,cAAc,EAAE;QACzB;IACJ;IAEQ,IAAI,GAAA;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpC,MAAM,EAAE,IAAI,CAAC;AAChB,SAAA,CAAC;QAEF,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,cAAc,EAAE;QACzB,CAAC,EAAE,IAAI,CAAC;IACZ;IAGQ,OAAO,GAAA;;QAGX,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE;QAE1D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAChD,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAC/B;AACI,YAAA,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM;AACtC,SAAA,CAAC;;AAIN,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAE1D,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;AACxD,QAAA,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;QAEhC,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAC1C,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC;QAExD,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC;QAEpD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;;;QAIlC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;YAEZ;QACJ;QAEA,IAAI,CAAC,aAAa,EAAE;QAEpB,IAAI,CAAC,WAAW,EAAE;QAElB,IAAI,CAAC,aAAa,EAAE;IACxB;IAEQ,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACnC;QACJ;QAEA,IAAI,GAAG,GAAe,IAAI;AAE1B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;AAC5E,YAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAChC,IAAI,GAAG,EAAE;AACL,oBAAA,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;gBACtD;qBACK;AACD,oBAAA,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE;gBACvC;YACJ;AACA,YAAA,IAAI,GAAG,CAAC,MAAM,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAClC;QACJ;;;AAIA,QAAA,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AAChD,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5G;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE;;AAEvB,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3G;QAEA,IAAI,GAAG,EAAE;YACL,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;QACjD;IACJ;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACvC;QACJ;AAEA,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC1D,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B;IACJ;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ;QACJ;QACA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;8GAnJS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,+QCX9B,uFAIA,EAAA,MAAA,EAAA,CAAA,+9EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDOa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,eAAA,EAGF,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,uFAAA,EAAA,MAAA,EAAA,CAAA,+9EAAA,CAAA,EAAA;;sBAIhB,SAAS;uBAAC,KAAK;;sBAEf;;sBAEA;;sBAEA;;sBAEA;;;MEZQ,eAAe,CAAA;AAP5B,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,SAAS,GAAW,SAAS;QAE7B,IAAA,CAAA,WAAW,GAA8B,EAAE;AAEpD;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AAEjD;;AAEG;AACO,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;QAE7C,IAAA,CAAA,cAAc,GAAG,KAAK;QAEtB,IAAA,CAAA,cAAc,GAAG,KAAK;QAEtB,IAAA,CAAA,QAAQ,GAAG,EAAE;QAEZ,IAAA,CAAA,cAAc,GAAW,EAAE;AA0EtC,IAAA;;AAvEyC,IAAA,UAAU,CAAC,GAAU,EAAA;QACvD,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC9B;;AAG8C,IAAA,WAAW,CAAC,GAAU,EAAA;QAChE,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC/B;;AAGyC,IAAA,MAAM,CAAC,GAAc,EAAA;QAC1D,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAE3B,QAAA,IAAI,MAAM,GAAI,GAAG,CAAC,YAA6B;QAC/C,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC;AACA,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC/B;IAGO,MAAM,WAAW,CAAC,GAAU,EAAA;AAC/B,QAAA,MAAM,MAAM,GAA4B,GAAG,CAAC,MAA0B;AACtE,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE;YACxB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC;IACJ;IAEO,MAAM,WAAW,CAAC,KAAe,EAAA;AACpC,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACf;QACJ;QACA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;AAElC,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;IAEO,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAC7B,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC;YACvC;QACJ;QAEA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IAC7C;IAEO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;IAEO,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;QAC3B,IAAI,CAAC,KAAK,EAAE;IAChB;8GA/FS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,gVCT5B,qpGA2GA,EAAA,MAAA,EAAA,CAAA,gsGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4B,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDlGa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,qpGAAA,EAAA,MAAA,EAAA,CAAA,gsGAAA,CAAA,EAAA;;sBAIhB;;sBAEA;;sBAKA;;sBAKA;;sBAWA,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAOnC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAOpC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;;AErCpC,MAAM,eAAe,GAAqC;IACtD,GAAG,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;IACzG,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;IACzG,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;IAC1G,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE;IAC9G,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE;CAClH;MASY,aAAa,CAAA;AAP1B,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,IAAI,GAAqC,KAAK;AAEvD;;AAEG;QACM,IAAA,CAAA,KAAK,GAAqE,MAAM;AAEzF;;AAEG;QACM,IAAA,CAAA,IAAI,GAAsC,IAAI;AAEvD;;AAEG;QACM,IAAA,CAAA,KAAK,GAAG,EAAE;AAEnB;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,EAAE;AAElB;;;AAGG;QACM,IAAA,CAAA,KAAK,GAAG,EAAE;AAEnB;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,EAAE;AA+B3B,IAAA;AA7BG,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;IAC9D;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,CAAC;IAC5C;AAEA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;IAC/C;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;IAC3C;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,GAAG,YAAY,GAAG,GAAG,CAAC;IACxD;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,YAAY,GAAG,GAAG,CAAC;IAC5D;AAEA,IAAA,IAAI,yBAAyB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;IAC1E;8GAhES,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,yMC1B1B,irMAsJA,EAAA,MAAA,EAAA,CAAA,m7IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD5Ha,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,irMAAA,EAAA,MAAA,EAAA,CAAA,m7IAAA,CAAA,EAAA;;sBAIhB;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAMA;;sBAMA;;;MEvCQ,gBAAgB,CAAA;AAGlB,IAAA,SAAS,CAAC,MAAc,EAAA;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;AACpC,YAAA,MAAM,EAAE;AACX,SAAA,CAAC;IACN;IAEO,MAAM,OAAO,CAAC,UAAkB,EAAA;QACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,MAAM,CAAC,iBAAiB,CAAC;gBACzB;YACJ;YACA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE;AACrD,YAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EACvC,CAAC,GAAQ,KAAI;gBACT,IAAI,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE;AAEvE,gBAAA,IAAI,QAAQ,GAAG,IAAI,KAAK,EAAiB;gBACzC,IAAI,SAAS,GAAG,KAAK;AACrB,gBAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;oBAC5B,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ;oBACpD,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS;AACrD,oBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC;AAC1D,oBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC;AAC1D,oBAAA,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAE7C,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM;oBAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE;wBACvC,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW;oBACzD;oBAEA,QAAQ,CAAC,IAAI,CAAC;AACV,wBAAA,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK;AACrC,wBAAA,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;AACpC,wBAAA,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;AAC1C,wBAAA,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU;AAChD,wBAAA,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK;AACtC,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,MAAM,EAAE;AACJ,4BAAA,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;AACtB,4BAAA,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;AACvB,4BAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACnD,4BAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE;AACrD;AACJ,qBAAA,CAAC;gBACN;gBAEA,OAAO,CAAC,QAAQ,CAAC;AACrB,YAAA,CAAC,EACD,CAAC,CAAM,KAAI;AACP,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACf,OAAO,CAAC,EAAE,CAAC;AACf,YAAA,CAAC,CACJ;AACL,QAAA,CAAC,CAAC;IACN;8GA1DS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA;;2FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCPY,mBAAmB,CAAA;AAC5B;;AAEG;IACH,IAAa,MAAM,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC;IACrC;IA8BA,WAAA,CACY,UAA4B,EAC5B,MAAyB,EAAA;QADzB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;QA5BT,IAAA,CAAA,iBAAiB,GAAY,IAAI;AAEhC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;QAE3C,IAAA,CAAA,aAAa,GAAG,IAAI;QAEpB,IAAA,CAAA,WAAW,GAAW,gBAAgB;QAEtC,IAAA,CAAA,QAAQ,GAAG,KAAK;QAER,IAAA,CAAA,QAAQ,GAAG,IAAI,YAA6B;;;QAIpD,IAAA,CAAA,YAAY,GAAQ,EAAE;AAEvB,QAAA,IAAA,CAAA,oBAAoB,GAAoB,IAAI,OAAO,EAAU;QAE9D,IAAA,CAAA,WAAW,GAAY,KAAK;QAE5B,IAAA,CAAA,eAAe,GAAY,KAAK;QAEhC,IAAA,CAAA,WAAW,GAAsB,EAAE;AAQtC,QAAA,IAAI,CAAC;aACA,IAAI,CACD,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE;AAEzB,aAAA,SAAS,CAAC,CAAC,aAAqB,KAAI;AAEnC,YAAA,IAAI,CAAC,OAAO,GAAG,aAAa;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;AAErB,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI;YACpC;YAEA,IAAI,CAAC,YAAY,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE;AAEtC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,QAAA,CAAC,CAAC;IACV;IAEA,MAAM,WAAW,CAAC,OAAsB,EAAA;QACpC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YACpC,IAAI,CAAC,YAAY,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE;YACxC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC;YACzE,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YAC/B;QACJ;IACJ;AAEO,IAAA,cAAc,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;AAEpC,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B;IAEQ,MAAM,UAAU,CAAC,YAA0B,EAAA;AAC/C,QAAA,IAAI;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;gBAC3B;YACJ;AACA,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AAErB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBACxB;YACJ;AAEA,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AAErB,YAAA,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AAE3D,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;;gBAE7B;YACJ;AAEA,YAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;AAC5B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,MAAM,EAAE,QAAQ,CAAC;AACpB,iBAAA,CAAC;YACN;AACA,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC5G,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE;AAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACpD;AAEA,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC5B;QAAE,OAAO,GAAG,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QACtB;gBAAU;AACN,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;QAC/B;IACJ;AAEO,IAAA,aAAa,CAAC,OAAwB,EAAA;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI;AAC3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC/B;IACJ;8GAhIS,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,kXCbhC,ozCA8CA,EAAA,MAAA,EAAA,CAAA,olDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1B,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4B,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDjCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,eAAA,EAGd,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,ozCAAA,EAAA,MAAA,EAAA,CAAA,olDAAA,CAAA,EAAA;;sBAMhB;;sBAIA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAIA;;;MErCQ,MAAM,CAAA;AAAnB,IAAA,WAAA,GAAA;QACY,IAAA,CAAA,KAAK,GAAW,CAAC;QAEjB,IAAA,CAAA,QAAQ,GAGV,EAAE;IAqBZ;AAnBW,IAAA,EAAE,CAAC,OAA2B,EAAA;QAEjC,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK;IACrB;AAEO,IAAA,GAAG,CAAC,EAAU,EAAA;AAEjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1D;AAEO,IAAA,IAAI,CAAC,IAAQ,EAAA;AAEhB,QAAA,IAAG,IAAI,CAAC,QAAQ,EAChB;YACI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD;IACJ;AACH;;MCzBY,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;AACS,QAAA,IAAA,CAAA,UAAU,GAAiB,IAAI,MAAM,EAAE;AAEvC,QAAA,IAAA,CAAA,UAAU,GAAiB,IAAI,MAAM,EAAE;AAEvC,QAAA,IAAA,CAAA,UAAU,GAAmB,IAAI,MAAM,EAAE;AAEzC,QAAA,IAAA,CAAA,UAAU,GAAmB,IAAI,MAAM,EAAE;IAiFlD;AA/EC;;AAEG;AACK,IAAA,MAAM,CAAC,QAAoB,EAAA;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC;IACpC;AAEA;;AAEG;AACK,IAAA,MAAM,CAAC,QAAoB,EAAA;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC;IACpC;AAEA;;AAEG;AACK,IAAA,MAAM,CAAC,QAAoB,EAAA;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC;IACpC;AAEA;;AAEG;AACI,IAAA,MAAM,CAAC,QAAoC,EAAA;QACjD,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAe,CAAC;IAC3C;AAEA;;;AAGG;AACI,IAAA,OAAO,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB;AAEA;;;AAGG;AACI,IAAA,OAAO,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB;AAEA;;;AAGG;AACI,IAAA,OAAO,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB;AAEA;;AAEG;IACI,IAAI,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACvB;AAEA;;AAEG;IACI,IAAI,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACvB;AAEA;;AAEG;AACI,IAAA,IAAI,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/B;AAEA;;AAEG;IACI,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACvB;AACA;;MChFY,4BAA4B,CAAA;AAKjC,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACP,OAAO,CAAC,GAAG,CAAC,CAAA,2CAAA,EAA8C,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;QACnF;IACD;8GATY,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,0JCVzC,0IAOA,EAAA,MAAA,EAAA,CAAA,mOAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDGa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,eAAA,EAGjB,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,0IAAA,EAAA,MAAA,EAAA,CAAA,mOAAA,CAAA,EAAA;;sBAGnB;;sBAEA;;;MEKW,qBAAqB,CAAA;IAS9B,WAAA,CACY,QAAoB,EACpB,aAA2B,EAAA;QAD3B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,aAAa,GAAb,aAAa;QAJlB,IAAA,CAAA,oBAAoB,GAAG,KAAK;IAKnC;AAEO,IAAA,WAAW,CAAC,SAAc,EAAA;AAC7B,QAAA,IAAI,SAAS,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,EAAE;QACjB;IAEJ;IAEO,WAAW,GAAA;QACd,IAAI,CAAC,OAAO,EAAE;IAClB;AAEQ,IAAA,MAAM,MAAM,GAAA;;QAEhB,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;;QAE1C,IAAI,CAAC,MAAM,EAAE;IACjB;IAEQ,MAAM,GAAA;QACV,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAElC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;YAC3B,GAAG,EAAE,IAAI,CAAC,MAAM;AAChB,YAAA,IAAI,EAAE;SACT,EAAE;;;AAGC,YAAA,iBAAiB,EAAE;AACtB,SAAA,CAAC;AACF,QAAA,MAAM,OAAO,GAAI,IAAI,CAAC,QAAQ,CAAC,aAA6B,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClG,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAA2B,CAAC;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAEhB,IAAI,aAAa,GAAG,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAgC,KAAI;AACjE,YAAA,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE;AAC9B,gBAAA,IAAI,aAAa,IAAI,KAAK,CAAC,aAAa,EAAE;AACtC,oBAAA,aAAa,GAAG,KAAK,CAAC,aAAa;AACnC,oBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;AAEd,wBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;oBAC3B;gBACJ;YACJ;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAK;AAClC,YAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAEhC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACtB,QAAA,CAAC,CAAC;QAGF,OAAO,CAAC,GAAG,CAAC,CAAA,mCAAA,EAAsC,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;IACrE;AAEQ,IAAA,OAAO,CAAC,UAAoB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAEhB,IAAI,CAAC,UAAU,EAAE;;YAEjB;QACJ;IACJ;8GAzFS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,kJClBlC,kGAKA,EAAA,MAAA,EAAA,CAAA,ygBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDaa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,kGAAA,EAAA,MAAA,EAAA,CAAA,ygBAAA,CAAA,EAAA;;sBAGhB;;sBAEA;;;MErBQ,MAAM,CAAA;IACR,OAAO,KAAK,CAAC,EAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;YACjC,UAAU,CAAC,MAAK;AACZ,gBAAA,OAAO,EAAE;YACb,CAAC,EAAE,EAAE,CAAC;AACV,QAAA,CAAC,CAAC;IACN;AACH;;MCIY,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;QAcW,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAE3B,IAAA,CAAA,IAAI,GAAe,IAAI;QAOvB,IAAA,CAAA,YAAY,GAAG,KAAK;AAiJ/B,IAAA;AA/IU,IAAA,WAAW,CAAC,SAAc,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,MAAM,EAAE;QACjB;QACA,IAAI,SAAS,CAAC,OAAO;AACjB,YAAA,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;QACnD;IACJ;IAEO,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,OAAO,EAAE;IAClB;AAEQ,IAAA,MAAM,MAAM,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEd,YAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;QACjC;QAEA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;YACnC;QACJ;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE;AACpB,YAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC;;YAEpE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;YAC3C;QACJ;;QAGA,IAAI,CAAC,OAAO,EAAE;QAEd,OAAO,CAAC,GAAG,CAAC,CAAA,mDAAA,EAAsD,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;;AAGjF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC;AAChB,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,uBAAuB,EAAE,CAAC;AAC1B,YAAA,sBAAsB,EAAE,KAAK;AAC7B,YAAA,8BAA8B,EAAE,KAAK;AACrC,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,mBAAmB,EAAE,CAAC;;AAEtB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE;AAClB,SAAA,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QAEhD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AAEjC,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,MAAK;;YAEtC,IAAI,CAAC,MAAM,EAAE;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,KAAI;AACzC,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC;;AAEtC,gBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;gBAChC,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,MAAM,EAAE;YACjB;AACJ,QAAA,CAAC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,CAAA,mCAAA,EAAsC,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;IACrE;AAEQ,IAAA,MAAM,gBAAgB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;AACjB,YAAA,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACvB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB;YACJ;QACJ;IACJ;AAEQ,IAAA,UAAU,CAAC,OAAsB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;QAC5C;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AAEtB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;gBAC1C,IAAI,CAAC,OAAO,EAAE;AAClB,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;gBAC1C,IAAI,CAAC,MAAM,EAAE;AACjB,YAAA,CAAC,CAAC;QACN;IACJ;IAGQ,OAAO,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;QAC3C;IACJ;IAEQ,MAAM,GAAA;AACV,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAEhC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QAC3B;IACJ;IAEQ,OAAO,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAExB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACvB;IACJ;AAGO,IAAA,YAAY,CAAC,GAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,oBAAoB;QACtD,GAAG,CAAC,eAAe,EAAE;IACzB;IAEO,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;IACrC;8GA/JS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,6PCZlC,oIAMA,EAAA,MAAA,EAAA,CAAA,mcAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDMa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,oIAAA,EAAA,MAAA,EAAA,CAAA,mcAAA,CAAA,EAAA;;sBAGhB;;sBAEA;;sBAEA,SAAS;uBAAC,iBAAiB;;;MEjBnB,SAAS,CAAA;AAKlB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC/B;IAEO,IAAI,GAAA;AACP,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,IAAG;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,gBAAA,OAAO,EAAE;gBACT;YACJ;AAEA,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;AACxC,QAAA,CAAC,CAAC;IACN;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;YAEjB;QACJ;QACA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAkB;AAC9D,YAAA,OAAO,EAAE;QACb;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QAC1B;IACJ;IAEO,MAAM,GAAA;QAET,OAAO,IAAI,CAAC,SAAS;IACzB;AACH;;MC/BY,cAAc,CAAA;AASvB,IAAA,WAAA,CAAoB,KAAiB,EAAA;QAAjB,IAAA,CAAA,KAAK,GAAL,KAAK;QARjB,IAAA,CAAA,KAAK,GAMT,EAAE;IAEmC;AAEzC;;;;;;;AAOG;IACI,MAAM,IAAI,CAAI,GAAW,EAAE,IAAc,EAAE,QAAiB,EAAE,OAAgB,EAAA;QAEjF,IAAI,QAAQ,EAAE;YACV,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAM;QAC5D;aACK;YAED,IAAI,MAAM,GAAG,CAAC;YACd,OAAO,IAAI,EAAE;AACT,gBAAA,MAAM,EAAE;AACR,gBAAA,IAAI;oBACA,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAM;gBAC5C;gBACA,OAAO,GAAG,EAAE;oBACR,IAAI,OAAO,EAAE;AACT,wBAAA,IAAI,MAAM,IAAI,OAAO,EAAE;4BACnB,OAAO,CAAC,IAAI,CAAC,CAAA,qBAAA,EAAwB,MAAM,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;AACnE,4BAAA,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;4BACxB;wBACJ;oBACJ;AACA,oBAAA,MAAM,GAAG;gBACb;YACJ;QACJ;IACJ;AAEQ,IAAA,MAAM,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAS,EAAA;AAE/D,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;QAEvD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;gBACnB,IAAI,EAAE,IAAI,SAAS,EAAE;AACrB,gBAAA,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;aACzC;QACL;QAEA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAEpC,QAAA,IAAI;AACA,YAAA,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE;AAE3B,YAAA,IAAI,SAAS,CAAC,IAAI,EAAE;;gBAEhB,OAAO,SAAS,CAAC,IAAI;YACzB;AACA,YAAA,SAAS,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;YAC7C,OAAO,SAAS,CAAC,IAAI;QACzB;gBACQ;AACJ,YAAA,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QAC5B;IACJ;AAEQ,IAAA,MAAM,MAAM,CAAI,GAAW,EAAE,IAAU,EAAA;QAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EACjC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE;AACjC,QAAA,OAAO,GAAQ;IACnB;AAEO,IAAA,MAAM,GAAG,CAAI,GAAW,EAAE,OAAgB,EAAA;AAE7C,QAAA,IAAI,WAAW,GAAG;YACd,OAAO,EAAE,OAAO,IAAI,KAAK;YACzB,OAAO,EAAE,IAAI,WAAW;SAC3B;AAED,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE;AACnE,QAAA,OAAO,GAAQ;IACnB;8GA1FS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA1B,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFX,MAAM,EAAA,CAAA,CAAA;;2FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCIY,0BAA0B,CAAA;AAsBnC,IAAA,WAAA,CACY,KAAqB,EAAA;QAArB,IAAA,CAAA,KAAK,GAAL,KAAK;QAPT,IAAA,CAAA,UAAU,GAAG,KAAK;QAEnB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAE3B,IAAA,CAAA,YAAY,GAAG,KAAK;IAI5B;IAEO,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,QAAQ,EAAE;IACnB;AAEO,IAAA,WAAW,CAAC,SAAc,EAAA;AAC7B,QAAA,IAAI,SAAS,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;QACnD;QAEA,IAAI,CAAC,MAAM,EAAE;IACjB;AAEQ,IAAA,UAAU,CAAC,OAAsB,EAAA;QACrC,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;gBACrB,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;gBACrB,IAAI,CAAC,QAAQ,EAAE;AACnB,YAAA,CAAC,CAAC;QACN;IACJ;IAEQ,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,SAAS,EAAE;QACpB;aACK;YACD,IAAI,CAAC,QAAQ,EAAE;QACnB;IACJ;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,IAAI,CAAC,MAAM,EAAE;IACjB;AAEQ,IAAA,MAAM,MAAM,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU;YAChB,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AAEA,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,YAAW;YAChC,IAAI,CAAC,MAAM,EAAE;AACjB,QAAA,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC7B;AAEQ,IAAA,MAAM,WAAW,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AACA,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAC/B,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,IAAI,CAAC,MAAM,CAAC;AAClE,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC9B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAEpB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;YAClB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK;YAC9B;iBACK;gBACD,IAAI,CAAC,QAAQ,GAAG,CAAA,uBAAA,EAA0B,IAAI,CAAC,KAAK,EAAE;YAC1D;QACJ;IACJ;IAEQ,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,YAAY,CAAC,IAAI,CAAC,MAAgB,CAAC;IACvC;8GApGS,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA+B,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,iMCXvC,iJAKA,EAAA,MAAA,EAAA,CAAA,+sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA5B,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDMa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,eAAA,EAGd,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,iJAAA,EAAA,MAAA,EAAA,CAAA,+sBAAA,CAAA,EAAA;;sBAGhB;;sBAEA;;sBAEA;;sBAKA;;;MEnBQ,MAAM,CAAA;IAyClB,WAAA,CACS,OAAe,EACf,aAA+B,EAAA;QAD/B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,aAAa,GAAb,aAAa;AApCd,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,MAAM,EAAE;AAE9B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,MAAM,EAAE;AAEhC,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,MAAM,EAAE;AAErC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,MAAM,EAAE;QAE3B,IAAA,CAAA,gBAAgB,GAAG,CAAC;;AAiBpB,QAAA,IAAA,CAAA,iBAAiB,GAAG;AAC3B,YAAA,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,gCAAgC,EAAE;AACvD,gBAAA,EAAE,IAAI,EAAE,8BAA8B,EAAE;SACxC;QAIO,IAAA,CAAA,sBAAsB,GAAQ,IAAI;IAK1C;IAEO,KAAK,GAAA;QACX,IAAI,CAAC,iBAAiB,EAAE;IACzB;IAEO,IAAI,GAAA;QACV,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,aAAa,EAAE;IACrB;IAEO,OAAO,GAAA;QACb,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,aAAa,EAAE;IACrB;AAEO,IAAA,MAAM,CAAC,QAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC;IAClC;AAEO,IAAA,MAAM,CAAC,QAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC;IAC/B;AAEO,IAAA,OAAO,CAAC,QAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC;IACpC;AAEO,IAAA,OAAO,CAAC,QAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,QAAQ,CAAC;IACzC;IAEQ,iBAAiB,GAAA;QACxB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO;;QAGnC,IAAI,CAAC,sBAAsB,EAAE;IAC9B;AAEQ,IAAA,QAAQ,CAAC,QAAgB,EAAA;QAChC,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;IAC9B;IAEQ,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IAClE;IAEQ,sBAAsB,GAAA;QAC7B,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,gBAAgB,GAAG,EAAE,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,mEAAmE,CAAC;QAC1F;;QAGA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM;AACrC,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS;QAC7C;AACK,aAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ;QAC5D;aACK;YACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,6DAA6D,GAAG,MAAM,CAAC,QAAQ,CAAC;QACtG;;QAEA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ;AAE/D,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB;AACjC,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO;QAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC;;QAGvC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,KAAU,KAAI;YACvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7C,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AAC1B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE;AAEQ,IAAA,eAAe,CAAC,KAAU,EAAA;QACjC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;YACpC;QACD;QACA,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/B,YAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,sBAAsB,EAAE;YAC7B;QACD;;AAEA,QAAA,IAAI;YACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACnC;QACA,OAAO,CAAC,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,WAAW,EAAE;gBAC7B,IAAI,CAAC,mBAAmB,CAAC,+BAA+B,GAAG,KAAK,CAAC,IAAI,CAAC;YACvE;iBAAO;gBACN,IAAI,CAAC,mBAAmB,CAAC,kCAAkC,GAAG,KAAK,CAAC,IAAI,CAAC;YAC1E;YACA;QACD;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B;QAEA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAClC;aACK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAClC;aACK;YACJ,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,GAAG,IAAI,CAAC,IAAI,CAAC;QAChE;IACD;AAEQ,IAAA,UAAU,CAAC,GAAQ,EAAA;;AAE1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;QAEzB,IAAI,CAAC,eAAe,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACpE,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACtD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,OAAO,OAAO,EAAE,CAAA,CAAC,CAAC,CAAC;;QAGjF,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACb,YAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC;QAC/D;QAEA,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,CAAC,KAAU,KAAI;;;AAGpD,YAAA,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE;gBAC5B;YACD;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/D,QAAA,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,CAAC,KAAU,KAAI;YAChE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;gBACpE,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,IAAI,QAAQ,EAAE;oBACxD,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,MAAK,EAAc,CAAC;AACtE,oBAAA,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAC7C;YACD;AACD,QAAA,CAAC;IACF;IAEQ,eAAe,GAAA;QAEtB,IAAI,UAAU,GAAG,CAAC;AAElB,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAW;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;;gBAE1B,aAAa,CAAC,QAAQ,CAAC;gBACvB;YACD;YACA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;YAClE,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,IAAI,WAAW,EAAE;gBACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;gBAElD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBAChC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE;AAClC,wBAAA,IAAI,OAAO,GAAG,CAAC,aAAa,IAAI,QAAQ,EAAE;AACzC,4BAAA,MAAM,aAAa,GAAG,GAAG,CAAC,aAAa;AACvC,4BAAA,MAAM,IAAI,GAAG,aAAa,GAAG,UAAU;AACvC,4BAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,aAAa,CAAA,CAAE,CAAC;AACtD,4BAAA,IAAI,IAAI,GAAG,CAAC,EAAE;gCACb,UAAU,GAAG,aAAa;AAC1B,gCAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;gCACxB;4BACD;wBACD;oBACD;gBACD;YACD;QACD,CAAC,EAAE,IAAI,CAAC;IACT;AAEQ,IAAA,OAAO,CAAC,KAAU,EAAA;AAEzB,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AAEvB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;YAChD;QACD;QAEA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE;AAE3C,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,MAAM;AACrC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;QAE5B;aAAO;AACN,YAAA,IAAI,CAAC,mBAAmB,CAAC,6CAA6C,CAAC;QACxE;IACD;IAEQ,aAAa,GAAA;;IAErB;IAEQ,sBAAsB,GAAA;AAC7B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;;AAE9E,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD;IAEQ,YAAY,CAAC,MAAc,EAAE,QAAa,EAAA;AACjD,QAAA,IAAI,OAAO,GAAG,IAAI,cAAc,EAAE;AAClC,QAAA,OAAO,CAAC,kBAAkB,GAAG,MAAK;AACjC,YAAA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;AACrD,gBAAA,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC;YAC/B;AACK,iBAAA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAChC,oBAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBAC1C;gBACA,IAAI,CAAC,QAAQ,CAAC,CAAA,uBAAA,EAA0B,OAAO,CAAC,MAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAE,CAAC;YACjF;AACD,QAAA,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAClC,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACnB;AAEQ,IAAA,aAAa,CAAC,GAAQ,EAAA;QAC7B,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAK;AACxD,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE;gBACxB;YACD;YACA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;AAC9C,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY;AAC/B,qBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;YAChE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxB;;AAGQ,IAAA,kBAAkB,CAAC,IAAS,EAAA;QACnC,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;YACxD,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;AACxD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAA,CAAC,CAAC;IACH;;AAGQ,IAAA,aAAa,CAAC,GAAQ,EAAA;AAC7B,QAAA,IAAI,SAAS,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrE;IAEQ,UAAU,GAAA;;AAEjB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACxB;AAEQ,IAAA,mBAAmB,CAAC,KAAU,EAAA;QACrC,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;IACjC;IAEQ,KAAK,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC5B;QAEA,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAChC,YAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC1C;IACD;AAEQ,IAAA,aAAa,CAAC,KAAU,EAAA;QAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;IACnC;AAEQ,IAAA,aAAa,CAAC,KAAU,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACpE;IAEQ,SAAS,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,EAAE;IAC5B;IAEQ,aAAa,GAAA;QACpB,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAChC,YAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC1C;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,eAAe,CAAC,0BAA0B,GAAG,MAAK,EAAc,CAAC;AACtE,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC5B;IACD;AACA;;MChWY,wBAAwB,CAAA;AAoBjC,IAAA,WAAA,CACY,QAAoB,EAAA;QAApB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAfV,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;AAEtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AAExC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAQ;QAEhD,IAAA,CAAA,SAAS,GAAG,IAAI;QAEhB,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAI3B,IAAA,CAAA,YAAY,GAAG,KAAK;IAK5B;IAEO,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,YAAY,EAAE;IACvB;AAEO,IAAA,WAAW,CAAC,SAAc,EAAA;AAE7B,QAAA,IAAI,SAAS,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY;AAC3C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,IAAI,EAAE;YACf;iBACK;AACD,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBAC1B;YACJ;QACJ;IACJ;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QAC1B;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACvB;IACJ;IAEQ,IAAI,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;QACxB;IACJ;IAEQ,eAAe,GAAA;AACnB,QAAA,MAAM,OAAO,GAAI,IAAI,CAAC,QAAQ,CAAC,aAA6B,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClG,QAAA,OAAO,OAA2B;IACtC;IAEQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;IACJ;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf;QACJ;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IAC3B;IAEQ,mBAAmB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QAC7B;IACJ;IAEQ,wBAAwB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;QAClC;IACJ;8GAxGS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,yQCXrC,4TAYkC,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDDrB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,4TAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;;sBAIhB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;;METQ,0BAA0B,CAAA;AAsBnC,IAAA,WAAA,GAAA;QAjBS,IAAA,CAAA,UAAU,GAA0B,SAAS;AAS5C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;QAMpC,IAAA,CAAA,SAAS,GAAG,IAAI;AAGnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAK;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACtB,QAAA,CAAC,CAAC;IACN;IAEO,WAAW,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACjD;AAEA,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACjD;QACJ;IACJ;8GAvCS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,sPCZvC,mrBA8BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA6B,4BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDlBa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,mrBAAA,EAAA;;sBAGhB;;sBAEA;;sBAEA;;sBAEA;;sBAKA;;sBAEA;;;MEGQ,wBAAwB,CAAA;AAiCnC,IAAA,WAAA,CAAoB,QAAoB,EAAA;QAApB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAhCnB,IAAA,CAAA,IAAI,GAAmB,OAAO;QAG9B,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,SAAS,GAAY,IAAI;QACzB,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,QAAQ,GAAY,KAAK;AAIxB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAmB;AACjD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAmB;AAC3C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAQ;QAE1C,IAAA,CAAA,eAAe,GAAG,KAAK;QAEvB,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,eAAe,GAAG,CAAC;QACnB,IAAA,CAAA,eAAe,GAAG,CAAC;QACnB,IAAA,CAAA,cAAc,GAAgB,IAAI;;QAGlC,IAAA,CAAA,YAAY,GAAG,IAAI;QACnB,IAAA,CAAA,cAAc,GAAG,IAAI;QACrB,IAAA,CAAA,cAAc,GAAG,IAAI;QAErB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAG,KAAK;QAEN,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,OAAO,GAAG,CAAC;IAEwB;AAG3C,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;YACjD;QACF;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACtD;QACF;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,eAAe,GAAG,eAAe;IAClE;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW;AAC7C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AAAE,YAAA,OAAO,aAAa;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,aAAa;QAC7D,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,OAAO;AACnC,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,IAAI,qBAAqB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AAE1B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC1C,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5C,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAE5C,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,OAAO,IAAI,CAAC,WAAW,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAA,CAAE,GAAG,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;YAC1G;AACA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;YACtD;AACA,YAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;QACjD;;QAGA,MAAM,KAAK,GAAa,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE;YAC1C,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA,GAAA,CAAK,CAAC;QACtC;QACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE;YAC1B,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA,IAAA,CAAM,CAAC;QACzC;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA,IAAA,CAAM,CAAC;QACzC;AACA,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO;IACrD;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE;QACzB;QACA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B;IACF;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe;AAC5C,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B;YACA,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;;IAIA,cAAc,GAAA;QACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;QAC/F,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;IACxD;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;QAC/F,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;IACxD;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC;QAChF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5D;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC;QAChF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5D;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC;QAChF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5D;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC;QAChF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5D;;AAIA,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO;AACjC,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;YACtB;QACF;QACA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;AAC7B,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AAChD,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG;QACzB;aAAO;AACL,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;QACjC;IACF;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YACxB;QACF;QACA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG;QAC3B;aAAO;AACL,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;QACnC;IACF;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YACxB;QACF;QACA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG;QAC3B;aAAO;AACL,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;QACnC;IACF;AAEA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,KAAK,CAAC,MAAM,EAAE;IAChB;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;IACxD;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5D;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5D;IAEA,cAAc,CAAC,KAAoB,EAAE,IAAqC,EAAA;AACxE,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,cAAc,EAAE;iBACtC,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,gBAAgB,EAAE;;gBAC/C,IAAI,CAAC,gBAAgB,EAAE;QAC9B;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,cAAc,EAAE;iBACtC,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,gBAAgB,EAAE;;gBAC/C,IAAI,CAAC,gBAAgB,EAAE;QAC9B;IACF;AAEA,IAAA,YAAY,CAAC,MAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;IAC9B;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;AACjB,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAClC;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE;AAClC,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACtD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;;IAIQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AACtC,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;QACvC,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;QACA,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;IACF;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;YAChB,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS;AAAE,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QACzE;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;QAClB;QACA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;IACxD;AAEQ,IAAA,UAAU,CAAC,GAAoB,EAAA;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;AAC1D,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM;QAClC;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,GAAG,GAAoB;YAC3B,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,OAAO,EAAE,IAAI,CAAC,eAAe;YAC7B,OAAO,EAAE,IAAI,CAAC,eAAe;SAC9B;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;QAClC;AACA,QAAA,OAAO,GAAG;IACZ;8GA1TW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,obC7BrC,8iPA2KA,EAAA,MAAA,EAAA,CAAA,y8HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1B,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD9Ia,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,8iPAAA,EAAA,MAAA,EAAA,CAAA,y8HAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAsBA,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;MEvDjC,+BAA+B,GACxC,IAAI,cAAc,CAAqB,iCAAiC;;ACG5E,MAAM,iBAAiB,GAAG,GAAG;MAShB,gCAAgC,CAAA;AAuGzC,IAAA,WAAA,CACY,QAAoB,EACpB,UAA4B,EACiB,aAAwC,EAAA;QAFrF,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,UAAU,GAAV,UAAU;QAvGb,IAAA,CAAA,IAAI,GAA2B,QAAQ;QACvC,IAAA,CAAA,IAAI,GAAgB,IAAI;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAe;QAE7C,IAAA,CAAA,SAAS,GAAgB,IAAI;AAC5B,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAe;QAElD,IAAA,CAAA,OAAO,GAAgB,IAAI;AAC1B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAe;AAE/C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAkB;QAEjD,IAAA,CAAA,OAAO,GAA8B,IAAI;QACzC,IAAA,CAAA,OAAO,GAAgB,IAAI;QAC3B,IAAA,CAAA,OAAO,GAAgB,IAAI;QAC3B,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,WAAW,GAAuB,EAAE;QACpC,IAAA,CAAA,WAAW,GAAW,EAAE;QACxB,IAAA,CAAA,gBAAgB,GAAW,iBAAiB;QAC5C,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,SAAS,GAAY,KAAK;QAInC,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,aAAa,GAA8B,EAAE;;AAG7C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,IAAI,EAAE;QAC5B,IAAA,CAAA,WAAW,GAAqC,EAAE;QAClD,IAAA,CAAA,aAAa,GAAG,EAAE;;AAGlB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,IAAI,EAAE;QAC7B,IAAA,CAAA,YAAY,GAAqC,EAAE;QACnD,IAAA,CAAA,cAAc,GAAG,EAAE;AAEnB,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;;QAGtD,IAAA,CAAA,aAAa,GAAgB,IAAI;QACjC,IAAA,CAAA,cAAc,GAAgB,IAAI;QAClC,IAAA,CAAA,YAAY,GAAgB,IAAI;QAChC,IAAA,CAAA,aAAa,GAAkB,IAAI;QACnC,IAAA,CAAA,mBAAmB,GAAkB,IAAI;QACzC,IAAA,CAAA,uBAAuB,GAAkB,IAAI;QAC7C,IAAA,CAAA,qBAAqB,GAAkB,IAAI;;QAG3C,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,QAAQ,GAAW,CAAC;QACpB,IAAA,CAAA,OAAO,GAAgB,IAAI;QAC3B,IAAA,CAAA,aAAa,GAAW,IAAI;QAC5B,IAAA,CAAA,eAAe,GAAW,IAAI;AAE9B,QAAA,IAAA,CAAA,cAAc,GAAuB;AACjC,YAAA;AACI,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;oBACvC,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM;iBACpC;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,QAAQ,EAAE,OAAO;AACb,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AAC1D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM;iBACvD;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,QAAQ,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;oBAC3C,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM;iBACxC;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,QAAQ,EAAE,OAAO;AACb,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;AAC/D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM;iBAC5D;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,QAAQ,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;oBACzC,GAAG,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;iBACtC;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,QAAQ,EAAE,OAAO;AACb,oBAAA,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;AAC9D,oBAAA,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;iBAC3D;AACJ;SACJ;AAOG,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;AACvC,YAAA,IAAI,CAAC,cAAc,GAAG,aAAa;QACvC;IACJ;IAEA,QAAQ,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE;IACtB;IAGA,QAAQ,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE;IACtB;IAEQ,WAAW,GAAA;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB;IAC3D;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C;QACA,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YACxC,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAClD;QACA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YACpC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9C;IACJ;AAEA,IAAA,WAAW,KAAW;AAGtB,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;YAAE;QACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE;QACxD,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc;IAC9C;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;IAChD;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;IAChD;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC;AACA,YAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC;QACrE;QACA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YAChC,IAAI,IAAI,CAAC;mBACF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC;mBAClC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,qBAAqB,EAAE;gBAC1D,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC5D;AACA,YAAA,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAClF;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;IACtE;AAEA,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1D;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI;QAC9C,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC;IAC7C;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;IACxE;AAEA,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;IAC1E;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;IACtE;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;AACxD,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AACpF,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC5C;AACA,QAAA,OAAO,SAAS;IACpB;AAEQ,IAAA,UAAU,CAAC,IAAU,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE;AAC3B,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;QACpC,IAAI,CAAC,KAAK,CAAC;YAAE,CAAC,GAAG,EAAE;aACd,IAAI,CAAC,GAAG,EAAE;YAAE,CAAC,IAAI,EAAE;AACxB,QAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,EAAE;IAChE;IAEA,MAAM,GAAA;QACF,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,KAAK,EAAE;QAChB;aAAO;YACH,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;QAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI;QACtE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AAChE,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC;eACpB,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;eACnC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,qBAAqB;cACvD,IAAI,CAAC;cACL,IAAI;AAEV,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9E;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,IAAI,EAAE;QACzF;aAAO;YACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,IAAI,EAAE;AACvF,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;QACjF;QAEA,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,sBAAsB,EAAE;IACjC;IAEQ,sBAAsB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QAEtB,UAAU,CAAC,MAAK;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAClE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAC9E,YAAA,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,CAAC,YAAY,GAAG,GAAG;YACjE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AACvD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;YAC/B,MAAM,MAAM,GAAG,EAAE;AACjB,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;YAEzC,MAAM,KAAK,GAA8B,EAAE,IAAI,EAAE,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI,EAAE;AAEnE,YAAA,IAAI,UAAU,IAAI,cAAc,EAAE;;gBAE9B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA,EAAA,CAAI;YACzC;AAAO,iBAAA,IAAI,UAAU,IAAI,cAAc,EAAE;;AAErC,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAA,EAAG,cAAc,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI;YAC1D;iBAAO;;AAEH,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC;AACtE,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAA,EAAG,GAAG,IAAI;gBACzB,KAAK,CAAC,YAAY,CAAC,GAAG,CAAA,EAAG,cAAc,GAAG,GAAG,GAAG,MAAM,CAAA,EAAA,CAAI;YAC9D;AAEA,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC9B,QAAA,CAAC,CAAC;IACN;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;;IAGA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;AACjF,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;QACjF;QACA,IAAI,CAAC,eAAe,EAAE;IAC1B;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;AAC5E,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;QACjF;QACA,IAAI,CAAC,eAAe,EAAE;IAC1B;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;AACnF,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;QAClF,IAAI,CAAC,eAAe,EAAE;IAC1B;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;AAC9E,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;QAClF,IAAI,CAAC,eAAe,EAAE;IAC1B;;IAGA,SAAS,GAAA;QACL,IAAI,CAAC,aAAa,EAAE;IACxB;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA,IAAA,SAAS,CAAC,GAAkB,EAAA;AACxB,QAAA,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS;YAAE;AAErC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,KAAK,EAAE;gBACZ;YACJ;QACJ;aAAO;;;AAGH,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;;AAEpE,gBAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AAC9D,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YAC7B;iBAAO;;AAEH,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AACvD,gBAAA,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AAC9C,oBAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AACrE,oBAAA,IAAI,CAAC,cAAc,GAAG,MAAM;gBAChC;qBAAO;AACH,oBAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;gBAC5D;YACJ;QACJ;QACA,IAAI,CAAC,eAAe,EAAE;IAC1B;AAEA,IAAA,YAAY,CAAC,MAAwB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,KAAK;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;QACjF;QACA,IAAI,CAAC,eAAe,EAAE;IAC1B;IAEA,SAAS,GAAA;AACL,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;QAC1D,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,eAAe,EAAE;IAC1B;;AAGQ,IAAA,SAAS,CAAC,CAAS,EAAA;AACvB,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IACpC;IAEA,cAAc,GAAA;QACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IACpD;IAEA,cAAc,GAAA;QACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IACpD;IAEA,gBAAgB,GAAA;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxD;IAEA,gBAAgB,GAAA;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxD;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;YACvB;QACJ;QACA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,GAAG;AACjB,YAAA,IAAI,CAAC,aAAa,GAAG,GAAG;QAC5B;aAAO;AACH,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa;QACpC;IACJ;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;YACzB;QACJ;QACA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;AACnB,YAAA,IAAI,CAAC,eAAe,GAAG,GAAG;QAC9B;aAAO;AACH,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe;QACtC;IACJ;IAEA,UAAU,GAAA;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IACpD;IAEA,YAAY,GAAA;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxD;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;AACpB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,KAAK,CAAC,MAAM,EAAE;IAClB;IAEA,aAAa,CAAC,KAAoB,EAAE,IAAyB,EAAA;AACzD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,cAAc,EAAE;;gBACtC,IAAI,CAAC,gBAAgB,EAAE;QAChC;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,cAAc,EAAE;;gBACtC,IAAI,CAAC,gBAAgB,EAAE;QAChC;IACJ;AAEA,IAAA,SAAS,CAAC,MAAmB,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;IACzB;AAEQ,IAAA,eAAe,CAAC,IAAU,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM;QACvB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;YACvC,KAAK,GAAG,CAAC;QACb;aAAO,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;YAC9C,KAAK,IAAI,EAAE;QACf;AACA,QAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAA,OAAO,MAAM;IACjB;AAEQ,IAAA,gBAAgB,CAAC,IAAiB,EAAA;QACtC,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACvB;aAAO;AACH,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,gBAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACvB;AAAO,iBAAA,IAAI,CAAC,GAAG,EAAE,EAAE;AACf,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACvB;AAAO,iBAAA,IAAI,CAAC,KAAK,EAAE,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACvB;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACvB;QACJ;QACA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAChD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxD;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;sBACX,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa;sBACvC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;gBAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACnC;QACJ;aAAO;AACH,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;sBAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc;sBACxC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;gBACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7C;AACA,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;sBACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY;sBACtC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACzC;YACA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACvE;AACA,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;AACtD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa;gBAC7C,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACvD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACvD;iBAAO;AACH,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACrC;QACJ;QACA,IAAI,CAAC,KAAK,EAAE;IAChB;IAEA,MAAM,GAAA;QACF,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa;QACvD,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC;IACvD;IAEQ,eAAe,GAAA;QACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACnD;IACJ;IAEQ,UAAU,CAAC,IAAU,EAAE,IAAsB,EAAA;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAE9C,MAAM,OAAO,GAAqC,EAAE;AACpD,QAAA,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAC9D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QACxD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AAEzC,QAAA,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAChC,YAAA,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAqB,EAAE;AAC3C,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACjB,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;gBAC9B,MAAM,SAAS,GAAG,YAAY,KAAK,OAAO,CAAC,KAAK,EAAE;gBAElD,IAAI,UAAU,GAAG,KAAK;AACtB,gBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;oBACjD,UAAU,GAAG,IAAI;gBACrB;AAAO,qBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;oBACxD,UAAU,GAAG,IAAI;gBACrB;AAEA,gBAAA,IAAI,YAAgD;AACpD,gBAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC3D,oBAAA,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;oBAC5B,MAAM,MAAM,GAA2B,EAAE;AACzC,oBAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,wBAAA,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACrC,4BAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;wBACxB;oBACJ;oBACA,IAAI,MAAM,CAAC,MAAM;wBAAE,YAAY,GAAG,MAAM;gBAC5C;AAEA,gBAAA,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAElE,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACV,oBAAA,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE;AACtB,oBAAA,GAAG,EAAE,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;oBAC/C,SAAS;AACT,oBAAA,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,SAAS,GAAG,IAAI,GAAG,UAAU;AACzC,oBAAA,aAAa,EAAE,KAAK;oBACpB;AACH,iBAAA,CAAC;AAEF,gBAAA,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;YAC3C;QACJ;AAEA,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC9B;aAAO;AACH,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC/B;IACJ;AAEQ,IAAA,aAAa,CAAC,IAAmB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACxB,OAAO,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK;QACtF;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AACvF,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AACnF,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,OAAO,CAAC,GAAkB,EAAA;QACtB,IAAI,GAAG,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;AAC/B,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;IACnD;AAEA,IAAA,SAAS,CAAC,GAAkB,EAAA;QACxB,IAAI,GAAG,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;AAC/B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;QACrF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IACxG;AAEA,IAAA,YAAY,CAAC,GAAkB,EAAA;QAC3B,IAAI,GAAG,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,KAAK;AAC/D,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;IACtE;AAEA,IAAA,UAAU,CAAC,GAAkB,EAAA;QACzB,IAAI,GAAG,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;AAC7D,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IACpE;AAtoBS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,4EA0GjB,+BAA+B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA1G9C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,wvBCtB7C,0tcAyUA,EAAA,MAAA,EAAA,CAAA,q2RAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkC,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAArC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDnTa,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,0tcAAA,EAAA,MAAA,EAAA,CAAA,q2RAAA,CAAA,EAAA;;0BA4GZ;;0BAAY,MAAM;2BAAC,+BAA+B;;sBAxGtD;;sBACA;;sBACA;;sBAEA;;sBACA;;sBAEA;;sBACA;;sBAEA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;uBAAC,YAAY;;sBA6FtB,YAAY;uBAAC,eAAe;;sBAuB5B,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;MErJnC,0BAA0B,CAAA;AAPvC,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,MAAM,GAAW,GAAG;QACpB,IAAA,CAAA,QAAQ,GAAY,IAAI;QACxB,IAAA,CAAA,WAAW,GAAW,CAAC;QACvB,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,WAAW,GAAW,EAAE;QACxB,IAAA,CAAA,YAAY,GAA6B,KAAK;QAC9C,IAAA,CAAA,KAAK,GAAqB,EAAE;AAE3B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAC1C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAkB;QAI1D,IAAA,CAAA,UAAU,GAAG,KAAK;AA4FrB,IAAA;AAzFG,IAAA,UAAU,CAAC,GAAc,EAAA;QACrB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IAC1B;AAGA,IAAA,WAAW,CAAC,GAAc,EAAA;QACtB,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;IAC3B;AAGA,IAAA,MAAM,CAAC,GAAc,EAAA;QACjB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AAEvB,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY;QAC3B,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC;AAC3C,YAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrC;QACJ;IACJ;IAEA,cAAc,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE;IACxC;AAEA,IAAA,WAAW,CAAC,GAAU,EAAA;AAClB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,MAA0B;QAC5C,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;YACnC,MAAM,KAAK,GAAW,EAAE;AACxB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B;AACA,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC;AACA,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IACpB;AAEA,IAAA,UAAU,CAAC,IAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B;AAEA,IAAA,WAAW,CAAC,QAAgB,EAAA;QACxB,QAAQ,QAAQ;AACZ,YAAA,KAAK,OAAO,EAAE,OAAO,kCAAkC;AACvD,YAAA,KAAK,MAAM,EAAE,OAAO,0CAA0C;AAC9D,YAAA,SAAS,OAAO,yCAAyC;;IAEjE;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;QACxB,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;AACrC,QAAA,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;YAAE,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA,GAAA,CAAK;AAChE,QAAA,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAAE,YAAA,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;AACjF,QAAA,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;IAC5D;AAEQ,IAAA,WAAW,CAAC,QAAkB,EAAA;QAClC,MAAM,KAAK,GAAW,EAAE;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;YACxB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW;gBAAE;YACtD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAG;AAC/B,oBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACtB,wBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC/D;AACA,oBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACrB,wBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBACxD;AACA,oBAAA,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI;AAC7B,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,KAAK;oBAAE;YAChB;AACA,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACpB;AACA,QAAA,OAAO,KAAK;IAChB;8GA1GS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,wiBCbvC,mtHAqGA,EAAA,MAAA,EAAA,CAAA,+jHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4B,YAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAApC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDxFa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,eAAA,EAGZ,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,mtHAAA,EAAA,MAAA,EAAA,CAAA,+jHAAA,CAAA,EAAA;;sBAIhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBAEA,SAAS;uBAAC,WAAW;;sBAIrB,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAQnC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAOpC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;;MEjCvB,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,IAAI,GAAoB,IAAI;QAG5B,IAAA,CAAA,UAAU,GAA0B,MAAM;QAE1C,IAAA,CAAA,OAAO,GAAG,KAAK;AAoBzB,IAAA;AAlBC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG;IACnB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI;IACjC;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;IAChC;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO;AACL,YAAA,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI;YACpC,uBAAuB,EAAE,IAAI,CAAC;SAC/B;IACH;8GA1BW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,2MCZjC,k7CAkCA,EAAA,MAAA,EAAA,CAAA,44FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDtBa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,k7CAAA,EAAA,MAAA,EAAA,CAAA,44FAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MERU,yBAAyB,CAAA;AAPtC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,IAAI,GAAyB,IAAI;QACjC,IAAA,CAAA,MAAM,GAAa,EAAE;QACrB,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,aAAa,GAAG,KAAK;AAC/B,IAAA;8GANY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,mLCXtC,40BAyBA,EAAA,MAAA,EAAA,CAAA,muEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDda,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,40BAAA,EAAA,MAAA,EAAA,CAAA,muEAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;;MEJU,8BAA8B,CAAA;AAP3C,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,IAAI,GAA8B,IAAI;QAKtC,IAAA,CAAA,UAAU,GAA0B,MAAM;QAE1C,IAAA,CAAA,OAAO,GAAG,KAAK;AAKzB,IAAA;AAHC,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,IAAuB;IACrC;8GAbW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,2PCZ3C,kiBAiBA,EAAA,MAAA,EAAA,CAAA,wsCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAqC,oBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDLa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAP1C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,kiBAAA,EAAA,MAAA,EAAA,CAAA,wsCAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEVU,gCAAgC,CAAA;AAP7C,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,IAAI,GAAgC,IAAI;AAelD,IAAA;AAXC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG;IACnB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI;IACjC;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;IAChC;8GAhBW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,2ICX7C,sqCAoBA,EAAA,MAAA,EAAA,CAAA,g4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDTa,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,sqCAAA,EAAA,MAAA,EAAA,CAAA,g4CAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;;MEJU,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,GAAG,GAAG,CAAC;QACP,IAAA,CAAA,GAAG,GAAG,GAAG;QACT,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,GAAG;QACf,IAAA,CAAA,KAAK,GAAqB,MAAM;QAChC,IAAA,CAAA,MAAM,GAAG,GAAG;QACZ,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEf,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU;QAI9C,IAAA,CAAA,WAAW,GAA0B,IAAI;QACzC,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QACxC,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AA4HnD,IAAA;AA1HC,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;IACnE;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;IACpE;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,GAAG,KAAK,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE;IACjC;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AACnD,QAAA,IAAI,SAAS,IAAI,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB;IACF;IAEA,gBAAgB,CAAC,KAAiB,EAAE,KAAqB,EAAA;QACvD,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;IACzD;IAEA,iBAAiB,CAAC,KAAiB,EAAE,KAAqB,EAAA;QACxD,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC/E,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;IAC3D;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,EAAE;IACxB;AAEQ,IAAA,WAAW,CAAC,KAAiB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC1C,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB;IACF;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;QAC9D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;IAC5D;AAEQ,IAAA,WAAW,CAAC,KAAiB,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;YAAE;QAChD,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC1C,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB;IACF;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;QAC9D,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;IAC9D;AAEQ,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAChE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;IAC3D;AAEQ,IAAA,mBAAmB,CAAC,KAAY,EAAA;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAChE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;IAC3D;AAEQ,IAAA,cAAc,CAAC,OAAe,EAAA;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAC9D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;IAChD;AAEQ,IAAA,SAAS,CAAC,KAAa,EAAA;QAC7B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3D,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC;IACF;AAEQ,IAAA,UAAU,CAAC,KAAa,EAAA;QAC9B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1D,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC;IACF;IAEQ,eAAe,GAAA;QACrB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;QAC9D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;QAC1D,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;QAC9D,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;IAC9D;8GA/IW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,qaCXjC,w8EAwDA,EAAA,MAAA,EAAA,CAAA,w2DAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD7Ca,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,w8EAAA,EAAA,MAAA,EAAA,CAAA,w2DAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MEPzB,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,IAAI,GAAiB,IAAI;QACzB,IAAA,CAAA,KAAK,GAAkB,SAAS;QAChC,IAAA,CAAA,GAAG,GAAG,KAAK;QACX,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAOhB,IAAA,CAAA,aAAa,GAA0B,MAAM;;QAM7C,IAAA,CAAA,KAAK,GAAG,KAAK;;QAIb,IAAA,CAAA,aAAa,GAA+B,SAAS;;QAErD,IAAA,CAAA,KAAK,GAAuB,OAAO;;QAEnC,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEf,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAc;AAyCnD,IAAA;AAvCC,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;IACtC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,OAAO,GAAG;YACd,WAAW;YACX,CAAA,WAAA,EAAc,IAAI,CAAC,IAAI,CAAA,CAAE;YACzB,CAAA,WAAA,EAAc,IAAI,CAAC,KAAK,CAAA,CAAE;SAC3B;QACD,IAAI,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACxD,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACvD,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACzG,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,KAAK,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAC/H,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,MAAM,OAAO,GAAG;YACd,iBAAiB;YACjB,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,CAAA,CAAE;YAC/B,CAAA,iBAAA,EAAoB,IAAI,CAAC,KAAK,CAAA,CAAE;YAChC,CAAA,iBAAA,EAAoB,IAAI,CAAC,KAAK,CAAA,CAAE;YAChC,CAAA,iBAAA,EAAoB,IAAI,CAAC,aAAa,CAAA,CAAE;SACzC;QACD,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC5D,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;8GAtEW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,iaClB9B,srEA4DA,EAAA,MAAA,EAAA,CAAA,k1QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD1Ca,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,srEAAA,EAAA,MAAA,EAAA,CAAA,k1QAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBAEA;;sBAEA;;sBAGA;;sBAGA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBACA;;;MErBU,wBAAwB,CAAA;AAiCnC,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;;QA9BrB,IAAA,CAAA,WAAW,GAAwB,QAAQ;QAC3C,IAAA,CAAA,UAAU,GAAW,SAAS;;QAI9B,IAAA,CAAA,KAAK,GAAuB,EAAE;QAC9B,IAAA,CAAA,YAAY,GAAY,KAAK;QAC7B,IAAA,CAAA,YAAY,GAAY,KAAK;QAC7B,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,SAAS,GAAY,KAAK;QAE1B,IAAA,CAAA,UAAU,GAAY,IAAI;;QAG1B,IAAA,CAAA,QAAQ,GAAiG,EAAE;QAC3G,IAAA,CAAA,MAAM,GAAW,CAAC;QAClB,IAAA,CAAA,mBAAmB,GAAY,IAAI;QACnC,IAAA,CAAA,aAAa,GAAW,EAAE;AAEzB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAoB;AAChD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA8C;AAC1E,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;AACxC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAE;QAItC,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,eAAe,GAAG,KAAK;AACf,QAAA,IAAA,CAAA,kBAAkB,GAAiB,IAAI,YAAY,EAAE;IAEhB;IAE7C,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CACjC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EACtD,QAAQ,CACT,CAAC,SAAS,CAAC,MAAK;gBACf,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;IACvC;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,aAAa,EAAE;QACtB;aAAO;YACL,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;QAGjC,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,sBAAsB,EAAE;AAC7B,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC7B;QACF,CAAC,EAAE,CAAC,CAAC;IACP;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACrB;IACF;IAEA,sBAAsB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;AAE3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B;AAC9D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa;AACnD,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAE7C,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AACzC,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU;AACvC,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC;;AAGjD,QAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AACjC,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAC9B,QAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;;QAGjC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,CAAC;AACvG,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,KAAK,MAAM;AAC/D,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,OAAO;;QAGlE,IAAI,KAAK,EAAE;;AAET,YAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,cAAc,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI;AAC3D,YAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO;QAC9B;aAAO;;AAEL,YAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA,EAAA,CAAI;AAC1C,YAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;QACjC;;;;QAKA,IAAI,OAAO,EAAE;;AAEX,YAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI;AACnD,YAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;;AAG9B,YAAA,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,GAAG,aAAa;AAC9C,YAAA,IAAI,aAAa,GAAG,aAAa,EAAE;gBACjC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA,EAAA,CAAI;AAClF,gBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO;YAC/B;QACF;aAAO,IAAI,MAAM,EAAE;;YAEjB,MAAM,aAAa,GAAG,aAAa,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;YAC7D,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,aAAa,IAAI;AAC3C,YAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO;;AAG7B,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,GAAG,aAAa;AAC9C,YAAA,IAAI,YAAY,GAAG,CAAC,EAAE;gBACpB,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA,EAAA,CAAI;AAChE,gBAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;YAChC;QACF;;AAGA,QAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzB,YAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI;AACnD,YAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;QAChC;IACF;AAGA,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;YAAE;QACnD,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAClB,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;YAAE;QACvE,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;YAAE;QAElE,IAAI,CAAC,aAAa,EAAE;IACtB;AAGA,IAAA,iBAAiB,CAAC,KAAiB,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QAC3C,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;YAAE;QAEvE,IAAI,CAAC,aAAa,EAAE;IACtB;AAGA,IAAA,eAAe,CAAC,KAAoB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAElB,QAAA,IACE,KAAK,CAAC,GAAG,KAAK,SAAS;YACvB,KAAK,CAAC,GAAG,KAAK,WAAW;YACzB,KAAK,CAAC,GAAG,KAAK,QAAQ;YACtB,KAAK,CAAC,GAAG,KAAK,UAAU;AACxB,YAAA,KAAK,CAAC,GAAG,KAAK,QAAQ,EACtB;YACA,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;IAGA,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE;YACvC,IAAI,CAAC,sBAAsB,EAAE;QAC/B;IACF;;AAGA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,aAAa;IAC3C;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,MAAM;IACpC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;IACtC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;IACtC;IAEA,WAAW,CAAC,IAAsB,EAAE,KAAkB,EAAA;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;AAEnC,YAAA,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,EAAE;;AAE9B,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;gBAC1C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;gBACtD,IAAI,CAAC,eAAe,EAAE;;AAEpB,oBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;AAC5B,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtD;YACF;iBAAO;;AAEL,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B;QACF;IACF;IAEA,gBAAgB,CAAC,IAAsB,EAAE,OAAgB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;YACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACxC;IACF;8GAxOW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,22BC3BrC,i7KAoJM,EAAA,MAAA,EAAA,CAAA,siNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,sBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAZ,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA1B,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDzHO,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,eAAA,EAGZ,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,i7KAAA,EAAA,MAAA,EAAA,CAAA,siNAAA,CAAA,EAAA;;sBAKlB;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBA0HvC,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;sBAY7C,YAAY;uBAAC,cAAc,EAAE,CAAC,QAAQ,CAAC;;sBAQvC,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;sBAezC,YAAY;uBAAC,eAAe;;;MEtMlB,wBAAwB,CAAA;AARrC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,cAAc,GAAG,EAAE;QACnB,IAAA,CAAA,KAAK,GAAoB,MAAM;QAC/B,IAAA,CAAA,QAAQ,GAAuB,KAAK;AAiB9C,IAAA;AAfC,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,QAAQ,IAAI,CAAC,QAAQ;AACnB,YAAA,KAAK,KAAK,EAAS,OAAO,eAAe;AACzC,YAAA,KAAK,QAAQ,EAAM,OAAO,YAAY;AACtC,YAAA,KAAK,MAAM,EAAQ,OAAO,OAAO;AACjC,YAAA,KAAK,OAAO,EAAO,OAAO,MAAM;AAChC,YAAA,KAAK,UAAU,EAAI,OAAO,aAAa;AACvC,YAAA,KAAK,WAAW,EAAG,OAAO,cAAc;AACxC,YAAA,SAAmB,OAAO,eAAe;;IAE7C;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc;IAC9B;8GApBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,gLCbrC,s+EAwDA,EAAA,MAAA,EAAA,CAAA,0gEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FD3Ca,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;+BACI,mBAAmB,EAAA,eAAA,EAGZ,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,UAAA,EACzB,KAAK,EAAA,QAAA,EAAA,s+EAAA,EAAA,MAAA,EAAA,CAAA,0gEAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;;MEKU,mBAAmB,CAAA;AAW9B,IAAA,WAAA,CACU,QAAiB,EACjB,WAAuB,EACvB,iBAAmC,EAAA;QAFnC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAZN,IAAA,CAAA,IAAI,GAAG,EAAE;QACrB,IAAA,CAAA,qBAAqB,GAAG,EAAE;QAC1B,IAAA,CAAA,eAAe,GAAuB,KAAK;QAC3C,IAAA,CAAA,YAAY,GAAoB,MAAM;QACtC,IAAA,CAAA,eAAe,GAAG,KAAK;QAExB,IAAA,CAAA,WAAW,GAAsB,IAAI;QACrC,IAAA,CAAA,WAAW,GAAkD,IAAI;IAMtE;IAGH,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QACxC,IAAI,CAAC,KAAK,EAAE;IACd;IAGA,YAAY,GAAA;QACV,IAAI,CAAC,KAAK,EAAE;IACd;IAGA,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QACxC,IAAI,CAAC,KAAK,EAAE;IACd;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,KAAK,EAAE;IACd;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,EAAE;IACd;IAEQ,KAAK,GAAA;QACX,IAAI,IAAI,CAAC,WAAW;YAAE;AAEtB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAEpD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACtD,YAAA,UAAU,EAAE,qBAAqB;AAClC,SAAA,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,eAAe,CAChC,wBAAwB,EACxB,IAAI,CAAC,iBAAiB,CACvB;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAC1C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB;QACrE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;QACnD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe;AACzD,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,YAAY,EAAE;IACnD;IAEQ,KAAK,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;QAEtC,OAAO,IAAI,CAAC;AACT,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,IAAI,CAAC,WAAW;aACpC,aAAa,CAAC,SAAS;aACvB,sBAAsB,CAAC,KAAK;aAC5B,QAAQ,CAAC,KAAK,CAAC;IACpB;IAEQ,aAAa,GAAA;QACnB,MAAM,MAAM,GAAG,CAAC;AAEhB,QAAA,QAAQ,IAAI,CAAC,eAAe;AAC1B,YAAA,KAAK,KAAK;gBACR,OAAO;oBACL,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;AAC/F,oBAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;iBAC/F;AACH,YAAA,KAAK,QAAQ;gBACX,OAAO;AACL,oBAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;oBAC9F,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;iBAChG;AACH,YAAA,KAAK,MAAM;gBACT,OAAO;oBACL,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;AAC9F,oBAAA,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;iBAC9F;AACH,YAAA,KAAK,OAAO;gBACV,OAAO;AACL,oBAAA,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;oBAC7F,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;iBAC/F;AACH,YAAA,KAAK,UAAU;gBACb,OAAO;oBACL,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;AAC7F,oBAAA,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;iBACzF;AACH,YAAA,KAAK,WAAW;gBACd,OAAO;oBACL,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;AACzF,oBAAA,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;iBAC7F;AACH,YAAA;gBACE,OAAO;oBACL,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;iBAChG;;IAEP;8GA7HW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAGE,KAAK;uBAAC,YAAY;;sBAClB;;sBACA;;sBACA;;sBACA;;sBAWA,YAAY;uBAAC,YAAY;;sBAMzB,YAAY;uBAAC,YAAY;;sBAKzB,YAAY;uBAAC,OAAO;;sBAMpB,YAAY;uBAAC,MAAM;;;ACpDtB,MAAM,oBAAoB,GAAqC;AAC7D,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,WAAW,EAAE,IAAI;CAClB;MASY,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,MAAM,GAAqB,UAAU;AAS/C,IAAA;AAPC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,CAAA,+BAAA,EAAkC,IAAI,CAAC,MAAM,EAAE;IACxD;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK;IACnD;8GAVW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,yGCpBlC,2DACA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDmBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,2DAAA,EAAA,MAAA,EAAA,CAAA,+fAAA,CAAA,EAAA;;sBAIlB;;;MEbU,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,WAAW,GAAG,QAAQ;QACtB,IAAA,CAAA,KAAK,GAAG,EAAE;AAET,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAU;QAE7C,IAAA,CAAA,OAAO,GAAG,KAAK;AAiBhB,IAAA;AAfC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACvD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,GAAG,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;8GAxBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,8LCTlC,gbAWA,EAAA,MAAA,EAAA,CAAA,mlBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDFa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,gbAAA,EAAA,MAAA,EAAA,CAAA,mlBAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBAEA;;sBACA;;;MENU,yBAAyB,CAAA;AAPtC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,KAAK,GAAG,WAAW;QAEnB,IAAA,CAAA,OAAO,GAAG,KAAK;AAEd,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;AAe9C,IAAA;AAbC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,OAAO,GAAG,CAAC,oBAAoB,CAAC;QACtC,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC;AAC7D,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,SAAS;IAC7C;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;8GApBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,gLCTtC,4RAOA,EAAA,MAAA,EAAA,CAAA,krBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDEa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,4RAAA,EAAA,MAAA,EAAA,CAAA,krBAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBAEA;;;MEFU,uBAAuB,CAAA;AAPpC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,IAAI,GAAuB,SAAS;QACpC,IAAA,CAAA,KAAK,GAAwB,SAAS;QACtC,IAAA,CAAA,KAAK,GAAG,EAAE;AAGT,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;QAErC,IAAA,CAAA,QAAQ,GAAG,KAAK;AAgCzB,IAAA;AA9BC,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK;AACpF,QAAA,MAAM,OAAO,GAAG;YACd,kBAAkB;YAClB,CAAA,kBAAA,EAAqB,IAAI,CAAC,IAAI,CAAA,CAAE;AAChC,YAAA,CAAA,kBAAA,EAAqB,WAAW,CAAA,CAAE;SACnC;AACD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM;IACnD;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK;QACpF,OAAO,WAAW,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS;IAC1D;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;8GAxCW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,kMCbpC,odAcA,EAAA,MAAA,EAAA,CAAA,iyBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA+B,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDDa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,odAAA,EAAA,MAAA,EAAA,CAAA,iyBAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBAEA;;;AERH,MAAM,aAAa,GAAyC;AAC1D,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,IAAI,EAAE,MAAM;CACb;AAED,MAAM,YAAY,GAAyC;AACzD,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,UAAU,EAAE,WAAW;AACvB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,IAAI,EAAE,eAAe;CACtB;MASY,uBAAuB,CAAA;AASlC,IAAA,WAAA,CAAoB,WAAuB,EAAA;QAAvB,IAAA,CAAA,WAAW,GAAX,WAAW;QAPtB,IAAA,CAAA,MAAM,GAAyB,OAAO;QACtC,IAAA,CAAA,KAAK,GAAyB,EAAE;QAChC,IAAA,CAAA,MAAM,GAAG,KAAK;AAEb,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAsB;AAClD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAQ;IAEI;AAE9C,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;IAClD;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,QAAQ;IAC9C;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,OAAO,GAAG,CAAC,kBAAkB,CAAC;AACpC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC;AAClE,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,WAAW,CAAC,IAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;AAGA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACzE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QACnB;IACF;8GAlCW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,4QC7CpC,0qBAsBA,EAAA,MAAA,EAAA,CAAA,o9BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA/B,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDuBa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,0qBAAA,EAAA,MAAA,EAAA,CAAA,o9BAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBAEA;;sBACA;;sBAsBA,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;;AE1DhD,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAC7D,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;MAS/C,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,UAAU,GAAkB,MAAM;QAClC,IAAA,CAAA,MAAM,GAAmB,OAAO;QAChC,IAAA,CAAA,UAAU,GAAY,IAAI;QAC1B,IAAA,CAAA,MAAM,GAAa,EAAE;QACrB,IAAA,CAAA,QAAQ,GAAsB,EAAE;QAChC,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,OAAO,GAAY,IAAI;QAEvB,IAAA,CAAA,UAAU,GAAyB,SAAS;AAE3C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA0D;QAIjG,IAAA,CAAA,SAAS,GAAc,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnD,IAAA,CAAA,YAAY,GAAkC,EAAE;QAExC,IAAA,CAAA,WAAW,GAAG,KAAK;AA2K5B,IAAA;AAzKC,IAAA,IAAY,cAAc,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,GAAG,mBAAmB,GAAG,kBAAkB;IAC9E;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,CAAA,kBAAA,EAAqB,IAAI,CAAC,MAAM,CAAA,CAAE,CAAC;AACjE,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACnE,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc;QAClD,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;AAEA,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;YACzB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACpE,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,KAAK,IAAI;AACjB,aAAA,CAAC;QACJ;IACF;IAEQ,UAAU,GAAA;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc;AAElD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;AAC3C,YAAA,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AAErD,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;gBAC9B,OAAO;oBACL,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,IAAI,EAAE,EAAE,CAAC,IAAI;AACb,oBAAA,WAAW,EAAE,KAAK;AAClB,oBAAA,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,aAAa;oBACtE,IAAI,EAAE,CAAC,KAAK,CAAC;AACb,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,gBAAgB,EAAE,CAAC;AACnB,oBAAA,qBAAqB,EAAE,CAAC;AACxB,oBAAA,yBAAyB,EAAE,MAAM;AACjC,oBAAA,qBAAqB,EAAE,KAAK;AAC5B,oBAAA,WAAW,EAAE;iBACd;YACH;YAEA,OAAO;gBACL,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,IAAI,EAAE,EAAE,CAAC,IAAI;AACb,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,aAAa,EAAE,QAAiB;AAChC,gBAAA,eAAe,EAAE,EAAE;AACnB,gBAAA,kBAAkB,EAAE,GAAG;AACvB,gBAAA,aAAa,EAAE;aAChB;AACH,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB;SACD;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO;QAE3D,IAAI,CAAC,YAAY,GAAG;AAClB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,mBAAmB,EAAE,KAAK;AAC1B,YAAA,WAAW,EAAE;AACX,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC1B,gBAAA,OAAO,EAAE;AACP,oBAAA,eAAe,EAAE,SAAS;oBAC1B,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;oBACxC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;AACvC,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,UAAU,EAAE;AACb;AACF,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,CAAC,EAAE;AACD,oBAAA,OAAO,EAAE,SAAS;AAClB,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE;AACV,qBAAA;AACD,oBAAA,MAAM,EAAE;AACN,wBAAA,OAAO,EAAE;AACV,qBAAA;AACD,oBAAA,KAAK,EAAE;AACL,wBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;AAChD,wBAAA,KAAK,EAAE;AACR;AACF,iBAAA;AACD,gBAAA,CAAC,EAAE;AACD,oBAAA,OAAO,EAAE,SAAS;AAClB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA;AACD,oBAAA,MAAM,EAAE;AACN,wBAAA,OAAO,EAAE,KAAK;AACd,wBAAA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACZ,qBAAA;AACD,oBAAA,KAAK,EAAE;AACL,wBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;AAChD,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,QAAQ,EAAE,CAAC,KAAU,KAAI;AACvB,4BAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,GAAG,KAAK;wBACnE;AACD;AACF;AACF;SACF;;AAGD,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE;YACnD,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC5C;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK;AACvC,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG;AAC7B,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS;AACzC,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc;QAElD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAQ;QACrD,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC;AAChF,YAAA,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrD,YAAA,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrD,YAAA,OAAO,CAAC,eAAe,GAAG,QAAQ;QACpC;AAEA,QAAA,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B;IAEQ,SAAS,CAAC,GAAW,EAAE,KAAa,EAAA;AAC1C,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACvC,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACvC,QAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACvC,OAAO,CAAA,KAAA,EAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG;IAC3C;8GA9LW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAejB,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzC/B,6+CAmDA,EAAA,MAAA,EAAA,CAAA,gnDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDzBa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,6+CAAA,EAAA,MAAA,EAAA,CAAA,gnDAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAEA,SAAS;uBAAC,kBAAkB;;;MExBlB,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;;QAUW,IAAA,CAAA,IAAI,GAAoB,KAAK;;QAG7B,IAAA,CAAA,IAAI,GAAyB,IAAI;;QAGjC,IAAA,CAAA,KAAK,GAA0B,OAAO;;QAGtC,IAAA,CAAA,MAAM,GAAkB,YAAY;;QAGpC,IAAA,CAAA,KAAK,GAAW,EAAE;;QAGlB,IAAA,CAAA,WAAW,GAAW,EAAE;;QAGxB,IAAA,CAAA,aAAa,GAAY,KAAK;AA2BxC,IAAA;AAzBC,IAAA,IAAI,WAAW,GAAA;QACb,OAAO;YACL,eAAe;YACf,CAAA,eAAA,EAAkB,IAAI,CAAC,IAAI,CAAA,CAAE;YAC7B,CAAA,eAAA,EAAkB,IAAI,CAAC,IAAI,CAAA,CAAE;YAC7B,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,CAAA,CAAE;YAC9B,CAAA,eAAA,EAAkB,IAAI,CAAC,MAAM,CAAA,CAAE;AAChC,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACb;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,IAAI,EAAE,OAAO,CAAC;AACnB,YAAA,KAAK,IAAI,EAAE,OAAO,EAAE;AACpB,YAAA,KAAK,IAAI,EAAE,OAAO,EAAE;;IAExB;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,IAAI,EAAE,OAAO,EAAE;AACpB,YAAA,KAAK,IAAI,EAAE,OAAO,EAAE;AACpB,YAAA,KAAK,IAAI,EAAE,OAAO,EAAE;;IAExB;8GA/CW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,gOCjBjC,w4FAwFA,EAAA,MAAA,EAAA,CAAA,+7NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDvEa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,w4FAAA,EAAA,MAAA,EAAA,CAAA,+7NAAA,CAAA,EAAA;;sBAKlB;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;MEdU,yBAAyB,CAAA;AAPtC,IAAA,WAAA,GAAA;QASW,IAAA,CAAA,IAAI,GAAyB,gBAAgB;QAC7C,IAAA,CAAA,IAAI,GAAyB,IAAI;QACjC,IAAA,CAAA,KAAK,GAA0B,OAAO;QACtC,IAAA,CAAA,KAAK,GAAc,EAAE;QACrB,IAAA,CAAA,WAAW,GAAW,CAAC;QACvB,IAAA,CAAA,QAAQ,GAAY,IAAI;QACxB,IAAA,CAAA,SAAS,GAAY,IAAI;AAmBnC,IAAA;AAjBC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,OAAO,GAAG;YACd,oBAAoB;YACpB,CAAA,oBAAA,EAAuB,IAAI,CAAC,IAAI,CAAA,CAAE;YAClC,CAAA,oBAAA,EAAuB,IAAI,CAAC,IAAI,CAAA,CAAE;YAClC,CAAA,oBAAA,EAAuB,IAAI,CAAC,KAAK,CAAA,CAAE;SACpC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC;AACrE,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,UAAU;AAC/C,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,SAAS;AAChD,QAAA,OAAO,YAAY;IACrB;8GA1BW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,iOCxBtC,kkHAyGA,EAAA,MAAA,EAAA,CAAA,kzEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA0C,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FDjFa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,kkHAAA,EAAA,MAAA,EAAA,CAAA,kzEAAA,CAAA,EAAA;;sBAIlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;ME6JU,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBA1HpB,sBAAsB;YACtB,oBAAoB;YACpB,yBAAyB;YACzB,uBAAuB;YACvB,oBAAoB;YACpB,0BAA0B;YAC1B,yBAAyB;YACzB,wBAAwB;YACxB,oBAAoB;YACpB,oBAAoB;YACpB,2BAA2B;YAC3B,iCAAiC;YACjC,wBAAwB;YACxB,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;YACzB,kBAAkB;YAClB,uBAAuB;YACvB,wBAAwB;YACxB,YAAY;YACZ,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,mBAAmB;YACnB,0BAA0B;YAC1B,4BAA4B;YAC5B,qBAAqB;YACrB,qBAAqB;YACrB,0BAA0B;YAC1B,wBAAwB;YACxB,0BAA0B;YAC1B,wBAAwB;YACxB,gCAAgC;YAChC,0BAA0B;YAC1B,oBAAoB;YACpB,yBAAyB;YACzB,8BAA8B;YAC9B,gCAAgC;YAChC,oBAAoB;YACpB,mBAAmB;YACnB,kBAAkB;YAClB,wBAAwB;YACxB,iBAAiB;YACjB,mBAAmB;YACnB,wBAAwB;YACxB,qBAAqB;YACrB,qBAAqB;YACrB,yBAAyB;YACzB,uBAAuB;YACvB,uBAAuB;YACvB,iBAAiB;YACjB,yBAAyB;AACzB,YAAA,oBAAoB,aAoDX,YAAY;YACrB,WAAW;YACX,cAAc;YACd,qBAAqB;YACrB,mBAAmB;YACnB,aAAa;AACb,YAAA,kBAAkB,iCAvDlB,sBAAsB;YACtB,oBAAoB;YACpB,yBAAyB;YACzB,uBAAuB;YACvB,oBAAoB;YACpB,0BAA0B;YAC1B,yBAAyB;YACzB,wBAAwB;YACxB,oBAAoB;YACpB,oBAAoB;YACpB,2BAA2B;YAC3B,iCAAiC;YACjC,wBAAwB;YACxB,wBAAwB;YACxB,yBAAyB;YACzB,yBAAyB;YACzB,kBAAkB;YAClB,uBAAuB;YACvB,wBAAwB;YACxB,YAAY;YACZ,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,mBAAmB;YACnB,0BAA0B;YAC1B,0BAA0B;YAC1B,wBAAwB;YACxB,gCAAgC;YAChC,0BAA0B;YAC1B,oBAAoB;YACpB,yBAAyB;YACzB,8BAA8B;YAC9B,gCAAgC;YAChC,oBAAoB;YACpB,mBAAmB;YACnB,kBAAkB;YAClB,wBAAwB;YACxB,iBAAiB;YACjB,mBAAmB;YACnB,wBAAwB;YACxB,qBAAqB;YACrB,qBAAqB;YACrB,yBAAyB;YACzB,uBAAuB;YACvB,uBAAuB;YACvB,iBAAiB;YACjB,yBAAyB;YACzB,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAkBf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,SAAA,EALJ;YAChB,aAAa;YACb,aAAa,CAAC,wBAAwB,EAAE,CAAC;AACzC,YAAA,iBAAiB,CAAC,OAAO,EAAE,EAAE,sBAAsB,EAAE,CAAC;AACzD,SAAA,EAAA,OAAA,EAAA,CAhBY,YAAY;YACrB,WAAW;YACX,cAAc;YACd,qBAAqB;YACrB,mBAAmB;YACnB,aAAa;YAEb,eAAe,CAAC,OAAO,CAAC;gBACpB,MAAM,EAAE,0BAA0B,CAAC;AAC/B,oBAAA,MAAM,EAAE,eAAe;AACvB,oBAAA,MAAM,EAAE;iBACX;aACJ,CAAC,CAAA,EAAA,CAAA,CAAA;;2FAKG,eAAe,EAAA,UAAA,EAAA,CAAA;kBA3H3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,YAAY,EAAE;wBAClB,sBAAsB;wBACtB,oBAAoB;wBACpB,yBAAyB;wBACzB,uBAAuB;wBACvB,oBAAoB;wBACpB,0BAA0B;wBAC1B,yBAAyB;wBACzB,wBAAwB;wBACxB,oBAAoB;wBACpB,oBAAoB;wBACpB,2BAA2B;wBAC3B,iCAAiC;wBACjC,wBAAwB;wBACxB,wBAAwB;wBACxB,yBAAyB;wBACzB,yBAAyB;wBACzB,kBAAkB;wBAClB,uBAAuB;wBACvB,wBAAwB;wBACxB,YAAY;wBACZ,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,0BAA0B;wBAC1B,4BAA4B;wBAC5B,qBAAqB;wBACrB,qBAAqB;wBACrB,0BAA0B;wBAC1B,wBAAwB;wBACxB,0BAA0B;wBAC1B,wBAAwB;wBACxB,gCAAgC;wBAChC,0BAA0B;wBAC1B,oBAAoB;wBACpB,yBAAyB;wBACzB,8BAA8B;wBAC9B,gCAAgC;wBAChC,oBAAoB;wBACpB,mBAAmB;wBACnB,kBAAkB;wBAClB,wBAAwB;wBACxB,iBAAiB;wBACjB,mBAAmB;wBACnB,wBAAwB;wBACxB,qBAAqB;wBACrB,qBAAqB;wBACrB,yBAAyB;wBACzB,uBAAuB;wBACvB,uBAAuB;wBACvB,iBAAiB;wBACjB,yBAAyB;wBACzB;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,sBAAsB;wBACtB,oBAAoB;wBACpB,yBAAyB;wBACzB,uBAAuB;wBACvB,oBAAoB;wBACpB,0BAA0B;wBAC1B,yBAAyB;wBACzB,wBAAwB;wBACxB,oBAAoB;wBACpB,oBAAoB;wBACpB,2BAA2B;wBAC3B,iCAAiC;wBACjC,wBAAwB;wBACxB,wBAAwB;wBACxB,yBAAyB;wBACzB,yBAAyB;wBACzB,kBAAkB;wBAClB,uBAAuB;wBACvB,wBAAwB;wBACxB,YAAY;wBACZ,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,0BAA0B;wBAC1B,0BAA0B;wBAC1B,wBAAwB;wBACxB,gCAAgC;wBAChC,0BAA0B;wBAC1B,oBAAoB;wBACpB,yBAAyB;wBACzB,8BAA8B;wBAC9B,gCAAgC;wBAChC,oBAAoB;wBACpB,mBAAmB;wBACnB,kBAAkB;wBAClB,wBAAwB;wBACxB,iBAAiB;wBACjB,mBAAmB;wBACnB,wBAAwB;wBACxB,qBAAqB;wBACrB,qBAAqB;wBACrB,yBAAyB;wBACzB,uBAAuB;wBACvB,uBAAuB;wBACvB,iBAAiB;wBACjB,yBAAyB;wBACzB;qBACH,EAAE,OAAO,EAAE,CAAC,YAAY;wBACrB,WAAW;wBACX,cAAc;wBACd,qBAAqB;wBACrB,mBAAmB;wBACnB,aAAa;wBACb,kBAAkB;wBAClB,eAAe,CAAC,OAAO,CAAC;4BACpB,MAAM,EAAE,0BAA0B,CAAC;AAC/B,gCAAA,MAAM,EAAE,eAAe;AACvB,gCAAA,MAAM,EAAE;6BACX;yBACJ,CAAC,CAAC,EAAE,SAAS,EAAE;wBAChB,aAAa;wBACb,aAAa,CAAC,wBAAwB,EAAE,CAAC;AACzC,wBAAA,iBAAiB,CAAC,OAAO,EAAE,EAAE,sBAAsB,EAAE,CAAC;qBACzD,EAAE;;;AC5LP;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ng-zenduit.mjs","sources":["../../../projects/ng-zenduit/src/lib/snackbar/zen-snackbar.component.ts","../../../projects/ng-zenduit/src/lib/snackbar/zen-snackbar.component.html","../../../projects/ng-zenduit/src/lib/services/zendu-notify.service.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.html","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.ts","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.html","../../../projects/ng-zenduit/src/lib/util.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.component.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.component.html","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.ts","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.html","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.ts","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.html","../../../projects/ng-zenduit/src/lib/datepicker/datepicker.ts","../../../projects/ng-zenduit/src/lib/icon/icon-config.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.html","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.ts","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.html","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.ts","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.html","../../../projects/ng-zenduit/src/lib/groups/zendu-groups.component.ts","../../../projects/ng-zenduit/src/lib/groups/zendu-groups.component.html","../../../projects/ng-zenduit/src/lib/radio-button/radio-button.component.ts","../../../projects/ng-zenduit/src/lib/radio-button/radio-button.component.html","../../../projects/ng-zenduit/src/lib/spinner/zendu-spinner.component.ts","../../../projects/ng-zenduit/src/lib/spinner/zendu-spinner.component.html","../../../projects/ng-zenduit/src/lib/button/zen-button.component.ts","../../../projects/ng-zenduit/src/lib/button/zen-button.component.html","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.ts","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.html","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-option.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-value.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-button.directive.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.html","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.ts","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.html","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.ts","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.html","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.ts","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.html","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.ts","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.html","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.ts","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.html","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.ts","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.html","../../../projects/ng-zenduit/src/lib/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/script.loader.service.ts","../../../projects/ng-zenduit/src/lib/services/opencv.service.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.html","../../../projects/ng-zenduit/src/lib/services/map.service.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.html","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.ts","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.html","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.ts","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.html","../../../projects/ng-zenduit/src/lib/services/geoconding.service.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.html","../../../projects/ng-zenduit/src/lib/core/cevent.ts","../../../projects/ng-zenduit/src/lib/live-view-player/player.control.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.html","../../../projects/ng-zenduit/src/lib/core/thread.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.html","../../../projects/ng-zenduit/src/lib/core/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/http.service.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.html","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.ts","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.html","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/date-picker-dropdown.types.ts","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.ts","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.html","../../../projects/ng-zenduit/src/lib/file-uploader/zendu-file-uploader.component.ts","../../../projects/ng-zenduit/src/lib/file-uploader/zendu-file-uploader.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-group.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-group.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-label-group.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-label-group.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-profile-photo.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-profile-photo.component.html","../../../projects/ng-zenduit/src/lib/slider/zendu-slider.component.ts","../../../projects/ng-zenduit/src/lib/slider/zendu-slider.component.html","../../../projects/ng-zenduit/src/lib/badge/zen-badge.component.ts","../../../projects/ng-zenduit/src/lib/badge/zen-badge.component.html","../../../projects/ng-zenduit/src/lib/dropdown-menu/zen-dropdown-menu.component.ts","../../../projects/ng-zenduit/src/lib/dropdown-menu/zen-dropdown-menu.component.html","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.component.ts","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.component.html","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.directive.ts","../../../projects/ng-zenduit/src/lib/eld-status/zen-eld-status.component.ts","../../../projects/ng-zenduit/src/lib/eld-status/zen-eld-status.component.html","../../../projects/ng-zenduit/src/lib/nav-search/zen-nav-search.component.ts","../../../projects/ng-zenduit/src/lib/nav-search/zen-nav-search.component.html","../../../projects/ng-zenduit/src/lib/submodule-item/zen-submodule-item.component.ts","../../../projects/ng-zenduit/src/lib/submodule-item/zen-submodule-item.component.html","../../../projects/ng-zenduit/src/lib/subpage-item/zen-subpage-item.component.ts","../../../projects/ng-zenduit/src/lib/subpage-item/zen-subpage-item.component.html","../../../projects/ng-zenduit/src/lib/module-popup/zen-module-popup.component.ts","../../../projects/ng-zenduit/src/lib/module-popup/zen-module-popup.component.html","../../../projects/ng-zenduit/src/lib/chart/zen-chart.component.ts","../../../projects/ng-zenduit/src/lib/chart/zen-chart.component.html","../../../projects/ng-zenduit/src/lib/progress-steps/zen-step-base.component.ts","../../../projects/ng-zenduit/src/lib/progress-steps/zen-step-base.component.html","../../../projects/ng-zenduit/src/lib/progress-steps/zen-progress-steps.component.ts","../../../projects/ng-zenduit/src/lib/progress-steps/zen-progress-steps.component.html","../../../projects/ng-zenduit/src/lib/ng-zenduit.module.ts","../../../projects/ng-zenduit/src/public-api.ts","../../../projects/ng-zenduit/src/ng-zenduit.ts"],"sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n} from '@angular/core';\n\nexport type ZenSnackbarType = 'info' | 'neutral' | 'success' | 'warn' | 'error';\n\n/**\n * Presentational card rendered by {@link ZenNotifyService} through a CDK overlay.\n * It draws the status icon, the message and an optional dismiss button, styled\n * per the ZenduONE design system (Untitled UI \"Alert\").\n */\n@Component({\n selector: 'zen-snackbar',\n templateUrl: './zen-snackbar.component.html',\n styleUrls: ['./zen-snackbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class ZenSnackbarComponent {\n @Input() message = '';\n @Input() type: ZenSnackbarType = 'info';\n @Input() hasDismiss = true;\n\n /** Emitted when the user clicks the dismiss button. */\n @Output() dismiss = new EventEmitter<void>();\n\n onDismiss(): void {\n this.dismiss.emit();\n }\n}\n","<div\n class=\"zen-snackbar\"\n role=\"alert\"\n [class.zen-snackbar--info]=\"type === 'info'\"\n [class.zen-snackbar--neutral]=\"type === 'neutral'\"\n [class.zen-snackbar--success]=\"type === 'success'\"\n [class.zen-snackbar--warn]=\"type === 'warn'\"\n [class.zen-snackbar--error]=\"type === 'error'\">\n\n <!-- Status icon -->\n <span class=\"zen-snackbar__icon\">\n @switch (type) {\n @case ('success') {\n <!-- check-circle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 12L10.5 15L16.5 9M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @case ('warn') {\n <!-- alert-triangle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 9V13M12 17H12.01M10.2899 3.86001L1.81995 18C1.64536 18.3024 1.55291 18.6453 1.55193 18.9945C1.55096 19.3437 1.6415 19.6871 1.81439 19.9905C1.98728 20.2939 2.23673 20.5468 2.53774 20.7239C2.83875 20.901 3.1808 20.9962 3.52995 21H20.4699C20.8191 20.9962 21.1611 20.901 21.4621 20.7239C21.7632 20.5468 22.0126 20.2939 22.1855 19.9905C22.3584 19.6871 22.4489 19.3437 22.448 18.9945C22.447 18.6453 22.3545 18.3024 22.1799 18L13.7099 3.86001C13.5317 3.56611 13.2807 3.32313 12.9812 3.15449C12.6817 2.98585 12.3438 2.89726 11.9999 2.89726C11.6561 2.89726 11.3182 2.98585 11.0187 3.15449C10.7192 3.32313 10.4682 3.56611 10.2899 3.86001Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @case ('error') {\n <!-- alert-circle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 8V12M12 16H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @default {\n <!-- info (also used for the 'neutral' variant) -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 16V12M12 8H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n }\n </span>\n\n <!-- Message -->\n <p class=\"zen-snackbar__message\">{{ message }}</p>\n\n <!-- Dismiss -->\n @if (hasDismiss) {\n <button\n class=\"zen-snackbar__close\"\n type=\"button\"\n aria-label=\"Dismiss\"\n (click)=\"onDismiss()\">\n <!-- x -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n }\n</div>\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ZenSnackbarComponent, ZenSnackbarType } from '../snackbar/zen-snackbar.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenNotifyService {\n\n private readonly _overlay = inject(Overlay);\n private readonly _injector = inject(Injector);\n\n /** The currently shown snackbar overlay, if any. */\n private _overlayRef: OverlayRef | null = null;\n /** Auto-dismiss timer handle for the current snackbar. */\n private _timer: ReturnType<typeof setTimeout> | null = null;\n\n public info(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'info', duration, hasDismiss);\n }\n\n public neutral(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'neutral', duration, hasDismiss);\n }\n\n public success(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'success', duration, hasDismiss);\n }\n\n public warn(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.warn(msg);\n this._show(msg, 'warn', duration, hasDismiss);\n }\n\n public error(\n err: unknown,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.error(err);\n this._show(this.getErrorMessage(err), 'error', duration, hasDismiss);\n }\n\n /**\n * Renders the snackbar through a CDK overlay so it shares the browser top\n * layer with CDK dialogs and always paints above them. Only one snackbar is\n * shown at a time — a new call replaces the previous one.\n */\n private _show(\n message: string,\n type: ZenSnackbarType,\n duration: number,\n hasDismiss: boolean\n ): void {\n // Replace any snackbar that is currently on screen.\n this._dismiss();\n\n const positionStrategy = this._overlay\n .position()\n .global()\n .top('24px')\n .centerHorizontally();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.noop(),\n panelClass: 'zen-snackbar-overlay',\n });\n\n const portal = new ComponentPortal(ZenSnackbarComponent, null, this._injector);\n const snackbarRef = this._overlayRef.attach(portal);\n\n snackbarRef.instance.message = message;\n snackbarRef.instance.type = type;\n snackbarRef.instance.hasDismiss = hasDismiss;\n snackbarRef.instance.dismiss.subscribe(() => this._dismiss());\n snackbarRef.changeDetectorRef.markForCheck();\n\n if (duration && duration > 0) {\n this._timer = setTimeout(() => this._dismiss(), duration);\n }\n }\n\n /** Disposes the active snackbar overlay and clears the auto-dismiss timer. */\n private _dismiss(): void {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n private getErrorMessage(ex: any): string {\n if (!ex) {\n return '';\n }\n\n if (typeof ex === 'string') {\n return ex;\n }\n else if (typeof ex.error === 'string') {\n return ex.error;\n }\n else if (ex.error && ex.error.message) {\n return ex.error.message;\n }\n else if (ex.message) {\n return ex.message;\n }\n else if (ex.status && ex.statusText) {\n return `Http error ${ex.status} ${ex.statusText}`;\n }\n else if (ex.statusText) {\n return ex.statusText;\n }\n else {\n console.warn('Can\\'t extract error message from object:', ex);\n return '';\n }\n }\n}\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-checkbox',\n templateUrl: './zendu-checkbox.component.html',\n styleUrls: ['./zendu-checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduCheckboxComponent {\n\n @Input() checked: boolean;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n @Input() label: string | number = 'Enable';\n\n @Input() labelColor: string = \"\";\n\n @Input() disabled = false;\n\n @Input() disableValueChange = false;\n\n @Input() indeterminate = false;\n\n @Input() imageUrl: string;\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() supportingText: string;\n\n /**\n * Toggle state\n */\n public toggle(): void {\n if (this.disabled || this.disableValueChange) {\n return;\n }\n\n this.checked = !this.checked;\n this.indeterminate = false;\n\n this.checkedChange.emit(this.checked);\n }\n}\n","<div class=\"checkbox-component\"\n [ngClass]=\"{'app-disabled': disabled, 'checkbox-md': size === 'md'}\"\n (click)=\"toggle()\">\n <button class=\"app-checkbox\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'app-checked': checked && !indeterminate, 'app-indeterminate': indeterminate }\">\n @if (checked && !indeterminate) {\n <i\n class=\"material-icons app-checkbox-icon\">done</i>\n }\n @if (indeterminate) {\n <i\n class=\"material-icons app-checkbox-icon\">remove</i>\n }\n </button>\n @if (label || supportingText) {\n <div class=\"app-checkbox-text-wrap\"\n >\n @if (label) {\n <div class=\"app-checkbox-label\"\n [ngStyle]=\"{'color': labelColor }\">\n @if (imageUrl) {\n <img class=\"checkbox-image\"\n [src]=\"imageUrl\"\n >\n }\n {{ label }}\n </div>\n }\n @if (supportingText) {\n <div class=\"app-checkbox-supporting-text\"\n >\n {{ supportingText }}\n </div>\n }\n </div>\n }\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-colorpicker',\n templateUrl: './zendu-colorpicker.component.html',\n styleUrls: ['./zendu-colorpicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduColorPickerComponent implements OnChanges {\n\n @Input() color: string;\n\n @Output() colorChange = new EventEmitter<string>();\n\n @Input() icon = \"text\";\n\n @Input() customTarget: HTMLElement;\n\n @Input() showNone = true;\n\n public opened = false;\n\n public menuLeft = \"0px\";\n\n public menuTop = \"\";\n\n public menuBottom = \"\";\n public colorsRows: { colors: string[] }[] = [\n { colors: [\"#5B0F00\", \"#660000\", \"#783F04\", \"#7F6000\", \"#274E13\", \"#0C343D\", \"#1C4587\", \"#073763\", \"#20124D\", \"#4C1130\"] },\n { colors: [\"#85200C\", \"#990000\", \"#B45F06\", \"#BF9000\", \"#38761D\", \"#134F5C\", \"#1155CC\", \"#0B5394\", \"#351C75\", \"#741B47\"] },\n { colors: [\"#A61C00\", \"#CC0000\", \"#E69138\", \"#F1C232\", \"#6AA84F\", \"#45818E\", \"#3C78D8\", \"#3D85C6\", \"#674EA7\", \"#A64D79\"] },\n { colors: [\"#CC4125\", \"#E06666\", \"#F6B26B\", \"#FFD966\", \"#93C47D\", \"#76A5AF\", \"#6D9EEB\", \"#6FA8DC\", \"#8E7CC3\", \"#C27BA0\"] },\n { colors: [\"#DD7E6B\", \"#EA9999\", \"#F9CB9C\", \"#FFE599\", \"#B6D7A8\", \"#A2C4C9\", \"#A4C2F4\", \"#9FC5E8\", \"#B4A7D6\", \"#D5A6BD\"] },\n { colors: [\"#E6B8AF\", \"#F4CCCC\", \"#FCE5CD\", \"#FFF2CC\", \"#D9EAD3\", \"#D0E0E3\", \"#C9DAF8\", \"#CFE2F3\", \"#D9D2E9\", \"#EAD1DC\"] },\n ]\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hidePicker();\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n constructor(\n private _element: ElementRef\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"customTarget\"] &&\n changes[\"customTarget\"].currentValue &&\n this.customTarget) {\n this.customTarget.addEventListener(\"click\", this.toggleEvent.bind(this));\n }\n this.updatePlacement();\n }\n\n public toggleEvent(evt: MouseEvent) {\n this.toggle();\n evt.stopPropagation();\n }\n\n public toggle() {\n this.updatePlacement();\n this.opened = !this.opened;\n }\n\n public updatePlacement() {\n\n let container: HTMLElement;\n if (this.customTarget) {\n container = this.customTarget;\n }\n else {\n const component = this._element.nativeElement as HTMLElement;\n container = component.getElementsByClassName(\"colorpicker-component\").item(0) as HTMLElement;\n }\n\n const left = container.getBoundingClientRect().left;\n const top = container.getBoundingClientRect().top;\n const bottom = container.getBoundingClientRect().bottom;\n\n const margin = 8;\n\n this.menuLeft = `${left}px`;\n const distToBottomOfPage = window.innerHeight - top;\n if (distToBottomOfPage > 150) {\n this.menuTop = `${bottom + margin}px`;\n this.menuBottom = \"\";\n }\n else {\n const bottomFixed = window.innerHeight - top + margin;\n this.menuBottom = `${bottomFixed}px`;\n this.menuTop = \"\";\n }\n }\n\n private hidePicker() {\n this.opened = false;\n }\n\n public selectColor(color: string) {\n this.color = color;\n this.colorChange.emit(color);\n }\n}\n","<div class=\"colorpicker-component\"\n (click)=\"toggle()\"\n [class.opened]=\"opened\"\n [class.no-size]=\"customTarget\">\n\n @if (!customTarget) {\n @if (icon == 'text') {\n <div>\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_text.svg\"\n class=\"icon-text\">\n </div>\n }\n @if (icon == 'paint') {\n <div>\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_paint.svg\"\n class=\"icon-paint\">\n </div>\n }\n <div class=\"toggle\">\n <i class=\"material-icons\">arrow_drop_down</i>\n </div>\n <div class=\"color-line\"\n [ngStyle]=\"{'border-color': color}\">\n </div>\n }\n\n @if (opened) {\n <div\n class=\"color-menu\"\n [ngStyle]=\"{ 'left': menuLeft, 'top': menuTop, 'bottom': menuBottom }\">\n <div class=\"colors-container\">\n @for (row of colorsRows; track row) {\n <div\n class=\"color-row\">\n @for (rowColor of row.colors; track rowColor) {\n <div\n (click)=\"selectColor(rowColor)\"\n class=\"color-item\"\n [ngStyle]=\"{'background-color': rowColor}\">\n @if (rowColor == color) {\n <div\n class=\"select-icon\">\n <i class=\"material-icons\">check</i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n @if (showNone) {\n <div\n class=\"no-color\"\n (click)=\"selectColor('')\">\n None\n </div>\n }\n </div>\n }\n</div>\n","// import { environment } from 'src/environments/environment';\ninterface IGeocodingRes {\n Name: string;\n\n City: string;\n\n Country: string;\n\n PostalCode: string;\n\n Street: string;\n\n State: string;\n\n Bounds: H.geo.Rect;\n}\nexport class Util {\n\n private _platform: H.service.Platform;\n constructor() {\n // this._platform = new H.service.Platform({\n // apikey: environment.hereMaps\n // });\n}\n public static debounce(func: any, wait: number, immediate?: boolean) {\n let timeout: any;\n const context: any = this;\n\n return function executedFunction() {\n const args = arguments;\n\n const later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n const callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n public static clone<T>(source: T): T\n {\n let str = JSON.stringify(source);\n let outObj = JSON.parse(str);\n\n this.updateClone(outObj);\n\n // Convert in the output object ISO string to Date object\n //\n // @ts-ignore\n for(let key of Object.keys(source))\n {\n const val = (source as any)[key];\n if(val &&\n typeof val == \"object\" &&\n typeof val.getTime == \"function\" &&\n typeof val.getDate == \"function\")\n {\n outObj[key] = new Date(val);\n }\n }\n\n return outObj;\n }\n\n\n\n /**\n * Remove internal angularjs properties\n * @param obj\n */\n private static updateClone(obj: any)\n {\n if(!obj)\n {\n return;\n }\n if(Array.isArray(obj))\n {\n for(let item of obj)\n {\n if(!item)\n {\n item = item;\n }\n this.updateClone(item);\n }\n return;\n }\n\n let type = typeof obj;\n if(type == \"string\" || type == \"number\")\n {\n return;\n }\n\n // Remove invalid props\n let keys = Object.keys(obj);\n keys.forEach((key) =>\n {\n if(key[0] == '$' ||\n key[0] == '&')\n {\n delete obj[key];\n return;\n }\n\n let val = obj[key];\n if(Array.isArray(val))\n {\n let arr = <Array<any>>val;\n for(let k of arr)\n {\n this.updateClone(k);\n }\n }\n else if(typeof val == \"object\")\n {\n this.updateClone(val);\n }\n });\n }\n\n\n public static copyProperties(source: any, dest: any)\n {\n for(let key of Object.keys(source))\n {\n dest[key] = source[key];\n }\n }\n\n public static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n })\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ViewChild,\n ElementRef,\n OnInit,\n OnChanges,\n SimpleChanges,\n HostBinding,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\nexport interface DropdownOption {\n label: string;\n value: string | number;\n icon?: string;\n}\n\n@Component({\n selector: 'zen-input',\n templateUrl: './zendu-input.component.html',\n styleUrls: ['./zendu-input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZenduInputComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduInputComponent implements ControlValueAccessor, OnInit, OnChanges {\n \n @ViewChild('inputElement') inputElement: ElementRef<HTMLInputElement>;\n \n /**\n * Input type attribute\n */\n @Input() type: 'text' | 'email' | 'password' | 'tel' | 'number' | 'url' | 'search' = 'text';\n \n /**\n * Input variant type\n */\n @Input() variant: 'default' | 'input-field' | 'payment' | 'leading-dropdown' | 'leading-text' | 'trailing-dropdown' | 'trailing-text' = 'default';\n \n /**\n * Placeholder text\n */\n @Input() placeholder = '';\n \n /**\n * Label text (shown above input)\n */\n @Input() label = '';\n \n /**\n * Hint text (shown below input)\n */\n @Input() hintText = '';\n \n /**\n * Leading icon name (Material Icons)\n */\n @Input() leadingIcon = '';\n \n /**\n * Show help icon with tooltip\n */\n @Input() helpIcon = false;\n \n /**\n * Tooltip text for help icon\n */\n @Input() helpTooltip = 'This is a tooltip';\n \n /**\n * Error/destructive state\n */\n @Input() destructive = false;\n \n /**\n * Error message to display\n */\n @Input() errorMessage = '';\n \n /**\n * Disabled state\n */\n @Input() disabled = false;\n \n /**\n * Required field\n */\n @Input() required = false;\n \n /**\n * Maximum character length\n */\n @Input() maxLength: number;\n \n /**\n * Minimum character length\n */\n @Input() minLength: number;\n \n /**\n * Pattern for validation\n */\n @Input() pattern: string;\n \n /**\n * Autocomplete attribute\n */\n @Input() autocomplete = 'off';\n \n /**\n * Name attribute\n */\n @Input() name = '';\n \n /**\n * ID attribute\n */\n @Input() id = '';\n \n /**\n * Leading dropdown options\n */\n @Input() leadingDropdownOptions: DropdownOption[] = [];\n \n /**\n * Selected leading dropdown value\n */\n @Input() leadingDropdownValue: string | number = '';\n \n /**\n * Leading dropdown placeholder\n */\n @Input() leadingDropdownPlaceholder = 'Select';\n \n /**\n * Trailing dropdown options\n */\n @Input() trailingDropdownOptions: DropdownOption[] = [];\n \n /**\n * Selected trailing dropdown value\n */\n @Input() trailingDropdownValue: string | number = '';\n \n /**\n * Trailing dropdown placeholder\n */\n @Input() trailingDropdownPlaceholder = 'Select';\n \n /**\n * Leading static text\n */\n @Input() leadingText = '';\n\n /**\n * Trailing static text\n */\n @Input() trailingText = '';\n \n /**\n * Input size\n */\n @Input() size: 'sm' | 'md' = 'md';\n \n /**\n * Show character counter\n */\n @Input() showCharacterCount = false;\n \n /**\n * Phone input maximum length\n */\n @Input() phoneMaxLength: number = 13;\n \n /**\n * Phone number value (for tel type)\n */\n @Input() phone: string = '';\n \n /**\n * Width for phone input\n */\n @Input() width: string;\n \n /**\n * Value change event\n */\n @Output() valueChange = new EventEmitter<string>();\n \n /**\n * Focus event\n */\n @Output() inputFocus = new EventEmitter<FocusEvent>();\n \n /**\n * Blur event\n */\n @Output() inputBlur = new EventEmitter<FocusEvent>();\n \n /**\n * Keydown event\n */\n @Output() inputKeydown = new EventEmitter<KeyboardEvent>();\n \n /**\n * Keyup event\n */\n @Output() inputKeyup = new EventEmitter<KeyboardEvent>();\n \n /**\n * Leading dropdown change event\n */\n @Output() leadingDropdownChange = new EventEmitter<string | number>();\n \n /**\n * Leading dropdown value change event (for two-way binding)\n */\n @Output() leadingDropdownValueChange = new EventEmitter<string | number>();\n \n /**\n * Trailing dropdown change event\n */\n @Output() trailingDropdownChange = new EventEmitter<string | number>();\n \n /**\n * Trailing dropdown value change event (for two-way binding)\n */\n @Output() trailingDropdownValueChange = new EventEmitter<string | number>();\n \n /**\n * Help icon click event\n */\n @Output() helpIconClick = new EventEmitter<MouseEvent>();\n \n /**\n * Phone change event\n */\n @Output() phoneChange = new EventEmitter<string>();\n \n /**\n * Phone valid change event\n */\n @Output() validChange = new EventEmitter<boolean>();\n \n /**\n * Leading icon click event\n */\n @Output() leadingIconClick = new EventEmitter<MouseEvent>();\n \n // Internal properties\n public value = '';\n public isFocused = false;\n public showHelpTooltip = false;\n public leadingDropdownOpen = false;\n public trailingDropdownOpen = false;\n \n // Phone input properties\n public phoneText = '';\n public countryList: { countryCode: string, countryName: string, countryCallingCode: string, flag: string }[] = [\n {\n countryCode: \"US\",\n countryName: \"America\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/USA.svg\"\n },\n {\n countryCode: \"CA\",\n countryName: \"Canada\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Canada.svg\"\n },\n {\n countryCode: \"MX\",\n countryName: \"Mexico\",\n countryCallingCode: \"+52\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Mexico.svg\"\n }\n ];\n \n public customCountry = {\n countryCode: \"\",\n countryName: \"Custom\",\n countryCallingCode: \"\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Custom.svg\"\n };\n \n public selectedCountry: { countryCode: string, countryName: string, countryCallingCode: string, flag: string };\n public isPhoneDropdownExpanded = false;\n \n // ControlValueAccessor implementation\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n \n @HostBinding('class.zen-input-wrapper')\n get hostClass(): boolean {\n return true;\n }\n \n ngOnInit(): void {\n // Set default ID if not provided\n if (!this.id) {\n this.id = `zen-input-${Math.random().toString(36).substr(2, 9)}`;\n }\n \n // Initialize phone input if type is tel\n if (this.type === 'tel') {\n this.selectedCountry = this.countryList[1]; // Default to Canada\n this.parsePhoneNumber();\n }\n }\n \n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"phone\"] && this.type === 'tel' && (!this.selectedCountry || !this.selectedCountry.countryCode)) {\n this.parsePhoneNumber();\n }\n }\n \n // ControlValueAccessor methods\n writeValue(value: string): void {\n this.value = value || '';\n }\n \n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n \n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n \n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n \n // Event handlers\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n \n if (this.type === 'tel') {\n // Handle phone input\n this.phoneText = target.value;\n this.onPhoneChanged(target);\n } else {\n // Handle regular input\n this.value = target.value;\n this.onChange(this.value);\n this.valueChange.emit(this.value);\n }\n }\n \n onInputFocus(event: FocusEvent): void {\n this.isFocused = true;\n this.onTouched();\n this.inputFocus.emit(event);\n }\n \n onInputBlur(event: FocusEvent): void {\n this.isFocused = false;\n this.inputBlur.emit(event);\n }\n \n onKeydown(event: KeyboardEvent): void {\n this.inputKeydown.emit(event);\n }\n \n onKeyup(event: KeyboardEvent): void {\n this.inputKeyup.emit(event);\n }\n \n onLeadingDropdownChange(value: string | number): void {\n this.leadingDropdownValue = value;\n this.leadingDropdownChange.emit(value);\n this.leadingDropdownValueChange.emit(value);\n this.leadingDropdownOpen = false;\n }\n \n onTrailingDropdownChange(value: string | number): void {\n this.trailingDropdownValue = value;\n this.trailingDropdownChange.emit(value);\n this.trailingDropdownValueChange.emit(value);\n this.trailingDropdownOpen = false;\n }\n \n toggleLeadingDropdown(): void {\n if (!this.disabled) {\n this.leadingDropdownOpen = !this.leadingDropdownOpen;\n this.trailingDropdownOpen = false;\n }\n }\n \n toggleTrailingDropdown(): void {\n if (!this.disabled) {\n this.trailingDropdownOpen = !this.trailingDropdownOpen;\n this.leadingDropdownOpen = false;\n }\n }\n \n onHelpIconClick(event: MouseEvent): void {\n this.showHelpTooltip = !this.showHelpTooltip;\n this.helpIconClick.emit(event);\n }\n \n closeDropdowns(): void {\n this.leadingDropdownOpen = false;\n this.trailingDropdownOpen = false;\n }\n \n get hasValue(): boolean {\n return this.value !== '' && this.value !== null && this.value !== undefined;\n }\n \n get showLabel(): boolean {\n return !!this.label;\n }\n \n get showHintText(): boolean {\n return !!this.hintText || (this.destructive && !!this.errorMessage);\n }\n \n get displayHintText(): string {\n if (this.destructive && this.errorMessage) {\n return this.errorMessage;\n }\n return this.hintText;\n }\n \n get characterCount(): string {\n const currentLength = this.value ? this.value.length : 0;\n if (this.maxLength) {\n return `${currentLength}/${this.maxLength}`;\n }\n return `${currentLength}`;\n }\n \n get inputClasses(): string {\n const classes = ['zen-input-container'];\n \n if (this.isFocused) {\n classes.push('focused');\n }\n \n if (this.hasValue) {\n classes.push('filled');\n }\n \n if (this.disabled) {\n classes.push('disabled');\n }\n \n if (this.destructive) {\n classes.push('destructive');\n }\n \n if (this.size) {\n classes.push(`size-${this.size}`);\n }\n \n if (this.variant) {\n classes.push(`variant-${this.variant}`);\n }\n \n return classes.join(' ');\n }\n \n getLeadingDropdownLabel(): string {\n const selected = this.leadingDropdownOptions.find(opt => opt.value === this.leadingDropdownValue);\n return selected ? selected.label : this.leadingDropdownPlaceholder;\n }\n \n getTrailingDropdownLabel(): string {\n const selected = this.trailingDropdownOptions.find(opt => opt.value === this.trailingDropdownValue);\n return selected ? selected.label : this.trailingDropdownPlaceholder;\n }\n \n focusInput(): void {\n if (this.inputElement) {\n this.inputElement.nativeElement.focus();\n }\n }\n \n // Phone input methods\n parsePhoneNumber(): void {\n try {\n this.phoneText = this.phone || '';\n\n if (this.phone) {\n const countryFromList = this.countryList.find(country => \n this.phone.startsWith(country.countryCallingCode) || \n `+${this.phone}`.startsWith(country.countryCallingCode)\n );\n if (countryFromList) {\n this.selectedCountry = countryFromList || this.customCountry;\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n const parsedPhone = phoneNumberUtil.parse(this.phone || \"\", 'US');\n setTimeout(() => {\n if (this.phoneText.startsWith('+')) {\n this.phoneText = this.phoneText.replace(`+${parsedPhone.getCountryCode()}`, \"\");\n } else if (this.phoneText.startsWith(parsedPhone.getCountryCode())) {\n this.phoneText = this.phoneText.replace(parsedPhone.getCountryCode(), \"\");\n }\n this.onPhoneChanged();\n });\n } else {\n this.selectedCountry = this.customCountry; \n }\n } else {\n this.selectedCountry = this.customCountry;\n }\n } catch (err) {\n console.warn(`Can't parse phone: ${this.phone}`, err);\n this.selectedCountry = this.customCountry;\n }\n }\n \n onCountryChanged(country): void {\n this.isPhoneDropdownExpanded = false;\n this.selectedCountry = country;\n this.onPhoneChanged();\n }\n \n onPhoneChanged(input?: HTMLInputElement): void {\n // allow + in custom country\n let custom = false;\n if (this.selectedCountry === this.customCountry && this.phoneText.includes('+')) {\n custom = true;\n }\n \n const phoneText = (this.phoneText || '').replace(/\\D/g, '');\n this.phoneText = custom ? `+${phoneText}` : phoneText;\n if (input && input.value !== this.phoneText) {\n input.value = this.phoneText;\n }\n const fullNumber = `${this.selectedCountry.countryCallingCode}${this.phoneText}`;\n if (this.phone !== fullNumber) {\n this.phoneChange.emit(fullNumber);\n // Also update the main value for form integration\n this.value = fullNumber;\n this.onChange(this.value);\n this.valueChange.emit(this.value);\n }\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n if (this.selectedCountry === this.customCountry) {\n this.validChange.emit(true);\n } else {\n try {\n this.validChange.emit(phoneNumberUtil.isValidNumber(phoneNumberUtil.parseAndKeepRawInput(fullNumber)));\n } catch {\n this.validChange.emit(false);\n }\n }\n }\n \n hidePhoneDropdown(): void {\n this.isPhoneDropdownExpanded = false;\n }\n \n togglePhoneDropdown(): void {\n if (this.disabled) {\n return;\n }\n this.isPhoneDropdownExpanded = !this.isPhoneDropdownExpanded;\n }\n \n onPhoneInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.phoneText = target.value;\n this.onPhoneChanged(target);\n }\n \n onLeadingIconClick(event: MouseEvent): void {\n event.stopPropagation();\n this.leadingIconClick.emit(event);\n \n // Focus the input when leading icon is clicked\n this.focusInput();\n }\n}","<div class=\"zen-input-container\" [ngClass]=\"inputClasses\">\n <!-- Label -->\n @if (showLabel) {\n <label\n [for]=\"id\"\n class=\"zen-input-label text text-sm text-weight-medium\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n @if (required) {\n <span class=\"required-indicator\">*</span>\n }\n </label>\n }\n\n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n\n <!-- Leading icon -->\n @if (leadingIcon && variant === 'default') {\n <i\n class=\"material-icons zen-input-leading-icon\"\n (click)=\"onLeadingIconClick($event)\">\n {{ leadingIcon }}\n </i>\n }\n\n <!-- Leading dropdown -->\n @if (variant === 'leading-dropdown') {\n <div\n class=\"zen-input-leading-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggleLeadingDropdown(); $event.stopPropagation()\">\n <span class=\"dropdown-label\">{{ getLeadingDropdownLabel() }}</span>\n <i class=\"material-icons dropdown-icon\">expand_more</i>\n </button>\n @if (leadingDropdownOpen) {\n <div class=\"zen-dropdown-menu\"\n [ngClass]=\"{'open': leadingDropdownOpen}\">\n @for (option of leadingDropdownOptions; track option) {\n <button\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === leadingDropdownValue}\"\n (click)=\"onLeadingDropdownChange(option.value); $event.stopPropagation()\">\n @if (option.icon) {\n <i class=\"material-icons option-icon\">{{ option.icon }}</i>\n }\n {{ option.label | translate }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Leading text -->\n @if (variant === 'leading-text') {\n <span\n class=\"zen-input-leading-text text text-md text-weight-regular\">\n {{ leadingText }}\n </span>\n }\n\n <!-- Payment card icon -->\n @if (variant === 'payment') {\n <div\n class=\"zen-payment-card-icon\">\n <i class=\"material-icons card-icon\">payment</i>\n </div>\n }\n\n <!-- Input content based on type -->\n @if (type === 'tel') {\n <ng-container *ngTemplateOutlet=\"phoneInputTemplate\"></ng-container>\n } @else {\n <input #inputElement\n [type]=\"type\"\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [attr.maxlength]=\"maxLength\"\n [attr.minlength]=\"minLength\"\n [pattern]=\"pattern\"\n [autocomplete]=\"autocomplete\"\n class=\"zen-input-field text text-md text-weight-regular\"\n [ngClass]=\"{'zen-payment-field': variant === 'payment'}\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\" />\n }\n\n <!-- Default input template -->\n\n <!-- Trailing elements container -->\n <div class=\"zen-input-trailing-container\">\n <!-- Trailing text -->\n @if (variant === 'trailing-text') {\n <span\n class=\"zen-input-trailing-text text text-md text-weight-regular\">\n {{ trailingText }}\n </span>\n }\n\n <!-- Character counter -->\n @if (showCharacterCount && !helpIcon && variant === 'default') {\n <span\n class=\"zen-character-count text text-sm text-weight-regular\">\n {{ characterCount }}\n </span>\n }\n\n <!-- Help icon -->\n @if (helpIcon && variant !== 'trailing-dropdown') {\n <button\n type=\"button\"\n class=\"zen-help-icon\"\n [disabled]=\"disabled\"\n (click)=\"onHelpIconClick($event); $event.stopPropagation()\">\n <i class=\"material-icons-outlined\">help_outline</i>\n <!-- Help tooltip -->\n @if (showHelpTooltip) {\n <div class=\"zen-help-tooltip\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"tooltip-content\">\n {{ helpTooltip | translate }}\n </div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n }\n </button>\n }\n\n <!-- Trailing dropdown -->\n @if (variant === 'trailing-dropdown') {\n <div\n class=\"zen-input-trailing-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggleTrailingDropdown(); $event.stopPropagation()\">\n <span class=\"dropdown-label\">{{ getTrailingDropdownLabel() }}</span>\n <i class=\"material-icons dropdown-icon\">expand_more</i>\n </button>\n @if (trailingDropdownOpen) {\n <div class=\"zen-dropdown-menu dropdown-menu-right\"\n [ngClass]=\"{'open': trailingDropdownOpen}\">\n @for (option of trailingDropdownOptions; track option) {\n <button\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === trailingDropdownValue}\"\n (click)=\"onTrailingDropdownChange(option.value); $event.stopPropagation()\">\n @if (option.icon) {\n <i class=\"material-icons option-icon\">{{ option.icon }}</i>\n }\n {{ option.label | translate }}\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Hint text / Error message -->\n @if (showHintText) {\n <div\n class=\"zen-input-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n @if (destructive) {\n <i class=\"material-icons-outlined hint-icon\">error_outline</i>\n }\n {{ displayHintText | translate }}\n </div>\n }\n\n <!-- Phone Country Dropdown (for tel type) -->\n @if (type === 'tel' && isPhoneDropdownExpanded) {\n <div\n class=\"zen-phone-dropdown-menu\">\n <div class=\"zen-phone-dropdown-list\">\n <!-- Countries List -->\n @for (country of countryList; track country) {\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === country.countryName}\"\n (click)=\"onCountryChanged(country)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"country.flag\"\n [alt]=\"country.countryName\">\n <span class=\"zen-phone-country-name\">{{ country.countryName | translate }}</span>\n <span class=\"zen-phone-country-code\">{{ country.countryCallingCode }}</span>\n </button>\n }\n <!-- Custom Country -->\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"onCountryChanged(customCountry)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"customCountry.flag\"\n [alt]=\"customCountry.countryName\">\n <span class=\"zen-phone-country-name\">{{ customCountry.countryName | translate }}</span>\n <span class=\"zen-phone-country-code\">{{ customCountry.countryCallingCode }}</span>\n </button>\n </div>\n </div>\n }\n</div>\n\n<!-- Phone Input Template -->\n<ng-template #phoneInputTemplate>\n <!-- Phone country selector -->\n <div class=\"zen-phone-country-select\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"selectedCountry.flag\"\n [alt]=\"selectedCountry.countryName\">\n <span class=\"zen-phone-code\">{{ selectedCountry.countryCallingCode }}</span>\n <button type=\"button\"\n class=\"zen-phone-dropdown-btn\"\n [disabled]=\"disabled\"\n (click)=\"togglePhoneDropdown(); $event.stopPropagation()\">\n <i class=\"material-icons zen-phone-expand-icon\"\n [ngClass]=\"{'active': isPhoneDropdownExpanded}\">expand_more</i>\n </button>\n </div>\n\n <!-- Phone input field -->\n <input #inputElement\n type=\"text\"\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [value]=\"phoneText\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [attr.maxlength]=\"phoneMaxLength\"\n [attr.minlength]=\"minLength\"\n [autocomplete]=\"autocomplete\"\n class=\"zen-input-field text text-md text-weight-regular\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\" />\n</ng-template>\n\n<!-- Click outside handler for dropdowns -->\n@if (leadingDropdownOpen || trailingDropdownOpen || isPhoneDropdownExpanded) {\n <div\n class=\"zen-dropdown-backdrop\"\n (click)=\"closeDropdowns(); hidePhoneDropdown()\"></div>\n}","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { Util } from '../util';\n\n@Component({\n selector: 'zen-search-box',\n templateUrl: './zendu-search-box.component.html',\n styleUrls: ['./zendu-search-box.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSearchBoxComponent implements OnInit {\n @Input() text: string;\n\n @Output() textChange = new EventEmitter<string>();\n\n @Input() set delay(val: number) {\n this.setDelay(val);\n }\n\n @Input() autoFocus = true;\n\n @Input() disabled = false;\n\n @Input() public placeholder = 'Search';\n\n private _debouncedInvoke!: () => void;\n\n private _focusAttempts = 0;\n\n public constructor(private _element: ElementRef, private _ngZone: NgZone) {\n this.setDelay(500);\n }\n\n public ngOnInit(): void {\n // give 100ms for autoFocus initalization\n setTimeout(() => {\n if (this.autoFocus) {\n this.doFocus();\n }\n }, 100);\n }\n\n public onChange() {\n this._debouncedInvoke();\n }\n\n public clearFromParent() {\n this.text = '';\n }\n\n public clear() {\n this.text = '';\n this._debouncedInvoke();\n }\n\n private invokeChange() {\n this._ngZone.run(() => {\n this.textChange.emit(this.text);\n });\n }\n\n private setDelay(delay: number) {\n this._debouncedInvoke = Util.debounce(() => {\n this.invokeChange();\n }, delay);\n }\n\n public doFocus() {\n this._focusAttempts++;\n if (this._focusAttempts > 100) {\n // stop attempts to initalize\n return;\n }\n\n const input = this.getInput(this._element.nativeElement);\n if (!input) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n // check if element visible or not\n const height = input.clientHeight;\n if (height == 0) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n\n // set focus to element\n setTimeout(() => {\n input.focus();\n }, 1);\n }\n\n private getInput(element: HTMLElement | null): HTMLInputElement | null {\n if (!element) {\n return null;\n }\n if (element.nodeName == 'INPUT') {\n return element as HTMLInputElement;\n }\n\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (el && el.nodeName == 'INPUT') {\n return el as HTMLInputElement;\n }\n }\n\n // find input in the children tree\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (!el) {\n continue;\n }\n const elInput = this.getInput(el as HTMLElement);\n if (elInput) {\n return elInput;\n }\n }\n\n return null;\n }\n}\n","<div class=\"search-box-component\"\n [class.has-text]=\"text\">\n <zen-input [(ngModel)]=\"text\"\n [placeholder]=\"placeholder | translate\"\n [disabled]=\"disabled\"\n leadingIcon=\"search\"\n autocomplete=\"off\"\n (ngModelChange)=\"onChange()\">\n </zen-input>\n @if (text) {\n <i class=\"material-icons close-icon\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"clear(); $event.stopPropagation()\">close</i>\n }\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ColumnState } from './columnState';\nimport { Util } from './../util';\n\n@Component({\n selector: 'zen-column-configuration',\n templateUrl: './zendu-column-configuration.component.html',\n styleUrls: ['./zendu-column-configuration.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduColumnConfigurationComponent implements OnChanges {\n /**\n * callback to emit changes for parent component\n */\n @Output() configurationChange = new EventEmitter<ColumnState[]>();\n\n /**\n * input propery\n */\n @Input() configuration: ColumnState[] = [];\n\n /**\n * Default configuration for reset button\n */\n @Input() defaultConfiguration: ColumnState[] = [];\n\n /**\n * dropdown position\n */\n @Input() dropdownPosition: 'right' | 'left' = 'right';\n\n /**\n * Inital configuration\n */\n private _sourceConfiguration: ColumnState[] = [];\n\n public tempColumnConfiguration: ColumnState[] = [];\n\n public filteredColumnsConfiguration: ColumnState[] = [];\n\n public showPanel: boolean = false;\n\n public searchText = '';\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n // hide the menu for outside click\n this.hide();\n }\n\n ngOnChanges(changes: any): void {\n if (changes.configuration.currentValue && this.configuration) {\n this.initData();\n }\n }\n\n public initData() {\n this.tempColumnConfiguration = Util.clone(this.configuration);\n this._sourceConfiguration = Util.clone(this.configuration);\n this.filterItems();\n }\n\n public togglePanel() {\n this.showPanel = !this.showPanel;\n // clear search\n this.searchText = '';\n if (this.showPanel) {\n // restore inital values on open\n this.tempColumnConfiguration = Util.clone(this._sourceConfiguration);\n }\n this.filterItems();\n }\n\n public apply() {\n this.configuration = Util.clone(this.tempColumnConfiguration);\n // overwrite the default as well\n this._sourceConfiguration = Util.clone(this.tempColumnConfiguration);\n this.showPanel = false;\n this.configurationChange.emit(this.configuration);\n }\n\n public hide() {\n this.showPanel = false;\n }\n\n public onDrop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(\n this.filteredColumnsConfiguration,\n event.previousIndex,\n event.currentIndex\n );\n this.tempColumnConfiguration = this.filteredColumnsConfiguration;\n }\n\n public reset() {\n if (this.defaultConfiguration && this.defaultConfiguration.length) {\n // use the default configuration\n this.tempColumnConfiguration = Util.clone(this.defaultConfiguration);\n } else {\n // activate all items\n for (const item of this.tempColumnConfiguration) {\n item.isVisible = true;\n }\n }\n this.filterItems();\n }\n\n public filterItems(): void {\n this.filteredColumnsConfiguration = this.tempColumnConfiguration.filter(\n (col) =>\n col.displayName\n .toLowerCase()\n .includes(this.searchText.trim().toLowerCase())\n );\n }\n}\n","<div class=\"column-config-component\">\n <button class=\"button-basic button-icon\"\n [ngClass]=\"{ 'active': showPanel }\"\n (click)=\"togglePanel()\">\n <i class=\"material-icons\">view_column</i>\n </button>\n\n @if (showPanel) {\n <div\n class=\"action-menu column-config-menu\"\n [ngClass]=\"{'right': dropdownPosition === 'right'}\">\n <div class=\"action-menu-header\">\n <div class=\"title\">Manage Columns</div>\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"filterItems()\"></zen-search-box>\n </div>\n <div class=\"action-menu-body dnd-container\"\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (config of filteredColumnsConfiguration; track config) {\n <div\n class=\"action-item-checkbox drag-item\"\n cdkDrag>\n <zen-checkbox class=\"flex-1\"\n [(checked)]=\"config.isVisible\"\n [label]=\"config.displayName\"></zen-checkbox>\n <i class=\"material-icons drag-icon\">drag_handle</i>\n </div>\n }\n </div>\n <div class=\"action-menu-footer\">\n <button (click)=\"reset()\"\n type=\"button\"\n class=\"button-stroked full-width\">Reset</button>\n <button (click)=\"apply()\"\n type=\"button\"\n class=\"button-flat full-width\">Apply</button>\n </div>\n </div>\n }\n</div>\n","export enum DATEPICKER_POSITION {\n AUTO = 'auto',\n LEFT = 'left',\n RIGHT = 'right',\n TOP = 'top',\n BOTTOM = 'bottom'\n}","import { InjectionToken } from '@angular/core';\n\nexport interface ZenIconConfig {\n iconBasePath: string;\n}\n\nexport const ZEN_ICON_CONFIG = new InjectionToken<ZenIconConfig>('ZEN_ICON_CONFIG', {\n providedIn: 'root',\n factory: () => ({ iconBasePath: 'https://storage.googleapis.com/trax_public/icons' })\n});\n\nexport type ZenIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type ZenIconColor = 'primary' | 'gray' | 'error' | 'warning' | 'success';\nexport type ZenIconTheme = 'light-circle' | 'light-circle-outline' | 'dark-circle' | 'light-square' | 'mid-square' | 'dark-square';\n","import { Component, ElementRef, Input, Inject, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { ZEN_ICON_CONFIG, ZenIconConfig, ZenIconSize, ZenIconColor, ZenIconTheme } from './icon-config';\n\n@Component({\n selector: 'zen-icon',\n templateUrl: './zendu-icon.component.html',\n styleUrls: ['./zendu-icon.component.scss'],\n host: {\n '[class.zen-icon--featured]': 'isFeatured'\n },\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduIconComponent implements OnChanges {\n\n @Input() src: string;\n @Input() name: string;\n @Input() size: ZenIconSize;\n @Input() color: ZenIconColor;\n @Input() theme: ZenIconTheme;\n @Input() customColor: string;\n\n resolvedSrc: string;\n isFeatured = false;\n\n constructor(\n private _host: ElementRef,\n @Inject(ZEN_ICON_CONFIG) private _config: ZenIconConfig\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Resolve icon source\n if (this.name) {\n this.resolvedSrc = `${this._config.iconBasePath}/${this.name}.svg`;\n } else if (this.src) {\n this.resolvedSrc = this.src;\n }\n\n this.isFeatured = !!(this.size && this.color && this.theme);\n\n const host = this._host.nativeElement as HTMLElement;\n\n if (this.isFeatured) {\n // Featured mode: clear host mask styles, let template handle it\n host.style.removeProperty('mask-image');\n host.style.removeProperty('-webkit-mask-image');\n host.style.removeProperty('background-color');\n } else if (this.resolvedSrc) {\n // Simple mode: apply mask to host and set background color based on color input\n host.style['mask-image'] = `url(${this.resolvedSrc})`;\n host.style['-webkit-mask-image'] = `url(${this.resolvedSrc})`;\n if (this.customColor) {\n host.style.backgroundColor = this.customColor;\n } else {\n host.style.removeProperty('background-color');\n }\n }\n }\n}\n","@if (isFeatured) {\n <div\n class=\"zen-icon-featured\"\n [ngClass]=\"['zen-icon-' + size, 'zen-icon-' + color, 'zen-icon-' + theme]\">\n <div class=\"zen-icon-inner\"\n [style.mask-image]=\"'url(' + resolvedSrc + ')'\"\n [style.-webkit-mask-image]=\"'url(' + resolvedSrc + ')'\"\n [style.background-color]=\"customColor || null\">\n </div>\n </div>\n}\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from './date-picker-day';\nimport { DatePickerHint } from \"./date-picker-hint\";\nimport { DATEPICKER_POSITION } from './datepicker';\nimport { OverlayRef, Overlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst defaultHours = '12';\nconst defaultMinuts = '00';\nconst defaultSeconds = '00';\n\n@Component({\n selector: 'zen-datepicker',\n templateUrl: './zendu-datepicker.component.html',\n styleUrls: ['./zendu-datepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDatepickerComponent implements OnChanges {\n\n /**\n * Component property\n */\n @Input() date: Date;\n\n /**\n * callback to emit changes for parent component\n */\n @Output() dateChange = new EventEmitter<Date>();\n\n @Input() showTime = false;\n\n @Input() showSeconds = false;\n\n @Input() showDate = true;\n\n @Input() parentContainer: HTMLElement | null = null;\n\n @Input() containerClass: string;\n\n @Input() minDate: Date;\n\n @Input() maxDate: Date;\n\n @Input() boxDesign: boolean = false;\n\n @Input() highlightDays: number[] = [];\n\n @Input() autoConfirm: boolean = false;\n\n @Input() hint: DatePickerHint;\n\n /**\n * datepicker states\n */\n @Input() highlightError: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() readonly: boolean = false;\n\n @Input() xPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() yPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() dispalyOverParent: boolean = false;\n\n @ViewChild('dateMenu') dateMenu!: ElementRef;\n\n @ViewChild('triggerButton') triggerButton!: ElementRef;\n\n @ViewChild('dateMenuTemplate') dateMenuTemplate: TemplateRef<unknown>;\n\n private overlayRef: OverlayRef;\n\n public selectedTime: { Hr: number, Min: number, Sec: number } = { Hr: 1, Min: 0, Sec: 0 };\n\n public isPickerVisible = false;\n\n public dayRows: Array<{ days: DatePickerDay[] }> = [];\n\n public daysTitle = \"\";\n\n public weekDays = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fri\", \"Sa\", \"Su\"];\n\n public currentSlot = new Date();\n\n public hour = defaultHours;\n\n public min = defaultMinuts;\n\n public sec = defaultSeconds;\n\n public isPM = false;\n\n public _dateToSet: Date;\n\n public months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n public years = [];\n\n public monthPickerVisible: boolean = false;\n\n public yearPickerVisible: boolean = false;\n\n right: boolean = false;\n bottom: boolean = false;\n\n constructor(\n private _element: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _translate: TranslateService\n ) { }\n\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hideTimePicker()\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.date) {\n this._dateToSet = new Date(this.date);\n\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n }\n }\n\n public updatePlacement() {\n this.right = false;\n this.bottom = false;\n if (this.xPosition === DATEPICKER_POSITION.AUTO && this.getHorizontalMenuDirection() === DATEPICKER_POSITION.LEFT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.AUTO && this.getVerticalMenuDirection() === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n if (this.xPosition === DATEPICKER_POSITION.RIGHT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n }\n\n private getVerticalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const top = element.getBoundingClientRect().top;\n const height = window.innerHeight;\n if (top > (height / 2)) {\n return DATEPICKER_POSITION.TOP\n }\n else {\n return DATEPICKER_POSITION.BOTTOM;\n }\n }\n\n /**\n * Used to get datepicker position\n * @returns either \"left\" or \"right\"\n */\n private getHorizontalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const left = element.getBoundingClientRect().left;\n const width = window.innerWidth;\n if (left > (width / 2)) {\n return DATEPICKER_POSITION.LEFT;\n }\n else {\n return DATEPICKER_POSITION.RIGHT;\n }\n }\n\n\n public togglePicker() {\n if (this.disabled) return;\n\n this._dateToSet = this.date ? new Date(this.date) : null;\n\n this.isPickerVisible = !this.isPickerVisible;\n if (this.showDate) {\n this.currentSlot = this._dateToSet || new Date();\n this.updateDays();\n }\n if (this.showTime) {\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n\n if (this.date) {\n const m = moment(this.date);\n\n this.hour = m.format('hh');\n this.min = m.format('mm');\n this.sec = m.format('ss');\n this.isPM = m.format('A') === 'PM';\n }\n }\n if (this.isPickerVisible) {\n if (this.dispalyOverParent) {\n this.createOverlay();\n } else {\n this.updatePlacement();\n this.syncMenuPositionWithDelay();\n }\n }\n }\n\n private createOverlay() {\n const verticalDirection = this.getVerticalMenuDirection();\n const horizontalDirection = this.getHorizontalMenuDirection();\n\n const position: ConnectedPosition = {\n originX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n originY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'bottom' : 'top',\n overlayX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n overlayY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'top' : 'bottom'\n };\n\n // Determine the vertical position (below or above) and set the vertical offset (0 for below, -20 for above)\n const isBelow = verticalDirection === DATEPICKER_POSITION.BOTTOM;\n const offsetY = isBelow ? 0 : -20;\n\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.triggerButton)\n .withPositions([\n position\n ])\n // Disable flexible dimensions, meaning the overlay will not resize automatically\n .withFlexibleDimensions(false)\n // Set the vertical offset to avoid overlapping with the parent button \n .withDefaultOffsetY(offsetY)\n // Disable automatic repositioning of the overlay to avoid overlap with other elements\n .withPush(false);\n\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'custom-backdrop',\n panelClass: 'custom-overlay',\n });\n\n this.overlayRef.attach(new TemplatePortal(this.dateMenuTemplate, this.viewContainerRef));\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n this.isPickerVisible = false;\n });\n\n }\n\n // Method to close the overlay\n public closePicker(): void {\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.isPickerVisible = false;\n }\n\n // Cleanup overlay on component destruction\n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n\n private showDatePicker() {\n setTimeout(() => {\n if (this.dateMenu) {\n this.dateMenu.nativeElement.style.visibility = 'visible';\n }\n }, 0)\n }\n\n private syncMenuPositionWithDelay() {\n if (!this.parentContainer) {\n this.showDatePicker();\n return;\n }\n\n setTimeout(() => {\n const elementRect = this._element.nativeElement.getBoundingClientRect();\n const parentRect = this.parentContainer.getBoundingClientRect();\n\n // Calculate the top difference between element and parent (if available)\n const top = this.calculateTopPosition(elementRect, parentRect);\n\n const dateMenuRect = this.dateMenu?.nativeElement?.getBoundingClientRect();\n this.bottom = dateMenuRect?.height < top;\n this.showDatePicker();\n }, 0);\n }\n\n private calculateTopPosition(elementRect: DOMRect, parentRect: DOMRect): number {\n let top: number;\n if (elementRect.top < parentRect.top) {\n top = parentRect.top - elementRect.top; // Reverse order if condition is met\n } else {\n top = elementRect.top - parentRect.top; // Normal calculation\n }\n return top;\n }\n\n private updateDays() {\n if (!this.currentSlot) {\n this.currentSlot = new Date();\n }\n\n const enMonth = moment(this.currentSlot).format(\"MMM\");\n const translatedMonth = this._translate.instant(enMonth);\n\n this.daysTitle = moment(this.currentSlot).format(\"MMM yyyy\").replace(enMonth, translatedMonth);\n this.dayRows = [];\n let current = moment(this.currentSlot).startOf(\"month\").startOf(\"week\").add(1, \"day\");\n let end = moment(this.currentSlot).endOf(\"month\").endOf(\"week\").add(1, \"day\");\n\n const currentMonth = moment(this.currentSlot).month();\n\n const date = moment(this._dateToSet);\n\n while (current <= end) {\n const row = { days: [] as DatePickerDay[] };\n this.dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n\n let isSelected = false;\n if (date) {\n isSelected = current.date() == date.date() &&\n date.month() == current.month();\n }\n\n let isOutside = currentMonth != current.month();\n\n let isDisabled = false;\n\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let isHighlighted = false;\n\n if (this.highlightDays && this.highlightDays.length) {\n isHighlighted = this.highlightDays.indexOf(current.valueOf()) >= 0;\n }\n\n row.days.push({\n date: current.toDate(),\n lbl: moment(current).date().toString(),\n isOutside: isOutside,\n selected: isSelected,\n isDisabled: isDisabled,\n isHighlighted: isHighlighted\n });\n\n current = moment(current).add(1, \"day\");\n }\n }\n }\n\n public nextMonth() {\n this.currentSlot = moment(this.currentSlot).add(1, \"month\").toDate();\n this.updateDays();\n }\n\n public prevMonth() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"month\").toDate();\n this.updateDays();\n }\n\n public nextYear() {\n this.currentSlot = moment(this.currentSlot).add(1, \"year\").toDate();\n this.updateDays();\n }\n\n public prevYear() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"year\").toDate();\n this.updateDays();\n }\n\n public nextYearGroup() {\n this.years = this.years.map(year => year + 15);\n }\n\n public prevYearGroup() {\n this.years = this.years.map(year => year - 15);\n }\n\n public selectDay(day: DatePickerDay) {\n if (day.isDisabled) {\n // day is disabled\n return;\n }\n\n if (this.showTime) {\n this._dateToSet = moment(day.date).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else {\n this._dateToSet = new Date(day.date);\n\n if (this.autoConfirm) {\n this.apply();\n }\n }\n\n this.updateDays();\n }\n\n public selectMonth(month: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setMonth(month);\n this.currentSlot = newDate;\n this.updateDays();\n this.monthPickerVisible = false;\n }\n\n public selectYear(year: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setFullYear(year);\n this.currentSlot = newDate;\n this.updateDays();\n this.yearPickerVisible = false;\n }\n\n public hideTimePicker() {\n if (!this.dispalyOverParent) {\n this.isPickerVisible = false;\n }\n }\n\n\n public timeChanged() {\n let min = parseInt(this.min);\n let hour = parseInt(this.hour);\n let sec = this.showSeconds ? parseInt(this.sec) : 0;\n\n if (isNaN(hour) || isNaN(min)) {\n return;\n }\n\n if (this.showSeconds && isNaN(sec)) {\n return;\n }\n\n hour = Math.min(hour, 12);\n hour = Math.max(hour, 1);\n\n min = Math.min(min, 59);\n min = Math.max(min, 0);\n\n if (this.showSeconds) {\n sec = Math.min(sec, 59);\n sec = Math.max(sec, 0);\n }\n\n const time = moment(`${hour} ${min} ${sec} ${this.isPM ? \"pm\" : \"am\"}`, \"h m s a\");\n\n this.selectedTime = {\n Hr: time.hours(),\n Min: time.minutes(),\n Sec: time.seconds()\n };\n\n // added below condition because we can select the time without date, and it was showing invalid date in the input box\n // second condition is required to disable apply button when date is not selected\n if (this._dateToSet) {\n this._dateToSet = moment(this._dateToSet).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else if (!this.showDate) {\n this._dateToSet = moment().hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n }\n\n // format\n if (hour < 10) {\n this.hour = `0${hour}`;\n }\n else {\n this.hour = `${hour}`;\n }\n\n if (min < 10) {\n this.min = `0${min}`;\n }\n else {\n this.min = `${min}`;\n }\n\n if (this.showSeconds) {\n if (sec < 10) {\n this.sec = `0${sec}`;\n }\n else {\n this.sec = `${sec}`;\n }\n }\n\n }\n\n public formattedDate() {\n if (!this.date) {\n return \"\";\n }\n\n if (this.boxDesign && moment(this.date).isSame(moment(), \"day\")) {\n return 'Today';\n }\n\n // get the translated text for day and month\n const enMonth = moment(this.date).format(\"MMM\");\n const enDay = moment(this.date).format(\"ddd\");\n const translatedMonth = this._translate.instant(enMonth);\n const translatedDay = this._translate.instant(enDay);\n\n if (this.showDate && !this.showTime && !this.boxDesign) {\n // Expanded formatting for date only picker\n return moment(this.date).format(\"ddd, DD MMM YYYY\")\n .replace(enDay, translatedDay)\n .replace(enMonth, translatedMonth);\n }\n\n return moment(this.date).format(\"MMM DD, YY\").replace(enMonth, translatedMonth);\n }\n\n public formattedTime() {\n if (!this.date) {\n return \"\";\n }\n if (this.showSeconds) {\n return moment(this.date).format(\"h:mm:ss A\");\n }\n return moment(this.date).format(\"h:mm A\");\n }\n\n public toggleTime() {\n this.isPM = !this.isPM;\n this.timeChanged();\n }\n\n public showMonthPicker() {\n this.monthPickerVisible = true;\n }\n\n public showYearPicker() {\n this.yearPickerVisible = true;\n this.years = [];\n for (let i = this.currentSlot.getFullYear() - 7; i < this.currentSlot.getFullYear() + 8; i++) {\n this.years.push(i);\n }\n }\n\n public hourUp() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour++;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public hourDown() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour--;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public minUp() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min++;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public minDown() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min--;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public secUp() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec++;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public secDown() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec--;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public apply() {\n if (this._dateToSet) {\n // If time selection has enabled and user keeps default time then triggering the timeChanged function\n if (this.showTime && this.hour === defaultHours && this.min === defaultMinuts && this.sec === defaultSeconds) {\n this.timeChanged();\n }\n\n this.date = new Date(this._dateToSet);\n }\n this.dateChange.emit(this.date);\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public cancel() {\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public clear() {\n this._dateToSet = null;\n this.hour = defaultHours;\n this.min = defaultMinuts;\n this.date = null;\n this.apply();\n }\n\n public getIcon() {\n // Change picker icon based on mode\n switch (true) {\n case this.showDate && this.showTime:\n // Date + Time\n return 'assets/ng-zenduit/icons/date.svg';\n case this.showDate && !this.showTime:\n // Date only\n return 'assets/ng-zenduit/icons/calendar.svg';\n case !this.showDate && this.showTime:\n // Time only\n return 'assets/ng-zenduit/icons/time.svg';\n default:\n return 'assets/ng-zenduit/icons/date.svg';\n }\n }\n\n public selectHintDate(date: Date): void {\n if (!date) {\n console.error('Invalid hint');\n return;\n }\n\n this._dateToSet = new Date(date);\n this.selectedTime = {\n Hr: moment(date).hours(),\n Min: moment(date).minutes(),\n Sec: moment(date).seconds()\n };\n\n if (this.autoConfirm) {\n this.apply();\n }\n\n this.updateDays();\n }\n}\n","<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n @if (!boxDesign) {\n <button class=\"date-toggle\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n @if (!date && showDate && !showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date\" | translate}}\n </div>\n }\n @if (!date && showTime && !showDate) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Time\" | translate}}\n </div>\n }\n @if (!date && showTime && showDate && showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date & Time\" | translate}}\n </div>\n }\n <!-- Selected datetime -->\n @if (date) {\n <div>\n @if (showDate) {\n <span>{{formattedDate()}}</span>\n }\n @if (showTime) {\n <span> {{formattedTime()}}</span>\n }\n </div>\n }\n </div>\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n }\n\n <!-- Box design datepicker toggle -->\n @if (boxDesign) {\n <button class=\"date-toggle new-box-design\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n @if (!date && showDate && !showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date\" | translate}}\n </div>\n }\n @if (!date && showTime && !showDate) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Time\" | translate}}\n </div>\n }\n @if (!date && showTime && showDate && showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date & Time\" | translate}}\n </div>\n }\n <!-- Selected datetime -->\n @if (date) {\n <div>\n @if (showDate) {\n <span>{{formattedDate()}}</span>\n }\n @if (showTime) {\n <span> {{formattedTime()}}</span>\n }\n </div>\n }\n </div>\n </button>\n }\n\n <!-- Datepicker popup -->\n <ng-container *ngTemplateOutlet=\"dateMenuTemplate\">\n </ng-container>\n\n <ng-template #dateMenuTemplate>\n @if (isPickerVisible) {\n <div #dateMenu\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n @if (showDate) {\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n @for (weekDay of weekDays; track weekDay) {\n <div\n class=\"week-day\">\n {{weekDay | translate}}\n </div>\n }\n </div>\n @for (row of dayRows; track row) {\n <div\n class=\"day-row\">\n @for (day of row.days; track day) {\n <div\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl | translate}}\n @if (day.isHighlighted) {\n <zen-icon\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (showTime) {\n <div\n class=\"time-container\">\n <div class=\"time-lbl\">\n {{\"Select Time\" | translate}}:\n </div>\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"hourUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"hourDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <span>:</span>\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"minUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"minDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n @if (showSeconds) {\n <span>:</span>\n }\n @if (showSeconds) {\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"secUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"sec\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"secDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n }\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'PM' : 'AM') | translate}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'AM' : 'PM') | translate}}\n </div>\n </div>\n </div>\n </div>\n }\n @if (hint) {\n <div class=\"hint\"\n >\n <div class=\"hint-description\">\n {{hint.description | translate}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText | translate}}\n </div>\n </div>\n }\n @if (!autoConfirm || showTime) {\n <div class=\"footer\"\n >\n @if (date) {\n <button\n (click)=\"clear()\"\n class=\"button-stroked\">\n {{\"Clear\" | translate}}\n </button>\n }\n @if (!date) {\n <button\n (click)=\"cancel()\"\n class=\"button-stroked\">\n {{\"Cancel\" | translate}}\n </button>\n }\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n {{\"Apply\" | translate}}\n </button>\n </div>\n }\n @if (monthPickerVisible) {\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n @for (month of months; track month; let index = $index) {\n <div class=\"month-item\"\n (click)=\"selectMonth(index)\">\n {{ month | translate }}\n </div>\n }\n </div>\n </div>\n }\n @if (yearPickerVisible) {\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n @for (year of years; track year) {\n <div class=\"month-item\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n }\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle-slide',\n templateUrl: './zendu-toggle-slide.component.html',\n styleUrls: ['./zendu-toggle-slide.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduToggleSlideComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() disabled!: boolean;\n\n /**\n * Toggle state\n */\n public toggle() {\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<button class=\"toggle-slide-component\"\n (click)=\"toggle()\"\n [disabled]=\"disabled\"\n [class.active]=\"enabled\"\n [class.disabled]=\"disabled\">\n\n <div class=\"toggle-slider\"></div>\n <div class=\"toggle-btn\"></div>\n</button>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { DataSource } from '../filter/filtersConfig';\n\n@Component({\n selector: 'zen-groups',\n templateUrl: './zendu-groups.component.html',\n styleUrls: ['./zendu-groups.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduGroupsComponent implements OnChanges {\n @Input() dataSource: DataSource[] = [];\n @Input() filteredDataSource: DataSource[] = [];\n @Input() hideSelectAll = false;\n @Input() isSelectedAll = false;\n @Input() inline = false;\n @Input() width = '300px';\n @Input() placeholder = 'Select group';\n @Input() hideSearch = false;\n @Input() idProp: string = 'id';\n @Input() displayProp: string = 'name';\n\n @Output() isSelectedAllChange = new EventEmitter<boolean>();\n @Output() checkedChange = new EventEmitter<DataSource>();\n\n public isOpen = false;\n public openUpward = false;\n public searchText = '';\n private _searchFilteredDataSource: DataSource[] | null = null;\n\n private _treeMap = new Map<string | number, DataSource>();\n private _childCountCache = new Map<string | number, number>();\n\n constructor(private _elementRef: ElementRef) {}\n\n private getChildren(item: any): string[] | undefined {\n return item.children || item.Children || item.Childrens;\n }\n\n public hasChildren(item: any): boolean {\n const children = this.getChildren(item);\n return !!children && children.length > 0;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['dataSource']) {\n this.buildTreeLevels();\n }\n if ((changes['filteredDataSource'] || changes['dataSource']) &&\n this._treeMap.size > 0 && this.filteredDataSource?.length) {\n this.filteredDataSource = this.sortTreeOrder(this.filteredDataSource);\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n onOutsideClick(event: MouseEvent) {\n if (this.inline || !this.isOpen) return;\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.isOpen = false;\n }\n }\n\n public toggleDropdown(): void {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.openUpward = this.shouldOpenUpward(300);\n } else {\n this.searchText = '';\n this._searchFilteredDataSource = null;\n }\n }\n\n private shouldOpenUpward(dropdownHeight: number): boolean {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return (window.innerHeight - rect.bottom) < dropdownHeight;\n }\n\n public get displayDataSource(): DataSource[] {\n if (this._searchFilteredDataSource !== null) {\n return this._searchFilteredDataSource;\n }\n return this.filteredDataSource;\n }\n\n public onSearchChange(): void {\n if (!this.searchText) {\n this._searchFilteredDataSource = null;\n return;\n }\n\n const lowerSearch = this.searchText.toLowerCase();\n const matchingIds = new Set<string | number>();\n\n for (const el of this.dataSource) {\n const name = typeof el[this.displayProp] === 'number' ? el[this.displayProp].toString() : el[this.displayProp];\n if (name.toLowerCase().includes(lowerSearch)) {\n matchingIds.add(el[this.idProp]);\n // Include all ancestors\n let current = el;\n while (current.parentId != null) {\n matchingIds.add(current.parentId);\n const parent = this._treeMap.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n }\n }\n\n let filtered = this.dataSource.filter(el => matchingIds.has(el[this.idProp]));\n\n // Auto-expand parents when searching\n for (const el of filtered) {\n if (this.hasChildren(el)) {\n el.isOpen = true;\n }\n }\n\n this._searchFilteredDataSource = this.sortTreeOrder(filtered);\n }\n\n public get selectedCount(): number {\n return this.dataSource?.filter(d => d.checked).length || 0;\n }\n\n public get selectedLabel(): string {\n const count = this.selectedCount;\n if (count === 0) return '';\n if (count === 1) {\n const item = this.dataSource.find(d => d.checked);\n return item ? item[this.displayProp]?.toString() : '';\n }\n return `${count} selected`;\n }\n\n public get hasActiveItems(): boolean {\n return this.dataSource?.some(d => d.checked) || false;\n }\n\n public onSelectAll(): void {\n this.dataSource.forEach(d => (d.checked = this.isSelectedAll));\n this.isSelectedAllChange.emit(this.isSelectedAll);\n }\n\n public onCheckChanged(dsItem: DataSource): void {\n this.cascadeToChildren(dsItem);\n this.updateParentCheckedState(dsItem);\n this.checkedChange.emit(dsItem);\n }\n\n private buildTreeLevels(): void {\n if (!this.dataSource?.length) return;\n const hasChildren = this.dataSource.some(d => this.hasChildren(d));\n if (!hasChildren) return;\n\n const map = new Map<string | number, DataSource>();\n for (const item of this.dataSource) {\n map.set(item[this.idProp], item);\n }\n this._treeMap = map;\n\n for (const item of this.dataSource) {\n const children = this.getChildren(item);\n if (children?.length) {\n for (const childId of children) {\n const child = map.get(childId);\n if (child && child.parentId == null) {\n child.parentId = item[this.idProp];\n }\n }\n }\n }\n\n for (const item of this.dataSource) {\n let level = 0;\n let current = item;\n while (current.parentId != null) {\n level++;\n const parent = map.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n item.level = level;\n }\n\n this._childCountCache.clear();\n const countChildren = (item: DataSource): number => {\n const children = this.getChildren(item);\n if (!children?.length) return 0;\n let count = 0;\n for (const childId of children) {\n const child = map.get(childId);\n if (child) {\n const childLeaves = countChildren(child);\n count += childLeaves > 0 ? childLeaves : 1;\n }\n }\n return count;\n };\n for (const item of this.dataSource) {\n if (this.hasChildren(item)) {\n this._childCountCache.set(item[this.idProp], countChildren(item));\n }\n }\n }\n\n public sortTreeOrder(items: DataSource[]): DataSource[] {\n const itemSet = new Set(items.map(i => i[this.idProp]));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item[this.idProp])) return;\n if (!itemSet.has(item[this.idProp])) return;\n visited.add(item[this.idProp]);\n ordered.push(item);\n const children = this.getChildren(item);\n if (children?.length) {\n for (const childId of children) {\n const child = this._treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item[this.idProp])) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public isTreeItemVisible(dsItem: DataSource): boolean {\n if (dsItem.parentId == null) {\n return true;\n }\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent) {\n return true;\n }\n return parent.isOpen && this.isTreeItemVisible(parent);\n }\n\n public toggleTreeNode(dsItem: DataSource): void {\n dsItem.isOpen = !dsItem.isOpen;\n }\n\n public getChildCount(dsItem: DataSource): number {\n return this._childCountCache.get(dsItem[this.idProp]) || 0;\n }\n\n public isTreeItemIndeterminate(dsItem: DataSource): boolean {\n if (!this.hasChildren(dsItem)) return false;\n const allDescendants = this.getAllDescendants(dsItem);\n if (!allDescendants.length) return false;\n const checkedCount = allDescendants.filter(d => d.checked).length;\n return checkedCount > 0 && checkedCount < allDescendants.length;\n }\n\n private getAllDescendants(dsItem: DataSource): DataSource[] {\n const result: DataSource[] = [];\n const children = this.getChildren(dsItem);\n if (!children?.length) return result;\n for (const childId of children) {\n const child = this._treeMap.get(childId);\n if (child) {\n result.push(child);\n result.push(...this.getAllDescendants(child));\n }\n }\n return result;\n }\n\n private updateParentCheckedState(dsItem: DataSource): void {\n if (dsItem.parentId == null) return;\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent || !this.hasChildren(parent)) return;\n const allDescendants = this.getAllDescendants(parent);\n const allChecked = allDescendants.every(d => d.checked);\n parent.checked = allChecked;\n this.updateParentCheckedState(parent);\n }\n\n private cascadeToChildren(item: DataSource): void {\n const children = this.getChildren(item);\n if (!children?.length) return;\n this.dataSource.forEach(data => {\n if (item[this.idProp] == data[this.idProp]) {\n return;\n }\n if (children.includes(<string>data[this.idProp])) {\n data.checked = item.checked;\n if (this.hasChildren(data)) {\n this.cascadeToChildren(data);\n }\n }\n });\n }\n\n public getTreeConnectors(dsItem: DataSource): string[] {\n if (!dsItem.level) return [];\n\n const isLastFlags: boolean[] = [];\n let current: DataSource | undefined = dsItem;\n\n for (let l = dsItem.level; l >= 1; l--) {\n const parent = this._treeMap.get(current!.parentId!);\n const parentChildren = parent ? this.getChildren(parent) : undefined;\n if (!parentChildren?.length) {\n isLastFlags.push(true);\n } else {\n const lastChildId = parentChildren[parentChildren.length - 1];\n isLastFlags.push(current![this.idProp] === lastChildId);\n }\n current = parent;\n }\n\n isLastFlags.reverse();\n\n const result: string[] = [];\n for (let i = 0; i < isLastFlags.length; i++) {\n const isItemLevel = (i === isLastFlags.length - 1);\n const isLast = isLastFlags[i];\n\n if (isItemLevel) {\n result.push(isLast ? 'elbow' : 'branch');\n } else {\n result.push(isLast ? 'none' : 'through');\n }\n }\n return result;\n }\n\n public getTreeMap(): Map<string | number, DataSource> {\n return this._treeMap;\n }\n}\n","<!-- Dropdown mode (default) -->\n@if (!inline) {\n <div class=\"zen-groups-dropdown\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n @if (!selectedLabel) {\n <span class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n }\n @if (selectedLabel) {\n <span class=\"zen-groups-value\">{{ selectedLabel }}</span>\n }\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n @if (isOpen) {\n <div class=\"zen-groups-panel\" [class.open-upward]=\"openUpward\">\n @if (!hideSearch) {\n <div class=\"zen-groups-search\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n }\n </div>\n}\n\n<!-- Inline mode (used inside zen-filter) -->\n@if (inline) {\n <div class=\"zen-groups-inline\">\n @if (!hideSearch) {\n <div class=\"zen-groups-search\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n}\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n @if (!hideSelectAll) {\n <div class=\"action-item-checkbox select-all\">\n @if (dataSource.length === displayDataSource.length) {\n <zen-checkbox\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n }\n </div>\n }\n\n @for (dsItem of displayDataSource; track dsItem) {\n @if (isTreeItemVisible(dsItem)) {\n <div\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n @if (dsItem.level > 0) {\n @for (connector of getTreeConnectors(dsItem); track connector; let i = $index) {\n <div\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n }\n }\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem[displayProp]?.toString() | translate\"></zen-checkbox>\n @if (hasChildren(dsItem)) {\n <span\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n }\n </div>\n @if (hasChildren(dsItem)) {\n <button\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n }\n </div>\n }\n }\n\n @if (searchText && displayDataSource.length === 0) {\n <div class=\"zen-groups-no-results\">\n {{ 'No Results Found' | translate }}\n </div>\n }\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduRadioButtonComponent implements OnInit {\n\n @Input() selected: boolean;\n\n @Output() radioChange = new EventEmitter<string>();\n\n @Input() label: string;\n\n @Input() value: string;\n\n @Input() name: string;\n\n @Input() disabled = false;\n\n @Input() imageUrl: string;\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() supportingText: string;\n\n public selectedRadio: string;\n\n constructor() { }\n\n ngOnInit() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"selected\"]) {\n if (changes[\"selected\"].currentValue) {\n this.selectedRadio = this.value;\n }\n else {\n this.selectedRadio = \"\";\n }\n }\n }\n\n public emitChange(event: any): void {\n if (this.disabled) {\n return;\n }\n this.radioChange.emit(event.target.value);\n }\n}\n","<label class=\"radio-component\"\n [ngClass]=\"{'disabled-radio': disabled, 'radio-md': size === 'md'}\"\n for=\"{{value}}\">\n <input type=\"radio\"\n class=\"radio-input\"\n name=\"{{name}}\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n id=\"{{value}}\"\n [checked]=\"selectedRadio === value\"\n (change)=\"emitChange($event)\" />\n\n <span class=\"radio-indicator\"></span>\n\n @if (label || supportingText) {\n <div class=\"radio-text-wrap\"\n >\n <span class=\"app-radio-button-label\">\n @if (imageUrl) {\n <img class=\"radio-image\"\n [src]=\"imageUrl\"\n >\n }\n {{label | translate}}\n </span>\n @if (supportingText) {\n <span class=\"app-radio-supporting-text\"\n >\n {{supportingText}}\n </span>\n }\n </div>\n }\n</label>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-spinner',\n templateUrl: './zendu-spinner.component.html',\n styleUrls: ['./zendu-spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSpinner {\n @Input() size?: \"small\" | \"default\" = \"default\";\n}\n","<div class=\"component\"\n [class.small-size]=\"size == 'small'\">\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-button',\n templateUrl: './zen-button.component.html',\n styleUrls: ['./zen-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenButtonComponent {\n \n @Input() variant: 'primary' | 'secondary-gray' | 'secondary' | 'tertiary-gray' | 'tertiary' | 'link-gray' | 'link' = 'primary';\n \n @Input() buttonType: 'button' | 'button-dot' | 'button-icon-leading' | 'button-icon-trailing' | 'button-icon-only' = 'button';\n \n @Input() icon?: string;\n @Input() iconRotated: boolean = false;\n @Input() size: '2xl' | 'xl' | 'lg' | 'md' | 'sm' = 'md';\n @Input() destructive: boolean = false;\n @Input() disabled: boolean = false;\n @Input() fullWidth: boolean = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n get isIconOnly(): boolean {\n return this.buttonType === 'button-icon-only';\n }\n\n get buttonClasses(): string {\n const classes = [];\n \n // Base variant class\n if (this.variant === 'primary') {\n classes.push('button-base');\n } else if (this.variant === 'secondary-gray') {\n classes.push('button-secondary-gray');\n } else if (this.variant === 'secondary') {\n classes.push('button-secondary-color');\n } else if (this.variant === 'tertiary-gray') {\n classes.push('button-tertiary-gray');\n } else if (this.variant === 'tertiary') {\n classes.push('button-tertiary-color');\n } else if (this.variant === 'link-gray') {\n classes.push('button-link-gray');\n } else if (this.variant === 'link') {\n classes.push('button-link-color');\n }\n \n // Size class\n classes.push(`button-${this.size}`);\n \n // Typography classes based on size\n classes.push('text');\n if (this.size === '2xl') {\n classes.push('text-lg');\n classes.push('text-weight-medium');\n } else if (this.size === 'xl' || this.size === 'lg') {\n classes.push('text-md');\n classes.push('text-weight-medium');\n } else {\n classes.push('text-sm');\n classes.push('text-weight-medium');\n }\n \n // State modifiers\n if (this.destructive) {\n classes.push('destructive');\n }\n \n if (this.isIconOnly) {\n classes.push('button-icon-only');\n }\n \n if (this.fullWidth) {\n classes.push('full-width');\n }\n \n return classes.join(' ');\n }\n\n getIconName(): string {\n // Use the icon input if provided, otherwise default to circle\n return this.icon || 'circle';\n }\n}","<button\n [class]=\"buttonClasses\"\n [type]=\"type\"\n [disabled]=\"disabled\">\n\n <!-- Dot indicator -->\n @if (buttonType === 'button-dot') {\n <span class=\"button-dot\"></span>\n }\n\n <!-- Leading icon -->\n @if (buttonType === 'button-icon-leading' || isIconOnly) {\n <zen-icon\n [name]=\"getIconName()\"\n [class.rotated]=\"iconRotated\"\n size=\"xs\"></zen-icon>\n }\n\n <!-- Button content -->\n @if (!isIconOnly) {\n <ng-content></ng-content>\n }\n\n <!-- Trailing icon -->\n @if (buttonType === 'button-icon-trailing') {\n <zen-icon\n [name]=\"getIconName()\"\n [class.rotated]=\"iconRotated\"\n size=\"xs\"></zen-icon>\n }\n</button>","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport {\n DataSource,\n FiltersConfig,\n FiltersConfigItem,\n MultiSelectItem,\n} from './filtersConfig';\nimport uniqBy from 'lodash.uniqby';\nimport moment from 'moment/moment';\nimport { ZenduSearchBoxComponent } from '../search-box/zendu-search-box.component';\nimport { Util } from '../util';\nimport { DATEPICKER_POSITION } from '../datepicker/datepicker';\nimport { DateRange } from './dateRange';\nimport { Renderer2 } from '@angular/core';\n\n@Component({\n selector: 'zen-filter',\n templateUrl: './zendu-filter.component.html',\n styleUrls: ['./zendu-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFilterComponent implements OnChanges {\n @Input() config: FiltersConfig = { items: [] };\n\n @Input() filter: object;\n\n @Input() position = 'right';\n\n @Input() resetBehavior: 'set_all' | 'clear' = 'clear';\n\n @Output() filterChange = new EventEmitter<object>();\n\n @Input() isVisible = false;\n\n @Output() isVisibleChange = new EventEmitter<boolean>();\n\n @Input() customTrigger = false;\n\n @Input() imageUrl: string;\n\n @Input() label: string;\n\n @Input() showOptions: boolean;\n\n @Input() customOptions: string;\n\n @Input() wrapperBodyClass: string;\n\n @Input() customPosition: 'fixed' | 'absolute' = 'fixed';\n\n public searchText = '';\n\n public isApplied = false;\n\n private lastAppliedFilter: any = {};\n\n private resetedFilter: any;\n\n public menuLeft = '0px';\n\n public menuRight = '0px';\n\n public menuTop = '0px';\n\n public menuBottom = '0px';\n\n public showNoFilterResult: boolean;\n\n public errorMessage: string[] = [];\n\n public datepickerPosition = DATEPICKER_POSITION;\n\n public selectedDateRangeOptions: { [key: string]: string } = {};\n\n @ViewChild('searchBox', { static: false }) searchBox: ZenduSearchBoxComponent;\n\n @ViewChild('mainComponent', { static: false })\n _componentElement: ElementRef<HTMLElement>;\n constructor(public renderer: Renderer2) {}\n\n public ngOnChanges(changes: any): void {\n if (changes.config && changes.config.currentValue) {\n // init values\n for (const item of this.config.items) {\n if (item.type === 'multiselect') {\n item.dataSource = item.dataSource\n ? this.extractUniqueDataSource(item.dataSource)\n : [];\n } else if (item.type === 'dateRange' && !item.dateRange) {\n item.dateRange = { start: null, end: null };\n\n // init date range options\n if (item.showDateRangeOptions && !item.dateRangeOptions?.length) {\n item.dateRangeOptions = this.getDefaultDateRangeOptions();\n }\n } else if (item.type === 'numberRange' && !item.numberRange) {\n item.numberRange = {};\n }\n\n if (typeof item.showTime !== 'boolean') {\n item.showTime = true;\n }\n }\n\n this.filterItems();\n\n this.resetedFilter = this.getFilterObject();\n this.filter = this.getFilterObject();\n this.lastAppliedFilter = Util.clone(this.filter);\n }\n\n if (changes.filter && changes.filter.currentValue) {\n this.lastAppliedFilter = Util.clone(changes.filter.currentValue);\n\n this.updateAppliedState();\n }\n\n if (changes.isVisible && changes.isVisible.currentValue) {\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isVisible) {\n return;\n }\n\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n // element not in the DOM\n return;\n }\n if (this._componentElement.nativeElement.contains(target)) {\n return;\n }\n\n // hide the menu for outside click\n this.hide();\n\n // restore values\n this.restorePreviousApplied();\n }\n\n @HostListener('window:resize', [])\n windowSizeHandling() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:scroll', [])\n windowScroll() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent) {\n if (!this.isVisible) {\n return;\n }\n\n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Home' ||\n event.key === 'End'\n ) {\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n return;\n }\n\n if (\n this._componentElement.nativeElement.contains(target) &&\n !target.classList.contains('button-stroked')\n ) {\n return;\n }\n this.hide();\n this.restorePreviousApplied();\n }\n }\n\n public focusSearchBox() {\n this.searchBox.doFocus();\n }\n\n public isMenuIsVisible(item: FiltersConfigItem) {\n if (item.isLazyLoading) {\n if (item.isLoadingNow || item.canLoadMore !== false) {\n return true;\n }\n if (this.searchText) {\n return item.filteredDataSource?.length > 0;\n }\n return true;\n }\n\n if (item.filteredDataSource && this.searchText) {\n if (!item.filteredDataSource.length) {\n return false;\n }\n }\n\n return true;\n }\n\n private extractUniqueDataSource(\n array: {\n id: string | number;\n name: string | number;\n }[]\n ): MultiSelectItem[] {\n const items = array.filter((el) => {\n return Boolean(\n typeof el.id === 'number'\n ? typeof el.id !== undefined\n : el.id && typeof el.name === 'number'\n ? typeof el.name !== undefined\n : el.name\n );\n });\n const uniqItems = uniqBy(items, (el) => el.id);\n // add index to each uniqItems\n uniqItems.forEach(\n (el: MultiSelectItem, index: number) => (el.index = index)\n );\n return uniqItems;\n }\n\n public onSelectAll(item: FiltersConfigItem) {\n item.dataSource.forEach((d) => (d.checked = item.isSelectedAll));\n }\n\n public isItemActive(item: FiltersConfigItem): boolean {\n if (item.type === 'multiselect') {\n const checkedItems = item.dataSource.filter((el) => el.checked);\n item.isSelectedAll = checkedItems.length === item.dataSource.length;\n return checkedItems.length > 0;\n } else if (item.type === 'radio') {\n return item.radioOptions.some((ro) => ro.selected);\n } else if (item.type === 'numberRange') {\n return Boolean(item.numberRange.from || item.numberRange.to);\n } else if (item.type === 'dateRange') {\n return Boolean(item.dateRange.start || item.dateRange.end);\n } else if (item.type === 'date') {\n return Boolean(item.date);\n } else {\n return false;\n }\n }\n\n public searchTextChanged() {\n // run the lazy loading\n // the filterItems called from onChanges, so call lazy loading only on search change\n this.resetLazyLoadingSources(false);\n\n this.filterItems();\n }\n\n private async resetLazyLoadingSources(showSelectedOnTop: boolean) {\n const requests = [];\n for (const configItem of this.config.items) {\n if (configItem.isLazyLoading) {\n configItem.canLoadMore = true;\n configItem.filteredDataSource = [];\n requests.push(this.loadMore(configItem, showSelectedOnTop));\n }\n }\n\n await Promise.all(requests);\n\n // filter non-lazy loading items\n this.filterItems();\n }\n\n private filterItems() {\n let hasData = false;\n\n for (const configItem of this.config.items) {\n if (configItem.type === 'multiselect') {\n if (configItem.isLazyLoading) {\n if (configItem.isLoadingNow) {\n // mark as data available in loading state\n hasData = true;\n } else if (configItem.filteredDataSource?.length) {\n hasData = true;\n }\n } else {\n const isTree = this.hasTreeData(configItem);\n if (isTree && this.searchText) {\n // Build a local lookup map for ancestor traversal\n const localMap = new Map<string | number, DataSource>();\n for (const el of configItem.dataSource) {\n localMap.set(el.id, el);\n }\n\n // For tree data, include matching items and their ancestors\n const matchingIds = new Set<string | number>();\n for (const el of configItem.dataSource) {\n const preparedName =\n typeof el.name === 'number' ? el.name.toString() : el.name;\n if (preparedName.toLowerCase().includes(this.searchText.toLowerCase())) {\n matchingIds.add(el.id);\n // Add all ancestors\n let current = el;\n while (current.parentId) {\n matchingIds.add(current.parentId);\n current = localMap.get(current.parentId);\n if (!current) break;\n }\n }\n }\n configItem.filteredDataSource = configItem.dataSource.filter(\n (el) => matchingIds.has(el.id)\n );\n // Auto-expand parents when searching\n for (const el of configItem.filteredDataSource) {\n if (el.children?.length) {\n el.isOpen = true;\n }\n }\n configItem.filteredDataSource = this.sortTreeOrder(configItem.filteredDataSource, localMap);\n } else {\n configItem.filteredDataSource = configItem.dataSource.filter((el) => {\n const preparedName =\n typeof el.name === 'number' ? el.name.toString() : el.name;\n return preparedName\n .toLowerCase()\n .includes(this.searchText.toLowerCase());\n });\n if (isTree) {\n const localMap = new Map<string | number, DataSource>();\n for (const el of configItem.dataSource) {\n localMap.set(el.id, el);\n }\n configItem.filteredDataSource = this.sortTreeOrder(configItem.filteredDataSource, localMap);\n }\n }\n\n if (configItem.filteredDataSource.length) {\n hasData = true;\n }\n }\n } else if (configItem.type === 'dateRange') {\n if (\n this.searchText &&\n !Boolean(configItem.dateRange.start || configItem.dateRange.end)\n ) {\n configItem.filteredDataSource = [];\n }\n } else if (configItem.type === 'numberRange') {\n if (\n this.searchText &&\n !Boolean(configItem.numberRange.from || configItem.numberRange.to)\n ) {\n configItem.filteredDataSource = [];\n }\n }\n }\n\n this.showNoFilterResult = this.searchText && !hasData;\n }\n\n public async loadMore(item: FiltersConfigItem, showSelectedOnTop: boolean) {\n try {\n item.isLoadingNow = true;\n if (!item.lazyLoader) {\n throw `loader is not available`;\n }\n if (!item.filteredDataSource) {\n item.filteredDataSource = [];\n }\n\n // load first 10 records for the the first time\n const limit = item.filteredDataSource.length == 0 ? 10 : 100;\n const newItems = await item.lazyLoader(\n { text: this.searchText || '' },\n item.filteredDataSource.length,\n limit\n );\n\n item.canLoadMore = newItems.length == limit;\n\n // the filteredDataSource contains the items that is visilible to user at the current moment\n item.filteredDataSource = item.filteredDataSource.concat(newItems);\n\n // the dataSource contains the selected items\n const checkedIds = item.dataSource\n .filter((i) => i.checked)\n .map((i) => i.id);\n\n if (showSelectedOnTop) {\n // remove the checked items first\n item.filteredDataSource = item.filteredDataSource.filter(\n (i) => !checkedIds.includes(i.id)\n );\n // add all checked items to the top\n const checkedItems = item.dataSource.filter((i) => i.checked);\n item.filteredDataSource = checkedItems.concat(item.filteredDataSource);\n } else {\n // mark as checked based on the dataSource\n for (let dsItem of item.filteredDataSource) {\n dsItem.checked = checkedIds.includes(dsItem.id);\n }\n }\n } catch (err) {\n console.error(err);\n } finally {\n item.isLoadingNow = false;\n }\n }\n\n public toggleItem(item: FiltersConfigItem) {\n item.expanded = !item.expanded;\n\n if (item.isLazyLoading) {\n if (item.expanded) {\n if (item.canLoadMore !== false && !item.filteredDataSource?.length) {\n this.loadMore(item, false);\n }\n }\n }\n }\n\n private resetFilters() {\n let selectAll = this.resetBehavior === 'set_all';\n this.selectedDateRangeOptions = {};\n\n for (const item of this.config.items) {\n if (item.dataSource) {\n item.isSelectedAll = selectAll;\n\n for (const dsItem of item.dataSource) {\n dsItem.checked = selectAll;\n }\n }\n\n if (item.dateRange) {\n item.dateRange = { start: null, end: null };\n }\n\n if (item.numberRange) {\n item.numberRange = { from: null, to: null };\n }\n\n if (item.date) {\n item.date = new Date();\n }\n if (item.type === 'toggle') {\n item.enabled = false;\n }\n if (item.type === 'radio') {\n item.radioOptions.forEach((e) => {\n if (e.id === item.selectedRadio) {\n e.selected = true;\n } else {\n e.selected = false;\n }\n });\n }\n }\n }\n\n private restorePreviousApplied(): void {\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource) {\n const selection = this.lastAppliedFilter[item.key];\n\n for (const dataItem of item.dataSource) {\n dataItem.checked = selection\n ? selection.includes(dataItem.id)\n : false;\n }\n }\n break;\n case 'dateRange':\n item.dateRange = this.lastAppliedFilter[item.key] || {\n start: null,\n end: null,\n };\n break;\n case 'numberRange':\n item.numberRange = this.lastAppliedFilter[item.key] || {};\n break;\n case 'toggle':\n item.dateRange = this.lastAppliedFilter[item.key];\n break;\n case 'date':\n item.date = this.lastAppliedFilter[item.key];\n break;\n case 'radio':\n item.selectedRadio = this.lastAppliedFilter[item.key];\n break;\n }\n }\n }\n\n public reset() {\n this.resetFilters();\n\n this.filter = this.getFilterObject();\n this.resetedFilter = this.getFilterObject();\n\n this.resetLazyLoadingSources(false);\n }\n\n public apply() {\n this.filter = this.getFilterObject();\n let hasError = false;\n for (const iterator of this.config.items) {\n const itemFlag = this.onCheckValidity(iterator);\n if (!itemFlag) {\n hasError = true;\n }\n }\n if (hasError) {\n setTimeout(() => (this.errorMessage = []), 5000);\n return;\n } else {\n this.errorMessage = [];\n }\n this.lastAppliedFilter = Util.clone(this.filter);\n\n this.filterChange.emit(this.filter);\n\n // update the apply state\n this.updateAppliedState();\n\n this.hide();\n }\n\n private updateAppliedState() {\n this.isApplied = false;\n // showing checked items on top of the list\n for (const item of this.config.items) {\n if (item.type === 'multiselect') {\n // resort first based on index\n item.dataSource.sort((a, b) => a.index - b.index);\n\n // then sort based on checked items again\n item.dataSource.sort(\n (a: DataSource, b: DataSource) =>\n Number(b.checked || 0) - Number(a.checked || 0)\n );\n }\n }\n\n if (Object.keys(this.filter).length > 0) {\n if (this.resetedFilter) {\n // Filter was reset, so compare the reset filter object with the current filter\n // When user click on Reset and Then Apply, filter must unhighlighted\n if (\n JSON.stringify(this.resetedFilter) !== JSON.stringify(this.filter)\n ) {\n this.isApplied = true;\n }\n } else {\n this.isApplied = true;\n }\n }\n\n let wrapperClass = document.querySelector('.action-menu-body');\n if (this.wrapperBodyClass) {\n wrapperClass = document.querySelector(`.${this.wrapperBodyClass}`);\n }\n if (wrapperClass) {\n wrapperClass.scrollTo({ top: 0, behavior: 'auto' });\n }\n }\n\n private getFilterObject() {\n const filter = {};\n\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource && item.dataSource.length) {\n const checkedIds = item.dataSource\n .filter((i) => i.checked)\n .map((i) => i.id);\n\n if (checkedIds.length) {\n filter[item.key] = checkedIds;\n }\n }\n break;\n case 'dateRange':\n if (item.dateRange && item.dateRange.start && item.dateRange.end) {\n filter[item.key] = item.dateRange;\n }\n break;\n case 'numberRange':\n if (\n item.numberRange &&\n typeof item?.numberRange?.from === 'number' &&\n typeof item?.numberRange?.to === 'number'\n ) {\n filter[item.key] = item.numberRange;\n }\n break;\n case 'toggle':\n filter[item.key] = item.enabled || false;\n break;\n case 'date':\n if (item.date) {\n filter[item.key] = item.date;\n }\n break;\n case 'radio':\n filter[item.key] = item.radioOptions.find((ro) => ro.selected)?.id;\n break;\n }\n }\n\n return filter;\n }\n\n public hide() {\n this.isVisible = false;\n this.searchText = '';\n this.filterItems();\n\n this.isVisibleChange.emit(false);\n }\n\n public radioChanged(value: string, item: FiltersConfigItem): void {\n item.radioOptions.forEach((opt) => (opt.selected = opt.id === value));\n }\n\n public checkChanged(item: DataSource, configItem: FiltersConfigItem): void {\n if (configItem.isLazyLoading) {\n // store the check items in the data source\n const existItem = configItem.dataSource.find((i) => i.id == item.id);\n if (existItem) {\n existItem.checked = item.checked;\n } else {\n configItem.dataSource.push(item);\n }\n // keep only checked\n configItem.dataSource = configItem.dataSource.filter((d) => d.checked);\n }\n // For tree items, zen-groups handles cascade internally\n }\n\n public toggle() {\n this.isVisible = !this.isVisible;\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n\n if (this.isVisible) {\n this.resetLazyLoadingSources(true);\n }\n }\n\n public onCheckValidity(item: FiltersConfigItem) {\n if (item.type === 'numberRange') {\n if (\n typeof item.numberRange.from === 'number' &&\n typeof item.numberRange.to === 'number' &&\n item.numberRange.from > item.numberRange.to\n ) {\n this.errorMessage.push(\n `Invalid Number range: The Min number cannot be greater than the Max number.`\n );\n return false;\n }\n }\n if (item.type === 'dateRange') {\n if (\n item.dateRange.start &&\n item.dateRange.end &&\n new Date(item.dateRange.start) > new Date(item.dateRange.end)\n ) {\n this.errorMessage.push(\n `Invalid Date range: The Start date cannot be after the End date.`\n );\n return false;\n }\n }\n return true;\n }\n\n public updatePlacement(pos: 'fixed' | 'absolute' = 'fixed') {\n const host = this._componentElement.nativeElement as HTMLElement;\n const container = host.querySelector('.menu-content') as HTMLElement;\n if (!container) return;\n\n const rect =\n pos === 'fixed'\n ? host.getBoundingClientRect()\n : container.getBoundingClientRect();\n const left = rect.left;\n const right = rect.right;\n const top = rect.top;\n const bottom = window.innerHeight - top;\n\n if (pos === 'absolute') {\n this.renderer.addClass(container, 'absolute');\n this.renderer.removeStyle(container, 'inset');\n } else {\n this.renderer.removeClass(container, 'absolute');\n }\n\n if (pos === 'fixed') {\n if (this.position.includes('auto')) {\n const horizontalPosition = this.getHorizontalPosition();\n this.menuRight =\n horizontalPosition === 'left'\n ? `${window.innerWidth - right}px`\n : 'unset';\n this.menuLeft = horizontalPosition === 'right' ? `${left}px` : 'unset';\n } else if (this.position.includes('left')) {\n this.menuRight = `${window.innerWidth - right}px`;\n this.menuLeft = 'unset';\n } else {\n this.menuLeft = `${left}px`;\n this.menuRight = 'unset';\n }\n\n if (this.position.includes('auto')) {\n const verticalPosition = this.getVerticalPosition();\n this.menuTop =\n verticalPosition === 'bottom' ? `${top + 42}px` : 'unset';\n this.menuBottom = verticalPosition === 'top' ? `${bottom}px` : 'unset';\n } else if (this.position.includes('top')) {\n this.menuTop = 'unset';\n this.menuBottom = `${bottom + 10}px`;\n } else {\n this.menuTop = `${top + 55}px`;\n this.menuBottom = 'unset';\n }\n } else {\n let verticalClass = '';\n let horizontalClass = '';\n\n if (this.position.includes('auto')) {\n horizontalClass = this.getHorizontalPosition();\n verticalClass = this.getVerticalPosition();\n } else {\n horizontalClass = this.position.includes('left') ? 'left' : 'right';\n verticalClass = this.position.includes('top') ? 'top' : 'bottom';\n }\n [\n 'dropdown-left',\n 'dropdown-right',\n 'dropdown-top',\n 'dropdown-bottom',\n ].forEach((c) => this.renderer.removeClass(container, c));\n this.renderer.addClass(container, `dropdown-${horizontalClass}`);\n this.renderer.addClass(container, `dropdown-${verticalClass}`);\n }\n }\n\n private getVerticalPosition(): 'bottom' | 'top' {\n const top =\n this._componentElement.nativeElement.getBoundingClientRect().top;\n return top > window.innerHeight / 2 ? 'top' : 'bottom';\n }\n\n private getHorizontalPosition(): 'right' | 'left' {\n const left =\n this._componentElement.nativeElement.getBoundingClientRect().left;\n return left > window.innerWidth / 2 ? 'left' : 'right';\n }\n\n public getDefaultDateRangeOptions(): {\n name: string;\n dateRange: DateRange;\n }[] {\n return [\n {\n name: 'Today',\n dateRange: {\n start: moment().startOf('day').toDate(),\n end: moment().endOf('day').toDate(),\n },\n },\n {\n name: 'Yesterday',\n dateRange: {\n start: moment().subtract(1, 'days').startOf('day').toDate(),\n end: moment().subtract(1, 'days').endOf('day').toDate(),\n },\n },\n {\n name: 'This Week',\n dateRange: {\n start: moment().startOf('week').toDate(),\n end: moment().endOf('week').toDate(),\n },\n },\n {\n name: 'Last Week',\n dateRange: {\n start: moment().subtract(7, 'days').startOf('week').toDate(),\n end: moment().subtract(7, 'days').endOf('week').toDate(),\n },\n },\n {\n name: 'This Month',\n dateRange: {\n start: moment().startOf('month').toDate(),\n end: moment().endOf('month').toDate(),\n },\n },\n {\n name: 'Last Month',\n dateRange: {\n start: moment().subtract(1, 'month').startOf('month').toDate(),\n end: moment().subtract(1, 'month').endOf('month').toDate(),\n },\n },\n ];\n }\n\n private sortTreeOrder(items: DataSource[], treeMap: Map<string | number, DataSource>): DataSource[] {\n const itemSet = new Set(items.map(i => i.id));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item.id)) return;\n if (!itemSet.has(item.id)) return;\n visited.add(item.id);\n ordered.push(item);\n if (item.children?.length) {\n for (const childId of item.children) {\n const child = treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item.id)) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public hasTreeData(configItem: FiltersConfigItem): boolean {\n return configItem.dataSource?.some(d => d.children?.length > 0) || false;\n }\n\n public handleDateRangeOptionClick(item, option) {\n item.dateRange = option.dateRange;\n this.selectedDateRangeOptions[item.key] = option.name;\n }\n\n public handleCustomDateRangeClick(item) {\n this.selectedDateRangeOptions[item.key] = 'Custom';\n }\n\n public handleEndDateChange(item) {\n if (!item.showTime) {\n item.dateRange.end = moment(item.dateRange.end).endOf('day').toDate();\n }\n }\n\n public get hasMultiselectItems(): boolean {\n return this.config.items.some(\n (item) => item.type === 'multiselect' && item.dataSource?.length > 0\n );\n }\n\n public get selectedCount(): number {\n let count = 0;\n for (const item of this.config.items) {\n if (item.type === 'multiselect' && item.dataSource) {\n count += item.dataSource.filter((d) => d.checked).length;\n }\n }\n return count;\n }\n}\n","<div class=\"filters-component\"\n #mainComponent\n click-out=\"isVisible && hide()\">\n\n @if (!customTrigger) {\n <zen-button (click)=\"toggle()\"\n [variant]=\"isApplied ? 'secondary' : 'secondary-gray'\"\n class=\"filter {{isApplied ? 'applied' : ''}}\">\n @if (imageUrl) {\n <zen-icon [src]=\"imageUrl\"\n ></zen-icon>\n }\n @if (!imageUrl) {\n <i class=\"filter-icon material-icons\"\n >filter_list</i>\n }\n @if (label) {\n <span>{{ label | translate }}</span>\n }\n </zen-button>\n }\n\n @if (customTrigger) {\n <ng-content></ng-content>\n }\n\n <div [hidden]=\"!isVisible\"\n class=\"action-menu menu-content\"\n [class.customTrigger]=\"customTrigger\"\n [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom }\">\n <div class=\"action-menu-header\">\n <zen-search-box [(text)]=\"searchText\"\n #searchBox\n (textChange)=\"searchTextChanged()\"></zen-search-box>\n </div>\n\n <div class=\"action-menu-body items-wrapper\"\n ngClass=\"{{wrapperBodyClass}}\">\n @if (errorMessage.length) {\n @for (item of errorMessage; track item) {\n <li\n class=\"error-msg\">{{item | translate }}</li>\n }\n }\n\n @for (item of config.items; track item) {\n <div>\n @if (isMenuIsVisible(item)) {\n <div class=\"menu-item\"\n >\n <!-- Divider between two filter -->\n @if (item.type === 'divider') {\n <div>\n <p class=\"filter-divider\"></p>\n </div>\n }\n <!-- Boolean toggle -->\n @if (item.type === 'toggle') {\n <div\n class=\"action-item toggle-row\">\n <div>{{item.title | translate}}</div>\n <zen-toggle-slide [(enabled)]=\"item.enabled\"></zen-toggle-slide>\n </div>\n }\n @if (item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse) {\n <button class=\"action-item expander-item\"\n (click)=\"toggleItem(item)\">\n <span class=\"expander-title\">{{item.title | translate}}</span>\n <i class=\"material-icons expand-icon\"\n [ngClass]=\"{'active': item.expanded}\">expand_more</i>\n </button>\n }\n @if (item.type != 'toggle' && item.type != 'divider' && item.disableCollapse) {\n <div class=\"action-item section-title\"\n >\n {{item.title | translate}}\n </div>\n }\n @if (item.expanded || item.disableCollapse) {\n <div>\n @switch (item.type) {\n <!-- Multiselect -->\n @case ('multiselect') {\n <div>\n <!-- Lazy loading mode -->\n @if (item.isLazyLoading) {\n @for (dsItem of item.filteredDataSource; track dsItem) {\n <div\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n @if (dsItem.badgeBgColor) {\n <span\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n }\n </div>\n }\n @if (item.canLoadMore && !item.isLoadingNow) {\n <div\n class=\"action-item\">\n <button (click)=\"loadMore(item, false)\"\n class=\"button-stroked full-width\">\n {{'Load More' | translate}}\n </button>\n </div>\n }\n @if (item.isLoadingNow) {\n <div\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n }\n }\n @if (!item.isLazyLoading && !hasTreeData(item)) {\n @if (!item.hideSelectAll) {\n <div class=\"action-item-checkbox ds-item select-all\">\n @if (item.dataSource.length === item.filteredDataSource.length) {\n <zen-checkbox\n [(checked)]=\"item.isSelectedAll\"\n [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll(item)\">\n </zen-checkbox>\n }\n </div>\n }\n @for (dsItem of item.filteredDataSource; track dsItem) {\n <div\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n @if (dsItem.badgeBgColor) {\n <span\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n }\n </div>\n }\n }\n <!-- Tree view mode -->\n @if (!item.isLazyLoading && hasTreeData(item)) {\n <zen-groups\n [dataSource]=\"item.dataSource\"\n [filteredDataSource]=\"item.filteredDataSource\"\n [hideSelectAll]=\"item.hideSelectAll\"\n [inline]=\"true\"\n [hideSearch]=\"true\"\n [(isSelectedAll)]=\"item.isSelectedAll\"\n (checkedChange)=\"checkChanged($event, item)\">\n </zen-groups>\n }\n </div>\n }\n <!-- Date range picker -->\n @case ('dateRange') {\n <div>\n <!-- Options date range view -->\n @if (item.dateRangeOptions?.length) {\n @for (option of item.dateRangeOptions; track option) {\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"></zen-radio>\n </div>\n }\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom' | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"></zen-radio>\n </div>\n @if (selectedDateRangeOptions[item.key] === 'Custom') {\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n }\n }\n <!-- Default date range view -->\n @if (!item.dateRangeOptions?.length) {\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.start\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.dateRange.end\"\n [showTime]=\"item.showTime\"\n [yPosition]=\"item.config?.yPosition ?? datepickerPosition.AUTO\"\n (dateChange)=\"handleEndDateChange(item)\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n }\n </div>\n }\n <!-- Date picker -->\n @case ('date') {\n <div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'Date' | translate}}:</div>\n <zen-datepicker class=\"width-full\"\n [(date)]=\"item.date\"\n [showTime]=\"item.showTime\"\n [parentContainer]=\"mainComponent\">\n </zen-datepicker>\n </div>\n </div>\n }\n <!-- Number range -->\n @case ('numberRange') {\n <div\n class=\"filter-row number-range-row\">\n <div>\n <div class=\"lbl\">{{'Min' | translate}}:</div>\n <input class=\"material-input\"\n [(ngModel)]=\"item.numberRange.from\"\n type=\"number\" />\n </div>\n <div>\n <div class=\"lbl\">{{'Max' | translate}}:</div>\n <input class=\"material-input\"\n [(ngModel)]=\"item.numberRange.to\"\n type=\"number\" />\n </div>\n </div>\n }\n <!-- Radio -->\n @case ('radio') {\n <div>\n @for (option of item.radioOptions; track option) {\n <div\n class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.id\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [imageUrl]=\"option.imageUrl\"\n [selected]=\"option.selected\"\n (radioChange)=\"radioChanged($event, item)\"\n [disabled]=\"option.disabled\"></zen-radio>\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (showNoFilterResult) {\n <span\n class=\"no-item\">{{'No Results Found' | translate}}..</span>\n }\n </div>\n\n <div class=\"action-menu-footer filter-footer\">\n @if (hasMultiselectItems) {\n <span class=\"selected-count\">{{ selectedCount }} {{'Selected' | translate}}</span>\n }\n <div class=\"filter-footer-actions\">\n <button (click)=\"reset()\"\n class=\"filter-btn-clear\"\n [class.has-selection]=\"selectedCount > 0 && hasMultiselectItems\">\n {{'Clear Filter' | translate}}\n </button>\n <button (click)=\"apply()\"\n class=\"filter-btn-apply\">\n {{'Apply' | translate}}\n </button>\n </div>\n </div>\n\n </div>\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-option]',\n standalone: false\n})\nexport class ZenduSelectOptionDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-value]',\n standalone: false\n})\nexport class ZenduSelectValueDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-custom-button]',\n standalone: false\n})\nexport class ZenduSelectButtonDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, ViewEncapsulation, ContentChild, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenduSelectOptionDirective } from './templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './templates/zendu-select-value.directive';\nimport { ZenduSelectButtonDirective } from './templates/zendu-select-button.directive';\nimport { DataSource } from '../filter/filtersConfig';\n\nexport interface LazyLoaderSearch {\n text?: string;\n ids?: string[];\n}\n\nexport interface LazyLoaderResult {\n id: string | number;\n name?: string | number; // Compatible with DataSource\n text?: string; // Original property\n checked?: boolean;\n imageUrl?: string;\n isOpen?: boolean;\n children?: string[];\n parentId?: string | number;\n level?: number;\n index?: number;\n badgeBgColor?: string;\n badgeColor?: string;\n}\n\nexport type LazyLoaderFunction = (\n search: LazyLoaderSearch, \n offset: number, \n limit: number\n) => Promise<LazyLoaderResult[]>;\n\nexport interface AddOptionEvent {\n value: string;\n}\n\nexport interface RemoveOptionEvent {\n removed: boolean;\n}\n\nexport interface SelectOption {\n [key: string]: any;\n id?: string | number;\n name?: string;\n icon?: string;\n iconName?: string;\n avatar?: string;\n dotColor?: string;\n secondaryText?: string;\n}\n\n@Component({\n selector: 'zen-select',\n templateUrl: './zendu-select.component.html',\n styleUrls: ['./zendu-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSelectComponent implements OnChanges {\n /**\n * 2-Way component property for selected items.\n * Don't initialize property on constructor to prevent change source parameter\n */\n @Input() selectModel: any | any[];\n \n /**\n * callback to emit changes for parent component\n */\n @Output() selectModelChange = new EventEmitter<any | any[]>();\n \n /**\n * List of options\n */\n @Input() options: SelectOption[] | any[] = [];\n \n /**\n * Label text above the select\n */\n @Input() label?: string;\n \n /**\n * Supporting text below the select\n */\n @Input() supportingText?: string;\n \n /**\n * Hint text (shown below select)\n */\n @Input() hintText = '';\n \n /**\n * Placeholder text\n */\n @Input() placeholder = 'Select';\n \n /**\n * Leading element type\n */\n @Input() leadingType: 'default' | 'icon' | 'avatar' | 'dot' | 'search' = 'default';\n \n /**\n * Icon for icon leading type\n */\n @Input() leadingIcon?: string;\n \n /**\n * Avatar URL for avatar leading type\n */\n @Input() leadingAvatar?: string;\n \n /**\n * Dot color for dot leading type\n */\n @Input() leadingDotColor?: string;\n \n /**\n * This is a key value to get display name from option object\n */\n @Input() displayProp: string = 'name';\n \n /**\n * This is a key value to get id from option object\n */\n @Input() idProp: string = 'id';\n \n /**\n * Enable search functionality\n */\n @Input() hasSearch = false;\n \n /**\n * Component property to enable multiselect\n */\n @Input() isMultiselect = false;\n \n /**\n * Alias for isMultiselect for easier usage\n */\n @Input() \n set multiselect(value: boolean) {\n this.isMultiselect = value;\n }\n get multiselect(): boolean {\n return this.isMultiselect;\n }\n \n /**\n * Auto-detected tree mode: true if any option has a `children` array\n */\n public isTreeMode = false;\n\n /**\n * Hide \"Select All\" option in both tree mode and flat multiselect\n */\n @Input() hideSelectAll = false;\n\n /**\n * Hide search box in tree mode\n */\n @Input() hideTreeSearch = false;\n\n /**\n * Mark the select as required (shows * indicator on label)\n */\n @Input() required = false;\n\n /**\n * Disable the select\n */\n @Input() disabled = false;\n \n /**\n * Show error state\n */\n @Input() error = false;\n \n /**\n * Error message to display\n */\n @Input() errorMessage?: string;\n \n /**\n * Destructive/error state (similar to zen-input)\n */\n @Input() destructive = false;\n \n /**\n * Size variant\n */\n @Input() size: 'sm' | 'md' = 'md';\n \n /**\n * Component property to return whole option object\n * By default only id value is returned\n */\n @Input() returnOption: boolean = false;\n \n \n /**\n * Truncate text with \"...\" at the end\n */\n @Input() isTruncate: boolean = false;\n \n /**\n * show Add New Option at first place\n */\n @Input() enableAddNewOption: boolean = false;\n \n /**\n * Show Add New option text by default if newOptionText empty\n */\n @Input() showDefaultAddOption: boolean = true;\n \n /**\n * display custom text for Add New Option\n */\n @Input() newOptionText: string;\n\n \n /**\n * Emit event when Add New Option is clicked\n */\n @Output() addNewOption: EventEmitter<AddOptionEvent> = new EventEmitter<AddOptionEvent>();\n \n /**\n * show remove Option at first place\n */\n @Input() enableRemoveOption: boolean = false;\n \n /**\n * display custom text for remove Option\n */\n @Input() removeOptionText: string;\n \n /**\n * Enable lazy loading for options\n */\n @Input() isLazyLoading = false;\n \n /**\n * Lazy loader function to fetch options\n */\n @Input() lazyLoader?: LazyLoaderFunction;\n \n /**\n * Preferred direction for dropdown to open\n */\n @Input() preferredOpenDirection: 'auto' | 'up' | 'down' = 'auto';\n \n /**\n * Emit event when remove Option is clicked\n */\n @Output() removeOption: EventEmitter<RemoveOptionEvent> = new EventEmitter<RemoveOptionEvent>();\n \n /**\n * Emit event when select is closed, sending the selected data\n */\n @Output() closed: EventEmitter<any | any[]> = new EventEmitter<any | any[]>();\n \n /**\n * State tracking\n */\n public isOpen = false;\n public searchText = '';\n public searchInputValue = '';\n public searchFocused = false;\n public filteredOptions: SelectOption[] | any[] = [];\n public selectedDisplay = '';\n public labelText = '';\n public option: SelectOption | null = null;\n public canLoadMore = false;\n public isLoadingNow = false;\n private _searchDebounce: ReturnType<typeof setTimeout>;\n\n // Tree mode properties\n public treeFilteredDataSource: DataSource[] = [];\n public isSelectedAll = false;\n \n /**\n * Select Option Template for custom HTML\n */\n @ContentChild(ZenduSelectOptionDirective) optionTemplate: ZenduSelectOptionDirective;\n \n /**\n * Select Value Template for custom HTML\n */\n @ContentChild(ZenduSelectValueDirective) valueTemplate: ZenduSelectValueDirective;\n \n /**\n * Select Button Template for custom HTML\n */\n @ContentChild(ZenduSelectButtonDirective) buttonTemplate: ZenduSelectButtonDirective;\n \n constructor(private elementRef: ElementRef) {}\n\n /**\n * Get dropdown direction class based on preferredOpenDirection\n */\n getDropdownDirectionClass(): string {\n switch (this.preferredOpenDirection) {\n case 'up':\n return 'dropdown-up';\n case 'down':\n return 'dropdown-down';\n case 'auto':\n default:\n return this.shouldOpenUpward(320) ? 'dropdown-up' : 'dropdown-down';\n }\n }\n\n private shouldOpenUpward(dropdownHeight: number): boolean {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n return (window.innerHeight - rect.bottom) < dropdownHeight;\n }\n\n /**\n * Resolve icon path with fallback to assets folder\n */\n private resolveIconPath(iconName?: string): string | null {\n if (!iconName) return null;\n \n // If it's already a full path or URL, return as is\n if (iconName.includes('/') || iconName.includes('.')) {\n return iconName;\n }\n \n // Try assets folder with .svg extension\n return `assets/ng-zenduit/icons/${iconName}.svg`;\n }\n\n /**\n * Get icon for display (with fallback logic)\n */\n public getIconPath(option?: SelectOption, leadingIcon?: string): string | null {\n // Priority: leadingIcon -> option.icon -> option.iconName -> assets/{iconName}.svg\n if (leadingIcon) {\n return this.resolveIconPath(leadingIcon);\n }\n \n if (option?.icon) {\n return this.resolveIconPath(option.icon);\n }\n \n if (option?.iconName) {\n return this.resolveIconPath(option.iconName);\n }\n \n return null;\n }\n \n ngOnChanges(changeObj: { [key: string]: { currentValue: unknown; previousValue: unknown; firstChange: boolean } }): void {\n this.isTreeMode = this.options?.some((opt: any) => {\n const children = opt.children || opt.Children || opt.Childrens;\n return Array.isArray(children) && children.length > 0;\n }) ?? false;\n if (this.isTreeMode) {\n this.initTreeData();\n }\n this.updateDisplay();\n this.filterOptions();\n this.updateLabel();\n\n if (changeObj[\"selectModel\"]) {\n if (this.isLazyLoading && Array.isArray(this.selectModel) && this.selectModel.length) {\n if (!this.filteredOptions?.length && !this.isOpen) {\n // preload data to show the labels\n this.loadMore(true);\n }\n }\n }\n }\n \n /**\n * Toggle dropdown\n */\n toggleDropdown(): void {\n if (this.disabled) return;\n \n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.searchText = '';\n if (this.isLazyLoading) {\n // Load the first page (showing already-selected items on top) the first\n // time the dropdown is opened.\n if (!this.isLoadingNow && !this.filteredOptions?.length) {\n this.loadMore(true);\n }\n } else {\n this.filterOptions();\n }\n }\n }\n\n /**\n * Handle scroll on the options list — fetch the next page once the user\n * scrolls near the bottom (lazy loading only).\n */\n public onOptionsScroll(event: Event): void {\n if (!this.isLazyLoading || this.isLoadingNow || !this.canLoadMore) {\n return;\n }\n const el = event.target as HTMLElement;\n const threshold = 40;\n if (el.scrollHeight - el.scrollTop - el.clientHeight <= threshold) {\n this.loadMore(false);\n }\n }\n\n /**\n * Reset and re-fetch the first page when the search text changes in lazy\n * mode (debounced so we don't fire a request on every keystroke).\n */\n private reloadLazySearch(): void {\n clearTimeout(this._searchDebounce);\n this._searchDebounce = setTimeout(() => {\n this.filteredOptions = [];\n this.canLoadMore = true;\n this.loadMore(false);\n }, 300);\n }\n \n /**\n * Handle option selection\n */\n selectOption(option: SelectOption): void {\n this.option = option;\n const optionValue = this.returnOption ? option : this.getOptionValue(option);\n \n if (this.isMultiselect) {\n this.toggleMultiselectOption(optionValue);\n } else {\n this.selectModel = optionValue;\n this.isOpen = false;\n // Update search input value for search type\n if (this.leadingType === 'search') {\n this.searchInputValue = this.getOptionDisplay(option);\n }\n }\n \n this.emitChange();\n this.updateDisplay();\n }\n \n /**\n * Toggle option in multiselect mode\n */\n private toggleMultiselectOption(value: any): void {\n if (!Array.isArray(this.selectModel)) {\n this.selectModel = [];\n }\n \n const index = this.getElementIndex(value);\n \n if (index < 0) {\n this.selectModel.push(value);\n } else {\n this.selectModel.splice(index, 1);\n }\n \n this.updateLabel();\n }\n \n /**\n * Check if option is selected\n */\n isSelected(option: SelectOption): boolean {\n if (this.isModelEmpty()) {\n return false;\n }\n \n const optionId = this.getId(option);\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n return this.selectModel.findIndex(el => this.getId(el as SelectOption) === optionId) >= 0;\n } else {\n return this.getId(this.selectModel as SelectOption) === optionId;\n }\n }\n \n /**\n * Get display text for option\n */\n getOptionDisplay(option: any): string {\n if (typeof option === 'object' && option !== null) {\n if (this.displayProp) {\n const combinedProps = this.displayProp.split(\"|\")\n .map(i => this.getRecursiveProperty(option, i))\n .filter(v => v) // Filter out null values\n .join(\" \");\n return combinedProps || '';\n } else {\n console.error('App-Select: when using objects as model, a displayProp value is mandatory.');\n return \"\";\n }\n }\n return String(option);\n }\n \n /**\n * Alias for getOptionDisplay for backward compatibility\n */\n public getName(option: string | object): string {\n return this.getOptionDisplay(option);\n }\n \n \n /**\n * Get value for option (using idProp)\n */\n getOptionValue(option: SelectOption): string | number {\n return this.getId(option);\n }\n \n /**\n * Get id value from option\n */\n private getId(option: string | number | object): string | number {\n if (typeof option === 'object' && option !== null) {\n if (this.idProp) {\n return this.getRecursiveProperty(option as Record<string, unknown>, this.idProp);\n } else {\n console.error('App-Select: when using objects as model, a idProp value is mandatory.');\n return \"\";\n }\n } else {\n return option as string | number;\n }\n }\n \n /**\n * Update displayed text\n */\n private updateDisplay(): void {\n if (this.isModelEmpty()) {\n this.selectedDisplay = '';\n this.labelText = '';\n // Also clear search input for search type\n if (this.leadingType === 'search') {\n this.searchInputValue = '';\n }\n return;\n }\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n const option = this.findOptionByValue(this.selectModel[0]);\n this.selectedDisplay = option ? this.getOptionDisplay(option) : '';\n } else {\n this.selectedDisplay = `${this.selectModel.length} selected`;\n }\n // For multiselect search type, show count in search input when closed\n if (this.leadingType === 'search' && !this.searchFocused) {\n this.searchInputValue = this.selectedDisplay;\n }\n } else {\n const option = this.findOptionByValue(this.selectModel);\n this.selectedDisplay = option ? this.getOptionDisplay(option) : '';\n // Also update search input for search type\n if (this.leadingType === 'search' && option) {\n this.searchInputValue = this.getOptionDisplay(option);\n }\n }\n }\n \n /**\n * Find option by value\n */\n private findOptionByValue(value: any): SelectOption | null {\n if (this.returnOption) {\n return this.options.find(opt => opt === value) || null;\n }\n return this.options.find(opt => this.getId(opt) === value) || null;\n }\n \n /**\n * Check if model is empty\n */\n public isModelEmpty(): boolean {\n if (this.isMultiselect) {\n return !Array.isArray(this.selectModel) || !this.selectModel.length;\n } else {\n return this.selectModel === null || this.selectModel === void 0;\n }\n }\n \n /**\n * Get element index in multiselect array\n */\n private getElementIndex(value: any): number {\n if (!Array.isArray(this.selectModel)) return -1;\n \n if (typeof value === 'object') {\n const valueId = this.getId(value);\n return this.selectModel.findIndex(el => this.getId(el as SelectOption) === valueId);\n } else {\n return this.selectModel.indexOf(value);\n }\n }\n \n /**\n * Toggle all options in multiselect\n */\n public toggleAll(): void {\n const modelArray = Array.isArray(this.selectModel) ? this.selectModel : [];\n if (modelArray.length !== this.options.length) {\n this.selectModel = this.options.map((el: SelectOption) => this.returnOption ? el : this.getId(el));\n } else {\n this.selectModel = [];\n }\n \n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n \n /**\n * Toggle Select All option for flat multiselect\n */\n public toggleSelectAll(): void {\n if (this.isAllSelected()) {\n // Deselect all\n this.selectModel = [];\n } else {\n // Select all filtered options\n this.selectModel = this.filteredOptions.map((el: SelectOption) => \n this.returnOption ? el : this.getId(el)\n );\n }\n \n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n \n /**\n * Check if all filtered options are selected\n */\n public isAllSelected(): boolean {\n if (!this.isMultiselect || !Array.isArray(this.selectModel)) {\n return false;\n }\n \n if (this.filteredOptions.length === 0) {\n return false;\n }\n \n // Check if all filtered options are in the selectModel\n return this.filteredOptions.every(option => {\n const optionId = this.getId(option);\n return this.selectModel.some((selected: any) => {\n const selectedId = this.returnOption ? this.getId(selected) : selected;\n return selectedId === optionId;\n });\n });\n }\n \n /**\n * Get recursive property from nested object\n */\n private getRecursiveProperty(object: Record<string, unknown>, path: string): string | number {\n return path.split('.').reduce((obj, x) => {\n if (obj && typeof obj === 'object' && x in obj) {\n return (obj as Record<string, unknown>)[x];\n } else {\n return null;\n }\n }, object as unknown) as string | number;\n }\n \n /**\n * Update label text\n */\n public updateLabel(): void {\n if (this.isModelEmpty()) {\n this.labelText = '';\n return;\n }\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n const selectedCount = this.selectModel.length;\n \n if (selectedCount === 1) {\n this.labelText = this.getNameFromValue(this.selectModel[0]);\n } else {\n this.labelText = `${selectedCount} Selected`;\n }\n } else {\n this.labelText = this.getNameFromValue(this.selectModel);\n }\n }\n \n /**\n * Get name from value\n */\n public getNameFromValue(val: any): string {\n if (this.returnOption) {\n return this.getOptionDisplay(val as SelectOption);\n } else {\n if (this.isLazyLoading) {\n const opt = this.filteredOptions?.find(i => this.getId(i) == val);\n return opt ? this.getOptionDisplay(opt) : String(val);\n } else {\n if (!this.options || !this.options.length) {\n return '';\n }\n let option = this.options.find(el => this.getId(el) === val);\n return this.getOptionDisplay(option ?? val as SelectOption);\n }\n }\n }\n \n /**\n * Emit change event\n */\n private emitChange(): void {\n // notify with timeout\n // allow output property \"enabled\" applied by parent first and then emit the onChange\n setTimeout(() => {\n this.selectModelChange.emit(this.selectModel);\n }, 1);\n }\n \n /**\n * Filter options based on search\n */\n filterOptions(): void {\n // In lazy mode the filteredOptions are managed by loadMore(), not derived\n // from the static options array — leave them untouched here.\n if (this.isLazyLoading) {\n return;\n }\n if (!this.searchText) {\n this.filteredOptions = [...this.options];\n return;\n }\n\n const searchLower = this.searchText.toLowerCase();\n this.filteredOptions = this.options.filter(option => {\n const display = this.getOptionDisplay(option).toLowerCase();\n return display.includes(searchLower);\n });\n\n }\n \n /**\n * Handle search input\n */\n onSearchChange(): void {\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n\n clearSearch(): void {\n this.searchText = '';\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n \n /**\n * Handle search input change for search type\n */\n onSearchInputChange(): void {\n this.searchText = this.searchInputValue;\n if (!this.isOpen && this.searchInputValue) {\n this.isOpen = true;\n }\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n \n /**\n * Handle search input focus\n */\n onSearchFocus(): void {\n this.searchFocused = true;\n // Clear the search input when focused so user can type fresh\n this.searchInputValue = '';\n this.searchText = '';\n // Open dropdown to show all options\n this.isOpen = true;\n // Reset filtered options to show all\n this.filterOptions();\n }\n \n /**\n * Handle search input blur\n */\n onSearchBlur(event: FocusEvent): void {\n // Don't close immediately if clicking on dropdown\n setTimeout(() => {\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (!relatedTarget || !this.elementRef.nativeElement.contains(relatedTarget)) {\n this.searchFocused = false;\n if (!this.isOpen) {\n this.searchInputValue = this.selectedDisplay;\n }\n }\n }, 200);\n }\n \n /**\n * Get selected option for leading display\n */\n getSelectedOption(): SelectOption | null {\n if (this.isModelEmpty()) return null;\n\n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n return this.findOptionByValue(this.selectModel[0]);\n }\n return null;\n }\n\n return this.findOptionByValue(this.selectModel);\n }\n \n /**\n * Get selected secondary text for display\n */\n getSelectedSecondaryText(): string | null {\n if (!this.selectModel) return null;\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n const option = this.findOptionByValue(this.selectModel[0]);\n return option?.secondaryText || null;\n }\n // For multiple selection, we won't show secondary text to avoid confusion\n return null; \n }\n \n const option = this.findOptionByValue(this.selectModel);\n return option?.secondaryText || null;\n }\n \n /**\n * Close dropdown on outside click\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.hideDropDown(true);\n }\n }\n \n /**\n * Hide dropdown\n */\n public async hideDropDown(userAction: boolean = false): Promise<void> {\n // Only emit closed event if it was open AND triggered by user action\n if (userAction && this.isOpen) {\n this.closed.emit(this.selectModel);\n }\n \n this.isOpen = false;\n }\n \n /**\n * Handle Enter key on search input\n */\n onSearchEnter(event: Event): void {\n event.preventDefault();\n if (this.enableAddNewOption && this.filteredOptions.length === 0 && (this.searchText || this.searchInputValue)?.trim()) {\n this.handleAddNewOption();\n }\n }\n\n /**\n * Handle add new option\n */\n public handleAddNewOption(): void {\n this.addNewOption.emit({ value: this.searchText || this.searchInputValue });\n this.searchText = '';\n this.searchInputValue = '';\n this.filterOptions();\n this.hideDropDown(true);\n }\n \n /**\n * Handle remove option\n */\n public handleRemoveOption(): void {\n this.removeOption.emit({ removed: true });\n this.hideDropDown(true);\n }\n \n /**\n * Get state classes\n */\n getStateClasses(): string {\n const classes = ['app-select-container'];\n\n if (this.size) classes.push(`size-${this.size}`);\n if (this.isOpen) classes.push('open');\n if (this.disabled) classes.push('disabled');\n if (this.error) classes.push('error');\n if (this.destructive) classes.push('destructive');\n if (this.label) classes.push('with-label');\n if (this.supportingText) classes.push('with-supporting');\n \n return classes.join(' ');\n }\n \n /**\n * Load more items for lazy loading\n */\n public async loadMore(showSelectedOnTop: boolean): Promise<void> {\n try {\n this.isLoadingNow = true;\n if (!this.lazyLoader) {\n throw `loader is not available`;\n }\n if (!this.filteredOptions) {\n this.filteredOptions = [];\n }\n \n // load first 10 records for the first time\n const limit = (this.filteredOptions.length == 0) ? 10 : 100;\n let newItems: LazyLoaderResult[] = await this.lazyLoader({ text: this.searchText || \"\" }, this.filteredOptions.length, limit);\n \n this.canLoadMore = (newItems.length == limit);\n \n // the selectModel contains the selected items ids \n const checkedIds = Array.isArray(this.selectModel) \n ? this.selectModel.map(item => String(this.getId(item as SelectOption)))\n : [];\n \n if (showSelectedOnTop && checkedIds?.length) {\n // remove the checked items first\n this.filteredOptions = this.filteredOptions.filter(i => !checkedIds.includes(String(this.getId(i))));\n newItems = newItems.filter(i => !checkedIds.includes(String(i.id)));\n \n // add all checked items to the top\n const checkedItems: LazyLoaderResult[] = await this.lazyLoader({ ids: checkedIds }, 0, 100);\n this.filteredOptions = [...(checkedItems as SelectOption[]), ...this.filteredOptions];\n \n this.updateLabel();\n }\n \n // the filteredDataSource contains the items that is visible to user at the current moment\n this.filteredOptions = [...this.filteredOptions, ...(newItems as SelectOption[])];\n } catch (err) {\n console.error(err);\n } finally {\n this.isLoadingNow = false;\n }\n }\n\n /**\n * Initialize tree data by syncing selectModel IDs to DataSource checked flags\n */\n private initTreeData(): void {\n if (!this.isTreeMode || !this.options?.length) return;\n const selectedIds = new Set(\n Array.isArray(this.selectModel)\n ? this.selectModel.map(v => String(typeof v === 'object' ? this.getId(v) : v))\n : []\n );\n (this.options as any[]).forEach(opt => {\n opt.checked = selectedIds.has(String(opt[this.idProp]));\n });\n this.treeFilteredDataSource = [...this.options] as DataSource[];\n this.updateTreeSelectAllState();\n }\n\n /**\n * Handle checked change from zen-groups in tree mode\n */\n public onTreeCheckedChange(dsItem: DataSource): void {\n const checkedItems = (this.options as any[]).filter(opt => opt.checked);\n this.selectModel = checkedItems.map(opt =>\n this.returnOption ? opt : opt[this.idProp]\n );\n this.updateTreeSelectAllState();\n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n\n /**\n * Handle select all change from zen-groups in tree mode\n */\n public onTreeSelectAllChange(isSelectedAll: boolean): void {\n this.isSelectedAll = isSelectedAll;\n const checkedItems = (this.options as any[]).filter(opt => opt.checked);\n this.selectModel = checkedItems.map(opt =>\n this.returnOption ? opt : opt[this.idProp]\n );\n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n\n /**\n * Update the isSelectedAll flag based on current checked state\n */\n private updateTreeSelectAllState(): void {\n if (!this.options?.length) return;\n this.isSelectedAll = (this.options as any[]).every(opt => opt.checked);\n }\n\n}","<div [class]=\"getStateClasses()\">\n <!-- Label -->\n @if (label) {\n <label class=\"app-select-label text text-sm text-weight-medium\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n @if (required) {\n <span class=\"required-indicator\">*</span>\n }\n </label>\n }\n\n <!-- Select Input -->\n <div class=\"app-select-wrapper\">\n <!-- Custom Trigger Template (overrides built-in trigger) -->\n @if (buttonTemplate) {\n <div\n class=\"app-select-custom-trigger\"\n (click)=\"toggleDropdown()\">\n <ng-template [ngTemplateOutlet]=\"buttonTemplate.template\"\n [ngTemplateOutletContext]=\"{ isOpen: isOpen, selected: getSelectedOption(), display: selectedDisplay, disabled: disabled }\">\n </ng-template>\n </div>\n }\n\n <!-- Built-in Trigger (when no custom button template provided) -->\n @if (!buttonTemplate) {\n @switch (leadingType) {\n <!-- Default Select (no leading element) -->\n @case ('default') {\n <ng-container *ngTemplateOutlet=\"defaultSelectTemplate\"></ng-container>\n }\n <!-- Icon Leading Select -->\n @case ('icon') {\n <ng-container *ngTemplateOutlet=\"iconSelectTemplate\"></ng-container>\n }\n <!-- Avatar Leading Select -->\n @case ('avatar') {\n <ng-container *ngTemplateOutlet=\"avatarSelectTemplate\"></ng-container>\n }\n <!-- Dot Leading Select -->\n @case ('dot') {\n <ng-container *ngTemplateOutlet=\"dotSelectTemplate\"></ng-container>\n }\n <!-- Search Input Select -->\n @case ('search') {\n <ng-container *ngTemplateOutlet=\"searchInputTemplate\"></ng-container>\n }\n }\n }\n\n <!-- Dropdown Menu -->\n @if (isOpen) {\n <div class=\"app-select-dropdown\"\n [ngClass]=\"getDropdownDirectionClass()\"\n >\n <!-- Tree Mode: embed zen-groups inline -->\n @if (isTreeMode && isMultiselect) {\n <zen-groups [inline]=\"true\"\n [dataSource]=\"$any(options)\"\n [filteredDataSource]=\"treeFilteredDataSource\"\n [hideSelectAll]=\"hideSelectAll\"\n [hideSearch]=\"hideTreeSearch\"\n [idProp]=\"idProp\"\n [displayProp]=\"displayProp\"\n [(isSelectedAll)]=\"isSelectedAll\"\n (isSelectedAllChange)=\"onTreeSelectAllChange($event)\"\n (checkedChange)=\"onTreeCheckedChange($event)\">\n </zen-groups>\n } @else {\n <!-- Search Box for hasSearch (not for search type as it has inline search) -->\n @if (leadingType !== 'search' && hasSearch && !disabled) {\n <div class=\"app-select-search\">\n <zen-icon [name]=\"'search'\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange()\"\n (keydown.enter)=\"onSearchEnter($event)\"\n placeholder=\"Search\"\n class=\"app-select-search-input\">\n @if (searchText) {\n <zen-icon\n class=\"app-select-search-clear\"\n [name]=\"'x'\"\n [customColor]=\"'#667085'\"\n (click)=\"clearSearch(); $event.stopPropagation()\">\n </zen-icon>\n }\n </div>\n }\n <!-- Options List -->\n <div class=\"app-select-options\" (scroll)=\"onOptionsScroll($event)\">\n <!-- Select All Option for Multiselect -->\n @if (isMultiselect && !hideSelectAll && !isLazyLoading && filteredOptions.length > 0) {\n <button\n class=\"app-select-option select-all\"\n (click)=\"toggleSelectAll()\">\n <zen-checkbox class=\"app-select-checkbox\"\n [checked]=\"isAllSelected()\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n <span class=\"app-select-option-text\">\n Select All\n </span>\n </button>\n }\n <!-- Add New Option -->\n @if (enableAddNewOption && (showDefaultAddOption || searchText)) {\n <button\n class=\"app-select-option add-new-option\"\n (click)=\"handleAddNewOption(); $event.stopPropagation()\">\n <zen-icon [name]=\"'plus'\" [customColor]=\"'#136AB6'\"></zen-icon>\n <span class=\"app-select-option-text\">\n {{ (newOptionText || 'Add New Option') + (searchText ? ': \"' + searchText + '\"' : '') }}\n </span>\n </button>\n }\n <!-- Remove Option -->\n @if (enableRemoveOption) {\n <button\n class=\"app-select-option remove-option\"\n (click)=\"handleRemoveOption(); $event.stopPropagation()\">\n <zen-icon [name]=\"'user-x'\" [customColor]=\"'#344054'\"></zen-icon>\n <span class=\"app-select-option-text\">\n {{ removeOptionText || 'Remove' }}\n </span>\n </button>\n }\n @if (filteredOptions.length === 0 && !enableAddNewOption && !isLoadingNow) {\n <div class=\"app-select-no-options\">\n No matching options found\n </div>\n }\n @for (option of filteredOptions; track option) {\n <button\n class=\"app-select-option\"\n [class.selected]=\"isSelected(option)\"\n (click)=\"selectOption(option)\">\n <!-- Checkbox for Multiselect -->\n @if (isMultiselect) {\n <zen-checkbox class=\"app-select-checkbox\"\n [checked]=\"isSelected(option)\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n }\n <!-- Option Leading Element -->\n @if (leadingType !== 'default') {\n <div class=\"app-select-option-leading\">\n @switch (leadingType) {\n @case ('icon') {\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: option }\"></ng-container>\n }\n @case ('avatar') {\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: option }\"></ng-container>\n }\n @case ('dot') {\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: option }\"></ng-container>\n }\n }\n </div>\n }\n <!-- Option Text -->\n <div class=\"app-select-option-text-wrapper\">\n <!-- Use custom template if provided -->\n @if (!isMultiselect && optionTemplate) {\n <ng-template [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n } @else {\n <span class=\"app-select-option-text\" [class.app-select-option-truncate]=\"isTruncate\">\n {{ getName(option) | translate }}\n </span>\n @if (option.secondaryText) {\n <span class=\"app-select-option-secondary\">\n {{ option.secondaryText }}\n </span>\n }\n }\n </div>\n <!-- Check Icon for Single Select -->\n @if (!isMultiselect && isSelected(option)) {\n <zen-icon\n class=\"app-select-option-check\"\n [name]=\"'check'\"\n [customColor]=\"'#136AB6'\">\n </zen-icon>\n }\n </button>\n }\n <!-- Lazy loading spinner -->\n @if (isLazyLoading && isLoadingNow) {\n <div class=\"app-select-loading\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n }\n </div>\n }\n <!-- Flat List Mode (default) -->\n </div>\n }\n </div>\n\n <!-- Hint text / Error message -->\n @if ((destructive && errorMessage) || hintText) {\n <div\n class=\"app-select-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n @if (destructive) {\n <i class=\"material-icons-outlined hint-icon\">error_outline</i>\n }\n <span>{{ ((destructive && errorMessage) ? errorMessage : hintText) | translate }}</span>\n </div>\n }\n</div>\n\n<!-- ============================================= -->\n<!-- MAIN SELECT INPUT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Default Select Template (No Leading Element) -->\n<ng-template #defaultSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Icon Select Template -->\n<ng-template #iconSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: getSelectedOption(), icon: leadingIcon }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Avatar Select Template -->\n<ng-template #avatarSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: getSelectedOption(), avatar: leadingAvatar }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Dot Select Template -->\n<ng-template #dotSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: getSelectedOption(), color: leadingDotColor }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Search Input Template -->\n<ng-template #searchInputTemplate>\n <div class=\"app-select-input app-select-search-input\"\n [class.focused]=\"isOpen || searchFocused\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <!-- Search Icon -->\n <zen-icon [name]=\"'search'\"\n [customColor]=\"disabled ? '#9CA3AF' : '#667085'\">\n </zen-icon>\n\n <!-- Search Input Field -->\n <input type=\"text\"\n class=\"app-select-search-field\"\n [(ngModel)]=\"searchInputValue\"\n (ngModelChange)=\"onSearchInputChange()\"\n (keydown.enter)=\"onSearchEnter($event)\"\n (focus)=\"onSearchFocus()\"\n (blur)=\"onSearchBlur($event)\"\n [placeholder]=\"selectedDisplay || placeholder\"\n [disabled]=\"disabled\">\n </div>\n</ng-template>\n\n<!-- ============================================= -->\n<!-- SHARED COMPONENT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Select Value Display -->\n<ng-template #selectValueDisplay>\n <div class=\"app-select-value-wrapper\">\n @if (valueTemplate && !isModelEmpty()) {\n <ng-template [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: getSelectedOption(), display: selectedDisplay }\">\n </ng-template>\n } @else {\n <span class=\"app-select-value\" [class.placeholder]=\"isModelEmpty()\">\n {{ selectedDisplay || placeholder | translate }}\n </span>\n @if (getSelectedSecondaryText() && !isModelEmpty()) {\n <span class=\"app-select-secondary\">\n {{ getSelectedSecondaryText() }}\n </span>\n }\n }\n </div>\n</ng-template>\n\n<!-- Dropdown Arrow -->\n<ng-template #dropdownArrow>\n <zen-icon class=\"app-select-arrow\"\n [class.rotated]=\"isOpen\"\n [name]=\"'chevron-down'\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n</ng-template>\n\n<!-- ============================================= -->\n<!-- LEADING ELEMENT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Icon Leading Element (with smart resolution) -->\n<ng-template #iconLeadingElement let-option=\"option\" let-icon=\"icon\">\n @if (icon || option?.icon || option?.iconName) {\n @if (getIconPath(option, icon); as iconPath) {\n <!-- If icon contains / or . treat as SVG path -->\n @if ((icon && (icon.includes('/') || icon.includes('.'))) ||\n (option?.icon && (option.icon.includes('/') || option.icon.includes('.'))) ||\n (option?.iconName && (option.iconName.includes('/') || option.iconName.includes('.')))) {\n <!-- Use img tag for Excel to preserve colors -->\n @if (iconPath.includes('excel')) {\n <img\n [src]=\"iconPath\"\n alt=\"\"\n style=\"width: 20px; height: 20px;\">\n }\n <!-- Use zen-icon with src for other SVG files -->\n @if (!iconPath.includes('excel')) {\n <zen-icon\n [src]=\"iconPath\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n }\n }\n <!-- Otherwise treat as Material icon name or special cases -->\n @if (!((icon && (icon.includes('/') || icon.includes('.'))) ||\n (option?.icon && (option.icon.includes('/') || option.icon.includes('.'))) ||\n (option?.iconName && (option.iconName.includes('/') || option.iconName.includes('.'))))) {\n <!-- Special case for Excel icon - use img to preserve colors -->\n @if ((icon === 'excel') || (option?.icon === 'excel') || (option?.iconName === 'excel')) {\n <img\n src=\"assets/ng-zenduit/icons/excel.svg\"\n alt=\"Excel\"\n style=\"width: 20px; height: 20px;\">\n }\n <!-- Material icon names -->\n @if ((icon !== 'excel') && (option?.icon !== 'excel') && (option?.iconName !== 'excel')) {\n <zen-icon\n [name]=\"icon || option?.icon || option?.iconName\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n }\n }\n }\n }\n</ng-template>\n\n<!-- Avatar Leading Element -->\n<ng-template #avatarLeadingElement let-option=\"option\" let-avatar=\"avatar\">\n @if (avatar || option?.avatar) {\n <div class=\"app-select-avatar\" >\n <img [src]=\"avatar || option?.avatar\" alt=\"\">\n </div>\n }\n</ng-template>\n\n<!-- Dot Leading Element -->\n<ng-template #dotLeadingElement let-option=\"option\" let-color=\"color\">\n <div class=\"app-select-dot\"\n [style.background-color]=\"color || option?.dotColor || '#10B981'\">\n </div>\n</ng-template>","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { PageItem } from './pageItem';\n\n@Component({\n selector: 'zen-pagination-bar',\n templateUrl: './zendu-pagination-bar.component.html',\n styleUrls: ['./zendu-pagination-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduPaginationBarComponent implements OnChanges {\n @Input() page = 1;\n @Input() perPage = 10;\n @Input() count = 0;\n @Input() perPageOptions: number[] = [10, 20, 30, 40, 50];\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() perPageChange = new EventEmitter<number>();\n\n public totalPages = 1;\n public pages: PageItem[] = [];\n public rangeStart = 0;\n public rangeEnd = 0;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['count'] || changes['perPage'] || changes['page']) {\n this.recalculate();\n }\n }\n\n public goToPage(target: number): void {\n const clamped = Math.min(Math.max(1, target), this.totalPages);\n if (clamped === this.page) {\n return;\n }\n this.page = clamped;\n this.recalculate();\n this.pageChange.emit(this.page);\n }\n\n public onPerPageChange(value: number): void {\n this.perPage = value;\n this.page = 1;\n this.recalculate();\n this.perPageChange.emit(this.perPage);\n this.pageChange.emit(this.page);\n }\n\n private recalculate(): void {\n this.totalPages = Math.max(1, Math.ceil((this.count || 0) / (this.perPage || 1)));\n this.pages = this.buildPages(this.page, this.totalPages);\n this.rangeStart = this.count === 0 ? 0 : (this.page - 1) * this.perPage + 1;\n this.rangeEnd = Math.min(this.page * this.perPage, this.count);\n }\n\n private buildPages(current: number, total: number): PageItem[] {\n const result: PageItem[] = [];\n const push = (p: number) => result.push({ kind: 'page', page: p, active: p === current });\n\n if (total <= 7) {\n for (let i = 1; i <= total; i++) {\n push(i);\n }\n return result;\n }\n\n const window = new Set<number>([1, total, current - 1, current, current + 1]);\n if (current <= 3) {\n window.add(2).add(3);\n }\n if (current >= total - 2) {\n window.add(total - 1).add(total - 2);\n }\n\n const sorted = Array.from(window)\n .filter((p) => p >= 1 && p <= total)\n .sort((a, b) => a - b);\n\n let prev = 0;\n for (const p of sorted) {\n if (p - prev > 1) {\n result.push({ kind: 'ellipsis' });\n }\n push(p);\n prev = p;\n }\n return result;\n }\n}\n","<div class=\"pagination-component\">\n <p class=\"results-text\">\n {{ \"Showing\" | translate }} {{ rangeStart }} - {{ rangeEnd }}\n {{ \"of\" | translate }} {{ count }} {{ \"results\" | translate }}\n </p>\n\n <div class=\"page-navigation\">\n <zen-button\n buttonType=\"button-icon-only\"\n variant=\"tertiary-gray\"\n size=\"md\"\n icon=\"chevron-left\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPage(page - 1)\">\n </zen-button>\n\n <div class=\"pages\">\n @for (item of pages; track item; let i = $index) {\n @if (item.kind === 'page') {\n <button\n type=\"button\"\n class=\"page-btn\"\n [class.is-active]=\"item.active\"\n (click)=\"goToPage(item.page)\">\n {{ item.page }}\n </button>\n }\n @if (item.kind === 'ellipsis') {\n <span class=\"page-ellipsis\">…</span>\n }\n }\n </div>\n\n <zen-button\n buttonType=\"button-icon-only\"\n variant=\"tertiary-gray\"\n size=\"md\"\n icon=\"chevron-right\"\n [disabled]=\"page >= totalPages\"\n (click)=\"goToPage(page + 1)\">\n </zen-button>\n </div>\n\n <div class=\"rows-per-page\">\n <span class=\"rows-label\">{{ \"Rows per page\" | translate }}</span>\n <zen-select\n size=\"sm\"\n [options]=\"perPageOptions\"\n [(selectModel)]=\"perPage\"\n (selectModelChange)=\"onPerPageChange($event)\"\n preferredOpenDirection=\"up\">\n </zen-select>\n </div>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\n@Component({\n selector: 'zen-phone-input',\n templateUrl: './zendu-phone-input.component.html',\n styleUrls: ['./zendu-phone-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduPhoneInputComponent implements OnInit, OnChanges {\n\n @ViewChild('input') inputElement: ElementRef<HTMLInputElement>;\n\n @Input() phone: string;\n\n @Input() maxLength: number = 12;\n\n @Output() phoneChange = new EventEmitter<string>();\n\n @Output() validChange = new EventEmitter<boolean>();\n\n @Input() disabled = false;\n\n @Input() width: string;\n\n public phoneText = \"\";\n\n public countryList: { countryCode: string, countryName: string, countryCallingCode: string, flag: string }[] = [\n {\n countryCode: \"US\",\n countryName: \"America\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/USA.svg\"\n },\n {\n countryCode: \"CA\",\n countryName: \"Canada\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Canada.svg\"\n },\n {\n countryCode: \"MX\",\n countryName: \"Mexico\",\n countryCallingCode: \"+52\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Mexico.svg\"\n }\n ];\n\n public customCountry = {\n countryCode: \"\",\n countryName: \"Custom\",\n countryCallingCode: \"\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Custom.svg\"\n };\n\n public selectedCountry: { countryCode: string, countryName: string, countryCallingCode: string, flag: string };\n\n public isExpanded = false;\n\n public constructor() {\n this.selectedCountry = this.countryList[1];\n }\n\n public ngOnInit(): void {\n this.parseNumber();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"phone\"] && (!this.selectedCountry || !this.selectedCountry.countryCode)) {\n this.parseNumber();\n }\n }\n\n public parseNumber(): void {\n try {\n this.phoneText = this.phone || '';\n\n if (this.phone) {\n const countryFromList = this.countryList.find(country => this.phone.startsWith(country.countryCallingCode) || `+${this.phone}`.startsWith(country.countryCallingCode));\n if (countryFromList) {\n this.selectedCountry = countryFromList || this.customCountry;\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n const parsedPhone = phoneNumberUtil.parse(this.phone || \"\", 'US');\n setTimeout(() => {\n if (this.phoneText.startsWith('+')) {\n this.phoneText = this.phoneText.replace(`+${parsedPhone.getCountryCode()}`, \"\");\n } else if (this.phoneText.startsWith(parsedPhone.getCountryCode())) {\n this.phoneText = this.phoneText.replace(parsedPhone.getCountryCode(), \"\");\n }\n this.phoneChanged();\n });\n } else {\n this.selectedCountry = this.customCountry; \n }\n } else {\n this.selectedCountry = this.customCountry;\n }\n } catch (err) {\n console.warn(`Can't parse phone: ${this.phone}`, err);\n this.selectedCountry = this.customCountry;\n }\n }\n\n public countryChanged(country): void {\n this.isExpanded = false;\n this.selectedCountry = country;\n this.phoneChanged();\n }\n\n public phoneChanged(input?: HTMLInputElement): void {\n \n // allow + in custom country\n let custom = false;\n if (this.selectedCountry === this.customCountry && this.phoneText.includes('+')) {\n custom = true;\n }\n \n const phoneText = (this.phoneText || '').replace(/\\D/g, '');\n this.phoneText = custom ? `+${phoneText}`: phoneText\n if (input && input.value !== this.phoneText) {\n input.value = this.phoneText;\n }\n const fullNumber = `${this.selectedCountry.countryCallingCode}${this.phoneText}`;\n if (this.phone !== fullNumber) {\n this.phoneChange.emit(fullNumber);\n }\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n if (this.selectedCountry === this.customCountry) {\n this.validChange.emit(true);\n } else {\n try {\n this.validChange.emit(phoneNumberUtil.isValidNumber(phoneNumberUtil.parseAndKeepRawInput(fullNumber)));\n } catch {\n this.validChange.emit(false);\n }\n }\n }\n\n public hideDropDown(): void {\n this.isExpanded = false;\n }\n\n public toggle() {\n if (this.disabled) {\n return;\n }\n this.isExpanded = !this.isExpanded;\n }\n\n public focusInput(): void {\n if (this.inputElement) {\n this.inputElement.nativeElement.focus();\n }\n }\n}\n","<div class=\"zen-input-container\" [style.width]=\"width\">\n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n\n <!-- Leading dropdown: Country selector -->\n <div class=\"zen-input-leading-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggle(); $event.stopPropagation()\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"selectedCountry.flag\"\n [alt]=\"selectedCountry.countryName\">\n <span class=\"dropdown-label\">{{ selectedCountry.countryCallingCode }}</span>\n <i class=\"material-icons dropdown-icon\"\n [ngClass]=\"{'active': isExpanded}\">expand_more</i>\n </button>\n </div>\n\n <!-- Phone input field -->\n <input #input\n class=\"zen-input-field text text-md text-weight-regular\"\n type=\"text\"\n [(ngModel)]=\"phoneText\"\n (ngModelChange)=\"phoneChanged(input)\"\n (click)=\"isExpanded = false\"\n [disabled]=\"disabled\"\n country-code=\"selectedCountry.countryCode\"\n [maxlength]=\"maxLength\">\n </div>\n\n <!-- Country dropdown menu -->\n @if (isExpanded) {\n <div class=\"zen-dropdown-menu\"\n [ngClass]=\"{'open': isExpanded}\">\n <!-- Countries List -->\n @for (country of countryList; track country) {\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': selectedCountry.countryName === country.countryName}\"\n (click)=\"countryChanged(country)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"country.flag\"\n [alt]=\"country.countryName\">\n <span class=\"zen-phone-country-name\">{{ country.countryName }}</span>\n <span class=\"zen-phone-country-code\">{{ country.countryCallingCode }}</span>\n </button>\n }\n <!-- Custom Country -->\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"countryChanged(customCountry)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"customCountry.flag\"\n [alt]=\"customCountry.countryName\">\n <span class=\"zen-phone-country-name\">{{ customCountry.countryName }}</span>\n <span class=\"zen-phone-country-code\">{{ customCountry.countryCallingCode }}</span>\n </button>\n </div>\n }\n</div>\n\n<!-- Click outside handler for dropdown -->\n@if (isExpanded) {\n <div\n class=\"zen-dropdown-backdrop\"\n (click)=\"hideDropDown()\"></div>\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-sort',\n templateUrl: './zendu-sort-header.component.html',\n styleUrls: ['./zendu-sort-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSortHeaderComponent {\n\n @Input() sort!: 'asc' | 'desc' | '';\n\n @Output() sortChange = new EventEmitter<'asc' | 'desc'>();\n\n @Input() active!: boolean;\n\n public toggleSort() {\n switch (this.sort) {\n case 'asc':\n this.sort = 'desc';\n this.sortChange.emit(this.sort);\n break;\n case 'desc':\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n break;\n default:\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n }\n }\n}\n","<div class=\"sort-option\"\n (click)=\"toggleSort()\">\n <zen-icon class=\"sort-icon\"\n [class.sort-icon-active]=\"active\"\n [class.sort-icon-asc]=\"active && sort === 'asc'\"\n src=\"assets/ng-zenduit/icons/arrow-down.svg\"></zen-icon>\n</div>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle',\n templateUrl: './zendu-toggle.component.html',\n styleUrls: ['./zendu-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduToggleComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() disabled = false;\n\n @Input() label = '';\n\n @Input() supportingText = '';\n\n /**\n * Toggle state\n */\n public toggle() {\n if (this.disabled) return;\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<div class=\"zen-toggle-wrapper\"\n [class.zen-toggle--sm]=\"size === 'sm'\"\n [class.zen-toggle--md]=\"size === 'md'\"\n [class.zen-toggle--has-text]=\"label\">\n\n <button class=\"zen-toggle-track\"\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"enabled\"\n [attr.aria-disabled]=\"disabled\"\n [class.zen-toggle--active]=\"enabled\"\n [class.zen-toggle--disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\">\n <span class=\"zen-toggle-knob\"></span>\n </button>\n\n @if (label) {\n <div class=\"zen-toggle-text\">\n <span class=\"zen-toggle-label\">{{label}}</span>\n @if (supportingText) {\n <span class=\"zen-toggle-supporting\">{{supportingText}}</span>\n }\n </div>\n }\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-card-block',\n templateUrl: './zendu-card-block.component.html',\n styleUrls: ['./zendu-card-block.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduCardBlockComponent {\n\n @Input() icon: string;\n\n @Input() title: string;\n\n @Input() text: string;\n\n @Input() selected: boolean;\n\n}\n","<div class=\"component\">\n @if (icon) {\n <zen-icon\n [src]=\"icon\"></zen-icon>\n }\n\n <div class=\"title\">\n {{title}}\n </div>\n <div class=\"text\">\n {{text}}\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-map-preview',\n templateUrl: './zendu-map-preview.component.html',\n styleUrls: ['./zendu-map-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduMapPreviewComponent implements OnChanges {\n\n @Input() lat: number;\n\n @Input() lng: number;\n\n @Input() apiKey: string;\n\n public source = \"\";\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && this.lat && this.lng) {\n this.source = `https://image.maps.ls.hereapi.com/mia/1.6/mapview?apiKey=${this.apiKey}&c=${this.lat},${this.lng}` +\n `&z=14&w=222&h=80&&base=reduced.night&incidents=off&traffic=off`;\n }\n else {\n this.source = \"\";\n }\n }\n\n}\n","<div class=\"component\"\n [ngStyle]=\"{ 'background-image': 'url('+source+')' }\">\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n\n}","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScriptLoader {\n\n private static _loadedLibs: string[] = [];\n\n private static _lock = new LocalLock();\n\n public async loadScript(lib: \"flv\" | \"opencv\" | \"jscanify\") {\n try {\n await ScriptLoader._lock.lock();\n\n if (ScriptLoader._loadedLibs.includes(lib)) {\n // already loaded\n return;\n }\n\n console.log(`load library \"${lib}\"...`)\n\n // Storage bucket available here:\n // https://console.cloud.google.com/storage/browser/ng-zenduit/scripts?project=zendu-one\n\n let src = \"\";\n switch (lib) {\n case \"flv\":\n // load open cv script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/flv.js\");\n await this.waitInitalization(\"flvjs\");\n break;\n case \"opencv\":\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/opencv_4.7.0.js\");\n await this.waitInitalization(\"cv\");\n break;\n case \"jscanify\":\n // load jscanify script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/jscanify_1.2.0.js\");\n await this.waitInitalization(\"jscanify\");\n break;\n default:\n throw `unknown lib \"${lib}\"`\n }\n\n console.log(`Library \"${lib}\" loaded`)\n\n ScriptLoader._loadedLibs.push(lib);\n }\n finally {\n ScriptLoader._lock.release();\n }\n }\n\n private loadScriptBySrc(src: string) {\n const script = <HTMLScriptElement>document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n\n script.src = src;\n // insert script to document\n const node = document.getElementsByTagName('script')[0];\n if (node) {\n node.parentNode.insertBefore(script, node);\n } else {\n document.head.appendChild(script);\n }\n }\n\n private async waitInitalization(globalVarName: string) {\n\n const timeout = Date.now() + 60000;\n\n // wait cv first\n while (true) {\n if (window[globalVarName]) {\n break;\n }\n await Util.sleep(1000);\n\n if (Date.now() > timeout) {\n throw `Failed initalize OpenCV. Reason: timeout`\n }\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\nimport { ScriptLoader } from './script.loader.service';\n\nexport interface ScanifyCorners {\n topLeftCorner: { x: number, y: number };\n topRightCorner: { x: number, y: number };\n bottomLeftCorner: { x: number, y: number };\n bottomRightCorner: { x: number, y: number };\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenCVService {\n\n private static _isOpenCVLoaded = false;\n\n private static _lock = new LocalLock();\n\n constructor(\n private _scriptLoader: ScriptLoader\n ) { }\n\n /**\n * extract paper from the image\n * @returns\n */\n public async extractPaper(options: {\n src: string;\n height: number;\n width: number;\n corners: ScanifyCorners;\n }): Promise<HTMLCanvasElement> {\n // load open cv\n await this.loadOpenCv();\n\n const htmlImage = await this.loadImage(options.src);\n console.log(\"image is ready\");\n\n const scanner = new window[\"jscanify\"];\n\n return scanner.extractPaper(htmlImage, options.height, options.width, options.corners);\n }\n\n /**\n * Get the paper corners from the specific image\n * @param src\n * @returns\n */\n public async getPaperCorners(src: string, height: number, width: number): Promise<ScanifyCorners> {\n // load opencv\n await this.loadOpenCv();\n\n const cv = this.getCVInternal();\n\n const htmlImage = await this.loadImage(src);\n console.log(\"image is ready\", htmlImage);\n\n const scanner = new window[\"jscanify\"];\n\n const img = cv.imread(htmlImage);\n\n const maxContour = scanner.findPaperContour(img);\n if (!maxContour) {\n return null;\n }\n\n const res = scanner.getCornerPoints(maxContour, img);\n return res;\n }\n\n private loadImage(src: string) {\n return new Promise((resolve) => {\n const image = new Image();\n image.src = src;\n image.onload = function () {\n resolve(image);\n };\n })\n\n }\n\n private async loadOpenCv() {\n try {\n await OpenCVService._lock.lock();\n\n if (OpenCVService._isOpenCVLoaded) {\n return;\n }\n\n console.log(\"load opencv...\");\n\n await Promise.all([\n this._scriptLoader.loadScript(\"opencv\"),\n this._scriptLoader.loadScript(\"jscanify\")\n ]);\n\n console.log(\"OpenCV is ready\")\n\n OpenCVService._isOpenCVLoaded = true;\n }\n finally {\n OpenCVService._lock.release();\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { fabric } from 'fabric';\nimport {\n Component,\n ElementRef,\n Input,\n AfterViewInit,\n ViewChild,\n OnChanges,\n Output,\n EventEmitter,\n SimpleChanges,\n ChangeDetectorRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { OpenCVService } from '../services/opencv.service';\nimport { IText, Transform } from 'fabric/fabric-impl';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'zen-doc-scanner',\n templateUrl: './zendu-doc-scanner.component.html',\n styleUrls: ['./zendu-doc-scanner.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDocScanner implements AfterViewInit, OnChanges {\n @ViewChild('drawCanas') _canvasElement!: ElementRef<HTMLCanvasElement>;\n\n @ViewChild('componentWrapper') _component!: ElementRef<HTMLDivElement>;\n\n @Input() src = '';\n\n @Input() width = 0;\n\n @Input() height = 0;\n\n @Input() isScanStart: boolean = false;\n\n @Input() canAddText: boolean = false;\n\n @Input() canDoodle: boolean = false;\n\n currentStateIndex: number = -1;\n\n isLoading:BehaviorSubject<boolean> =new BehaviorSubject<boolean>(false);\n\n canvasStates: { state: string; customControl: any }[] = [];\n\n isResize: boolean = false;\n initialMouseY: number;\n originalFontSize: number;\n\n @Input() isRedoing: boolean = false;\n @Input() isUndoing: boolean = false;\n @Input() expandIconSrc: string;\n @Input() rotateIconSrc: string;\n @Input() crossIconSrc: string;\n @Input() set done(completed: boolean) {\n console.log('mark as completed', completed);\n if (completed) {\n this.completeScan(completed);\n }\n }\n\n @Output() extracted = new EventEmitter<HTMLCanvasElement>();\n\n @Output() cornersChanged = new EventEmitter<void>();\n\n @Output() getUndoingChange = new EventEmitter<boolean>()\n @Output() getRedoingChange = new EventEmitter<boolean>()\n\n @Output() canAddTextOrDoole = new EventEmitter<{}>();\n\n @Output() canRedoOrUndo = new EventEmitter<{\n canRedo: boolean;\n canUndo: boolean;\n }>();\n\n private screenPoints: { x: number; y: number }[] = [];\n\n private _canvas!: fabric.Canvas;\n\n private _cornersPg!: fabric.Polygon;\n\n private _scaleFactor = 1;\n\n private _controls: fabric.Circle[] = [];\n\n selectedColor: string = '#121212';\n\n isScaned: boolean = false;\n\n textAdded: boolean = false;\n\n icons = {\n cross: new Image(),\n rotate: new Image(),\n expand: new Image(),\n };\n private Image = {\n height: 0,\n width: 0,\n };\n borderWidth: number = 5;\n colors = [\n { hexCode: '#FFFFFF', selected: false },\n { hexCode: '#121212', selected: false },\n { hexCode: '#2188D9', selected: false },\n { hexCode: '#DC3E33', selected: false },\n { hexCode: '#219653', selected: false },\n { hexCode: '#F1B10B', selected: false },\n { hexCode: '#00F0FF', selected: false },\n ];\n resizeIcon: HTMLElement;\n rotateIcon: HTMLElement;\n removeIcon: HTMLElement;\n constructor(private _opencv: OpenCVService,private cdRef: ChangeDetectorRef) {}\n\n public ngAfterViewInit() {\n this.icons.cross.src = this.crossIconSrc;\n this.icons.rotate.src = this.rotateIconSrc;\n this.icons.expand.src = this.expandIconSrc;\n setTimeout(async () => {\n await this.init();\n // Add an event listener for canvas edits\n }, 1);\n }\n\n public onCanvasEdit() {\n let objects = this._canvas.getObjects();\n if (objects && objects.length)\n this._canvas._activeObject = objects[objects.length - 1];\n if (!this.isScanStart && !this.isRedoing && !this.isUndoing) {\n //Set canvas state as base state when user is done undo at last and than try to add new object\n if (this.canvasStates.length > 1 && this.currentStateIndex === 0)\n this.canvasStates = this.canvasStates.filter(\n (state, index) => index === 0\n );\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex >= 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.saveCanvasState();\n }\n\n}\n public ngOnChanges(changes: SimpleChanges) {\n // When src changes\n if (changes['src'] && this._canvas) {\n this.build();\n }\n //When user start scan\n if (changes['isScanStart'] && changes['isScanStart'].currentValue) {\n if (this.src && this._canvas && this.isScanStart) {\n this.isLoading.next(true);\n this.addPointsTodoc();\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScaned = true;\n this._canvas.selection = false;\n this.textAdded = false;\n }\n }\n // When user wants to draw\n if (\n changes['canDoodle'] &&\n changes['canDoodle'].currentValue &&\n this._canvas\n ) {\n\n if (this.canDoodle) {\n this._canvas.isDrawingMode = this.canDoodle;\n this._canvas.freeDrawingBrush = this.canDoodle\n ? new fabric.PencilBrush(this._canvas)\n : null;\n this._canvas.freeDrawingBrush.width = 10;\n this._canvas.freeDrawingBrush.color = this.selectedColor;\n this._canvas.selection = false;\n this.isScanStart = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n }\n // When user wants to add text\n if (\n changes['canAddText'] &&\n changes['canAddText'].currentValue &&\n this.canAddText &&\n this._canvas\n ) {\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScanStart = false;\n }\n if (\n changes['isUndoing'] &&\n this._canvas\n ){\n this.isUndoing = changes['isUndoing'].currentValue\n if(changes['isUndoing'].currentValue){\n setTimeout(() => {\n this.undo();\n }, 0);\n }\n }\n if (\n changes['isRedoing'] &&\n this._canvas\n ){\n this.isRedoing = changes['isRedoing'].currentValue;\n if(changes['isRedoing'].currentValue){\n setTimeout(() => {\n this.redo();\n }, 0);\n }\n }\n }\n // To change the color of brush or text\n chngClrTextOrBrush(color: string, changeFor: string) {\n this.selectedColor = color;\n this.colors.map((clr, index) => {\n this.colors[index] = { ...this.colors[index], selected: false };\n if (this.colors[index].hexCode === color) {\n this.colors[index] = { ...this.colors[index], selected: true };\n }\n });\n if (changeFor === 'text') {\n const activeObject = this._canvas.getActiveObject();\n if (activeObject && activeObject.type === 'i-text') {\n // Check if an active text object is selected\n activeObject.set('fill', this.selectedColor); // Update the fill color\n this._canvas.renderAll(); // Render the canvas to see the changes\n }\n this._canvas.renderAll();\n this.onCanvasEdit();\n } else {\n this._canvas.freeDrawingBrush.color = color;\n }\n this.selectedColor = color;\n }\n async addPointsTodoc() {\n const corners = await this._opencv.getPaperCorners(\n this._canvas.toDataURL({\n format: 'jpeg',\n quality: 1,\n }),\n\n this.Image.height,\n this.Image.width\n );\n if (corners) {\n this.screenPoints = [\n {x:corners.topLeftCorner.x + 15,y:corners.topLeftCorner.y},\n {x:corners.topRightCorner.x - 30,y:corners.topRightCorner.y},\n {x:corners.bottomRightCorner.x - 30,y:corners.bottomRightCorner.y},\n {x:corners.bottomLeftCorner.x + 15,y:corners.bottomLeftCorner.y},\n ];\n } else {\n console.error(`can't detect document corners`);\n const width = this._canvas.getWidth() / this._scaleFactor;\n const height = this._canvas.getHeight() / this._scaleFactor;\n const offset = 20;\n this.screenPoints = [\n { x: offset, y: 0 },\n { x: width - offset, y: 0 },\n { x: width - offset, y: height - offset },\n { x: offset, y: height - offset },\n ];\n }\n\n // add polygon\n //\n this._cornersPg = new fabric.Polygon(this.screenPoints, {\n stroke: '#2188d9',\n strokeWidth: 10,\n selectable: false,\n fill: 'rgba(33, 136, 217, 0.1)',\n hasBorders: true,\n objectCaching: false,\n });\n this._canvas.add(this._cornersPg);\n this.createControls(this._cornersPg);\n this.isLoading.next(false);\n }\n\n private async init(src?: string) {\n // Create canvas with new changed src\n if (src) {\n this.createCanvas();\n } else {\n try {\n if (!this._canvasElement || !this._canvasElement.nativeElement) {\n // canvas is not ready\n return;\n }\n\n if (this._canvas) {\n // canvas already initalized\n return;\n }\n this.createCanvas();\n } catch (err) {\n console.error(err);\n }\n }\n }\n\n async createCanvas() {\n // documentation: http://fabricjs.com/docs/fabric.Canvas.html\n let canvas = this._canvasElement.nativeElement;\n this._canvas = new fabric.Canvas(canvas, {\n backgroundColor: 'white',\n selection: false,\n });\n const { width, height } = this.getCanvasSize();\n\n this._canvas.setWidth(width);\n this._canvas.setHeight(height);\n this._canvas.on('object:added', this.onCanvasEdit.bind(this));\n this._canvas.on('object:modified', this.onCanvasEdit.bind(this));\n this._canvas.on('mouse:down', this.addTextOnClick.bind(this));\n this._canvas.on('object:scaling', function(obj:any){\n })\n if (this.src) {\n await this.build();\n }\n }\n\n renderIcon(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride,\n fabricObject: fabric.Object,\n iconName: string\n ) {\n var size = 40;\n var iconBackgroundSize = 45; // Adjust the size as needed\n ctx.save();\n\n // Draw a background circle behind the icon\n ctx.fillStyle = 'white'; // Set the background color\n ctx.beginPath();\n ctx.arc(left, top - 10, iconBackgroundSize / 2, 0, 2 * Math.PI);\n ctx.fill();\n\n var img = this.icons[iconName];\n ctx.translate(left, top - 10);\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\n ctx.drawImage(img, -size / 2, -size / 2, size, size);\n ctx.restore();\n }\n\n stopResizeText(event: any) {\n if (this.isResize) {\n this.saveCanvasState();\n this.isResize = false;\n }\n }\n resizeText(event: any) {\n if (this.isResize) {\n const target = event.target;\n const deltaY = event.e.touches[0].clientY - this.initialMouseY;\n\n // Limit the scaling factor to prevent excessive resizing\n const scalingFactor = Math.min(2, Math.max(0.5, 1 + deltaY / 100));\n\n // Calculate the new font size based on the original size and scaling factor\n const newFontSize = this.originalFontSize * scalingFactor;\n\n // Set the font size of the text object\n target.fontSize = newFontSize;\n\n // Re-render the canvas to see the live change\n event.target.canvas.renderAll();\n }\n }\n addTextOnClick(event: any) {\n if (event.transform && event.transform.corner === 'expandControl') {\n this.isResize = true;\n this.initialMouseY = event.e.clientY;\n this.originalFontSize = event.target.fontSize;\n }\n if (\n !this.textAdded &&\n !this.canDoodle &&\n !this.isScanStart &&\n this.canAddText\n ) {\n this.addTextBox(event);\n }\n if (!this.textAdded && this.canAddText && this.currentStateIndex === 0) {\n this.addTextBox(event);\n this.currentStateIndex = -1;\n this.canvasStates = [];\n }\n }\n\n // Add text box with custom controls to canvas\n addTextBox(event) {\n const fixedWidthPercentage = 0.2; // Set a fixed width as a percentage of canvas width\n const fixedHeightPercentage = 0.1; // Set a fixed height as a percentage of canvas height\n\n const canvasWidth = this._canvas.getWidth();\n const canvasHeight = this._canvas.getHeight();\n\n const fixedWidth = canvasWidth * fixedWidthPercentage;\n const fixedHeight = canvasHeight * fixedHeightPercentage;\n\n let _text: IText = new fabric.IText('Type your text here', {\n left: event.pointer.x,\n top: event.pointer.y,\n fill: this.selectedColor,\n fontSize: 40,\n fontFamily: 'Roboto',\n selectable: true,\n fontWeight: 400,\n borderScaleFactor: 3,\n borderColor: 'white',\n backgroundColor: 'transparent', // Set background color of the text box\n cornerColor: 'white', // Set corner (resize handle) color of the text box\n padding: 35, // Set padding inside the text box\n width: fixedWidth, // Set the initial width of the text box\n height: fixedHeight\n });\n //Custom controls for add text box\n let customControls = {\n removeControl: new fabric.Control({\n x: -0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'cross'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n var target = transform.target;\n var canvas = target.canvas;\n canvas.remove(target);\n this.canAddText = true;\n this.textAdded = false;\n // this.canAddTextOrDoole.emit({ key: 'text', value: false });\n canvas.requestRenderAll();\n this.saveCanvasState();\n return true;\n },\n }),\n\n rotateControl: new fabric.Control({\n x: 0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'rotate'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n let fabricObject = transform.target;\n const rotationIncrement = 30; // Rotation increment in degrees\n fabricObject.set(\n 'angle',\n (fabricObject.angle + rotationIncrement) % 360\n );\n fabricObject.setCoords(); // Update object's coordinates\n // debugger;\n this.saveCanvasState();\n return true;\n },\n }),\n\n expandControl: new fabric.Control({\n x: 0.5,\n y: 0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'grab',\n actionHandler: ((eventData: MouseEvent, transform: Transform, x: number, y: number) => {\n this.scaleFunction(eventData, transform,x,y)\n return true\n }),\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'expand'\n );\n },\n }),\n };\n\n _text.controls = customControls;\n this._canvas.add(_text);\n this._canvas.renderAll();\n this.textAdded = true;\n }\n scaleFunction(eventData: MouseEvent, transform: Transform, x: number, y: number){\n const target = transform.target;\n const corner = target.controls['expandControl'];\n const pointer = this._canvas.getPointer(eventData, true);\n\n const scaleX = (pointer.x - target.get('left')) / target.get('width');\n const scaleY = (pointer.y - target.get('top')) / target.get('height');\n\n target.set('scaleX', scaleX);\n target.set('scaleY', scaleY);\n}\n // Function to save the canvas state\n saveCanvasState() {\n const state = JSON.stringify(this._canvas.toJSON());\n // const state = this._canvas.getObjects()[this._canvas.getObjects.length - 1]\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.canvasStates.length = this.currentStateIndex + 1; // Remove future states\n }\n let activeObj = this._canvas.getActiveObject();\n\n if (activeObj && activeObj.type === 'path') {\n // set remove border and controls for drawing\n activeObj.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n }\n const customControl =\n activeObj && activeObj.controls ? activeObj.controls : null;\n this.canvasStates.push({ state, customControl });\n this.currentStateIndex++;\n }\n public redo() {\n // this.isRedoing = true;\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.currentStateIndex++;\n const nextState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(nextState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n if (activeObject && activeObject.type !== 'path') {\n activeObject.controls =\n nextState && nextState.customControl\n ? nextState.customControl\n : null;\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n this._canvas.selection = false;\n }\n this._canvas.renderAll();\n this.isRedoing = false\n this.getRedoingChange.emit(this.isRedoing)\n });\n }\n }\n public undo() {\n // this.isUndoing = true;\n if (this.currentStateIndex > 0) {\n this.currentStateIndex--;\n const previousState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(previousState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n if (activeObject) {\n if (activeObject.type !== 'path') {\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this._canvas.isDrawingMode = false;\n this._canvas.freeDrawingBrush = null;\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this._canvas.selection = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n }\n this._canvas.getActiveObject().controls =\n previousState && previousState.customControl\n ? previousState.customControl\n : null;\n }else{\n this.textAdded = false;\n }\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n this._canvas.renderAll();\n this.isUndoing = false\n this.cdRef.detectChanges()\n this.getUndoingChange.emit(this.isUndoing)\n });\n }\n }\n private getCanvasSize() {\n const img = new Image();\n img.src = this.src;\n const box = this._component.nativeElement.getBoundingClientRect();\n\n const width = this.width || box.width || 1;\n const height = this.height || box.height || 1;\n return { width, height };\n }\n\n /**\n * recognize paper corners\n */\n private async build() {\n if (!this.src || !this._canvas) {\n return;\n }\n const bg = await this.loadBackgroundImage(this.src);\n\n // Remove all the existing objects before add the new image to background\n this._canvas.clear();\n\n const imgSize = bg.getOriginalSize();\n this.Image = {\n height: imgSize.height * this._scaleFactor,\n width: imgSize.width * this._scaleFactor,\n };\n const scaleX = this._canvas.width / imgSize.width;\n const scaleY = this._canvas.height / imgSize.height;\n this._scaleFactor = Math.min(scaleY, scaleX);\n this._canvas.setDimensions(\n {\n width: imgSize.width,\n height: imgSize.height,\n },\n {\n backstoreOnly: true,\n }\n );\n this._canvas.setBackgroundImage(bg, () => {\n this._canvas.renderAll();\n });\n this.saveCanvasState();\n this._canvas.renderAll();\n }\n\n private createControls(polygon: fabric.Polygon) {\n // remove previous controls\n if (this._controls.length) {\n this._canvas.remove(...this._controls);\n this._controls = [];\n }\n if (polygon) {\n for (const [index, point] of polygon.points.entries()) {\n const circle = this.createControl(index, polygon);\n this._controls.push(circle);\n this._canvas.add(circle);\n }\n }\n }\n\n private createControl(index: number, polygon: fabric.Polygon) {\n const point = polygon.points[index];\n const circle = new fabric.Circle({\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: '#2188d9',\n radius: 20,\n hasRotatingPoint: false,\n hasBorders: false,\n hasControls: false,\n objectCaching: false,\n });\n circle.on('moving', (evt) => {\n if (evt.pointer) {\n polygon.points[index] = new fabric.Point(evt.pointer.x, evt.pointer.y);\n polygon.dirty = true;\n }\n });\n circle.on('mouseup', (evt) => {\n this.cornersChanged.emit();\n this.screenPoints[index] = polygon.points[index];\n });\n return circle;\n }\n\n private loadBackgroundImage(src: string): Promise<fabric.Image> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n let fabImage = new fabric.Image(img);\n resolve(fabImage);\n };\n img.src = src;\n });\n }\n\n public async completeScan(completed: boolean) {\n if (!completed) {\n return;\n }\n console.log(`complete scan & extract paper`);\n\n if (!this._cornersPg) {\n console.error(`Corner line is not available`);\n }\n if (this._cornersPg) {\n this._canvas.remove(this._cornersPg);\n this._canvas.remove(...this._controls);\n this._canvas.renderAll();\n }\n let output: HTMLCanvasElement;\n if (this.isScaned) {\n output = await this._opencv.extractPaper({\n src: this._canvas.toDataURL({ quality: 1 }),\n corners: {\n topLeftCorner: this.screenPoints[0],\n topRightCorner: this.screenPoints[1],\n bottomRightCorner: this.screenPoints[2],\n bottomLeftCorner: this.screenPoints[3],\n },\n height: this._canvas.height,\n width: this._canvas.width,\n });\n this._canvas.remove(...this._canvas.getObjects());\n this.isScaned = false;\n } else {\n output = this._canvas.toCanvasElement();\n }\n this.currentStateIndex = -1;\n this.canvasStates = [];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.extracted.emit(output);\n this.cleanupCanvas();\n }\n private cleanupCanvas() {\n this._canvas.getObjects().forEach((obj) => (obj.evented = false));\n this._canvas.selection = false;\n this._canvas.isDrawingMode = false;\n this.canDoodle = false;\n this.isScanStart = false;\n this.canAddText = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n}\n","<div #componentWrapper\n class=\"component\">\n <canvas #drawCanas [ngClass]=\"{display: !(isLoading | async) ? 'blurred' : null}\"></canvas>\n <div class=\"loading-overlay\" [ngStyle]=\"{display: !(isLoading | async) ? 'none' : 'block'}\">\n <!-- Add your loading message or spinner here -->\n Scaning...\n </div>\n @if (canDoodle || canAddText) {\n <div class=\"colors-container\">\n @for (color of colors; track color) {\n <div class=\"colors\" [ngStyle]=\"{'background': color.hexCode, 'border':color.selected ? '1.6px solid white' : 'none'}\" (click)=\"chngClrTextOrBrush(color.hexCode, canAddText ? 'text': 'doodle')\"></div>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { ZenDevice, ZenLogRecord, ZenMapTheme, ZenTrip } from '../map/map.types';\n\n@Injectable()\nexport class MapService {\n\n public createDeviceMarker(device: ZenDevice, minZoom?: number): H.map.DomMarker {\n const contentHtml = this.getDeviceContent(device);\n\n const lat = Math.max(Math.min(device.latitude, 180), -180);\n const lng = Math.max(Math.min(device.longitude, 180), -180);\n\n const deviceMarker = new H.map.DomMarker(\n new H.geo.Point(lat, lng),\n {\n zIndex: 10,\n icon: new H.map.DomIcon(contentHtml),\n data: device,\n min: minZoom ? minZoom : 0\n });\n\n return deviceMarker;\n }\n\n private getDeviceContent(device: ZenDevice): string {\n let devIcon = \"\";\n\n if (device.icon) {\n devIcon = device.icon;\n }\n else {\n // Default icon\n devIcon = \"https://storage.googleapis.com/ng-zenduit/icon/car.svg\";\n }\n\n let isDriving = device.isDriving || false;\n let driveClass = \"\";\n if (isDriving) {\n driveClass = \"driving-marker\";\n }\n\n\n let directionSvg = 'https://storage.googleapis.com/ng-zenduit/icon/device_direction.svg';\n\n let displayDirection = isDriving ? \"block\" : \"none\";\n\n let classList = isDriving ? \"moving\" : \"stopped\";\n\n const lblContent =\n `<div class='gotrax-label ${classList}'>` +\n ` <span>${device.name}</span>` +\n ` <div class='gotrax-speed-label'></div>` +\n `</div>`;\n\n const bearing = device.bearing || 0;\n\n let contentHtml =\n `<div>` +\n `<div class='g-marker-vehilce-wrapper'>` +\n `<div class='g-marker-vehilce'>` +\n `<div class='${driveClass} gotrax-img'>\n ${lblContent}\n <div class='g-marker-icon ${classList}'><img class=\"g-marker-img svg-color white\" src=${devIcon} />\n <div class=\"direction-arrow\" style=\"display: ${displayDirection};transform: rotate(${bearing}deg); background-image: url('${directionSvg}');\"></div>\n </div></div>` +\n `</div>` +// close g-marker-vehilce\n `</div>` + // close g-marker-vehilce-wrapper\n `</div>`;\n return contentHtml;\n }\n\n\n public zoomToBounds(map: H.Map, bounds: H.geo.Rect) {\n if (!bounds || bounds.isEmpty()) {\n return;\n }\n\n if (isNaN(bounds.getCenter().lat) ||\n isNaN(bounds.getCenter().lng)) {\n return;\n }\n\n this.zoomToLatLngs(map, [bounds.getTopLeft(), bounds.getBottomRight()]);\n }\n\n private zoomToLatLngs(map: H.Map, pnts: Array<{ lat: number, lng: number }>, zoom: number = 15) {\n\n if (!pnts || pnts.length == 0) {\n return;\n }\n if (pnts.length == 1) {\n map.setZoom(zoom);\n map.setCenter(new H.geo.Point(pnts[0].lat, pnts[0].lng));\n return;\n }\n\n const latLngs: number[] = [];\n pnts.forEach(p => latLngs.push(p.lat, p.lng, 0));\n\n const bounds = H.geo.Rect.coverLatLngAlts(latLngs) as H.geo.Rect;\n\n const minSize = 0.001;\n\n if (bounds.getWidth() < minSize &&\n bounds.getHeight() < minSize) {\n map.setCenter(bounds.getCenter());\n map.setZoom(17);\n }\n else {\n const p1 = bounds.getBottomRight();\n const p2 = bounds.getTopLeft();\n const width = Math.max(bounds.getWidth(), minSize);\n const height = Math.max(bounds.getHeight(), minSize);\n\n // add offset for zooming\n const targetBox = H.geo.Rect.coverLatLngAlts(\n [\n p1.lat - (height * 0.15),\n p2.lng - (width * 0.15),\n 0,\n p2.lat + (height * 0.15),\n p1.lng + (width * 0.15),\n 0\n ]\n ) as H.geo.Rect;\n\n map.getViewPort().resize();\n map.getViewModel().setLookAtData({ bounds: targetBox });\n }\n }\n\n /**\n * Create polylines for given trip and date range.\n * Method create separte polylines for logs outside the date range.\n */\n public createTripPolyline(trip: ZenTrip, map: H.Map, theme: ZenMapTheme): {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n } {\n\n let result = {\n } as {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n };\n\n let coords = new Array<number>();\n\n trip.logs.forEach(log => {\n let latLng = new H.geo.Point(log.latitude, log.longitude);\n\n coords.push(latLng.lat, latLng.lng);\n });\n\n if (coords.length < 2) {\n // Skip the empty path\n return result;\n }\n\n if (theme == \"black\") {\n const pl = this.createPl(coords, \"#000000\", 2);\n pl.setZIndex(1);\n result.polyline = pl;\n\n map.addObject(pl);\n }\n else {\n const pl = this.createPl(coords, \"#9510e6\", 5);\n pl.setZIndex(1);\n result.polyline = pl;\n\n let arrow = this.createArrow(coords);\n result.arrows = arrow;\n\n map.addObjects([pl, arrow]);\n\n // store additional information about polyline\n pl.setData({ type: \"trip\", trip: trip });\n arrow.setData({ type: \"trip\", trip: trip });\n }\n\n\n return result;\n }\n\n private createPl(coords: Array<number>, color: string, strokeWeight: number): H.map.Polyline {\n const pl = new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n strokeColor: color,\n lineWidth: strokeWeight\n },\n arrows: {\n fillColor: \"#ffffff\"\n },\n zIndex: 0\n });\n return pl;\n }\n\n private createArrow(coords: Array<number>): H.map.Polyline {\n return new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n lineWidth: 5,\n fillColor: 'white',\n strokeColor: 'rgba(255, 255, 255, 1)',\n lineDash: [0, 5],\n lineTailCap: 'arrow-tail',\n lineHeadCap: 'arrow-head'\n } as any,\n zIndex: 1\n });\n }\n\n public createStopMarker(map: H.Map, log: ZenLogRecord, stopIdx: number, tag: any, theme: ZenMapTheme) {\n\n let icon: H.map.DomIcon;\n if (theme == \"black\") {\n const src = \"https://storage.googleapis.com/ng-zenduit/icon/stop-icon-black.svg\";\n icon = new H.map.DomIcon(`<div class=\"g-stop-img\"><img src=\"${src}\"/></div>`)\n }\n else {\n // deafault\n icon = new H.map.DomIcon(`<div class=\"g-stop\"><label>${stopIdx}</label></div>`)\n }\n\n let stop = new H.map.DomMarker(\n new H.geo.Point(log.latitude, log.longitude),\n {\n icon: icon,\n zIndex: 2\n });\n map.addObject(stop);\n stop.setData(tag);\n return stop;\n }\n}","import { Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { MapService } from '../services/map.service';\nimport { ZenDevice, ZenMapTheme, ZenTrip } from './map.types';\n\n@Component({\n selector: 'zen-map',\n templateUrl: './zendu-map.component.html',\n styleUrls: ['./zendu-map.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduMapComponent implements OnChanges {\n\n @ViewChild(\"map\") _mapElement!: ElementRef<HTMLDivElement>;\n\n @Input() apiKey: string;\n\n @Input() trips: ZenTrip[] = [];\n\n @Input() devices: ZenDevice[] = [];\n\n @Input() theme: ZenMapTheme = 'default';\n\n private _platform: H.service.Platform;\n\n private _map!: H.Map;\n\n private _objects: H.map.Object[] = [];\n\n private _mapService = new MapService();\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && !this._platform) {\n this.init();\n }\n\n if (changes[\"trips\"] || changes[\"devices\"]) {\n this.updateEntities();\n }\n }\n\n private init() {\n this._platform = new H.service.Platform({\n apikey: this.apiKey\n });\n\n setTimeout(() => {\n this.initMap();\n this.updateEntities();\n }, 1000);\n }\n\n\n private initMap() {\n\n // Obtain the default map types from the platform object\n const defaultLayers = this._platform.createDefaultLayers();\n\n this._map = new H.Map(this._mapElement.nativeElement,\n defaultLayers.vector.normal.map,\n {\n zoom: 3,\n center: { lat: 34.366, lng: -89.519 }\n });\n\n\n // Create the default UI\n const ui = H.ui.UI.createDefault(this._map, defaultLayers);\n\n const mapSettings = ui.getControl('mapsettings');\n mapSettings.setAlignment(H.ui.LayoutAlignment.RIGHT_TOP);\n mapSettings.setVisibility(false);\n\n const scalebar = ui.getControl('scalebar');\n scalebar.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM)\n\n const zoom = ui.getControl('zoom');\n zoom.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM);\n\n this._map.getBaseLayer().setMin(3);\n\n // MapEvents enables the event system\n // Behavior implements default interactions for pan/zoom (also on mobile touch environments)\n const behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(this._map));\n }\n\n private updateEntities() {\n if (!this._map) {\n // map is not ready\n return;\n }\n\n this.clearEntities();\n\n this.createTrips();\n\n this.createDevices();\n }\n\n private createTrips() {\n if (!this.trips || !this.trips.length) {\n return;\n }\n\n let box: H.geo.Rect = null;\n\n for (const trip of this.trips) {\n const res = this._mapService.createTripPolyline(trip, this._map, this.theme);\n if (res.polyline) {\n this._objects.push(res.polyline);\n if (box) {\n box = box.mergeRect(res.polyline.getBoundingBox());\n }\n else {\n box = res.polyline.getBoundingBox()\n }\n }\n if (res.arrows) {\n this._objects.push(res.arrows);\n }\n }\n\n // create stop points\n //\n for (const [stopIdx, trip] of this.trips.entries()) {\n let stopLog = trip.logs[trip.logs.length - 1];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, stopIdx + 1, trip, this.theme));\n }\n\n if (this.theme == \"black\") {\n // create a marker for first stop as well\n let stopLog = this.trips[0].logs[0];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, 0, this.trips[0], this.theme));\n }\n\n if (box) {\n this._mapService.zoomToBounds(this._map, box);\n }\n }\n\n private createDevices() {\n if (!this.devices || !this.devices.length) {\n return;\n }\n\n for (const device of this.devices) {\n const marker = this._mapService.createDeviceMarker(device)\n this._map.addObject(marker);\n this._objects.push(marker);\n }\n }\n\n private clearEntities() {\n if (!this._map) {\n return;\n }\n this._map.removeObjects(this._objects)\n this._objects = [];\n }\n\n\n\n\n\n}\n","<div class=\"component\">\n <div #map\n class=\"zen-map\"></div>\n</div>\n","import { Component, EventEmitter, HostListener, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-file-upload',\n templateUrl: './zendu-file-upload.component.html',\n styleUrls: ['./zendu-file-upload.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFileUpload {\n\n @Input() fileTypes: string = `image/*`;\n\n @Input() uploadState: \"\" | \"uploading\" | \"done\" = \"\";\n\n /**\n * fire when user clicked on \"Upload now\"\n */\n @Output() uploadFile = new EventEmitter<File[]>();\n\n /**\n * fired when user click \"Cancel\"\n */\n @Output() uploadCancelled = new EventEmitter<void>();\n\n public isFileSelected = false;\n\n public isFileDragover = false;\n\n public filename = \"\";\n\n private _selectedFiles: File[] = [];\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n\n let target = (evt.dataTransfer as DataTransfer);\n if (target && target.files?.length) {\n this.handleFiles(target.files);\n }\n console.log('File Dropped');\n }\n\n\n public async onFileInput(evt: Event) {\n const target: HTMLInputElement | null = evt.target as HTMLInputElement;\n if (target && target.files) {\n await this.handleFiles(target.files);\n }\n }\n\n public async handleFiles(files: FileList): Promise<void> {\n console.log(`handle files`, files)\n if (!files.length) {\n return;\n }\n this.filename = files.item(0).name;\n\n this._selectedFiles = [];\n for (let idx = 0; idx < files.length; idx++) {\n this._selectedFiles.push(files[idx]);\n }\n\n this.isFileSelected = true;\n this.uploadState = '';\n }\n\n public uploadNow() {\n if (!this._selectedFiles.length) {\n console.error(`no files for uploading`)\n return;\n }\n\n this.uploadFile.emit(this._selectedFiles);\n }\n\n public clear() {\n this.isFileSelected = false;\n this.isFileDragover = false;\n this.filename = \"\";\n this._selectedFiles = [];\n this.uploadState = \"\";\n }\n\n public cancelUploading() {\n this.uploadCancelled.emit();\n this.clear();\n }\n}\n","<div class=\"component\">\n <div class=\"title\">\n @if (uploadState != 'done') {\n <span>Upload File</span>\n }\n @if (uploadState == 'done') {\n <span>Uploaded File</span>\n }\n </div>\n @if (uploadState != 'done') {\n <div class=\"drop-area\"\n [class.dragover]=\"isFileDragover\"\n >\n @if (!isFileSelected) {\n <div class=\"box\"\n >\n <div>\n <zen-icon class=\"doc-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/document.svg\"></zen-icon>\n </div>\n <div>\n <div>Drag and Drop Here</div>\n <div>or</div>\n <span class=\"browse\"\n (click)=\"fileIp.click()\">Browse</span>\n <form><input type=\"file\"\n [accept]=\"fileTypes\"\n #fileIp\n (change)=\"onFileInput($event)\" /></form>\n </div>\n </div>\n }\n @if (isFileSelected) {\n <!-- File selected state -->\n @if (uploadState == '') {\n <div class=\"box-selected-file\">\n <div class=\"close-wrapper\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n <div>\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n </div>\n <div class=\"filename\">\n {{filename}}\n </div>\n </div>\n }\n <!-- Uploading state -->\n @if (uploadState == 'uploading') {\n <div class=\"box-file-uploading\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon-sm\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image-sm.svg\"></zen-icon>\n <div>{{filename}}</div>\n </div>\n <div class=\"progress\">\n <div class=\"progress-bar-value\"></div>\n </div>\n </div>\n }\n }\n </div>\n }\n\n\n <!-- Uploading done -->\n @if (uploadState == 'done') {\n <div\n class=\"box-upload-done\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n <div class=\"filename\">{{filename}}</div>\n <div class=\"close-btn\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n </div>\n </div>\n }\n\n <div class=\"btn-upload-wrapper\">\n\n @if (uploadState == '') {\n <button\n (click)=\"uploadNow()\"\n class=\"button-flat full-width\"\n [disabled]=\"!isFileSelected\">\n Upload Now\n </button>\n }\n\n @if (uploadState == 'uploading') {\n <button\n (click)=\"cancelUploading()\"\n class=\"button-alert full-width\"\n [disabled]=\"!isFileSelected\">\n Cancel\n </button>\n }\n </div>\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\ninterface CircleSizeConfig {\n containerSize: number;\n radius: number;\n strokeWidth: number;\n fontSize: number;\n labelFontSize: number;\n letterSpacing: number;\n}\n\nconst CIRCLE_SIZE_MAP: Record<string, CircleSizeConfig> = {\n xxs: { containerSize: 64, radius: 26, strokeWidth: 5, fontSize: 14, labelFontSize: 12, letterSpacing: 0 },\n xs: { containerSize: 160, radius: 64, strokeWidth: 8, fontSize: 24, labelFontSize: 12, letterSpacing: 0 },\n sm: { containerSize: 200, radius: 80, strokeWidth: 10, fontSize: 30, labelFontSize: 12, letterSpacing: 0 },\n md: { containerSize: 240, radius: 96, strokeWidth: 12, fontSize: 36, labelFontSize: 14, letterSpacing: -0.72 },\n lg: { containerSize: 280, radius: 112, strokeWidth: 14, fontSize: 48, labelFontSize: 14, letterSpacing: -0.96 },\n};\n\n@Component({\n selector: 'zen-progress',\n templateUrl: './zendu-progress.component.html',\n styleUrls: ['./zendu-progress.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduProgress {\n\n @Input() type: \"bar\" | \"circle\" | \"half-circle\" = \"bar\";\n\n /**\n * Label position for bar type.\n */\n @Input() label: 'none' | 'right' | 'bottom' | 'top-floating' | 'bottom-floating' = 'none';\n\n /**\n * Size for circle/half-circle types.\n */\n @Input() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * progress value [0, 100]\n */\n @Input() value = 20;\n\n /**\n * progress text (shown as label above percentage in circle types)\n */\n @Input() text = \"\";\n\n /**\n * Custom color for the progress fill (bar, circle stroke).\n * Accepts any valid CSS color value.\n */\n @Input() color = \"\";\n\n /**\n * Custom color for the progress track/background.\n * Accepts any valid CSS color value.\n */\n @Input() trackColor = \"\";\n\n get sizeConfig(): CircleSizeConfig {\n return CIRCLE_SIZE_MAP[this.size] || CIRCLE_SIZE_MAP['md'];\n }\n\n get circleCenter(): number {\n return this.sizeConfig.containerSize / 2;\n }\n\n get circumference(): number {\n return 2 * Math.PI * this.sizeConfig.radius;\n }\n\n get halfCircumference(): number {\n return Math.PI * this.sizeConfig.radius;\n }\n\n get circleOffset(): number {\n const clampedValue = Math.max(0, Math.min(100, this.value));\n return this.circumference * (1 - clampedValue / 100);\n }\n\n get halfCircleOffset(): number {\n const clampedValue = Math.max(0, Math.min(100, this.value));\n return this.halfCircumference * (1 - clampedValue / 100);\n }\n\n get halfCircleContainerHeight(): number {\n return this.sizeConfig.containerSize / 2 + this.sizeConfig.strokeWidth;\n }\n}\n","<div class=\"component\">\n <!-- Progress bar -->\n @if (type == 'bar') {\n <div class=\"bar-wrapper\"\n [class.bar-label-right]=\"label === 'right'\"\n [class.bar-label-bottom]=\"label === 'bottom'\"\n [class.bar-label-top-floating]=\"label === 'top-floating'\"\n [class.bar-label-bottom-floating]=\"label === 'bottom-floating'\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-bg\" [ngStyle]=\"trackColor ? { 'background-color': trackColor } : {}\"></div>\n <div class=\"progress-bar-fill\" [ngStyle]=\"{ 'width': value + '%', 'background-color': color || null }\">\n <!-- Top floating tooltip -->\n @if (label === 'top-floating') {\n <div class=\"floating-tooltip floating-tooltip-top\">\n <div class=\"tooltip-content\">\n <span class=\"tooltip-text\">{{value}}%</span>\n </div>\n <div class=\"tooltip-arrow tooltip-arrow-down\">\n <svg width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M6.58579 4.41421L2.34315 0.171573C1.41421 -0.757359 0 0 0 0H16C16 0 14.5858 -0.757359 13.6569 0.171573L9.41421 4.41421C8.63316 5.19527 7.36684 5.19527 6.58579 4.41421Z\" fill=\"white\"/>\n </svg>\n </div>\n </div>\n }\n <!-- Bottom floating tooltip -->\n @if (label === 'bottom-floating') {\n <div class=\"floating-tooltip floating-tooltip-bottom\">\n <div class=\"tooltip-arrow tooltip-arrow-up\">\n <svg width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M9.41421 1.58579L13.6569 5.82843C14.5858 6.75736 16 6 16 6H0C0 6 1.41421 6.75736 2.34315 5.82843L6.58579 1.58579C7.36684 0.804738 8.63316 0.804738 9.41421 1.58579Z\" fill=\"white\"/>\n </svg>\n </div>\n <div class=\"tooltip-content\">\n <span class=\"tooltip-text\">{{value}}%</span>\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right label -->\n @if (label === 'right') {\n <span class=\"bar-label\">{{value}}%</span>\n }\n <!-- Bottom label -->\n @if (label === 'bottom') {\n <span class=\"bar-label\">{{value}}%</span>\n }\n <!-- Text description (legacy support) -->\n @if (text && (label === 'none')) {\n <div class=\"progress-text\">{{text}}</div>\n }\n </div>\n }\n\n <!-- Circle progress -->\n @if (type == 'circle') {\n <div class=\"circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': sizeConfig.containerSize\n }\">\n <svg class=\"circle-svg\"\n [attr.width]=\"sizeConfig.containerSize\"\n [attr.height]=\"sizeConfig.containerSize\"\n [attr.viewBox]=\"'0 0 ' + sizeConfig.containerSize + ' ' + sizeConfig.containerSize\">\n <!-- Background ring -->\n <circle class=\"circle-bg\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [style.stroke]=\"trackColor || null\"\n fill=\"none\" />\n <!-- Progress ring -->\n <circle class=\"circle-progress\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"circleOffset\"\n [style.stroke]=\"color || null\"\n fill=\"none\"\n stroke-linecap=\"round\" />\n </svg>\n <div class=\"circle-label\">\n @if (text) {\n <span class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\n }\n <span class=\"circle-value\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.fontSize,\n 'letter-spacing.px': sizeConfig.letterSpacing\n }\">{{value}}%</span>\n </div>\n </div>\n }\n\n <!-- Half-Circle progress -->\n @if (type == 'half-circle') {\n <div class=\"half-circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': halfCircleContainerHeight\n }\">\n <svg class=\"circle-svg\"\n [attr.width]=\"sizeConfig.containerSize\"\n [attr.height]=\"sizeConfig.containerSize\"\n [attr.viewBox]=\"'0 0 ' + sizeConfig.containerSize + ' ' + sizeConfig.containerSize\">\n <!-- Background arc (bottom half) -->\n <circle class=\"circle-bg half-circle-ring\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"circumference / 2\"\n [style.stroke]=\"trackColor || null\"\n fill=\"none\" />\n <!-- Progress arc -->\n <circle class=\"circle-progress half-circle-ring\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"halfCircumference + ' ' + circumference\"\n [attr.stroke-dashoffset]=\"halfCircleOffset\"\n [style.stroke]=\"color || null\"\n fill=\"none\"\n stroke-linecap=\"round\" />\n </svg>\n <div class=\"half-circle-label\">\n @if (text) {\n <span class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\n }\n <span class=\"circle-value\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.fontSize,\n 'letter-spacing.px': sizeConfig.letterSpacing\n }\">{{value}}%</span>\n </div>\n </div>\n }\n</div>\n","import { Injectable } from \"@angular/core\";\n\ninterface IGeocodingRes {\n name: string;\n\n city: string;\n\n country: string;\n\n postalCode: string;\n\n street: string;\n\n state: string;\n\n bounds: { xmin: number, ymin: number, xmax: number, ymax: number };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeocodingService {\n private _platform: H.service.Platform;\n\n public setAPIKey(apiKey: string) {\n this._platform = new H.service.Platform({\n apikey: apiKey\n });\n }\n\n public async geocode(searchText: string): Promise<Array<IGeocodingRes>> {\n return new Promise((resolve, reject) => {\n if (!this._platform) {\n reject(\"API KEY NOT SET\");\n return;\n }\n const geocoder = this._platform.getGeocodingService();\n geocoder.geocode({ searchText: searchText },\n (res: any) => {\n let locations = res.Response.View[0] ? res.Response.View[0].Result : []\n\n let outItems = new Array<IGeocodingRes>();\n let boxOffset = 0.001;\n for (let location of locations) {\n let lat = location.Location.DisplayPosition.Latitude;\n let lng = location.Location.DisplayPosition.Longitude;\n let p1 = new H.geo.Point(lat - boxOffset, lng - boxOffset);\n let p2 = new H.geo.Point(lat + boxOffset, lng + boxOffset);\n let bounds = H.geo.Rect.coverPoints([p1, p2]);\n\n let street = location.Location.Address.Street;\n if (location.Location.Address.HouseNumber) {\n street += \" \" + location.Location.Address.HouseNumber;\n }\n\n outItems.push({\n name: location.Location.Address.Label,\n city: location.Location.Address.City,\n country: location.Location.Address.Country,\n postalCode: location.Location.Address.PostalCode,\n state: location.Location.Address.State,\n street: street,\n bounds: {\n xmin: bounds.getLeft(),\n xmax: bounds.getRight(),\n ymin: Math.min(bounds.getBottom(), bounds.getTop()),\n ymax: Math.max(bounds.getBottom(), bounds.getTop())\n }\n });\n }\n\n resolve(outItems);\n },\n (e: any) => {\n console.warn(e);\n resolve([]);\n }\n );\n })\n }\n\n}\n","import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { GeocodingService } from '../services/geoconding.service';\nimport { Cancellation, LocationAddress } from './location.address';\n\n@Component({\n selector: 'zen-location-search',\n templateUrl: './zendu-location-search.component.html',\n styleUrls: ['./zendu-location-search.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduLocationSearch {\n /**\n * HERE MAPS API Key\n */\n @Input() set apiKey(apiKey: string) {\n this._geocoding.setAPIKey(apiKey);\n }\n\n @Input() address!: string;\n\n @Input() displaySearchIcon: boolean = true;\n\n @Output() addressChange = new EventEmitter<string>();\n\n @Input() materialStyle = true;\n\n @Input() placeholder: string = \"Search address\";\n\n @Input() disabled = false;\n\n @Output() public onSelect = new EventEmitter<LocationAddress>;\n\n // it will apply to input element text and icon color:\n // ie. input like { color: blue}\n @Input() customStyles: any = {};\n\n private addressSearchChanged: Subject<string> = new Subject<string>();\n\n public isSearching: boolean = false;\n\n public ignoreFirstLoad: boolean = false;\n\n public addressList: LocationAddress[] = [];\n\n private _cancelation!: Cancellation;\n\n constructor(\n private _geocoding: GeocodingService,\n private _cdRef: ChangeDetectorRef) {\n\n this.addressSearchChanged\n .pipe(\n debounceTime(200),\n distinctUntilChanged()\n )\n .subscribe((addressSearch: string) => {\n\n this.address = addressSearch\n this.isSearching = true;\n\n if (this._cancelation) {\n // cancel previous\n this._cancelation.cancelled = true;\n }\n\n this._cancelation = { cancelled: false }\n\n this.ignoreFirstLoad = true;\n this.makeSearch(this._cancelation);\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['address'] && this.address) {\n this._cancelation = { cancelled: false }\n await this.makeSearch(this._cancelation);\n const address = this.addressList.find(addr => addr.name === this.address);\n if (address) {\n this.selectAddress(address);\n }\n }\n }\n\n public addressChanged(text: string) {\n this.isSearching = true;\n this.addressChange.emit(text);\n this.addressSearchChanged.next(text);\n\n this._cdRef.detectChanges();\n }\n\n private async makeSearch(cancellation: Cancellation) {\n try {\n if (!this.ignoreFirstLoad) {\n this.ignoreFirstLoad = true;\n return;\n }\n this.addressList = [];\n\n if (!this.address) {\n this.isSearching = false;\n return;\n }\n\n this.addressList = [];\n\n let locations = await this._geocoding.geocode(this.address);\n\n if (this._cancelation.cancelled) {\n // request cancelled\n return;\n }\n\n for (let location of locations) {\n this.addressList.push({\n name: location.name,\n bounds: location.bounds\n });\n }\n this.addressList = [...new Map(this.addressList.map((item: LocationAddress) => [item.name, item])).values()];\n if (this.addressList.length > 20) {\n this.addressList = this.addressList.slice(0, 20);\n }\n\n this.isSearching = false;\n } catch (err) {\n console.error(err);\n } finally {\n this._cdRef.detectChanges();\n }\n }\n\n public selectAddress(address: LocationAddress) {\n this.address = address.name;\n if (this.onSelect) {\n this.addressList = [];\n this.onSelect.emit(address);\n }\n }\n}\n","<div class=\"component\">\n\n <div class=\"search-input-wrapper\"\n [class.boundaries]=\"!materialStyle\">\n @if (displaySearchIcon) {\n <zen-icon src=\"https://storage.googleapis.com/ng-zenduit/icon/search.svg\"\n class=\"search-icon\"\n [style]=\"{'background-color': customStyles.color}\"></zen-icon>\n }\n\n <input type=\"text\"\n class=\"material-input\"\n [style]=\"customStyles\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"address\"\n [ngClass]=\"{'no-icon': !displaySearchIcon}\"\n (ngModelChange)='addressChanged($event)'>\n </div>\n\n @if (address) {\n <div class=\"search-list\"\n [class.boundaries]=\"!materialStyle\"\n appClickOutside\n (clickOutside)=\"addressList = [];\">\n @if (addressList.length || isSearching) {\n <ul class=\"search-item-list\"\n >\n @if (isSearching) {\n <li>Searching</li>\n }\n @if (!isSearching) {\n <div>\n @for (address of addressList; track address) {\n <li\n (click)=\"selectAddress(address)\">\n {{address.name}}\n </li>\n }\n </div>\n }\n </ul>\n }\n </div>\n }\n</div>\n","export class CEvent<T> {\n private index: number = 0;\n\n private handlers: {\n id: number;\n func: (data?: T) => void;\n }[] = [];\n\n public on(handler: (data?: T) => void ): number\n {\n this.index++;\n this.handlers.push({ func: handler, id: this.index });\n return this.index;\n }\n\n public off(id: number)\n {\n this.handlers = this.handlers.filter(h => h.id !== id);\n }\n\n public fire(data?: T)\n {\n if(this.handlers)\n {\n this.handlers.slice(0).forEach(h => h.func(data));\n }\n }\n}","import { CEvent } from \"../core/cevent\";\n\nexport class PlayerControl {\n\tprivate _stopEvent: CEvent<void> = new CEvent();\n\n\tprivate _playEvent: CEvent<void> = new CEvent();\n\n\tprivate _seekEvent: CEvent<number> = new CEvent();\n\n\tprivate _dataEvent: CEvent<number> = new CEvent();\n\n\t/**\n\t * Subscribe to data event\n\t */\n\t public OnData(callback: () => void): number {\n\t\treturn this._dataEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to play event\n\t */\n\t public OnPlay(callback: () => void): number {\n\t\treturn this._playEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to stop event\n\t */\n\t public OnStop(callback: () => void): number {\n\t\treturn this._stopEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to seek event\n\t */\n\tpublic OnSeek(callback: (position: number) => void): number {\n\t\treturn this._seekEvent.on(callback as any);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffPlay(id: number): void {\n\t\tthis._playEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffStop(id: number): void {\n\t\tthis._stopEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffSeek(id: number): void {\n\t\tthis._seekEvent.off(id);\n\t}\n\n\t/**\n\t * Emit the play event\n\t */\n\tpublic Play(): void {\n\t\tthis._playEvent.fire();\n\t}\n\n\t/**\n\t * Emit the stop event\n\t */\n\tpublic Stop(): void {\n\t\tthis._stopEvent.fire();\n\t}\n\n\t/**\n\t * Emit the seek event\n\t */\n\tpublic Seek(position: number) {\n\t\tthis._seekEvent.fire(position);\n\t}\n\n\t/**\n\t * Emit the data event\n\t */\n\tpublic EmitData() {\n\t\tthis._dataEvent.fire();\n\t}\n}","import { Component, Input, OnChanges, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-html5-video-player',\n templateUrl: './html5-video-player.component.html',\n styleUrls: ['./html5-video-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenHTML5VideoPlayerComponent implements OnChanges {\n\t@Input() source!: string;\n\n\t@Input() control!: PlayerControl;\n\n\tpublic async ngOnChanges() {\n\t\tif (this.source) {\n console.log(`Created the html5 video player for source \"${this.source}\"`);\n\t\t}\n\t}\n}\n","<div class=\"html5-player-component\">\n\t<video controls\n\t\t muted\n\t\t autoplay\n\t\t [src]=\"source\">\n\t</video>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { ScriptLoader } from \"../../services/script.loader.service\";\nimport { PlayerControl } from \"../player.control\";\nimport { FlvJs } from \"./flv\"\n\ndeclare var flvjs: {\n createPlayer(mediaDataSource: FlvJs.MediaDataSource, config?: FlvJs.Config): FlvJs.Player;\n isSupported(): boolean;\n getFeatureList(): FlvJs.FeatureList;\n}\n\n@Component({\n selector: 'zen-flv-player',\n templateUrl: './flv-player.component.html',\n styleUrls: ['./flv-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenFlvPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n private _flv!: FlvJs.Player | null;\n\n public IsVideoFilterVisible = false;\n\n public constructor(\n private _element: ElementRef,\n private _scriptLoader: ScriptLoader) {\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.source) {\n this.reload();\n }\n\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private async reload() {\n // load the script first\n await this._scriptLoader.loadScript(\"flv\");\n // update the player\n this.update();\n }\n\n private update(): void {\n this.destroy(Boolean(this.source));\n\n if (!this.source) {\n return;\n }\n\n this._flv = flvjs.createPlayer({\n url: this.source,\n type: \"flv\"\n }, {\n // Enable/Disable IO stash buffer. \n // Set to false if you need realtime (minimal latency) for live stream playback, but may stalled if there's network jittering.\n enableStashBuffer: false\n });\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n this._flv.attachMediaElement(element as HTMLVideoElement);\n this._flv.load();\n this._flv.muted = true;\n this._flv.play();\n\n let previousFrame = 0;\n\n this._flv.on(\"statistics_info\", (event: { decodedFrames: number }) => {\n if (event && event.decodedFrames) {\n if (previousFrame != event.decodedFrames) {\n previousFrame = event.decodedFrames;\n if (this.control) {\n // fired event when video is playing\n this.control.EmitData();\n }\n }\n }\n })\n\n this._flv.on(\"loading_complete\", () => {\n console.log(\"loading completed\");\n\n this.destroy(true);\n })\n\n\n console.log(`Created the flv player for source \"${this.source}\"`);\n }\n\n private destroy(skipNotify?: boolean) {\n if (this._flv) {\n console.log(\"Destroyed the flv player\");\n this._flv.pause();\n this._flv.unload();\n this._flv.destroy();\n this._flv = null;\n\n if (!skipNotify) {\n // this.onStop.emit();\n }\n }\n }\n\n\n}\n","<div class=\"flv-player-component\">\n <video controls\n muted></video>\n\n</div>\n","export class Thread {\n public static sleep(ms: number): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n });\n }\n}","import HLS, { ErrorTypes } from \"hls.js\";\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, Output, ViewChild, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { Thread } from \"../../core/thread\";\n\n@Component({\n selector: 'zen-hls-player',\n templateUrl: './hls-player.component.html',\n styleUrls: ['./hls-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenHlsPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control!: PlayerControl;\n\n @ViewChild(\"video_container\") _video?: ElementRef<HTMLVideoElement>;\n\n public isVideoFilterVisible = false;\n\n private _hls: HLS | null = null;\n\n private _stopCallback!: number;\n\n private _playCallback!: number;\n\n\n private _isDestroyed = false;\n\n public ngOnChanges(changeObj: any): void {\n if (this.source) {\n this.reload()\n }\n if (changeObj.control &&\n changeObj.control.currentValue) {\n this.setControl(changeObj.control.currentValue);\n }\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.destroy();\n }\n\n private async reload() {\n if (!this.source) {\n return;\n }\n\n if (this._isDestroyed) {\n return;\n }\n\n if (!this._video) {\n // wait for component\n await this.waitForComponent();\n }\n\n if (!this._video || this._isDestroyed) {\n return;\n }\n\n if (!HLS.isSupported()) {\n console.log(\"HLS not supported. Set url to the native video player\")\n // just attached the link to video player\n this._video.nativeElement.src = this.source;\n return;\n }\n\n // destroy previous\n this.destroy();\n\n console.log(`[HlsPlayerComponent] start playing for the source [${this.source}]`)\n\n // HLS configuration: https://github.com/video-dev/hls.js/blob/v1.3.0/docs/API.md\n this._hls = new HLS({\n fragLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 3,\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetryTimeout: 10000,\n maxBufferHole: 10,\n lowLatencyMode: false,\n fragLoadingMaxRetry: 1,\n // backBufferLength: 90,\n autoStartLoad: true,\n testBandwidth: false\n });\n this._hls.attachMedia(this._video.nativeElement);\n\n this._hls.loadSource(this.source);\n\n this._hls.on(HLS.Events.FRAG_LOADED, () => {\n // fired event when video is playing\n this.onData();\n });\n\n this._hls.on(HLS.Events.ERROR, (err, data) => {\n if (data.fatal) {\n console.error(\"HLS error:\", err, data);\n // reload source\n console.log(\"HLS reload source\")\n this.destroy();\n this.reload();\n }\n });\n\n console.log(`Created the hls player for source \"${this.source}\"`);\n }\n\n private async waitForComponent() {\n while (!this._video) {\n await Thread.sleep(100);\n if (this._isDestroyed) {\n return;\n }\n }\n }\n\n private setControl(control: PlayerControl): void {\n if (this.control) {\n this.control.OffStop(this._stopCallback);\n this.control.OffStop(this._playCallback);\n }\n\n this.control = control;\n\n if (this.control) {\n this._stopCallback = this.control.OnStop(() => {\n this.destroy();\n });\n\n this._playCallback = this.control.OnPlay(() => {\n this.reload();\n });\n }\n }\n\n\n private destroy() {\n if (this._hls) {\n this._hls.destroy();\n this._hls = null;\n console.log(\"Destroyed the HLS player\");\n }\n }\n\n private onData() {\n console.log(\"HLS on data event\")\n\n if (this.control) {\n this.control.EmitData();\n }\n }\n\n private onError() {\n console.log(\"HLS error\")\n\n if (this.control) {\n this.control.Stop();\n }\n }\n\n\n public toggleFilter(evt: MouseEvent): void {\n this.isVideoFilterVisible = !this.isVideoFilterVisible;\n evt.stopPropagation();\n }\n\n public hideFiler() {\n this.isVideoFilterVisible = false;\n }\n\n}\n","<div class=\"hls-player-component\">\n\t<video #video_container\n\t\t controls\n\t\t muted\n\t\t autoplay></video>\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n}","import { Injectable } from \"@angular/core\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { LocalLock } from \"../core/local.lock\";\nimport { Thread } from \"../core/thread\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenHttpService {\n private cache: {\n [key: string]: {\n lock: LocalLock,\n data: unknown,\n expiry: Date\n }\n } = {};\n\n constructor(private _http: HttpClient) { }\n\n /**\n * https post request\n * @param url the url path\n * @param data the POST payload\n * @param cacheTtl cache ttl in ms\n * @param retires number of retires\n * @returns\n */\n public async post<T>(url: string, data?: unknown, cacheTtl?: number, retires?: number) {\n\n if (cacheTtl) {\n return await this.doCachedPost(url, cacheTtl, data) as T;\n }\n else {\n\n let attemp = 0;\n while (true) {\n attemp++;\n try {\n return await this.doPost(url, data) as T;\n }\n catch (err) {\n if (retires) {\n if (attemp <= retires) {\n console.warn(`[HttpService] retry (${attemp}) for request: ${url}`)\n await Thread.sleep(1000);\n continue;\n }\n }\n throw err;\n }\n }\n }\n }\n\n private async doCachedPost(url: string, cacheTtl: number, data: any) {\n\n const cacheKey = `${url}_${JSON.stringify(data || {})}`\n\n if (!this.cache[cacheKey]) {\n this.cache[cacheKey] = {\n lock: new LocalLock(),\n data: null,\n expiry: new Date(Date.now() + cacheTtl)\n }\n }\n\n let cacheItem = this.cache[cacheKey];\n\n try {\n await cacheItem.lock.lock();\n\n if (cacheItem.data) {\n // return data from cache\n return cacheItem.data;\n }\n cacheItem.data = await this.doPost(url, data);\n return cacheItem.data;\n }\n finally {\n cacheItem.lock.release();\n }\n }\n\n private async doPost<T>(url: string, data?: any) {\n const res = await this._http.post(url,\n data ? data : {}).toPromise();\n return res as T;\n }\n\n public async get<T>(url: string, timeout?: number) {\n\n let httpOptions = {\n timeout: timeout || 60000,\n headers: new HttpHeaders()\n };\n\n const res = await this._http.get(`${url}`, httpOptions).toPromise();\n return res as T;\n }\n\n\n}\n","import { Component, Input, OnChanges, OnDestroy, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { ZenHttpService } from \"../../services/http.service\";\n\n@Component({\n selector: 'zen-snapshot-player',\n templateUrl: './snapshot-player.component.html',\n styleUrls: ['./snapshot-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSnapshotPlayerComponent implements OnChanges, OnDestroy {\n @Input() source!: string;\n\n @Input() channel!: number;\n\n @Input() control?: PlayerControl;\n\n /**\n * Interval to render a snapshot\n */\n @Input() interval!: number;\n\n public snapshot: string;\n\n private _timer: unknown;\n\n private _isRunning = false;\n\n public IsVideoFilterVisible = false;\n\n private _isDestroyed = false;\n\n public constructor(\n private _http: ZenHttpService) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlay();\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.control) {\n this.setControl(changeObj.control.currentValue);\n }\n\n this.update();\n }\n\n private setControl(control: PlayerControl): void {\n if (control) {\n this.control = control;\n this.control.OnPlay(() => {\n this.startPlay();\n });\n this.control.OnStop(() => {\n this.stopPlay();\n });\n }\n }\n\n private update(): void {\n if (this.source) {\n this.startPlay();\n }\n else {\n this.stopPlay();\n }\n }\n\n private startPlay(): void {\n this.stopPlay();\n this._isRunning = true;\n this.render();\n }\n\n private async render(): Promise<void> {\n if (!this._isRunning ||\n this._isDestroyed) {\n return;\n }\n\n await this.renderFrame();\n this._timer = setTimeout(async () => {\n this.render();\n }, this.interval || 1000);\n }\n\n private async renderFrame(): Promise<void> {\n if (this._isDestroyed) {\n return;\n }\n console.log('Request Snapshot');\n const data = await this._http.post<{ image: string }>(this.source);\n console.log('Render Snapshot');\n if (data && data.image) {\n\n this.snapshot = \"\";\n if (data.image.startsWith(\"http\")) {\n this.snapshot = data.image;\n }\n else {\n this.snapshot = `data:image/jpeg;base64,${data.image}`;\n }\n }\n }\n\n private stopPlay(): void {\n this._isRunning = false;\n clearTimeout(this._timer as number);\n }\n\n\n\n\n}\n","<div class=\"snapshot-player-component\">\n <div class=\"image\"\n [ngStyle]=\"{ 'background-image': snapshot }\"></div>\n\n</div>\n","import { CEvent } from \"../../core/cevent\";\n\nexport class WebRTC {\n\tprivate _peerId!: any;\n\n\tprivate _msg!: any;\n\n\tprivate _wsConnect!: any;\n\n\tprivate _startPlayEvent = new CEvent();\n\n\tprivate _errorServerEvent = new CEvent();\n\n\tprivate _disconnectServerEvent = new CEvent();\n\n\tprivate _onDataEvent = new CEvent();\n\n\tprivate _connectAttempts = 0;\n\n\tprivate _peerConnection!: any\n\n\t/**\n\t * Promise for local stream after constraints are approved by the user\n\t */\n\tprivate local_stream_promise!: any\n\n\tprivate _wsServer!: any;\n\n\tprivate _wsPort!: any\n\n\t// Set this to use a specific peer id instead of a random one\n\tprivate _defaultPeerId!: any\n\n\t// Override with your own STUN servers if you want\n\tprivate rtc_configuration = {\n\t\ticeServers: [{ urls: \"stun:stun.services.mozilla.com\" },\n\t\t{ urls: \"stun:stun.l.google.com:19302\" }]\n\t};\n\n\tprivate _originalSource!: any;\n\n\tprivate _socketConnectionTimer: any = null;\n\n\tpublic constructor(\n\t\tprivate _source: string,\n\t\tprivate _videoElement: HTMLVideoElement) {\n\t}\n\n\tpublic Start(): void {\n\t\tthis.CreateVideoWebRTC();\n\t}\n\n\tpublic Stop(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic Destroy(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic OnPlay(callback: () => void): void {\n\t\tthis._startPlayEvent.on(callback);\n\t}\n\n\tpublic OnData(callback: () => void): void {\n\t\tthis._onDataEvent.on(callback);\n\t}\n\n\tpublic OnError(callback: () => void): void {\n\t\tthis._errorServerEvent.on(callback);\n\t}\n\n\tpublic OnClose(callback: () => void): void {\n\t\tthis._disconnectServerEvent.on(callback);\n\t}\n\n\tprivate CreateVideoWebRTC(): void {\n\t\tthis.DestroyWebRTC();\n\t\tthis._originalSource = this._source;\n\n\t\t// Set this to override the automatic detection in websocketServerConnect()\n\t\tthis.WebsocketServerConnect();\n\t}\n\n\tprivate SetError(errorMsg: string): void {\n\t\tthis.Close();\n\t\tconsole.error(errorMsg);\n\t\tthis._errorServerEvent.fire();\n\t}\n\n\tprivate GetId() {\n\t\treturn Math.floor(Math.random() * (1000000 - 10) + 10).toString();\n\t}\n\n\tprivate WebsocketServerConnect(): void {\n\t\tthis._connectAttempts++;\n\t\tif (this._connectAttempts > 20) {\n\t\t\treturn this.SetError(\"Too many connection attempts, aborting. Refresh page to try again\");\n\t\t}\n\n\t\t// Fetch the peer id to use\n\t\tthis._peerId = this._defaultPeerId || this.GetId();\n\t\tthis._wsPort = this._wsPort || '8443';\n\t\tif (window.location.protocol.indexOf(\"file\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || \"0.0.0.0\";\n\t\t}\n\t\telse if (window.location.protocol.indexOf(\"http\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || window.location.hostname;\n\t\t}\n\t\telse {\n\t\t\treturn this.SetError(\"Don't know how to connect to the signalling server with uri\" + window.location);\n\t\t}\n\t\t//ws_server=\"devmedia1.surfsolutions.com\";\n\t\tconst mediacore_domain = new URL(this._originalSource).hostname;\n\n\t\tthis._wsServer = mediacore_domain;\n\t\tconst ws_url = 'wss://' + this._wsServer + ':' + this._wsPort;\n\t\tthis._wsConnect = new WebSocket(ws_url);\n\n\t\t/* When connected, immediately register with the server */\n\t\tthis._wsConnect.addEventListener('open', (event: any) => {\n\t\t\tthis._wsConnect.send('HELLO ' + this._peerId);\n\t\t\tthis._connectAttempts = 0;\n\t\t});\n\t\tthis._wsConnect.addEventListener('error', this.OnServerError.bind(this));\n\t\tthis._wsConnect.addEventListener('message', this.OnServerMessage.bind(this));\n\t\tthis._wsConnect.addEventListener('close', this.OnServerClose.bind(this));\n\t}\n\n\tprivate OnServerMessage(event: any): void {\n\t\tif (event.data.startsWith(\"ERROR\")) {\n\t\t\tthis.handleIncomingError(event.data);\n\t\t\treturn;\n\t\t}\n\t\tif (event.data.startsWith(\"HELLO\")) {\n\t\t\tlet arr = event.data.split(\" \");\n\t\t\tthis._peerId = arr[1];\n\t\t\tthis.SendMessageToStartCall();\n\t\t\treturn;\n\t\t}\n\t\t// Handle incoming JSON SDP and ICE messages\n\t\ttry {\n\t\t\tthis._msg = JSON.parse(event.data);\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof SyntaxError) {\n\t\t\t\tthis.handleIncomingError(\"Error parsing incoming JSON: \" + event.data);\n\t\t\t} else {\n\t\t\t\tthis.handleIncomingError(\"Unknown error parsing response: \" + event.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Incoming JSON signals the beginning of a call\n\t\tif (!this._peerConnection) {\n\t\t\tthis.CreateCall(this._msg);\n\t\t}\n\n\t\tif (this._msg.sdp != null) {\n\t\t\tthis.OnIncomingSDP(this._msg.sdp);\n\t\t}\n\t\telse if (this._msg.ice != null) {\n\t\t\tthis.OnIncomingICE(this._msg.ice);\n\t\t}\n\t\telse {\n\t\t\tthis.handleIncomingError(\"Unknown incoming JSON: \" + this._msg);\n\t\t}\n\t}\n\n\tprivate CreateCall(msg: any): void {\n\t\t// Reset connection attempts because we connected successfully\n\t\tthis._connectAttempts = 0;\n\n\t\tthis._peerConnection = new RTCPeerConnection(this.rtc_configuration);\n\t\tthis._peerConnection.ontrack = this.OnTrack.bind(this);\n\t\tthis.local_stream_promise = new Promise<void>((resolve, reject) => { resolve() });\n\n\t\t// run checks interval to see if we have a live connection\n\t\tthis.RunDataInterval();\n\n\t\tif (!msg.sdp) {\n\t\t\tconsole.warn(\"WARNING: First message wasn't an SDP message!?\");\n\t\t}\n\n\t\tthis._peerConnection.onicecandidate = (event: any) => {\n\t\t\t// We have a candidate, send it to the remote party with the\n\t\t\t// same uuid\n\t\t\tif (event.candidate == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._wsConnect.send(JSON.stringify({ ice: event.candidate }));\n\t\t};\n\t\tthis._peerConnection.oniceconnectionstatechange = (event: any) => {\n\t\t\tif (this._peerConnection && this._peerConnection.iceConnectionState) {\n\t\t\t\tif (this._peerConnection.iceConnectionState == 'failed') {\n\t\t\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\t\t\tthis.SetError('Failed ice connection state');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate RunDataInterval() {\n\n\t\tlet prevFrames = 0;\n\n\t\tconst interval = setInterval(async () => {\n\t\t\tif (!this._peerConnection) {\n\t\t\t\t// stop checking and exit\n\t\t\t\tclearInterval(interval);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(\"WebRTC state:\", this._peerConnection.connectionState);\n\t\t\tif (this._peerConnection.connectionState == \"connected\") {\n\t\t\t\tconst stat = await this._peerConnection.getStats();\n\n\t\t\t\tfor (const val of stat.values()) {\n\t\t\t\t\tif (val.id && val.type == \"track\") {\n\t\t\t\t\t\tif (typeof val.framesDecoded == \"number\") {\n\t\t\t\t\t\t\tconst framesDecoded = val.framesDecoded;\n\t\t\t\t\t\t\tconst diff = framesDecoded - prevFrames;\n\t\t\t\t\t\t\tconsole.log(`WebRTC frames decoded: ${framesDecoded}`);\n\t\t\t\t\t\t\tif (diff > 1) { \n\t\t\t\t\t\t\t\tprevFrames = framesDecoded;\n\t\t\t\t\t\t\t\tthis._onDataEvent.fire();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 5000);\n\t}\n\n\tprivate OnTrack(event: any): void {\n\n\t\tconsole.log(\"on track\")\n\n\t\tif (!event.streams && event.streams.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stream = event.streams[0];\n\t\tconst videoTracks = stream.getVideoTracks();\n\n\t\tif (videoTracks.length > 0) {\n\t\t\tthis._videoElement.srcObject = stream;\n\t\t\tthis._startPlayEvent.fire();\n\n\t\t} else {\n\t\t\tthis.handleIncomingError('Stream with unknown tracks added, resetting');\n\t\t}\n\t}\n\n\tprivate httpGetAnswer(): void {\n\t\t/* none */\n\t}\n\n\tprivate SendMessageToStartCall(): void {\n\t\tlet theUrl = this._originalSource.replace(\"#PEERID#\", this._peerId.toString());\n\t\t// making the https get call\n\t\tthis.HttpGetAsync(theUrl, this.httpGetAnswer.bind(this));\n\t}\n\n\tprivate HttpGetAsync(theUrl: string, callback: any): void {\n\t\tlet xmlHttp = new XMLHttpRequest();\n\t\txmlHttp.onreadystatechange = () => {\n\t\t\tif (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\n\t\t\t\tcallback(xmlHttp.responseText);\n\t\t\t}\n\t\t\telse if (xmlHttp.readyState == 4) {\n\t\t\t\tif (this._socketConnectionTimer) {\n\t\t\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t\t\t}\n\t\t\t\tthis.SetError(`Wrong response status '${xmlHttp.status}' for request ${theUrl}`);\n\t\t\t}\n\t\t}\n\t\txmlHttp.open(\"GET\", theUrl, true); // true for asynchronous \n\t\txmlHttp.send(null);\n\t}\n\n\tprivate OnIncomingSDP(sdp: any): void {\n\t\tthis._peerConnection.setRemoteDescription(sdp).then(() => {\n\t\t\tif (sdp.type != \"offer\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.local_stream_promise.then((stream: any) => {\n\t\t\t\tthis._peerConnection.createAnswer()\n\t\t\t\t\t.then(this.OnLocalDescription.bind(this)).catch(this.SetError);\n\t\t\t}).catch(this.SetError);\n\t\t}).catch(this.SetError);\n\t}\n\n\t// Local description was set, send it to peer\n\tprivate OnLocalDescription(desc: any): void {\n\t\tthis._peerConnection.setLocalDescription(desc).then(() => {\n\t\t\tlet sdp = { sdp: this._peerConnection.localDescription }\n\t\t\tthis._wsConnect.send(JSON.stringify(sdp));\n\t\t});\n\t}\n\n\t// ICE candidate received from peer, add it to the peer connection\n\tprivate OnIncomingICE(ice: any): void {\n\t\tlet candidate = new RTCIceCandidate(ice);\n\t\tthis._peerConnection.addIceCandidate(candidate).catch(this.SetError);\n\t}\n\n\tprivate ResetState(): void {\n\t\t// This will call OnServerClose()\n\t\tthis._wsConnect.close();\n\t}\n\n\tprivate handleIncomingError(error: any): void {\n\t\tthis.Close();\n\t\tthis.SetError(\"ERROR: \" + error);\n\t}\n\n\tprivate Close(): void {\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\t}\n\n\tprivate OnServerClose(event: any): void {\n\t\tthis.Close();\n\t\tthis._disconnectServerEvent.fire();\n\t}\n\n\tprivate OnServerError(event: any) {\n\t\tthis.SetError(\"Server Connection Error. Reconnecting shortly.....\");\n\t}\n\n\tprivate StopVideo(): void {\n\t\tthis._videoElement.pause();\n\t\tthis._videoElement.src = \"\";\n\t}\n\n\tprivate DestroyWebRTC(): void {\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\n\t\tif (this._wsConnect) {\n\t\t\tthis._wsConnect.close(4000, \"stop\");\n\t\t}\n\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\t}\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { WebRTC } from \"./web-rtc\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-web-rtc-player',\n templateUrl: './web-rtc-player.component.html',\n styleUrls: ['./web-rtc-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenWebRTCPlayerComponent implements OnChanges, OnDestroy {\n\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n @Output() onStartPlay = new EventEmitter<void>();\n\n @Output() onServerError = new EventEmitter<void>();\n\n @Output() onServerDisconnect = new EventEmitter<void>();\n\n public IsLoading = true;\n\n public IsVideoFilterVisible = false;\n\n private _webrtc!: WebRTC;\n\n private _isDestroyed = false;\n\n public constructor(\n private _element: ElementRef\n ) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlayback();\n }\n\n public ngOnChanges(changeObj: any): void {\n\n if (changeObj.source) {\n this.source = changeObj.source.currentValue;\n if (this.source) {\n this.createWebRTC();\n this.Play();\n }\n else {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n }\n }\n }\n\n private createWebRTC(): void {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n\n this._webrtc = new WebRTC(this.source, this.getVideoElement());\n this._webrtc.OnPlay(this.invokeOnStartPlay.bind(this));\n this._webrtc.OnError(this.invokeOnServerError.bind(this));\n this._webrtc.OnClose(this.invokeOnServerDisconnect.bind(this));\n this._webrtc.OnData(this.invokeOnData.bind(this));\n }\n\n private stopPlayback() {\n if (this._webrtc) {\n this._webrtc.Stop();\n }\n }\n\n private Play() {\n if (this._isDestroyed) {\n return;\n }\n if (this._webrtc) {\n this._webrtc.Start();\n }\n }\n\n private getVideoElement() {\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n return element as HTMLVideoElement;\n }\n\n private invokeOnStartPlay(): void {\n if (this._isDestroyed) {\n return;\n }\n }\n\n private invokeOnData() {\n if (this._isDestroyed) {\n return;\n }\n if (!this.control) {\n return;\n }\n this.control.EmitData();\n }\n\n private invokeOnServerError(): void {\n if (this.onServerError) {\n this.onServerError.emit();\n }\n }\n\n private invokeOnServerDisconnect(): void {\n if (this.onServerDisconnect) {\n this.onServerDisconnect.emit();\n }\n }\n\n}\n","<div class=\"web-rtc-player\">\n\n <video class=\"web-rtc-player-id\"\n ng-hide=\"IsShowSnapshotPlayer\"\n muted\n controls\n webkit-playsinline=\"true\"\n playsinline=\"true\"\n autoplay=\"\"></video>\n\n</div>\n\n<div class=\"customEventDiv\"></div>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\nexport type ZenLiveViewPlayerType = 'html5' | 'flv' | 'webrtc' | 'snapshot' | 'hls' | 'unknown';\n\n@Component({\n selector: 'zen-live-view-player',\n templateUrl: './live-view-player.component.html',\n styleUrls: ['./live-view-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenLiveViewPlayerComponent implements OnDestroy {\n @Input() control!: PlayerControl;\n\n @Input() source!: string;\n\n @Input() playerType: ZenLiveViewPlayerType = \"unknown\";\n\n @Input() snapshotInterval!: number;\n\n /**\n * Playback timeout. It uses for streamax live streaming. \n */\n @Input() timeout!: number;\n\n @Output() onData = new EventEmitter<void>();\n\n private _controlPlayHander!: number;\n\n private _controlStopHander!: number;\n\n public IsLoading = true;\n\n constructor() {\n this.control = new PlayerControl();\n this.control.OnData(() => {\n this.onData.emit();\n })\n }\n\n public ngOnDestroy(): void {\n if (this.control) {\n if (this._controlPlayHander) {\n this.control.OffPlay(this._controlPlayHander);\n }\n\n if (this._controlStopHander) {\n this.control.OffStop(this._controlStopHander);\n }\n }\n }\n\n\n\n}\n","@if (playerType == 'webrtc') {\n <zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n ></zen-web-rtc-player>\n}\n\n@if (playerType == 'snapshot') {\n <zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n ></zen-snapshot-player>\n}\n\n@if (playerType == 'flv') {\n <zen-flv-player [source]=\"source\"\n [control]=\"control\"\n ></zen-flv-player>\n}\n\n@if (playerType == 'hls') {\n <zen-hls-player [source]=\"source\"\n [control]=\"control\"\n ></zen-hls-player>\n}\n\n@if (playerType == 'html5') {\n <zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n ></zen-html5-video-player>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\n\nexport type TimePickerMode = 'clock' | 'duration';\n\nexport interface TimePickerValue {\n hours: number;\n minutes: number;\n seconds: number;\n period?: 'AM' | 'PM';\n}\n\n@Component({\n selector: 'zen-timepicker',\n templateUrl: './zendu-timepicker.component.html',\n styleUrls: ['./zendu-timepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduTimepickerComponent implements OnInit, OnChanges {\n @Input() mode: TimePickerMode = 'clock';\n @Input() label: string;\n @Input() value: TimePickerValue;\n @Input() showSeconds: boolean = false;\n @Input() showHours: boolean = true;\n @Input() disabled: boolean = false;\n @Input() readonly: boolean = false;\n @Input() placeholder: string;\n @Input() width: string;\n\n @Output() valueChange = new EventEmitter<TimePickerValue>();\n @Output() apply = new EventEmitter<TimePickerValue>();\n @Output() clear = new EventEmitter<void>();\n\n isPickerVisible = false;\n\n selectedHours = 0;\n selectedMinutes = 0;\n selectedSeconds = 0;\n selectedPeriod: 'AM' | 'PM' = 'AM';\n\n // Zero-padded display strings for the input fields\n hoursDisplay = '00';\n minutesDisplay = '00';\n secondsDisplay = '00';\n\n right = false;\n bottom = false;\n\n private maxHour = 12;\n private minHour = 1;\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideClick(event: MouseEvent): void {\n if (!document.body.contains(event.target as Node)) {\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.isPickerVisible = false;\n }\n\n get defaultLabel(): string {\n return this.mode === 'clock' ? 'Select a time' : 'Stop Duration';\n }\n\n get defaultPlaceholder(): string {\n if (this.placeholder) return this.placeholder;\n if (this.mode === 'clock') return 'Select Time';\n if (!this.showHours && this.showSeconds) return '0 min 0 sec';\n if (!this.showHours) return '0 min';\n return '0 min';\n }\n\n get formattedDisplayValue(): string {\n if (!this.value) return '';\n\n if (this.mode === 'clock') {\n const h = this.formatNum(this.value.hours);\n const m = this.formatNum(this.value.minutes);\n const s = this.formatNum(this.value.seconds);\n\n if (!this.showHours) {\n return this.showSeconds ? `${m}.${s} ${this.value.period || 'AM'}` : `${m} ${this.value.period || 'AM'}`;\n }\n if (this.showSeconds) {\n return `${h}.${m}.${s} ${this.value.period || 'AM'}`;\n }\n return `${h}.${m} ${this.value.period || 'AM'}`;\n }\n\n // Duration mode\n const parts: string[] = [];\n if (this.showHours && this.value.hours > 0) {\n parts.push(`${this.value.hours} hr`);\n }\n if (this.value.minutes > 0) {\n parts.push(`${this.value.minutes} min`);\n }\n if (this.showSeconds && this.value.seconds > 0) {\n parts.push(`${this.value.seconds} sec`);\n }\n return parts.length > 0 ? parts.join(' ') : '0 min';\n }\n\n ngOnInit(): void {\n this.updateHourLimits();\n if (this.value) {\n this.applyValue(this.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['mode']) {\n this.updateHourLimits();\n }\n if (changes['value'] && this.value) {\n this.applyValue(this.value);\n }\n }\n\n togglePicker(): void {\n if (this.disabled || this.readonly) return;\n this.isPickerVisible = !this.isPickerVisible;\n if (this.isPickerVisible) {\n if (this.value) {\n this.applyValue(this.value);\n }\n this.updatePlacement();\n }\n }\n\n // ─── Increment / Decrement ───\n\n incrementHours(): void {\n this.selectedHours = this.selectedHours >= this.maxHour ? this.minHour : this.selectedHours + 1;\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n decrementHours(): void {\n this.selectedHours = this.selectedHours <= this.minHour ? this.maxHour : this.selectedHours - 1;\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n incrementMinutes(): void {\n this.selectedMinutes = this.selectedMinutes >= 59 ? 0 : this.selectedMinutes + 1;\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n decrementMinutes(): void {\n this.selectedMinutes = this.selectedMinutes <= 0 ? 59 : this.selectedMinutes - 1;\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n incrementSeconds(): void {\n this.selectedSeconds = this.selectedSeconds >= 59 ? 0 : this.selectedSeconds + 1;\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n decrementSeconds(): void {\n this.selectedSeconds = this.selectedSeconds <= 0 ? 59 : this.selectedSeconds - 1;\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n // ─── Direct Input ───\n\n onHoursInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedHours = this.minHour;\n this.hoursDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val <= this.maxHour) {\n this.selectedHours = Math.max(this.minHour, val);\n this.hoursDisplay = raw;\n } else {\n input.value = this.hoursDisplay;\n }\n }\n\n onMinutesInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedMinutes = 0;\n this.minutesDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this.selectedMinutes = val;\n this.minutesDisplay = raw;\n } else {\n input.value = this.minutesDisplay;\n }\n }\n\n onSecondsInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedSeconds = 0;\n this.secondsDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this.selectedSeconds = val;\n this.secondsDisplay = raw;\n } else {\n input.value = this.secondsDisplay;\n }\n }\n\n onFocus(event: Event): void {\n const input = event.target as HTMLInputElement;\n input.select();\n }\n\n clampHours(): void {\n this.selectedHours = Math.max(this.minHour, Math.min(this.maxHour, this.selectedHours));\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n clampMinutes(): void {\n this.selectedMinutes = Math.max(0, Math.min(59, this.selectedMinutes));\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n clampSeconds(): void {\n this.selectedSeconds = Math.max(0, Math.min(59, this.selectedSeconds));\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n onInputKeydown(event: KeyboardEvent, type: 'hours' | 'minutes' | 'seconds'): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hours') this.incrementHours();\n else if (type === 'minutes') this.incrementMinutes();\n else this.incrementSeconds();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hours') this.decrementHours();\n else if (type === 'minutes') this.decrementMinutes();\n else this.decrementSeconds();\n }\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod = period;\n }\n\n formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n onApply(): void {\n const val = this.getCurrentValue();\n this.value = val;\n this.valueChange.emit(val);\n this.apply.emit(val);\n this.isPickerVisible = false;\n }\n\n onClear(): void {\n this.selectedHours = this.mode === 'clock' ? 12 : 0;\n this.selectedMinutes = 0;\n this.selectedSeconds = 0;\n this.selectedPeriod = 'AM';\n this.hoursDisplay = this.formatNum(this.selectedHours);\n this.minutesDisplay = '00';\n this.secondsDisplay = '00';\n this.value = null;\n this.valueChange.emit(null);\n this.clear.emit();\n this.isPickerVisible = false;\n }\n\n // ─── Private ───\n\n private updatePlacement(): void {\n this.right = false;\n this.bottom = false;\n const el = this._element.nativeElement;\n const rect = el.getBoundingClientRect();\n if (rect.left > window.innerWidth / 2) {\n this.right = true;\n }\n if (rect.top > window.innerHeight / 2) {\n this.bottom = true;\n }\n }\n\n private updateHourLimits(): void {\n if (this.mode === 'clock') {\n this.maxHour = 12;\n this.minHour = 1;\n if (this.selectedHours === 0 && this.showHours) this.selectedHours = 12;\n } else {\n this.maxHour = 23;\n this.minHour = 0;\n }\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n private applyValue(val: TimePickerValue): void {\n this.selectedHours = Math.max(this.minHour, Math.min(this.maxHour, val.hours || 0));\n this.selectedMinutes = Math.max(0, Math.min(59, val.minutes || 0));\n this.selectedSeconds = Math.max(0, Math.min(59, val.seconds || 0));\n this.hoursDisplay = this.formatNum(this.selectedHours);\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n if (val.period) {\n this.selectedPeriod = val.period;\n }\n }\n\n private getCurrentValue(): TimePickerValue {\n const val: TimePickerValue = {\n hours: this.selectedHours,\n minutes: this.selectedMinutes,\n seconds: this.selectedSeconds,\n };\n if (this.mode === 'clock') {\n val.period = this.selectedPeriod;\n }\n return val;\n }\n}\n","<div class=\"zen-tp\">\n <!-- Input toggle button -->\n <button class=\"zen-tp__toggle zen-tp__toggle--box\"\n [class.zen-tp__toggle--active]=\"isPickerVisible\"\n [class.zen-tp__toggle--disabled]=\"disabled\"\n [class.zen-tp__toggle--readonly]=\"readonly\"\n [style.width]=\"width || null\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\">\n <span class=\"zen-tp__display\" [class.zen-tp__display--placeholder]=\"!value\">\n {{ value ? formattedDisplayValue : defaultPlaceholder }}\n </span>\n <zen-icon class=\"zen-tp__icon\"\n [class.zen-tp__icon--filled]=\"value\"\n src=\"assets/ng-zenduit/icons/time.svg\">\n </zen-icon>\n </button>\n\n <!-- Picker dropdown -->\n @if (isPickerVisible) {\n <div class=\"zen-tp__dropdown\"\n #pickerPopup\n [class.zen-tp__dropdown--right]=\"right\"\n [class.zen-tp__dropdown--bottom]=\"bottom\">\n <div class=\"zen-tp__popup\">\n <!-- Header -->\n <div class=\"zen-tp__popup-label\">{{ label || defaultLabel }}</div>\n <!-- Time fields -->\n <div class=\"zen-tp__fields\">\n <!-- Hours -->\n @if (showHours) {\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Hours\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"hoursDisplay\"\n (input)=\"onHoursInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampHours()\"\n (keydown)=\"onInputKeydown($event, 'hours')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementHours()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementHours()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">HRS</span>\n </div>\n }\n @if (showHours) {\n <span class=\"zen-tp__colon\">:</span>\n }\n <!-- Minutes -->\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Minutes\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"minutesDisplay\"\n (input)=\"onMinutesInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampMinutes()\"\n (keydown)=\"onInputKeydown($event, 'minutes')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementMinutes()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementMinutes()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">MIN</span>\n </div>\n <!-- Seconds (duration mode or when showSeconds) -->\n @if (showSeconds) {\n <span class=\"zen-tp__colon\">:</span>\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Seconds\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"secondsDisplay\"\n (input)=\"onSecondsInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampSeconds()\"\n (keydown)=\"onInputKeydown($event, 'seconds')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementSeconds()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementSeconds()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">SEC</span>\n </div>\n }\n <!-- AM/PM Toggle (Clock mode only) -->\n @if (mode === 'clock') {\n <div class=\"zen-tp__period\">\n <button class=\"zen-tp__period-btn\"\n type=\"button\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'AM'\"\n (click)=\"selectPeriod('AM')\">\n AM\n </button>\n <button class=\"zen-tp__period-btn\"\n type=\"button\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'PM'\"\n (click)=\"selectPeriod('PM')\">\n PM\n </button>\n </div>\n }\n </div>\n <!-- Divider -->\n <div class=\"zen-tp__divider\"></div>\n <!-- Actions -->\n <div class=\"zen-tp__actions\">\n <button class=\"zen-tp__btn zen-tp__btn--clear\" type=\"button\" (click)=\"onClear()\">Clear</button>\n <button class=\"zen-tp__btn zen-tp__btn--apply\" type=\"button\" (click)=\"onApply()\">Apply</button>\n </div>\n </div>\n </div>\n }\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport type DatePickerDropdownType = 'single' | 'range';\n\nexport interface DatePickerPreset {\n label: string;\n getRange: () => { start: Date; end: Date };\n}\n\nexport const ZEN_DATE_PICKER_DEFAULT_PRESETS =\n new InjectionToken<DatePickerPreset[]>('ZEN_DATE_PICKER_DEFAULT_PRESETS');\n\nexport interface DateRangeValue {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface DatePickerMarker {\n title?: string;\n color?: string;\n dates: number[];\n}\n","import {\n Component, ElementRef, EventEmitter, HostListener, Inject, Input,\n OnChanges, OnDestroy, OnInit, Optional, Output, SimpleChanges, ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from '../datepicker/date-picker-day';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n DatePickerDropdownType, DatePickerMarker, DatePickerPreset, DateRangeValue,\n ZEN_DATE_PICKER_DEFAULT_PRESETS\n} from './date-picker-dropdown.types';\n\nconst MOBILE_BREAKPOINT = 768;\n\n@Component({\n selector: 'zen-date-picker-dropdown',\n templateUrl: './zendu-date-picker-dropdown.component.html',\n styleUrls: ['./zendu-date-picker-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDatePickerDropdownComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() type: DatePickerDropdownType = 'single';\n @Input() date: Date | null = null;\n @Output() dateChange = new EventEmitter<Date | null>();\n\n @Input() startDate: Date | null = null;\n @Output() startDateChange = new EventEmitter<Date | null>();\n\n @Input() endDate: Date | null = null;\n @Output() endDateChange = new EventEmitter<Date | null>();\n\n @Output() rangeChange = new EventEmitter<DateRangeValue>();\n\n @Input() presets: DatePickerPreset[] | null = null;\n @Input() minDate: Date | null = null;\n @Input() maxDate: Date | null = null;\n @Input() disabled: boolean = false;\n @Input() dateMarkers: DatePickerMarker[] = [];\n @Input() placeholder: string = '';\n @Input() mobileBreakpoint: number = MOBILE_BREAKPOINT;\n @Input() timePicker: boolean = false;\n @Input() autoApply: boolean = false;\n\n @ViewChild('triggerBtn') triggerBtn!: ElementRef;\n\n mobile = false;\n isOpen = false;\n dropdownStyle: { [key: string]: string } = {};\n\n // Left calendar state\n leftCurrentSlot = new Date();\n leftDayRows: Array<{ days: DatePickerDay[] }> = [];\n leftDaysTitle = '';\n\n // Right calendar state (for range desktop)\n rightCurrentSlot = new Date();\n rightDayRows: Array<{ days: DatePickerDay[] }> = [];\n rightDaysTitle = '';\n\n weekDays = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sat', 'Su'];\n\n // Internal selection state\n _selectedDate: Date | null = null;\n _selectedStart: Date | null = null;\n _selectedEnd: Date | null = null;\n _activePreset: string | null = null;\n _appliedPresetLabel: string | null = null;\n _appliedPresetStartTime: number | null = null;\n _appliedPresetEndTime: number | null = null;\n\n // Time picker state\n _hours: number = 12;\n _minutes: number = 0;\n _period: 'AM' | 'PM' = 'AM';\n _hoursDisplay: string = '12';\n _minutesDisplay: string = '00';\n\n defaultPresets: DatePickerPreset[] = [\n {\n label: 'Today',\n getRange: () => ({\n start: moment().startOf('day').toDate(),\n end: moment().endOf('day').toDate()\n })\n },\n {\n label: 'Yesterday',\n getRange: () => ({\n start: moment().subtract(1, 'day').startOf('day').toDate(),\n end: moment().subtract(1, 'day').endOf('day').toDate()\n })\n },\n {\n label: 'This week',\n getRange: () => ({\n start: moment().startOf('isoWeek').toDate(),\n end: moment().endOf('isoWeek').toDate()\n })\n },\n {\n label: 'Last week',\n getRange: () => ({\n start: moment().subtract(1, 'week').startOf('isoWeek').toDate(),\n end: moment().subtract(1, 'week').endOf('isoWeek').toDate()\n })\n },\n {\n label: 'This month',\n getRange: () => ({\n start: moment().startOf('month').toDate(),\n end: moment().endOf('month').toDate()\n })\n },\n {\n label: 'Last month',\n getRange: () => ({\n start: moment().subtract(1, 'month').startOf('month').toDate(),\n end: moment().subtract(1, 'month').endOf('month').toDate()\n })\n }\n ];\n\n constructor(\n private _element: ElementRef,\n private _translate: TranslateService,\n @Optional() @Inject(ZEN_DATE_PICKER_DEFAULT_PRESETS) globalPresets: DatePickerPreset[] | null\n ) {\n if (globalPresets && globalPresets.length) {\n this.defaultPresets = globalPresets;\n }\n }\n\n ngOnInit(): void {\n this.checkMobile();\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n }\n\n private checkMobile() {\n this.mobile = window.innerWidth < this.mobileBreakpoint;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['date'] && this.date) {\n this._selectedDate = new Date(this.date);\n }\n if (changes['startDate'] && this.startDate) {\n this._selectedStart = new Date(this.startDate);\n }\n if (changes['endDate'] && this.endDate) {\n this._selectedEnd = new Date(this.endDate);\n }\n }\n\n ngOnDestroy(): void { }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isOpen) return;\n if (!document.body.contains(event.target as Node)) return;\n if (this._element.nativeElement.contains(event.target)) return;\n this.close();\n }\n\n get activePresets(): DatePickerPreset[] {\n return this.presets || this.defaultPresets;\n }\n\n get showPresetsSidebar(): boolean {\n return this.type === 'range' && !this.mobile;\n }\n\n get showDualCalendars(): boolean {\n return this.type === 'range' && !this.mobile;\n }\n\n get triggerLabel(): string {\n if (this.type === 'single') {\n if (this.date) {\n return this.formatDate(this.date);\n }\n return this.placeholder || this._translate.instant('Select date');\n }\n if (this.startDate && this.endDate) {\n if (this._appliedPresetLabel\n && this.startDate.getTime() === this._appliedPresetStartTime\n && this.endDate.getTime() === this._appliedPresetEndTime) {\n return this._translate.instant(this._appliedPresetLabel);\n }\n // Show the preset name when the range matches one\n const presetLabel = this.matchingPresetLabel(this.startDate, this.endDate);\n if (presetLabel) {\n return this._translate.instant(presetLabel);\n }\n return `${this.formatDate(this.startDate)} - ${this.formatDate(this.endDate)}`;\n }\n return this.placeholder || this._translate.instant('Select dates');\n }\n\n private matchingPresetLabel(start: Date, end: Date): string | null {\n for (const preset of this.activePresets) {\n const range = preset.getRange();\n if (range.start && range.end\n && moment(start).isSame(range.start, 'day')\n && moment(end).isSame(range.end, 'day')) {\n return preset.label;\n }\n }\n return null;\n }\n\n get legendMarkers(): DatePickerMarker[] {\n return (this.dateMarkers || []).filter(m => !!m.title);\n }\n\n get hasValue(): boolean {\n if (this.type === 'single') return !!this.date;\n return !!(this.startDate && this.endDate);\n }\n\n get formattedSelectedDate(): string {\n return this._selectedDate ? this.formatDate(this._selectedDate) : '';\n }\n\n get formattedStartDate(): string {\n return this._selectedStart ? this.formatDate(this._selectedStart) : '';\n }\n\n get formattedEndDate(): string {\n return this._selectedEnd ? this.formatDate(this._selectedEnd) : '';\n }\n\n formatDate(date: Date): string {\n const enMonth = moment(date).format('MMM');\n const translatedMonth = this._translate.instant(enMonth);\n let formatted = moment(date).format('MMM D, YYYY').replace(enMonth, translatedMonth);\n if (this.timePicker) {\n formatted += ' ' + this.formatTime(date);\n }\n return formatted;\n }\n\n private formatTime(date: Date): string {\n let h = date.getHours();\n const m = date.getMinutes();\n const period = h >= 12 ? 'PM' : 'AM';\n if (h === 0) h = 12;\n else if (h > 12) h -= 12;\n return `${this.formatNum(h)}:${this.formatNum(m)} ${period}`;\n }\n\n toggle() {\n if (this.disabled) return;\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open() {\n this.isOpen = true;\n this._selectedDate = this.date ? new Date(this.date) : null;\n this._selectedStart = this.startDate ? new Date(this.startDate) : null;\n this._selectedEnd = this.endDate ? new Date(this.endDate) : null;\n this._activePreset = (this._appliedPresetLabel\n && this.startDate?.getTime() === this._appliedPresetStartTime\n && this.endDate?.getTime() === this._appliedPresetEndTime)\n ? this._appliedPresetLabel\n : null;\n\n if (this.timePicker) {\n this.initTimeFromDate(this.type === 'single' ? this.date : this.startDate);\n }\n\n if (this.type === 'single') {\n this.leftCurrentSlot = this._selectedDate ? new Date(this._selectedDate) : new Date();\n } else {\n this.leftCurrentSlot = this._selectedStart ? new Date(this._selectedStart) : new Date();\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n\n this.updateCalendars();\n this.updateDropdownPosition();\n }\n\n private updateDropdownPosition() {\n if (!this.triggerBtn) return;\n\n // Place below the trigger synchronously so the panel opens without a flash\n const rect = this.triggerBtn.nativeElement.getBoundingClientRect();\n this.dropdownStyle = {\n left: `${rect.left}px`,\n top: `${rect.bottom + 8}px`\n };\n\n // Once rendered, flip above or pin to the viewport if it overflows\n requestAnimationFrame(() => {\n const dropdownEl = this._element.nativeElement.querySelector('.dropdown-menu');\n if (!dropdownEl) return;\n\n const r = this.triggerBtn.nativeElement.getBoundingClientRect();\n const dropdownHeight = dropdownEl.scrollHeight;\n const spaceBelow = window.innerHeight - r.bottom - 8;\n const spaceAbove = r.top - 8;\n const margin = 16;\n const viewportHeight = window.innerHeight;\n\n if (spaceBelow >= dropdownHeight) {\n return;\n }\n\n const style: { [key: string]: string } = { left: `${r.left}px` };\n\n if (spaceAbove >= dropdownHeight) {\n // Fits above the trigger\n style['bottom'] = `${viewportHeight - r.top + 8}px`;\n } else {\n // Doesn't fit either way — pin to viewport so full content is visible\n const top = Math.max(margin, viewportHeight - dropdownHeight - margin);\n style['top'] = `${top}px`;\n style['max-height'] = `${viewportHeight - top - margin}px`;\n }\n\n this.dropdownStyle = style;\n });\n }\n\n close() {\n this.isOpen = false;\n }\n\n // Calendar navigation\n leftPrevMonth() {\n this.leftCurrentSlot = moment(this.leftCurrentSlot).subtract(1, 'month').toDate();\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n leftNextMonth() {\n this.leftCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n rightPrevMonth() {\n this.rightCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.leftCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.updateCalendars();\n }\n\n rightNextMonth() {\n this.rightCurrentSlot = moment(this.rightCurrentSlot).add(1, 'month').toDate();\n this.leftCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.updateCalendars();\n }\n\n // For mobile/single mode when there's only one calendar\n prevMonth() {\n this.leftPrevMonth();\n }\n\n nextMonth() {\n this.leftNextMonth();\n }\n\n selectDay(day: DatePickerDay) {\n if (day.isDisabled || day.isOutside) return;\n\n if (this.type === 'single') {\n this._selectedDate = new Date(day.date);\n if (this.autoApply) {\n this.apply();\n return;\n }\n } else {\n // Range selection logic — start anchors to start-of-day, end to end-of-day,\n // so a same-day pick spans the full 24h (matches preset semantics).\n if (!this._selectedStart || (this._selectedStart && this._selectedEnd)) {\n // Start new selection\n this._selectedStart = moment(day.date).startOf('day').toDate();\n this._selectedEnd = null;\n this._activePreset = null;\n } else {\n // Complete the range\n const newDay = moment(day.date).startOf('day').toDate();\n if (moment(newDay).isBefore(this._selectedStart)) {\n this._selectedEnd = moment(this._selectedStart).endOf('day').toDate();\n this._selectedStart = newDay;\n } else {\n this._selectedEnd = moment(newDay).endOf('day').toDate();\n }\n }\n }\n this.updateCalendars();\n }\n\n selectPreset(preset: DatePickerPreset) {\n const range = preset.getRange();\n this._selectedStart = range.start;\n this._selectedEnd = range.end;\n this._activePreset = preset.label;\n this.leftCurrentSlot = new Date(range.start);\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n goToToday() {\n const today = new Date();\n this._selectedDate = moment(today).startOf('day').toDate();\n this.leftCurrentSlot = new Date(today);\n this.updateCalendars();\n }\n\n // Time picker methods\n private formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n incrementHours() {\n this._hours = this._hours >= 12 ? 1 : this._hours + 1;\n this._hoursDisplay = this.formatNum(this._hours);\n }\n\n decrementHours() {\n this._hours = this._hours <= 1 ? 12 : this._hours - 1;\n this._hoursDisplay = this.formatNum(this._hours);\n }\n\n incrementMinutes() {\n this._minutes = this._minutes >= 59 ? 0 : this._minutes + 1;\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n\n decrementMinutes() {\n this._minutes = this._minutes <= 0 ? 59 : this._minutes - 1;\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n\n onHoursInput(event: Event) {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this._hours = 1;\n this._hoursDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 1 && val <= 12) {\n this._hours = val;\n this._hoursDisplay = raw;\n } else {\n input.value = this._hoursDisplay;\n }\n }\n\n onMinutesInput(event: Event) {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this._minutes = 0;\n this._minutesDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this._minutes = val;\n this._minutesDisplay = raw;\n } else {\n input.value = this._minutesDisplay;\n }\n }\n\n clampHours() {\n this._hours = Math.max(1, Math.min(12, this._hours));\n this._hoursDisplay = this.formatNum(this._hours);\n }\n\n clampMinutes() {\n this._minutes = Math.max(0, Math.min(59, this._minutes));\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n\n onTimeFocus(event: Event) {\n const input = event.target as HTMLInputElement;\n input.select();\n }\n\n onTimeKeydown(event: KeyboardEvent, type: 'hours' | 'minutes') {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hours') this.incrementHours();\n else this.incrementMinutes();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hours') this.decrementHours();\n else this.decrementMinutes();\n }\n }\n\n setPeriod(period: 'AM' | 'PM') {\n this._period = period;\n }\n\n private applyTimeToDate(date: Date): Date {\n const result = new Date(date);\n let hours = this._hours;\n if (this._period === 'AM' && hours === 12) {\n hours = 0;\n } else if (this._period === 'PM' && hours !== 12) {\n hours += 12;\n }\n result.setHours(hours, this._minutes, 0, 0);\n return result;\n }\n\n private initTimeFromDate(date: Date | null) {\n if (!date) {\n this._hours = 12;\n this._minutes = 0;\n this._period = 'AM';\n } else {\n let h = date.getHours();\n this._minutes = date.getMinutes();\n if (h === 0) {\n this._hours = 12;\n this._period = 'AM';\n } else if (h < 12) {\n this._hours = h;\n this._period = 'AM';\n } else if (h === 12) {\n this._hours = 12;\n this._period = 'PM';\n } else {\n this._hours = h - 12;\n this._period = 'PM';\n }\n }\n this._hoursDisplay = this.formatNum(this._hours);\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n\n apply() {\n if (this.type === 'single') {\n if (this._selectedDate) {\n this.date = this.timePicker\n ? this.applyTimeToDate(this._selectedDate)\n : new Date(this._selectedDate);\n this.dateChange.emit(this.date);\n }\n } else {\n if (this._selectedStart) {\n this.startDate = this.timePicker\n ? this.applyTimeToDate(this._selectedStart)\n : new Date(this._selectedStart);\n this.startDateChange.emit(this.startDate);\n }\n if (this._selectedEnd) {\n this.endDate = this.timePicker\n ? this.applyTimeToDate(this._selectedEnd)\n : new Date(this._selectedEnd);\n this.endDateChange.emit(this.endDate);\n }\n if (this._selectedStart && this._selectedEnd) {\n this.rangeChange.emit({ start: this.startDate, end: this.endDate });\n }\n if (this._activePreset && this.startDate && this.endDate) {\n this._appliedPresetLabel = this._activePreset;\n this._appliedPresetStartTime = this.startDate.getTime();\n this._appliedPresetEndTime = this.endDate.getTime();\n } else {\n this._appliedPresetLabel = null;\n this._appliedPresetStartTime = null;\n this._appliedPresetEndTime = null;\n }\n }\n this.close();\n }\n\n cancel() {\n this.close();\n }\n\n get canApply(): boolean {\n if (this.type === 'single') return !!this._selectedDate;\n return !!(this._selectedStart && this._selectedEnd);\n }\n\n private updateCalendars() {\n this.updateDays(this.leftCurrentSlot, 'left');\n if (this.showDualCalendars) {\n this.updateDays(this.rightCurrentSlot, 'right');\n }\n }\n\n private updateDays(slot: Date, side: 'left' | 'right') {\n const title = moment(slot).format('MMMM YYYY');\n\n const dayRows: Array<{ days: DatePickerDay[] }> = [];\n let current = moment(slot).startOf('month').startOf('isoWeek');\n const end = moment(slot).endOf('month').endOf('isoWeek');\n const currentMonth = moment(slot).month();\n\n while (current.isSameOrBefore(end)) {\n const row = { days: [] as DatePickerDay[] };\n dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n const isOutside = currentMonth !== current.month();\n\n let isDisabled = false;\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let markerColors: (string | undefined)[] | undefined;\n if (!isOutside && this.dateMarkers && this.dateMarkers.length) {\n const ts = current.valueOf();\n const colors: (string | undefined)[] = [];\n for (const m of this.dateMarkers) {\n if (m.dates && m.dates.indexOf(ts) >= 0) {\n colors.push(m.color);\n }\n }\n if (colors.length) markerColors = colors;\n }\n\n const isSelected = isOutside ? false : this.isDaySelected(current);\n\n row.days.push({\n date: current.toDate(),\n lbl: isOutside ? '' : current.date().toString(),\n isOutside,\n selected: isSelected,\n isDisabled: isOutside ? true : isDisabled,\n isHighlighted: false,\n markerColors\n });\n\n current = current.clone().add(1, 'day');\n }\n }\n\n if (side === 'left') {\n this.leftDayRows = dayRows;\n this.leftDaysTitle = title;\n } else {\n this.rightDayRows = dayRows;\n this.rightDaysTitle = title;\n }\n }\n\n private isDaySelected(date: moment.Moment): boolean {\n if (this.type === 'single') {\n return this._selectedDate ? date.isSame(moment(this._selectedDate), 'day') : false;\n }\n if (this._selectedStart && date.isSame(moment(this._selectedStart), 'day')) return true;\n if (this._selectedEnd && date.isSame(moment(this._selectedEnd), 'day')) return true;\n return false;\n }\n\n isToday(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n return moment(day.date).isSame(moment(), 'day');\n }\n\n isInRange(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedStart || !this._selectedEnd) return false;\n const d = moment(day.date);\n return d.isAfter(moment(this._selectedStart), 'day') && d.isBefore(moment(this._selectedEnd), 'day');\n }\n\n isRangeStart(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedStart) return false;\n return moment(day.date).isSame(moment(this._selectedStart), 'day');\n }\n\n isRangeEnd(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedEnd) return false;\n return moment(day.date).isSame(moment(this._selectedEnd), 'day');\n }\n}\n","<div class=\"zen-dpd\">\n <!-- Trigger Button -->\n <button class=\"dropdown-trigger\"\n #triggerBtn\n [disabled]=\"disabled\"\n [class.active]=\"isOpen\"\n [class.has-value]=\"hasValue\"\n (click)=\"toggle()\">\n <zen-icon class=\"trigger-icon\"\n src=\"assets/ng-zenduit/icons/calendar.svg\">\n </zen-icon>\n <span class=\"trigger-label\">{{ triggerLabel }}</span>\n </button>\n\n <!-- Dropdown Panel -->\n @if (isOpen) {\n <div class=\"dropdown-menu\" [class.mobile]=\"mobile\" [ngStyle]=\"dropdownStyle\">\n <!-- RANGE DESKTOP: presets sidebar + dual calendar -->\n @if (type === 'range' && !mobile) {\n <!-- Presets sidebar -->\n <div class=\"presets-sidebar\">\n @for (preset of activePresets; track preset) {\n <div class=\"preset-item\"\n [class.active]=\"_activePreset === preset.label\"\n (click)=\"selectPreset(preset)\">\n {{ preset.label | translate }}\n </div>\n }\n </div>\n <div class=\"sidebar-divider\"></div>\n <!-- Calendars + bottom panel -->\n <div class=\"calendars-container\">\n <div class=\"dual-calendars\">\n <!-- Left calendar -->\n <div class=\"calendar-panel\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"leftPrevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"leftNextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n </div>\n <div class=\"calendar-divider\"></div>\n <!-- Right calendar -->\n <div class=\"calendar-panel\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"rightPrevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ rightDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"rightNextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: rightDayRows }\"></ng-container>\n </div>\n </div>\n </div>\n <!-- Time Picker -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n }\n <div class=\"bottom-divider\"></div>\n <!-- Bottom panel: inputs (or legend) + actions -->\n <div class=\"bottom-panel\">\n @if (legendMarkers.length) {\n <div class=\"marker-legend\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n } @else {\n <div class=\"input-fields\">\n <div class=\"date-input\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedStart\">\n {{ _selectedStart ? formattedStartDate : ('Start date' | translate) }}\n </span>\n </div>\n <span class=\"date-separator\">–</span>\n <div class=\"date-input\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedEnd\">\n {{ _selectedEnd ? formattedEndDate : ('End date' | translate) }}\n </span>\n </div>\n </div>\n }\n <div class=\"actions\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n </div>\n }\n <!-- RANGE MOBILE: single calendar with dual inputs on top -->\n @if (type === 'range' && mobile) {\n <div class=\"single-calendar-container\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"nextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <!-- Range inputs -->\n <div class=\"mobile-range-inputs\">\n <div class=\"date-input compact\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedStart\">\n {{ _selectedStart ? formattedStartDate : ('Select date' | translate) }}\n </span>\n </div>\n <span class=\"date-separator\">–</span>\n <div class=\"date-input compact\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedEnd\">\n {{ _selectedEnd ? formattedEndDate : ('Select date' | translate) }}\n </span>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n <!-- Time Picker -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n }\n @if (legendMarkers.length) {\n <div class=\"marker-legend standalone\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n }\n <div class=\"bottom-divider\"></div>\n <div class=\"bottom-panel compact\">\n <div class=\"actions full-width\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n </div>\n }\n <!-- SINGLE DATE: single calendar + input + today button -->\n @if (type === 'single') {\n <div class=\"single-calendar-container\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"nextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <!-- Date input + Today button -->\n <div class=\"single-actions-row\">\n <div class=\"date-input flex-1\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedDate\">\n {{ _selectedDate ? formattedSelectedDate : ('Select date' | translate) }}\n </span>\n </div>\n <button class=\"btn-today\" (click)=\"goToToday()\">{{ 'Today' | translate }}</button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n <!-- Time Picker -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n }\n @if (legendMarkers.length) {\n <div class=\"marker-legend standalone single\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n }\n @if (!autoApply) {\n <div class=\"bottom-divider\"></div>\n <div class=\"bottom-panel compact\">\n <div class=\"actions full-width\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Shared time picker template -->\n<ng-template #timePickerSection>\n <div class=\"time-picker-container\">\n <div class=\"time-picker-content\">\n <span class=\"time-picker-label\">{{ 'Select a time' | translate }}</span>\n <div class=\"time-picker-row\">\n <div class=\"time-fields\">\n <!-- Hours -->\n <div class=\"time-input-group\">\n <div class=\"time-input-box\">\n <input class=\"time-input\"\n type=\"text\"\n aria-label=\"Hours\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"_hoursDisplay\"\n (input)=\"onHoursInput($event)\"\n (focus)=\"onTimeFocus($event)\"\n (blur)=\"clampHours()\"\n (keydown)=\"onTimeKeydown($event, 'hours')\"\n maxlength=\"2\" />\n <div class=\"time-arrows\">\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"incrementHours()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </button>\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"decrementHours()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </button>\n </div>\n </div>\n <span class=\"time-input-label\">{{ 'HRS' | translate }}</span>\n </div>\n\n <!-- Colon separator -->\n <div class=\"time-colon\">:</div>\n\n <!-- Minutes -->\n <div class=\"time-input-group\">\n <div class=\"time-input-box\">\n <input class=\"time-input\"\n type=\"text\"\n aria-label=\"Minutes\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"_minutesDisplay\"\n (input)=\"onMinutesInput($event)\"\n (focus)=\"onTimeFocus($event)\"\n (blur)=\"clampMinutes()\"\n (keydown)=\"onTimeKeydown($event, 'minutes')\"\n maxlength=\"2\" />\n <div class=\"time-arrows\">\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"incrementMinutes()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </button>\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"decrementMinutes()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </button>\n </div>\n </div>\n <span class=\"time-input-label\">{{ 'MIN' | translate }}</span>\n </div>\n </div>\n\n <!-- AM/PM toggle -->\n <div class=\"time-period-toggle\">\n <button class=\"time-period-btn\"\n [class.active]=\"_period === 'AM'\"\n (click)=\"setPeriod('AM')\">\n AM\n </button>\n <button class=\"time-period-btn\"\n [class.active]=\"_period === 'PM'\"\n (click)=\"setPeriod('PM')\">\n PM\n </button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- Shared calendar grid template -->\n<ng-template #calendarGrid let-dayRows>\n <div class=\"dates-grid\">\n <!-- Week day headers -->\n <div class=\"week-header\">\n @for (wd of weekDays; track wd) {\n <div class=\"cell header-cell\">{{ wd | translate }}</div>\n }\n </div>\n <!-- Day rows -->\n @for (row of dayRows; track row) {\n <div class=\"day-row\">\n @for (day of row.days; track day) {\n <div class=\"cell day-cell\"\n [class.outside]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.today]=\"isToday(day)\"\n [class.disabled]=\"day.isDisabled\"\n [class.in-range]=\"isInRange(day)\"\n [class.range-start]=\"isRangeStart(day)\"\n [class.range-end]=\"isRangeEnd(day)\"\n (click)=\"selectDay(day)\">\n <span class=\"day-number\">{{ day.lbl }}</span>\n @if (day.markerColors?.length) {\n <div class=\"marker-dots\">\n @for (c of day.markerColors; track c) {\n <span class=\"marker-dot\"\n [style.background]=\"c || null\"></span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FileUploadItem, FileUploaderProgressType } from './file-uploader.types';\n\n@Component({\n selector: 'zen-file-uploader',\n templateUrl: './zendu-file-uploader.component.html',\n styleUrls: ['./zendu-file-uploader.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFileUploaderComponent {\n\n @Input() accept: string = '*';\n @Input() multiple: boolean = true;\n @Input() maxFileSize: number = 0;\n @Input() disabled: boolean = false;\n @Input() description: string = '';\n @Input() progressType: FileUploaderProgressType = 'bar';\n @Input() files: FileUploadItem[] = [];\n\n @Output() filesSelected = new EventEmitter<File[]>();\n @Output() fileRemoved = new EventEmitter<FileUploadItem>();\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n isDragover = false;\n\n @HostListener('dragover', ['$event'])\n onDragOver(evt: DragEvent) {\n if (this.disabled) return;\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = false;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(evt: DragEvent) {\n if (this.disabled) return;\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = false;\n\n const dt = evt.dataTransfer;\n if (dt && dt.files.length) {\n const filtered = this.filterFiles(dt.files);\n if (filtered.length) {\n this.filesSelected.emit(filtered);\n }\n }\n }\n\n openFileDialog() {\n if (this.disabled) return;\n this.fileInput.nativeElement.click();\n }\n\n onFileInput(evt: Event) {\n const input = evt.target as HTMLInputElement;\n if (input.files && input.files.length) {\n const files: File[] = [];\n for (let i = 0; i < input.files.length; i++) {\n files.push(input.files[i]);\n }\n this.filesSelected.emit(files);\n }\n input.value = '';\n }\n\n removeFile(item: FileUploadItem) {\n this.fileRemoved.emit(item);\n }\n\n getFileIcon(fileType: string): string {\n switch (fileType) {\n case 'video': return 'assets/ng-zenduit/icons/film.svg';\n case 'misc': return 'assets/ng-zenduit/icons/upload-cloud.svg';\n default: return 'assets/ng-zenduit/icons/file-upload.svg';\n }\n }\n\n formatFileSize(bytes: number): string {\n if (!bytes) return '0 B';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n }\n\n private filterFiles(fileList: FileList): File[] {\n const files: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList[i];\n if (this.maxFileSize && file.size > this.maxFileSize) continue;\n if (this.accept && this.accept !== '*') {\n const accepted = this.accept.split(',').map(t => t.trim());\n const match = accepted.some(type => {\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.replace('/*', '/'));\n }\n return file.type === type;\n });\n if (!match) continue;\n }\n files.push(file);\n }\n return files;\n }\n}\n","<div class=\"zen-fu\" [class.disabled]=\"disabled\">\n <!-- Drop Zone -->\n <div class=\"drop-zone\"\n [class.dragover]=\"isDragover\"\n (click)=\"openFileDialog()\">\n <div class=\"drop-zone-icon\">\n <zen-icon src=\"assets/ng-zenduit/icons/upload-cloud.svg\"></zen-icon>\n </div>\n <div class=\"drop-zone-text\">\n <span class=\"click-text\">{{ 'Click to upload' | translate }}</span>\n <span class=\"drag-text\">{{ 'or drag and drop' | translate }}</span>\n </div>\n <p class=\"drop-zone-description\">\n {{ description || ('SVG, PNG, JPG or GIF (max. 800x400px)' | translate) }}\n </p>\n </div>\n\n <input type=\"file\"\n #fileInput\n style=\"display:none\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"onFileInput($event)\" />\n\n <!-- File Queue -->\n @if (files?.length) {\n <div class=\"file-queue\">\n <!-- Progress Bar Type -->\n @if (progressType === 'bar') {\n @for (item of files; track item) {\n <div class=\"file-item bar-type\"\n [class.complete]=\"item.status === 'complete'\">\n <div class=\"file-item-content\">\n <div class=\"file-icon-wrap\">\n <zen-icon class=\"file-icon\"\n [src]=\"getFileIcon(item.fileType)\">\n </zen-icon>\n </div>\n <div class=\"file-info\">\n <div class=\"file-text\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n <p class=\"file-size\">{{ formatFileSize(item.file.size) }}</p>\n </div>\n <div class=\"progress-row\">\n <div class=\"progress-track\">\n <div class=\"progress-fill\" [style.width.%]=\"item.progress\"></div>\n </div>\n <span class=\"progress-label\">{{ item.progress }}%</span>\n </div>\n </div>\n </div>\n @if (item.status === 'uploading') {\n <button class=\"file-action\"\n (click)=\"removeFile(item)\">\n <zen-icon class=\"trash-icon\"\n src=\"assets/ng-zenduit/icons/trash.svg\">\n </zen-icon>\n </button>\n }\n @if (item.status === 'complete') {\n <zen-icon class=\"check-icon\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n }\n </div>\n }\n }\n <!-- Progress Fill Type -->\n @if (progressType === 'fill') {\n @for (item of files; track item) {\n <div class=\"file-item fill-type\"\n >\n <div class=\"fill-bg\" [style.width.%]=\"item.progress\"></div>\n <div class=\"file-item-content\">\n <div class=\"file-icon-wrap\">\n <zen-icon class=\"file-icon\"\n [src]=\"getFileIcon(item.fileType)\">\n </zen-icon>\n </div>\n <div class=\"file-info\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n <p class=\"file-size\">{{ formatFileSize(item.file.size) }} – {{ item.progress }}% {{ 'uploaded' | translate }}</p>\n </div>\n </div>\n @if (item.status === 'uploading') {\n <zen-spinner\n class=\"file-spinner\"\n size=\"small\">\n </zen-spinner>\n }\n @if (item.status === 'complete') {\n <zen-icon class=\"check-icon\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n }\n </div>\n }\n }\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type ZenduAvatarStatusIcon = 'none' | 'online' | 'company';\n\n@Component({\n selector: 'zendu-avatar',\n templateUrl: './zendu-avatar.component.html',\n styleUrls: ['./zendu-avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarComponent {\n\n @Input() size: ZenduAvatarSize = 'md';\n @Input() src: string;\n @Input() text: string;\n @Input() statusIcon: ZenduAvatarStatusIcon = 'none';\n @Input() companyImgSrc: string;\n @Input() focused = false;\n\n get showImage(): boolean {\n return !!this.src;\n }\n\n get showText(): boolean {\n return !this.src && !!this.text;\n }\n\n get showPlaceholder(): boolean {\n return !this.src && !this.text;\n }\n\n get cssClasses(): Record<string, boolean> {\n return {\n ['zendu-avatar--' + this.size]: true,\n 'zendu-avatar--focused': this.focused\n };\n }\n}\n","<div class=\"zendu-avatar\" [ngClass]=\"cssClasses\">\n <!-- Image avatar -->\n @if (showImage) {\n <img [src]=\"src\" class=\"zendu-avatar__img\" alt=\"\" />\n }\n\n <!-- Text initials -->\n @if (showText) {\n <span class=\"zendu-avatar__text\">{{ text }}</span>\n }\n\n <!-- Placeholder user icon -->\n @if (showPlaceholder) {\n <div class=\"zendu-avatar__placeholder\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6666 17.5C16.6666 16.337 16.6666 15.7555 16.4942 15.2824C16.1544 14.3491 15.4008 13.5955 14.4675 13.2558C13.9944 13.0833 13.4129 13.0833 12.2499 13.0833H7.74992C6.58694 13.0833 6.00545 13.0833 5.53237 13.2558C4.59907 13.5955 3.84542 14.3491 3.50567 15.2824C3.33325 15.7555 3.33325 16.337 3.33325 17.5M13.7499 6.25C13.7499 8.32107 12.0710 10 9.99992 10C7.92885 10 6.24992 8.32107 6.24992 6.25C6.24992 4.17893 7.92885 2.5 9.99992 2.5C12.0710 2.5 13.7499 4.17893 13.7499 6.25Z\" stroke=\"currentColor\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- Online indicator -->\n @if (statusIcon === 'online') {\n <div class=\"zendu-avatar__online-dot\"></div>\n }\n\n <!-- Company icon -->\n @if (statusIcon === 'company') {\n <div class=\"zendu-avatar__company-icon\">\n @if (companyImgSrc) {\n <img [src]=\"companyImgSrc\" alt=\"\" />\n }\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarGroupSize = 'xs' | 'sm' | 'md';\n\n@Component({\n selector: 'zendu-avatar-group',\n templateUrl: './zendu-avatar-group.component.html',\n styleUrls: ['./zendu-avatar-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarGroupComponent {\n\n @Input() size: ZenduAvatarGroupSize = 'md';\n @Input() images: string[] = [];\n @Input() moreCount = 0;\n @Input() showAddButton = false;\n}\n","<div class=\"zendu-avatar-group\" [ngClass]=\"'zendu-avatar-group--' + size\">\n <div class=\"zendu-avatar-group__avatars\">\n @for (img of images; track img) {\n <div class=\"zendu-avatar-group__wrap\">\n <div class=\"zendu-avatar-group__avatar\">\n <img [src]=\"img\" alt=\"\" />\n </div>\n </div>\n }\n\n @if (moreCount > 0) {\n <div class=\"zendu-avatar-group__more\">\n <span>+{{ moreCount }}</span>\n </div>\n }\n </div>\n\n @if (showAddButton) {\n <div class=\"zendu-avatar-group__add-btn\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 3.333v9.334M3.333 8h9.334\" stroke=\"currentColor\" stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenduAvatarSize, ZenduAvatarStatusIcon } from './zendu-avatar.component';\n\nexport type ZenduAvatarLabelGroupSize = 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'zendu-avatar-label-group',\n templateUrl: './zendu-avatar-label-group.component.html',\n styleUrls: ['./zendu-avatar-label-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarLabelGroupComponent {\n\n @Input() size: ZenduAvatarLabelGroupSize = 'md';\n @Input() src: string;\n @Input() text: string;\n @Input() name: string;\n @Input() subtitle: string;\n @Input() statusIcon: ZenduAvatarStatusIcon = 'none';\n @Input() companyImgSrc: string;\n @Input() focused = false;\n\n get avatarSize(): ZenduAvatarSize {\n return this.size as ZenduAvatarSize;\n }\n}\n","<div class=\"zendu-avatar-label-group\" [ngClass]=\"'zendu-avatar-label-group--' + size\">\n <zendu-avatar\n [size]=\"avatarSize\"\n [src]=\"src\"\n [text]=\"text\"\n [statusIcon]=\"statusIcon\"\n [companyImgSrc]=\"companyImgSrc\"\n [focused]=\"focused\">\n </zendu-avatar>\n\n <div class=\"zendu-avatar-label-group__text\">\n <span class=\"zendu-avatar-label-group__name\">{{ name }}</span>\n @if (subtitle) {\n <span class=\"zendu-avatar-label-group__subtitle\">{{ subtitle }}</span>\n }\n </div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarProfilePhotoSize = 'md' | 'lg';\n\n@Component({\n selector: 'zendu-avatar-profile-photo',\n templateUrl: './zendu-avatar-profile-photo.component.html',\n styleUrls: ['./zendu-avatar-profile-photo.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarProfilePhotoComponent {\n\n @Input() size: ZenduAvatarProfilePhotoSize = 'lg';\n @Input() src: string;\n @Input() text: string;\n\n get showImage(): boolean {\n return !!this.src;\n }\n\n get showText(): boolean {\n return !this.src && !!this.text;\n }\n\n get showPlaceholder(): boolean {\n return !this.src && !this.text;\n }\n}\n","<div class=\"zendu-avatar-profile-photo\" [ngClass]=\"'zendu-avatar-profile-photo--' + size\">\n <!-- Image -->\n @if (showImage) {\n <img [src]=\"src\" class=\"zendu-avatar-profile-photo__img\" alt=\"\" />\n }\n\n <!-- Placeholder icon -->\n @if (showPlaceholder) {\n <div class=\"zendu-avatar-profile-photo__placeholder\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6666 17.5C16.6666 16.337 16.6666 15.7555 16.4942 15.2824C16.1544 14.3491 15.4008 13.5955 14.4675 13.2558C13.9944 13.0833 13.4129 13.0833 12.2499 13.0833H7.74992C6.58694 13.0833 6.00545 13.0833 5.53237 13.2558C4.59907 13.5955 3.84542 14.3491 3.50567 15.2824C3.33325 15.7555 3.33325 16.337 3.33325 17.5M13.7499 6.25C13.7499 8.32107 12.0710 10 9.99992 10C7.92885 10 6.24992 8.32107 6.24992 6.25C6.24992 4.17893 7.92885 2.5 9.99992 2.5C12.0710 2.5 13.7499 4.17893 13.7499 6.25Z\" stroke=\"currentColor\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- Text initials -->\n @if (showText) {\n <span class=\"zendu-avatar-profile-photo__text\">{{ text }}</span>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduSliderLabel = 'none' | 'bottom' | 'bottom-floating' | 'top-floating';\n\n@Component({\n selector: 'zendu-slider',\n templateUrl: './zendu-slider.component.html',\n styleUrls: ['./zendu-slider.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSliderComponent implements OnDestroy {\n\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() lowValue = 0;\n @Input() highValue = 100;\n @Input() label: ZenduSliderLabel = 'none';\n @Input() suffix = '%';\n @Input() disabled = false;\n\n @Output() lowValueChange = new EventEmitter<number>();\n @Output() highValueChange = new EventEmitter<number>();\n\n @ViewChild('track', { static: true }) trackRef: ElementRef<HTMLElement>;\n\n private activeThumb: 'low' | 'high' | null = null;\n private boundMouseMove = this.onMouseMove.bind(this);\n private boundMouseUp = this.onMouseUp.bind(this);\n private boundTouchMove = this.onTouchMove.bind(this);\n private boundTouchEnd = this.onTouchEnd.bind(this);\n\n get lowPercent(): number {\n return ((this.lowValue - this.min) / (this.max - this.min)) * 100;\n }\n\n get highPercent(): number {\n return ((this.highValue - this.min) / (this.max - this.min)) * 100;\n }\n\n formatValue(value: number): string {\n return `${value}${this.suffix}`;\n }\n\n onTrackClick(event: MouseEvent): void {\n if (this.disabled) return;\n const percent = this.getPercentFromEvent(event);\n const value = this.percentToValue(percent);\n const distToLow = Math.abs(value - this.lowValue);\n const distToHigh = Math.abs(value - this.highValue);\n if (distToLow <= distToHigh) {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n onThumbMouseDown(event: MouseEvent, thumb: 'low' | 'high'): void {\n if (this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.activeThumb = thumb;\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('mouseup', this.boundMouseUp);\n }\n\n onThumbTouchStart(event: TouchEvent, thumb: 'low' | 'high'): void {\n if (this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.activeThumb = thumb;\n document.addEventListener('touchmove', this.boundTouchMove, { passive: false });\n document.addEventListener('touchend', this.boundTouchEnd);\n }\n\n ngOnDestroy(): void {\n this.removeListeners();\n }\n\n private onMouseMove(event: MouseEvent): void {\n if (!this.activeThumb) return;\n const percent = this.getPercentFromEvent(event);\n const value = this.percentToValue(percent);\n if (this.activeThumb === 'low') {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n private onMouseUp(): void {\n this.activeThumb = null;\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n }\n\n private onTouchMove(event: TouchEvent): void {\n if (!this.activeThumb || !event.touches.length) return;\n event.preventDefault();\n const touch = event.touches[0];\n const percent = this.getPercentFromTouch(touch);\n const value = this.percentToValue(percent);\n if (this.activeThumb === 'low') {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n private onTouchEnd(): void {\n this.activeThumb = null;\n document.removeEventListener('touchmove', this.boundTouchMove);\n document.removeEventListener('touchend', this.boundTouchEnd);\n }\n\n private getPercentFromEvent(event: MouseEvent): number {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n return Math.max(0, Math.min(100, (x / rect.width) * 100));\n }\n\n private getPercentFromTouch(touch: Touch): number {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n const x = touch.clientX - rect.left;\n return Math.max(0, Math.min(100, (x / rect.width) * 100));\n }\n\n private percentToValue(percent: number): number {\n const raw = this.min + (percent / 100) * (this.max - this.min);\n return Math.round(raw / this.step) * this.step;\n }\n\n private updateLow(value: number): void {\n value = Math.max(this.min, Math.min(value, this.highValue));\n if (value !== this.lowValue) {\n this.lowValue = value;\n this.lowValueChange.emit(value);\n }\n }\n\n private updateHigh(value: number): void {\n value = Math.max(this.lowValue, Math.min(value, this.max));\n if (value !== this.highValue) {\n this.highValue = value;\n this.highValueChange.emit(value);\n }\n }\n\n private removeListeners(): void {\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n document.removeEventListener('touchmove', this.boundTouchMove);\n document.removeEventListener('touchend', this.boundTouchEnd);\n }\n}\n","<div class=\"zendu-slider\" [class.zendu-slider--disabled]=\"disabled\">\n\n <!-- Top floating labels -->\n @if (label === 'top-floating') {\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--top\" [style.left.%]=\"lowPercent\">\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(lowValue) }}</div>\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--down\"></div>\n </div>\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--top\" [style.left.%]=\"highPercent\">\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(highValue) }}</div>\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--down\"></div>\n </div>\n }\n\n <!-- Track -->\n <div class=\"zendu-slider__track\" #track (mousedown)=\"onTrackClick($event)\">\n <div class=\"zendu-slider__track-bg\"></div>\n <div class=\"zendu-slider__track-fill\"\n [style.left.%]=\"lowPercent\"\n [style.right.%]=\"100 - highPercent\"></div>\n\n <!-- Low thumb -->\n <div class=\"zendu-slider__thumb\"\n [style.left.%]=\"lowPercent\"\n (mousedown)=\"onThumbMouseDown($event, 'low')\"\n (touchstart)=\"onThumbTouchStart($event, 'low')\"></div>\n\n <!-- High thumb -->\n <div class=\"zendu-slider__thumb\"\n [style.left.%]=\"highPercent\"\n (mousedown)=\"onThumbMouseDown($event, 'high')\"\n (touchstart)=\"onThumbTouchStart($event, 'high')\"></div>\n </div>\n\n <!-- Bottom floating labels -->\n @if (label === 'bottom-floating') {\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--bottom\" [style.left.%]=\"lowPercent\">\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--up\"></div>\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(lowValue) }}</div>\n </div>\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--bottom\" [style.left.%]=\"highPercent\">\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--up\"></div>\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(highValue) }}</div>\n </div>\n }\n\n <!-- Bottom plain labels -->\n @if (label === 'bottom') {\n <div class=\"zendu-slider__label zendu-slider__label--bottom\" [style.left.%]=\"lowPercent\">\n {{ formatValue(lowValue) }}\n </div>\n <div class=\"zendu-slider__label zendu-slider__label--bottom\" [style.left.%]=\"highPercent\">\n {{ formatValue(highValue) }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenBadgeSize = 'sm' | 'md' | 'lg';\nexport type ZenBadgeColor =\n | 'gray' | 'primary' | 'error' | 'warning' | 'success'\n | 'blue-gray' | 'blue-light' | 'blue' | 'indigo' | 'purple'\n | 'pink' | 'rose' | 'orange';\nexport type ZenBadgeIconDirection = 'left' | 'right';\nexport type ZenBadgeGroupTheme = 'light' | 'medium' | 'dark';\nexport type ZenBadgeGroupBadgePosition = 'leading' | 'trailing';\n\n@Component({\n selector: 'zen-badge',\n templateUrl: './zen-badge.component.html',\n styleUrls: ['./zen-badge.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenBadgeComponent {\n\n @Input() size: ZenBadgeSize = 'md';\n @Input() color: ZenBadgeColor = 'primary';\n @Input() dot = false;\n @Input() removable = false;\n @Input() iconOnly = false;\n\n /** Icon name (resolved via zen-icon's iconBasePath) */\n @Input() icon: string;\n /** Direct icon src URL (use instead of name) */\n @Input() iconSrc: string;\n /** Icon placement direction */\n @Input() iconDirection: ZenBadgeIconDirection = 'left';\n\n /** Image src (country flag or avatar) — shown as a round image left of text */\n @Input() imgSrc: string;\n\n /** Badge group mode — renders as a pill with inner badge + message */\n @Input() group = false;\n /** Badge group: inner badge label text */\n @Input() badgeLabel: string;\n /** Badge group: badge position (leading = left, trailing = right) */\n @Input() badgePosition: ZenBadgeGroupBadgePosition = 'leading';\n /** Badge group: theme variant */\n @Input() theme: ZenBadgeGroupTheme = 'light';\n /** Badge group: show arrow icon */\n @Input() showIcon = false;\n\n @Output() remove = new EventEmitter<void>();\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n get hasIcon(): boolean {\n return !!(this.icon || this.iconSrc);\n }\n\n get hostClasses(): string {\n const classes = [\n 'zen-badge',\n `zen-badge--${this.size}`,\n `zen-badge--${this.color}`,\n ];\n if (this.dot) classes.push('zen-badge--dot');\n if (this.removable) classes.push('zen-badge--removable');\n if (this.iconOnly) classes.push('zen-badge--icon-only');\n if (this.imgSrc) classes.push('zen-badge--has-img');\n if (this.hasIcon && !this.iconOnly && this.iconDirection === 'left') classes.push('zen-badge--icon-left');\n if ((this.hasIcon && !this.iconOnly && this.iconDirection === 'right') || this.removable) classes.push('zen-badge--icon-right');\n return classes.join(' ');\n }\n\n get groupClasses(): string {\n const classes = [\n 'zen-badge-group',\n `zen-badge-group--${this.size}`,\n `zen-badge-group--${this.color}`,\n `zen-badge-group--${this.theme}`,\n `zen-badge-group--${this.badgePosition}`,\n ];\n if (this.showIcon) classes.push('zen-badge-group--has-icon');\n return classes.join(' ');\n }\n\n onClick(event: MouseEvent): void {\n this.clicked.emit(event);\n }\n\n onRemove(event: MouseEvent): void {\n event.stopPropagation();\n this.remove.emit();\n }\n}\n","<!-- Badge Group mode -->\n@if (group) {\n <div [class]=\"groupClasses\" (click)=\"onClick($event)\">\n <!-- Leading: inner badge first -->\n @if (badgePosition === 'leading') {\n <span class=\"zen-badge-group__badge\">{{ badgeLabel }}</span>\n <span class=\"zen-badge-group__content\">\n <span class=\"zen-badge-group__message\"><ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container></span>\n @if (showIcon) {\n <zen-icon class=\"zen-badge-group__icon\" name=\"arrow-right\"></zen-icon>\n }\n </span>\n }\n <!-- Trailing: message first, badge with optional icon last -->\n @if (badgePosition === 'trailing') {\n <span class=\"zen-badge-group__message\"><ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container></span>\n <span class=\"zen-badge-group__badge\">\n {{ badgeLabel }}\n @if (showIcon) {\n <zen-icon class=\"zen-badge-group__badge-icon\" name=\"arrow-right\"></zen-icon>\n }\n </span>\n }\n </div>\n} @else {\n <div [class]=\"hostClasses\" (click)=\"onClick($event)\">\n @if (dot) {\n <span class=\"zen-badge__dot\"></span>\n }\n @if (imgSrc) {\n <img class=\"zen-badge__img\" [src]=\"imgSrc\" alt=\"\">\n }\n @if (hasIcon && !iconOnly && iconDirection === 'left') {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (!iconOnly) {\n <span class=\"zen-badge__text\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </span>\n }\n @if (iconOnly && hasIcon) {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (hasIcon && !iconOnly && iconDirection === 'right') {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (removable) {\n <button class=\"zen-badge__close\" (click)=\"onRemove($event)\" type=\"button\" aria-label=\"Remove\">\n <zen-icon class=\"zen-badge__icon\" name=\"x\"></zen-icon>\n </button>\n }\n </div>\n}\n\n<!-- Standard badge mode -->\n\n<ng-template #contentTpl><ng-content></ng-content></ng-template>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\n\nexport interface DropdownMenuItem {\n label?: string;\n icon?: string;\n shortcut?: string;\n checked?: boolean;\n divider?: boolean;\n disabled?: boolean;\n}\n\nexport interface DropdownMenuHeader {\n name: string;\n email: string;\n avatarSrc?: string;\n}\n\nexport type DropdownTriggerType = 'list-header' | 'icon' | 'button' | 'avatar';\n\n@Component({\n selector: 'zen-dropdown-menu',\n templateUrl: './zen-dropdown-menu.component.html',\n styleUrls: ['./zen-dropdown-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenDropdownMenuComponent implements AfterViewInit, OnDestroy {\n\n // Trigger-related inputs\n @Input() triggerType: DropdownTriggerType = 'button';\n @Input() buttonText: string = 'Account';\n @Input() avatarSrc?: string;\n\n // Menu-related inputs\n @Input() items: DropdownMenuItem[] = [];\n @Input() showCheckbox: boolean = false;\n @Input() showShortcut: boolean = false;\n @Input() showIcon: boolean = false;\n @Input() showCount: boolean = false;\n @Input() headerUser?: DropdownMenuHeader;\n @Input() showHeader: boolean = true;\n\n // Positioning inputs\n @Input() position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right' | 'bottom' | '' = '';\n @Input() offset: number = 0;\n @Input() closeOnOutsideClick: boolean = true;\n @Input() scrollHandler: string = '';\n\n @Output() itemClick = new EventEmitter<DropdownMenuItem>();\n @Output() itemCheck = new EventEmitter<{item: DropdownMenuItem, checked: boolean}>();\n @Output() openChange = new EventEmitter<boolean>();\n @Output() onClose = new EventEmitter();\n\n @ViewChild('dropdown', { static: false }) dropdownElement!: ElementRef<HTMLElement>;\n\n isOpen = false;\n dropdownVisible = false;\n private scrollSubscription: Subscription = new Subscription();\n\n constructor(private elementRef: ElementRef) {}\n\n ngAfterViewInit(): void {\n if (this.scrollHandler) {\n this.scrollSubscription = fromEvent(\n document.getElementsByClassName(this.scrollHandler)[0],\n 'scroll'\n ).subscribe(() => {\n this.closeDropdown();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.scrollSubscription.unsubscribe();\n }\n\n toggleDropdown(): void {\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n openDropdown(): void {\n this.isOpen = true;\n this.openChange.emit(this.isOpen);\n \n // Position dropdown before making it visible to prevent jerk\n setTimeout(() => {\n if (this.dropdownElement) {\n this.updateDropdownPosition();\n this.dropdownVisible = true;\n }\n }, 0);\n }\n\n closeDropdown(): void {\n if (this.isOpen) {\n this.dropdownVisible = false;\n this.isOpen = false;\n this.openChange.emit(this.isOpen);\n this.onClose.emit();\n }\n }\n\n updateDropdownPosition(): void {\n if (!this.dropdownElement) return;\n\n const container = this.elementRef.nativeElement as HTMLElement;\n const dropdown = this.dropdownElement.nativeElement;\n const pos = container.getBoundingClientRect();\n \n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const dropdownWidth = 240; // Dropdown width\n const position = this.position || 'bottom-right'; // Default to bottom-right\n\n // Set positioning properties\n dropdown.style.position = 'fixed';\n dropdown.style.zIndex = '1000';\n dropdown.style.minWidth = '240px';\n\n // Parse position string to determine vertical and horizontal alignment\n const isTop = position.includes('top');\n const isBottom = position.includes('bottom') || (!isTop && position !== 'left' && position !== 'right');\n const isLeft = position.includes('left') || position === 'left';\n const isRight = position.includes('right') || position === 'right';\n\n // Vertical positioning\n if (isTop) {\n // Position above the trigger\n dropdown.style.bottom = `${viewportHeight - pos.top + 8}px`;\n dropdown.style.top = 'unset';\n } else {\n // Position below the trigger (default)\n dropdown.style.top = `${pos.bottom + 8}px`;\n dropdown.style.bottom = 'unset';\n }\n\n // Horizontal positioning\n // 'right' means dropdown extends to the right (left edge aligned with trigger's left edge)\n // 'left' means dropdown extends to the left (right edge aligned with trigger's right edge)\n if (isRight) {\n // Dropdown extends rightward: align left edges\n dropdown.style.left = `${pos.left + this.offset}px`;\n dropdown.style.right = 'unset';\n\n // Make sure dropdown doesn't go off-screen on the right\n const dropdownRight = pos.left + dropdownWidth;\n if (dropdownRight > viewportWidth) {\n dropdown.style.right = `${Math.max(8, viewportWidth - pos.right + this.offset)}px`;\n dropdown.style.left = 'unset';\n }\n } else if (isLeft) {\n // Dropdown extends leftward: align right edges\n const rightPosition = viewportWidth - pos.right + this.offset;\n dropdown.style.right = `${rightPosition}px`;\n dropdown.style.left = 'unset';\n\n // Make sure dropdown doesn't go off-screen on the left\n const dropdownLeft = pos.right - dropdownWidth;\n if (dropdownLeft < 0) {\n dropdown.style.left = `${Math.max(8, pos.left + this.offset)}px`;\n dropdown.style.right = 'unset';\n }\n }\n\n // Legacy support for old position values\n if (position === 'bottom') {\n dropdown.style.left = `${pos.left + this.offset}px`;\n dropdown.style.right = 'unset';\n }\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.closeOnOutsideClick) return;\n if (!document.body.contains(event.target as Node)) return;\n if (!this.dropdownElement) return;\n if (!this.isOpen) return;\n if (this.dropdownElement.nativeElement.contains(event.target as Node)) return;\n if (this.elementRef.nativeElement.contains(event.target as Node)) return;\n \n this.closeDropdown();\n }\n\n @HostListener('window:wheel', ['$event'])\n handleMouseScroll(event: WheelEvent): void {\n if (!this.dropdownElement || !this.isOpen) return;\n if (this.dropdownElement.nativeElement.contains(event.target as Node)) return;\n \n this.closeDropdown();\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent): void {\n if (!this.isOpen) return;\n \n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Escape'\n ) {\n this.closeDropdown();\n }\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this.isOpen && this.dropdownElement) {\n this.updateDropdownPosition();\n }\n }\n\n // Trigger type getters\n get showListHeader(): boolean {\n return this.triggerType === 'list-header';\n }\n\n get showIconTrigger(): boolean {\n return this.triggerType === 'icon';\n }\n\n get showButton(): boolean {\n return this.triggerType === 'button';\n }\n\n get showAvatar(): boolean {\n return this.triggerType === 'avatar';\n }\n\n onItemClick(item: DropdownMenuItem, event?: MouseEvent): void {\n if (!item.disabled && !item.divider) {\n // If showCheckbox is true, toggle the checkbox state when clicking the item\n if (this.showCheckbox && event) {\n // Check if click was directly on checkbox (which will have stopPropagation)\n const target = event.target as HTMLElement;\n const isCheckboxClick = target.closest('zen-checkbox');\n if (!isCheckboxClick) {\n // Toggle checkbox when clicking elsewhere on the item\n item.checked = !item.checked;\n this.itemCheck.emit({ item, checked: item.checked });\n }\n } else {\n // For non-checkbox items, emit the click event\n this.itemClick.emit(item);\n }\n }\n }\n\n onCheckboxChange(item: DropdownMenuItem, checked: boolean): void {\n if (!item.disabled) {\n item.checked = checked;\n this.itemCheck.emit({ item, checked });\n }\n }\n\n}","<div class=\"zen-dropdown-menu\" [class.zen-dropdown-menu--open]=\"isOpen\">\n\n <!-- TRIGGERS SECTION -->\n\n <!-- List Header Trigger -->\n @if (showListHeader) {\n <div\n class=\"zen-dropdown-menu__list-header\"\n (click)=\"toggleDropdown()\">\n <div class=\"zen-dropdown-menu__user-info\">\n <img\n class=\"zen-dropdown-menu__user-avatar\"\n [src]=\"headerUser?.avatarSrc\"\n [alt]=\"headerUser?.name || 'User'\">\n <div class=\"zen-dropdown-menu__user-details\">\n <div class=\"zen-dropdown-menu__user-name text text-sm text-weight-medium\">{{ (headerUser?.name || 'User') | translate }}</div>\n <div class=\"zen-dropdown-menu__user-email text text-sm text-weight-regular\">{{ headerUser?.email }}</div>\n </div>\n </div>\n </div>\n }\n\n <!-- Icon Button Trigger -->\n @if (showIconTrigger) {\n <button\n class=\"zen-dropdown-menu__icon-button\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <zen-icon name=\"more-vertical\" [customColor]=\"'#667085'\"></zen-icon>\n </button>\n }\n\n <!-- Button Trigger -->\n @if (showButton) {\n <button\n class=\"zen-dropdown-menu__button\"\n [class.zen-dropdown-menu__button--focused]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <span class=\"zen-dropdown-menu__button-text text text-sm text-weight-medium\">{{ buttonText | translate }}</span>\n <zen-icon\n [name]=\"isOpen ? 'chevron-up' : 'chevron-down'\"\n [customColor]=\"'#667085'\"\n class=\"zen-dropdown-menu__button-icon\">\n </zen-icon>\n </button>\n }\n\n <!-- Avatar Trigger -->\n @if (showAvatar) {\n <button\n class=\"zen-dropdown-menu__avatar\"\n [class.zen-dropdown-menu__avatar--focused]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <img\n class=\"zen-dropdown-menu__avatar-img\"\n [src]=\"avatarSrc\"\n alt=\"User Avatar\">\n </button>\n }\n\n <!-- DROPDOWN CONTENT SECTION -->\n @if (isOpen) {\n <div class=\"zen-dropdown-menu__dropdown\" #dropdown\n [style.position]=\"'fixed'\"\n [style.opacity]=\"dropdownVisible ? 1 : 0\"\n [style.visibility]=\"dropdownVisible ? 'visible' : 'hidden'\">\n <!-- Header Section -->\n @if (showHeader && headerUser) {\n <div class=\"zen-dropdown-menu__header\">\n <div class=\"zen-dropdown-menu__header-info\">\n <img\n class=\"zen-dropdown-menu__header-avatar\"\n [src]=\"headerUser.avatarSrc\"\n [alt]=\"headerUser.name\">\n <div class=\"zen-dropdown-menu__header-details\">\n <div class=\"zen-dropdown-menu__header-name text text-sm text-weight-medium\">{{ headerUser.name | translate }}</div>\n <div class=\"zen-dropdown-menu__header-email text text-sm text-weight-regular\">{{ headerUser.email }}</div>\n </div>\n </div>\n </div>\n }\n <!-- Divider after header -->\n @if (showHeader && headerUser) {\n <div class=\"zen-dropdown-menu__divider\"></div>\n }\n <!-- Menu Items -->\n <div class=\"zen-dropdown-menu__content\">\n @for (item of items; track item) {\n <!-- Divider -->\n @if (item.divider) {\n <div class=\"zen-dropdown-menu__divider\"></div>\n }\n <!-- Menu Item -->\n @if (!item.divider) {\n <div\n class=\"zen-dropdown-menu__item\"\n [class.zen-dropdown-menu__item--disabled]=\"item.disabled\"\n (click)=\"onItemClick(item, $event)\">\n <!-- Checkbox variant -->\n @if (showCheckbox) {\n <zen-checkbox\n class=\"zen-dropdown-menu__checkbox\"\n [checked]=\"item.checked || false\"\n [disabled]=\"item.disabled\"\n [size]=\"'sm'\"\n [label]=\"''\"\n (checkedChange)=\"onCheckboxChange(item, $event)\"\n (click)=\"$event.stopPropagation()\">\n </zen-checkbox>\n }\n <!-- Icon -->\n @if (showIcon && item.icon) {\n <zen-icon\n class=\"zen-dropdown-menu__item-icon\"\n [name]=\"item.icon\"\n [customColor]=\"'#344054'\">\n </zen-icon>\n }\n <!-- Item Content -->\n <div class=\"zen-dropdown-menu__item-content\">\n <!-- Label -->\n <span class=\"zen-dropdown-menu__label text text-sm text-weight-regular\">\n {{ item.label | translate }}\n </span>\n <!-- Count number (shown at the end of the row) -->\n @if (showCount && item.shortcut) {\n <span\n class=\"zen-dropdown-menu__count text text-xs text-weight-regular\">\n {{ item.shortcut }}\n </span>\n }\n <!-- Shortcut -->\n @if (showShortcut && item.shortcut && !showCount) {\n <span\n class=\"zen-dropdown-menu__shortcut text text-xs text-weight-regular\">\n {{ item.shortcut | translate }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n\n</div>","import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\n\nexport type ZenTooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right';\nexport type ZenTooltipTheme = 'dark' | 'light';\n\n@Component({\n selector: 'zen-tooltip-popup',\n templateUrl: './zen-tooltip.component.html',\n styleUrls: ['./zen-tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class ZenTooltipPopupComponent {\n @Input() text = '';\n @Input() supportingText = '';\n @Input() theme: ZenTooltipTheme = 'dark';\n @Input() position: ZenTooltipPosition = 'top';\n\n get arrowPosition(): string {\n switch (this.position) {\n case 'top': return 'bottom-center';\n case 'bottom': return 'top-center';\n case 'left': return 'right';\n case 'right': return 'left';\n case 'top-left': return 'bottom-left';\n case 'top-right': return 'bottom-right';\n default: return 'bottom-center';\n }\n }\n\n get hasSupportingText(): boolean {\n return !!this.supportingText;\n }\n}\n","<div class=\"zen-tooltip\"\n [class.zen-tooltip--dark]=\"theme === 'dark'\"\n [class.zen-tooltip--light]=\"theme === 'light'\"\n [class.zen-tooltip--has-supporting]=\"hasSupportingText\"\n [attr.data-arrow]=\"arrowPosition\">\n\n <!-- Arrow: top (for bottom tooltip) — points up toward element -->\n @if (arrowPosition === 'top-center') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--top\"\n width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 6L6.59 0.91C7.37 0.13 8.63 0.13 9.41 0.91L16 6H0Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Arrow: left (for right tooltip) — points left toward element -->\n @if (arrowPosition === 'left') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--left\"\n width=\"6\" height=\"16\" viewBox=\"0 0 6 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 0L0.91 6.59C0.13 7.37 0.13 8.63 0.91 9.41L6 16V0Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Content -->\n <div class=\"zen-tooltip__content\">\n <p class=\"zen-tooltip__title\">{{ text }}</p>\n @if (hasSupportingText) {\n <p class=\"zen-tooltip__supporting\">{{ supportingText }}</p>\n }\n </div>\n\n <!-- Arrow: bottom (for top tooltip) — points down toward element -->\n @if (arrowPosition === 'bottom-center' || arrowPosition === 'bottom-left' || arrowPosition === 'bottom-right') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--bottom\"\n [class.zen-tooltip__arrow--bottom-left]=\"arrowPosition === 'bottom-left'\"\n [class.zen-tooltip__arrow--bottom-right]=\"arrowPosition === 'bottom-right'\"\n width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16 0L9.41 5.09C8.63 5.87 7.37 5.87 6.59 5.09L0 0H16Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Arrow: right (for left tooltip) — points right toward element -->\n @if (arrowPosition === 'right') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--right\"\n width=\"6\" height=\"16\" viewBox=\"0 0 6 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 16L5.09 9.41C5.87 8.63 5.87 7.37 5.09 6.59L0 0V16Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n</div>\n","import {\n Directive,\n Input,\n ElementRef,\n OnDestroy,\n ComponentRef,\n ViewContainerRef,\n HostListener,\n} from '@angular/core';\nimport {\n Overlay,\n OverlayRef,\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ZenTooltipPopupComponent, ZenTooltipPosition, ZenTooltipTheme } from './zen-tooltip.component';\n\n@Directive({\n selector: '[zenTooltip]',\n standalone: false\n})\nexport class ZenTooltipDirective implements OnDestroy {\n\n @Input('zenTooltip') text = '';\n @Input() tooltipSupportingText = '';\n @Input() tooltipPosition: ZenTooltipPosition = 'top';\n @Input() tooltipTheme: ZenTooltipTheme = 'dark';\n @Input() tooltipDisabled = false;\n\n private _overlayRef: OverlayRef | null = null;\n private _tooltipRef: ComponentRef<ZenTooltipPopupComponent> | null = null;\n\n constructor(\n private _overlay: Overlay,\n private _elementRef: ElementRef,\n private _viewContainerRef: ViewContainerRef,\n ) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltipDisabled || !this.text) return;\n this._show();\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this._hide();\n }\n\n @HostListener('focus')\n onFocus(): void {\n if (this.tooltipDisabled || !this.text) return;\n this._show();\n }\n\n @HostListener('blur')\n onBlur(): void {\n this._hide();\n }\n\n ngOnDestroy(): void {\n this._hide();\n }\n\n private _show(): void {\n if (this._overlayRef) return;\n\n const positionStrategy = this._getPositionStrategy();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.close(),\n panelClass: 'zen-tooltip-overlay',\n });\n\n const portal = new ComponentPortal(\n ZenTooltipPopupComponent,\n this._viewContainerRef\n );\n\n this._tooltipRef = this._overlayRef.attach(portal);\n this._tooltipRef.instance.text = this.text;\n this._tooltipRef.instance.supportingText = this.tooltipSupportingText;\n this._tooltipRef.instance.theme = this.tooltipTheme;\n this._tooltipRef.instance.position = this.tooltipPosition;\n this._tooltipRef.changeDetectorRef.markForCheck();\n }\n\n private _hide(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n this._tooltipRef = null;\n }\n }\n\n private _getPositionStrategy(): FlexibleConnectedPositionStrategy {\n const positions = this._getPositions();\n\n return this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n\n private _getPositions(): ConnectedPosition[] {\n const offset = 4;\n\n switch (this.tooltipPosition) {\n case 'top':\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n ];\n case 'bottom':\n return [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n ];\n case 'left':\n return [\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n ];\n case 'right':\n return [\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n ];\n case 'top-left':\n return [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\n ];\n case 'top-right':\n return [\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },\n ];\n default:\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n ];\n }\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenEldStatusType = 'on-duty' | 'off-duty' | 'driving' | 'sleeper' | 'personal-conveyance' | 'yard-move';\n\nconst STATUS_ABBREVIATIONS: Record<ZenEldStatusType, string> = {\n 'on-duty': 'ON',\n 'off-duty': 'OFF',\n 'driving': 'D',\n 'sleeper': 'SB',\n 'personal-conveyance': 'PC',\n 'yard-move': 'YM',\n};\n\n@Component({\n selector: 'zen-eld-status',\n templateUrl: './zen-eld-status.component.html',\n styleUrls: ['./zen-eld-status.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenEldStatusComponent {\n\n @Input() status: ZenEldStatusType = 'off-duty';\n\n get hostClasses(): string {\n return `zen-eld-status zen-eld-status--${this.status}`;\n }\n\n get abbreviation(): string {\n return STATUS_ABBREVIATIONS[this.status] || 'OFF';\n }\n}\n","<span [class]=\"hostClasses\">{{ abbreviation }}</span>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-nav-search',\n templateUrl: './zen-nav-search.component.html',\n styleUrls: ['./zen-nav-search.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenNavSearchComponent {\n\n @Input() placeholder = 'Search';\n @Input() value = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() search = new EventEmitter<string>();\n\n hovered = false;\n\n get hostClasses(): string {\n const classes = ['zen-nav-search'];\n if (this.hovered) classes.push('zen-nav-search--hover');\n return classes.join(' ');\n }\n\n onInput(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.value = val;\n this.valueChange.emit(val);\n }\n\n onSearch(): void {\n this.search.emit(this.value);\n }\n}\n","<div [class]=\"hostClasses\"\n (mouseenter)=\"hovered = true\"\n (mouseleave)=\"hovered = false\">\n <zen-icon class=\"zen-nav-search__icon\" name=\"search\" [customColor]=\"'#D0D5DD'\"></zen-icon>\n <input class=\"zen-nav-search__input\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (keyup.enter)=\"onSearch()\" />\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-submodule-item',\n templateUrl: './zen-submodule-item.component.html',\n styleUrls: ['./zen-submodule-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSubmoduleItemComponent {\n\n @Input() label = 'Submodule';\n @Input() icon: string;\n @Input() current = false;\n\n @Output() activate = new EventEmitter<void>();\n\n get hostClasses(): string {\n const classes = ['zen-submodule-item'];\n if (this.current) classes.push('zen-submodule-item--current');\n return classes.join(' ');\n }\n\n get iconColor(): string {\n return this.current ? '#FFFFFF' : '#667085';\n }\n\n onActivate(): void {\n this.activate.emit();\n }\n}\n","<button [class]=\"hostClasses\" (click)=\"onActivate()\" type=\"button\">\n @if (icon) {\n <zen-icon class=\"zen-submodule-item__icon\"\n [name]=\"icon\" [customColor]=\"iconColor\"></zen-icon>\n }\n <span class=\"zen-submodule-item__label\">{{ label }}</span>\n</button>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenEldStatusType } from '../eld-status/zen-eld-status.component';\n\nexport type ZenSubpageItemType = 'vehicle' | 'driver';\nexport type ZenSubpageItemState = 'default' | 'hover' | 'focused';\n\n@Component({\n selector: 'zen-subpage-item',\n templateUrl: './zen-subpage-item.component.html',\n styleUrls: ['./zen-subpage-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSubpageItemComponent {\n\n @Input() type: ZenSubpageItemType = 'vehicle';\n @Input() state: ZenSubpageItemState = 'default';\n @Input() label = '';\n @Input() eldStatus: ZenEldStatusType;\n\n @Output() activate = new EventEmitter<void>();\n\n private _hovered = false;\n\n get hostClasses(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n const classes = [\n 'zen-subpage-item',\n `zen-subpage-item--${this.type}`,\n `zen-subpage-item--${activeState}`,\n ];\n return classes.join(' ');\n }\n\n get typeIcon(): string {\n return this.type === 'vehicle' ? 'truck' : 'user';\n }\n\n get iconColor(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n return activeState === 'focused' ? '#FFFFFF' : '#1D2939';\n }\n\n onActivate(): void {\n this.activate.emit();\n }\n\n onMouseEnter(): void {\n this._hovered = true;\n }\n\n onMouseLeave(): void {\n this._hovered = false;\n }\n}\n","<div [class]=\"hostClasses\"\n (click)=\"onActivate()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <zen-icon class=\"zen-subpage-item__icon\"\n [name]=\"typeIcon\"\n [customColor]=\"iconColor\"></zen-icon>\n <span class=\"zen-subpage-item__label\">{{ label }}</span>\n @if (type === 'driver' && eldStatus) {\n <zen-eld-status\n [status]=\"eldStatus\"\n class=\"zen-subpage-item__eld\"></zen-eld-status>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenModulePopupModule =\n | 'fleet' | 'safety' | 'operations' | 'reports'\n | 'bus' | 'fuel' | 'maintain' | 'efficiency' | 'inventory' | 'more';\n\nexport interface ZenModulePopupItem {\n label: string;\n route?: string;\n tag?: unknown;\n}\n\nconst MODULE_LABELS: Record<ZenModulePopupModule, string> = {\n fleet: 'Fleet',\n safety: 'Safety',\n operations: 'Operate',\n reports: 'Reports',\n bus: 'Bus',\n fuel: 'Fuel',\n maintain: 'Maintain',\n efficiency: 'Efficiency',\n inventory: 'Inventory',\n more: 'More',\n};\n\nconst MODULE_ICONS: Record<ZenModulePopupModule, string> = {\n fleet: 'truck',\n safety: 'shield',\n operations: 'briefcase',\n reports: 'bar-chart-2',\n bus: 'bus',\n fuel: 'droplet',\n maintain: 'tool',\n efficiency: 'trending-up',\n inventory: 'package',\n more: 'more-vertical',\n};\n\n@Component({\n selector: 'zen-module-popup',\n templateUrl: './zen-module-popup.component.html',\n styleUrls: ['./zen-module-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenModulePopupComponent {\n\n @Input() module: ZenModulePopupModule = 'fleet';\n @Input() items: ZenModulePopupItem[] = [];\n @Input() isOpen = false;\n\n @Output() itemClick = new EventEmitter<ZenModulePopupItem>();\n @Output() close = new EventEmitter<void>();\n\n constructor(private _elementRef: ElementRef) {}\n\n get moduleLabel(): string {\n return MODULE_LABELS[this.module] || this.module;\n }\n\n get moduleIcon(): string {\n return MODULE_ICONS[this.module] || 'circle';\n }\n\n get hostClasses(): string {\n const classes = ['zen-module-popup'];\n if (this.module === 'more') classes.push('zen-module-popup--more');\n return classes.join(' ');\n }\n\n onItemClick(item: ZenModulePopupItem): void {\n this.itemClick.emit(item);\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.isOpen && !this._elementRef.nativeElement.contains(event.target)) {\n this.close.emit();\n }\n }\n}\n","@if (isOpen) {\n <div [class]=\"hostClasses\">\n <!-- Header -->\n <div class=\"zen-module-popup__header\">\n <zen-icon class=\"zen-module-popup__header-icon\"\n [name]=\"moduleIcon\"\n [customColor]=\"'#98A2B3'\"></zen-icon>\n <span class=\"zen-module-popup__header-label\">{{ moduleLabel }}</span>\n </div>\n <div class=\"zen-module-popup__divider\"></div>\n <!-- Items -->\n <div class=\"zen-module-popup__items\">\n @for (item of items; track item) {\n <div\n class=\"zen-module-popup__item\"\n (click)=\"onItemClick(item)\">\n {{ item.label }}\n </div>\n }\n </div>\n </div>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ElementRef,\n AfterViewInit,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { ChartConfiguration, ChartData, ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { ZenChartStyle, ZenChartLegend, ZenChartDataset } from './zen-chart.types';\n\nconst DEFAULT_LINE_COLORS = ['#136AB6', '#48A2E8', '#12497A'];\nconst DEFAULT_BAR_COLORS = ['#105494', '#2188D9', '#88C1F1'];\n\n@Component({\n selector: 'zen-chart',\n templateUrl: './zen-chart.component.html',\n styleUrls: ['./zen-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenChartComponent implements OnChanges, AfterViewInit {\n\n @Input() chartStyle: ZenChartStyle = 'line';\n @Input() legend: ZenChartLegend = 'false';\n @Input() axisLabels: boolean = true;\n @Input() labels: string[] = [];\n @Input() datasets: ZenChartDataset[] = [];\n @Input() xAxisLabel: string = '';\n @Input() yAxisLabel: string = '';\n @Input() stacked: boolean = true;\n @Input() colors: string[];\n @Input() breakpoint: 'desktop' | 'mobile' = 'desktop';\n\n @Output() pointClick = new EventEmitter<{ datasetIndex: number; index: number; value: number }>();\n\n @ViewChild(BaseChartDirective) chart?: BaseChartDirective;\n\n chartData: ChartData = { labels: [], datasets: [] };\n chartOptions: ChartConfiguration['options'] = {};\n\n private initialized = false;\n\n private get defaultPalette(): string[] {\n return this.chartStyle === 'line' ? DEFAULT_LINE_COLORS : DEFAULT_BAR_COLORS;\n }\n\n get hostClasses(): string {\n const classes = ['zen-chart', `zen-chart--legend-${this.legend}`];\n if (this.breakpoint === 'mobile') classes.push('zen-chart--mobile');\n return classes.join(' ');\n }\n\n getColor(index: number): string {\n const palette = this.colors || this.defaultPalette;\n return palette[index % palette.length];\n }\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.buildChart();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.initialized) {\n this.buildChart();\n }\n }\n\n onChartClick(event: any): void {\n if (event?.active?.length) {\n const active = event.active[0];\n const value = this.datasets[active.datasetIndex]?.data[active.index];\n this.pointClick.emit({\n datasetIndex: active.datasetIndex,\n index: active.index,\n value: value ?? 0\n });\n }\n }\n\n private buildChart(): void {\n const palette = this.colors || this.defaultPalette;\n\n const datasets = this.datasets.map((ds, i) => {\n const color = ds.color || palette[i % palette.length];\n\n if (this.chartStyle === 'line') {\n return {\n label: ds.label,\n data: ds.data,\n borderColor: color,\n backgroundColor: i === 0 ? this.hexToRgba(color, 0.04) : 'transparent',\n fill: i === 0,\n tension: 0.4,\n pointRadius: 0,\n pointHoverRadius: 3,\n pointHoverBorderWidth: 2,\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: color,\n borderWidth: 1.5\n };\n }\n\n return {\n label: ds.label,\n data: ds.data,\n backgroundColor: color,\n borderRadius: 4,\n borderSkipped: 'bottom' as const,\n maxBarThickness: 32,\n categoryPercentage: 0.4,\n barPercentage: 0.9\n };\n });\n\n this.chartData = {\n labels: this.labels,\n datasets\n };\n\n const isStacked = this.chartStyle === 'bar' && this.stacked;\n\n this.chartOptions = {\n responsive: true,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n mode: 'index'\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n backgroundColor: '#101828',\n titleFont: { family: 'Inter', size: 12 },\n bodyFont: { family: 'Inter', size: 12 },\n padding: 8,\n cornerRadius: 8,\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: 8,\n boxPadding: 4\n }\n },\n scales: {\n x: {\n stacked: isStacked,\n grid: {\n display: false\n },\n border: {\n display: false\n },\n ticks: {\n font: { family: 'Inter', size: 12, weight: 400 },\n color: '#667085'\n }\n },\n y: {\n stacked: isStacked,\n grid: {\n color: '#F2F4F7'\n },\n border: {\n display: false,\n dash: [4, 4]\n },\n ticks: {\n font: { family: 'Inter', size: 12, weight: 400 },\n color: '#667085',\n callback: (value: any) => {\n return typeof value === 'number' ? value.toLocaleString() : value;\n }\n }\n }\n }\n };\n\n // Apply gradient fills for line charts after next render cycle\n if (this.chartStyle === 'line' && this.chart?.chart) {\n setTimeout(() => this.applyGradients(), 0);\n }\n }\n\n private applyGradients(): void {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n\n const ctx = chartInstance.ctx;\n const chartArea = chartInstance.chartArea;\n if (!chartArea) return;\n\n const palette = this.colors || this.defaultPalette;\n\n const firstDs = chartInstance.data.datasets[0] as any;\n if (firstDs) {\n const color = this.datasets[0]?.color || palette[0];\n const gradient = ctx.createLinearGradient(0, chartArea.top, 0, chartArea.bottom);\n gradient.addColorStop(0, this.hexToRgba(color, 0.06));\n gradient.addColorStop(1, this.hexToRgba(color, 0.01));\n firstDs.backgroundColor = gradient;\n }\n\n chartInstance.update('none');\n }\n\n private hexToRgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- Legend: top position -->\n @if (legend === 'top') {\n <div class=\"zen-chart__legend\">\n @for (ds of datasets; track ds; let i = $index) {\n <div class=\"zen-chart__legend-item\">\n <span class=\"zen-chart__legend-dot\" [style.background-color]=\"getColor(i)\"></span>\n <span class=\"zen-chart__legend-label\">{{ ds.label }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Y-axis label + chart canvas -->\n <div class=\"zen-chart__body\">\n @if (axisLabels && yAxisLabel) {\n <div class=\"zen-chart__y-label\">\n <span>{{ yAxisLabel }}</span>\n </div>\n }\n <div class=\"zen-chart__canvas-wrapper\">\n <canvas baseChart\n [type]=\"chartStyle\"\n [data]=\"chartData\"\n [options]=\"chartOptions\"\n (chartClick)=\"onChartClick($event)\">\n </canvas>\n </div>\n </div>\n\n <!-- X-axis label -->\n @if (axisLabels && xAxisLabel) {\n <div class=\"zen-chart__x-label\">\n <span>{{ xAxisLabel }}</span>\n </div>\n }\n\n <!-- Legend: right position -->\n @if (legend === 'right') {\n <div class=\"zen-chart__legend\">\n @for (ds of datasets; track ds; let i = $index) {\n <div class=\"zen-chart__legend-item\">\n <span class=\"zen-chart__legend-dot\" [style.background-color]=\"getColor(i)\"></span>\n <span class=\"zen-chart__legend-label\">{{ ds.label }}</span>\n </div>\n }\n </div>\n }\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStepBaseType\n} from './zen-progress-steps.types';\n\nexport { ZenStepBaseType } from './zen-progress-steps.types';\n\n@Component({\n selector: 'zen-step-base',\n templateUrl: './zen-step-base.component.html',\n styleUrls: ['./zen-step-base.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenStepBaseComponent {\n\n /** Layout type of the step */\n @Input() type: ZenStepBaseType = 'top';\n\n /** Size variant */\n @Input() size: ZenProgressStepsSize = 'sm';\n\n /** Theme variant */\n @Input() theme: ZenProgressStepsTheme = 'light';\n\n /** Status of this step */\n @Input() status: ZenStepStatus = 'incomplete';\n\n /** Step title */\n @Input() title: string = '';\n\n /** Step description / supporting text */\n @Input() description: string = '';\n\n /** Whether to show the vertical connector (icon-left type) */\n @Input() showConnector: boolean = false;\n\n get hostClasses(): string {\n return [\n 'zen-step-base',\n `zen-step-base--${this.type}`,\n `zen-step-base--${this.size}`,\n `zen-step-base--${this.theme}`,\n `zen-step-base--${this.status}`,\n ].join(' ');\n }\n\n get dotSize(): number {\n switch (this.size) {\n case 'sm': return 8;\n case 'md': return 10;\n case 'lg': return 12;\n }\n }\n\n get checkSize(): number {\n switch (this.size) {\n case 'sm': return 10;\n case 'md': return 14;\n case 'lg': return 16;\n }\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ============ TYPE: TOP (icons-centered) ============ -->\n @if (type === 'top') {\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n <!-- ============ TYPE: ICON ONLY (minimal-icons) ============ -->\n @if (type === 'icon-only') {\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n }\n\n <!-- ============ TYPE: TEXT LINE ============ -->\n @if (type === 'text-line') {\n <div class=\"zen-step-base__bar\"></div>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n <!-- ============ TYPE: ICON LEFT (icons-text vertical) ============ -->\n @if (type === 'icon-left') {\n <div class=\"zen-step-base__icon-col\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n @if (showConnector) {\n <div\n class=\"zen-step-base__connector\"\n [class.zen-step-base__connector--complete]=\"status === 'complete'\"\n [class.zen-step-base__connector--incomplete]=\"status !== 'complete'\">\n </div>\n }\n </div>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n</div>\n\n<!-- ============ ICON TEMPLATE ============ -->\n<ng-template #iconTpl>\n <div class=\"zen-step-base__icon\"\n [class.zen-step-base__icon--complete]=\"status === 'complete'\"\n [class.zen-step-base__icon--current]=\"status === 'current'\"\n [class.zen-step-base__icon--incomplete]=\"status === 'incomplete'\">\n <!-- Complete: checkmark -->\n @if (status === 'complete') {\n <svg\n [attr.width]=\"checkSize\" [attr.height]=\"checkSize\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.3334 4L6.00008 11.3333L2.66675 8\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n <!-- Current / Incomplete: dot -->\n @if (status !== 'complete') {\n <span\n class=\"zen-step-base__dot\"\n [style.width.px]=\"dotSize\"\n [style.height.px]=\"dotSize\">\n </span>\n }\n </div>\n</ng-template>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ZenProgressStepsType,\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStep\n} from './zen-progress-steps.types';\n\nexport {\n ZenProgressStepsType,\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStep\n} from './zen-progress-steps.types';\n\n@Component({\n selector: 'zen-progress-steps',\n templateUrl: './zen-progress-steps.component.html',\n styleUrls: ['./zen-progress-steps.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenProgressStepsComponent {\n\n @Input() type: ZenProgressStepsType = 'icons-centered';\n @Input() size: ZenProgressStepsSize = 'sm';\n @Input() theme: ZenProgressStepsTheme = 'light';\n @Input() steps: ZenStep[] = [];\n @Input() currentStep: number = 0;\n @Input() showText: boolean = true;\n @Input() connector: boolean = true;\n\n get hostClasses(): string {\n const classes = [\n 'zen-progress-steps',\n `zen-progress-steps--${this.type}`,\n `zen-progress-steps--${this.size}`,\n `zen-progress-steps--${this.theme}`,\n ];\n if (!this.showText) classes.push('zen-progress-steps--no-text');\n if (!this.connector) classes.push('zen-progress-steps--no-connector');\n return classes.join(' ');\n }\n\n getStepStatus(index: number): ZenStepStatus {\n if (index < this.currentStep) return 'complete';\n if (index === this.currentStep) return 'current';\n return 'incomplete';\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ============ ICONS CENTERED ============ -->\n @if (type === 'icons-centered') {\n <div class=\"zen-progress-steps__row\">\n <!-- Lines behind icons -->\n <div class=\"zen-progress-steps__lines\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n @if (!last) {\n <div\n class=\"zen-progress-steps__line\"\n [class.zen-progress-steps__line--complete]=\"i < currentStep\"\n [class.zen-progress-steps__line--incomplete]=\"i >= currentStep\">\n </div>\n }\n }\n </div>\n <!-- Step columns -->\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"top\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n\n <!-- ============ MINIMAL ICONS / MINIMAL ICONS CONNECTED ============ -->\n @if (type === 'minimal-icons' || type === 'minimal-icons-connected') {\n <div class=\"zen-progress-steps__row zen-progress-steps__row--inline\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n <zen-step-base class=\"zen-progress-steps__step--minimal\"\n type=\"icon-only\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\">\n </zen-step-base>\n @if (!last) {\n <div\n class=\"zen-progress-steps__line zen-progress-steps__line--horizontal\"\n [class.zen-progress-steps__line--complete]=\"i < currentStep\"\n [class.zen-progress-steps__line--incomplete]=\"i >= currentStep\">\n </div>\n }\n }\n </div>\n <!-- Optional text row -->\n @if (showText) {\n <div class=\"zen-progress-steps__text-row\">\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__text-step\"\n type=\"text-line\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n }\n\n <!-- ============ TEXT LINE ============ -->\n @if (type === 'text-line') {\n <div class=\"zen-progress-steps__row zen-progress-steps__row--text-line\">\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"text-line\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n\n <!-- ============ ICONS TEXT (Vertical) ============ -->\n @if (type === 'icons-text') {\n <div class=\"zen-progress-steps__column\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"icon-left\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\"\n [showConnector]=\"connector && !last\">\n </zen-step-base>\n }\n </div>\n }\n\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ZenduCheckboxComponent } from './checkbox/zendu-checkbox.component';\nimport { ZenduColorPickerComponent } from './colorpicker/zendu-colorpicker.component';\nimport { ZenduColumnConfigurationComponent } from './column-configuration/zendu-column-configuration.component';\nimport { ZenduDatepickerComponent } from './datepicker/zendu-datepicker.component';\nimport { ZenduFilterComponent } from './filter/zendu-filter.component';\nimport { ZenduGroupsComponent } from './groups/zendu-groups.component';\nimport { ZenduPaginationBarComponent } from './pagination-bar/zendu-pagination-bar.component';\nimport { ZenduPhoneInputComponent } from './phone-input/zendu-phone-input.component';\nimport { ZenduRadioButtonComponent } from './radio-button/radio-button.component';\nimport { ZenduSearchBoxComponent } from './search-box/zendu-search-box.component';\nimport { ZenduSelectComponent } from './select/zendu-select.component';\nimport { ZenduSelectOptionDirective } from './select/templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './select/templates/zendu-select-value.directive';\nimport { ZenduSortHeaderComponent } from './sort-header/zendu-sort-header.component';\nimport { ZenduToggleSlideComponent } from './toggle-slide/zendu-toggle-slide.component';\nimport { ZenduToggleComponent } from './toggle/zendu-toggle.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ZenduIconComponent } from './icon/zendu-icon.component';\nimport { ZenduCardBlockComponent } from './card-block/zendu-card-block.component';\nimport { ZenduMapPreviewComponent } from './map-preview/zendu-map-preview.component';\nimport { ZenduSpinner } from './spinner/zendu-spinner.component';\nimport { ZenduDocScanner } from './doc-scanner/zendu-doc-scanner.component';\nimport { ZenduMapComponent } from './map/zendu-map.component';\nimport { ZenduFileUpload } from './file-upload/zendu-file-upload.component';\nimport { ZenduProgress } from './progress/zendu-progress.component';\nimport { OpenCVService } from './services/opencv.service';\nimport { ZenduLocationSearch } from './location-search/zendu-location-search.component';\nimport { SignaturePadComponent } from '@almothafar/angular-signature-pad';\nimport { provideHttpClient, withInterceptorsFromDi, withXhr } from '@angular/common/http';\nimport { ZenLiveViewPlayerComponent } from './live-view-player/live-view-player/live-view-player.component';\nimport { ZenHTML5VideoPlayerComponent } from './live-view-player/html5-video-player/html5-video-player.component';\nimport { ZenFlvPlayerComponent } from './live-view-player/flv-player/flv-player.component';\nimport { ZenHlsPlayerComponent } from './live-view-player/hls-player/hls-player.component';\nimport { ZenWebRTCPlayerComponent } from './live-view-player/web-rtc/web-rtc-player.component';\nimport { ZenSnapshotPlayerComponent } from './live-view-player/snapshot-player/snapshot-player.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { ZenduSelectButtonDirective } from './select/templates/zendu-select-button.directive';\nimport { ZenduTimepickerComponent } from './timepicker/zendu-timepicker.component';\nimport { ZenduDatePickerDropdownComponent } from './date-picker-dropdown/zendu-date-picker-dropdown.component';\nimport { ZenduFileUploaderComponent } from './file-uploader/zendu-file-uploader.component';\nimport { ZenduAvatarComponent } from './avatar/zendu-avatar.component';\nimport { ZenduAvatarGroupComponent } from './avatar/zendu-avatar-group.component';\nimport { ZenduAvatarLabelGroupComponent } from './avatar/zendu-avatar-label-group.component';\nimport { ZenduAvatarProfilePhotoComponent } from './avatar/zendu-avatar-profile-photo.component';\nimport { ZenduSliderComponent } from './slider/zendu-slider.component';\nimport { ZenBadgeComponent } from './badge/zen-badge.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { ZenButtonComponent } from './button/zen-button.component';\nimport { ZenduInputComponent } from './input/zendu-input.component';\nimport { ZenDropdownMenuComponent } from './dropdown-menu/zen-dropdown-menu.component';\nimport { ZenTooltipDirective } from './tooltip/zen-tooltip.directive';\nimport { ZenTooltipPopupComponent } from './tooltip/zen-tooltip.component';\nimport { ZenEldStatusComponent } from './eld-status/zen-eld-status.component';\nimport { ZenNavSearchComponent } from './nav-search/zen-nav-search.component';\nimport { ZenSubmoduleItemComponent } from './submodule-item/zen-submodule-item.component';\nimport { ZenSubpageItemComponent } from './subpage-item/zen-subpage-item.component';\nimport { ZenModulePopupComponent } from './module-popup/zen-module-popup.component';\nimport { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts';\nimport { ZenChartComponent } from './chart/zen-chart.component';\nimport { ZenProgressStepsComponent } from './progress-steps/zen-progress-steps.component';\nimport { ZenStepBaseComponent } from './progress-steps/zen-step-base.component';\nimport { ZenSnackbarComponent } from './snackbar/zen-snackbar.component';\n\n@NgModule({ declarations: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenHTML5VideoPlayerComponent,\n ZenFlvPlayerComponent,\n ZenHlsPlayerComponent,\n ZenSnapshotPlayerComponent,\n ZenWebRTCPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduDatePickerDropdownComponent,\n ZenduFileUploaderComponent,\n ZenduAvatarComponent,\n ZenduAvatarGroupComponent,\n ZenduAvatarLabelGroupComponent,\n ZenduAvatarProfilePhotoComponent,\n ZenduSliderComponent,\n ZenduInputComponent,\n ZenButtonComponent,\n ZenDropdownMenuComponent,\n ZenBadgeComponent,\n ZenTooltipDirective,\n ZenTooltipPopupComponent,\n ZenEldStatusComponent,\n ZenNavSearchComponent,\n ZenSubmoduleItemComponent,\n ZenSubpageItemComponent,\n ZenModulePopupComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent,\n ZenSnackbarComponent\n ],\n exports: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduDatePickerDropdownComponent,\n ZenduFileUploaderComponent,\n ZenduAvatarComponent,\n ZenduAvatarGroupComponent,\n ZenduAvatarLabelGroupComponent,\n ZenduAvatarProfilePhotoComponent,\n ZenduSliderComponent,\n ZenduInputComponent,\n ZenButtonComponent,\n ZenDropdownMenuComponent,\n ZenBadgeComponent,\n ZenTooltipDirective,\n ZenTooltipPopupComponent,\n ZenEldStatusComponent,\n ZenNavSearchComponent,\n ZenSubmoduleItemComponent,\n ZenSubpageItemComponent,\n ZenModulePopupComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent,\n ZenSnackbarComponent\n ], imports: [CommonModule,\n FormsModule,\n DragDropModule,\n SignaturePadComponent,\n ReactiveFormsModule,\n OverlayModule,\n BaseChartDirective,\n TranslateModule.forRoot({\n loader: provideTranslateHttpLoader({\n prefix: '/assets/i18n/',\n suffix: '.json'\n })\n })], providers: [\n OpenCVService,\n provideCharts(withDefaultRegisterables()),\n provideHttpClient(withXhr(), withInterceptorsFromDi()),\n ] })\nexport class NgZenduitModule { }\n\n","/*\n * Public API of ng-zenduit\n */\nexport * from \"./lib/services/zendu-notify.service\";\nexport * from './lib/ng-zenduit.module';\n\n/**\n * Types\n */\nexport * from './lib/filter/filtersConfig';\nexport * from './lib/filter/numberRange';\nexport * from './lib/column-configuration/columnState';\nexport * from './lib/map/map.types';\nexport * from './lib/location-search/location.address';\nexport * from './lib/datepicker/datepicker';\nexport * from './lib/datepicker/date-picker-hint';\nexport * from './lib/date-picker-dropdown/date-picker-dropdown.types';\nexport * from './lib/file-uploader/file-uploader.types';\n\n/**\n * Components\n */\nexport * from \"./lib/checkbox/zendu-checkbox.component\";\nexport * from \"./lib/colorpicker/zendu-colorpicker.component\";\nexport * from \"./lib/column-configuration/zendu-column-configuration.component\";\nexport * from \"./lib/datepicker/zendu-datepicker.component\";\nexport * from \"./lib/filter/zendu-filter.component\";\nexport * from \"./lib/groups/zendu-groups.component\";\nexport * from \"./lib/pagination-bar/zendu-pagination-bar.component\";\nexport * from \"./lib/phone-input/zendu-phone-input.component\";\nexport * from \"./lib/radio-button/radio-button.component\";\nexport * from \"./lib/search-box/zendu-search-box.component\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/select/templates/zendu-select-value.directive\";\nexport * from \"./lib/select/templates/zendu-select-option.directive\";\nexport * from \"./lib/select/templates/zendu-select-button.directive\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/sort-header/zendu-sort-header.component\";\nexport * from \"./lib/toggle/zendu-toggle.component\";\nexport * from \"./lib/toggle-slide/zendu-toggle-slide.component\";\nexport * from \"./lib/icon/zendu-icon.component\";\nexport * from \"./lib/icon/icon-config\";\nexport * from \"./lib/card-block/zendu-card-block.component\";\nexport * from \"./lib/map-preview/zendu-map-preview.component\";\nexport * from \"./lib/spinner/zendu-spinner.component\";\nexport * from \"./lib/doc-scanner/zendu-doc-scanner.component\";\nexport * from \"./lib/map/zendu-map.component\";\nexport * from \"./lib/file-upload/zendu-file-upload.component\";\nexport * from \"./lib/progress/zendu-progress.component\";\nexport * from \"./lib/location-search/zendu-location-search.component\";\nexport * from \"./lib/live-view-player/live-view-player/live-view-player.component\";\nexport * from \"./lib/timepicker/zendu-timepicker.component\";\nexport * from \"./lib/date-picker-dropdown/zendu-date-picker-dropdown.component\";\nexport * from \"./lib/file-uploader/zendu-file-uploader.component\";\nexport * from \"./lib/avatar/zendu-avatar.component\";\nexport * from \"./lib/avatar/zendu-avatar-group.component\";\nexport * from \"./lib/avatar/zendu-avatar-label-group.component\";\nexport * from \"./lib/avatar/zendu-avatar-profile-photo.component\";\nexport * from \"./lib/slider/zendu-slider.component\";\nexport * from \"./lib/button/zen-button.component\";\nexport * from \"./lib/input/zendu-input.component\";\nexport * from \"./lib/dropdown-menu/zen-dropdown-menu.component\";\nexport * from \"./lib/badge/zen-badge.component\";\nexport * from \"./lib/tooltip/zen-tooltip.directive\";\nexport * from \"./lib/tooltip/zen-tooltip.component\";\nexport * from \"./lib/eld-status/zen-eld-status.component\";\nexport * from \"./lib/nav-search/zen-nav-search.component\";\nexport * from \"./lib/submodule-item/zen-submodule-item.component\";\nexport * from \"./lib/subpage-item/zen-subpage-item.component\";\nexport * from \"./lib/module-popup/zen-module-popup.component\";\nexport * from \"./lib/chart/zen-chart.component\";\nexport * from \"./lib/chart/zen-chart.types\";\nexport * from \"./lib/progress-steps/zen-progress-steps.component\";\nexport * from \"./lib/progress-steps/zen-step-base.component\";\nexport * from \"./lib/snackbar/zen-snackbar.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.ZenduInputComponent","i3","i2","i3.ZenduCheckboxComponent","i4.ZenduSearchBoxComponent","i4","i5.ZenduIconComponent","i2.ZenduCheckboxComponent","i3.ZenduSearchBoxComponent","i1.ZenduIconComponent","i4.ZenduToggleSlideComponent","i5.ZenduSearchBoxComponent","i6.ZenduDatepickerComponent","i7.ZenduGroupsComponent","i8.ZenduRadioButtonComponent","i9.ZenduIconComponent","i10.ZenduSpinner","i11.ZenButtonComponent","i12","i4.ZenduGroupsComponent","i6.ZenduSpinner","i7","i1.ZenduSelectComponent","i2.ZenButtonComponent","LocalLock","i1.ScriptLoader","i1.OpenCVService","i2.ZenduIconComponent","i1.GeocodingService","i4.ZenduIconComponent","i1.ZenHttpService","i1.ZenHTML5VideoPlayerComponent","i2.ZenFlvPlayerComponent","i3.ZenHlsPlayerComponent","i4.ZenSnapshotPlayerComponent","i5.ZenWebRTCPlayerComponent","i3.ZenduIconComponent","i2.ZenduSpinner","i2.ZenduAvatarComponent","i1.ZenduCheckboxComponent","i2.ZenEldStatusComponent","i1.ZenStepBaseComponent"],"mappings":"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"}
|