ng-zenduit 2.0.19 → 2.0.21
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/esm2020/lib/filter/zendu-filter.component.mjs +5 -4
- package/esm2020/lib/sort-header/zendu-sort-header.component.mjs +2 -2
- package/fesm2015/ng-zenduit.mjs +97 -97
- package/fesm2015/ng-zenduit.mjs.map +1 -1
- package/fesm2020/ng-zenduit.mjs +97 -97
- package/fesm2020/ng-zenduit.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -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/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/filter/zendu-filter.component.ts","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.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/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/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/breadcrumbs/zendu-breadcrumbs.component.ts","../../../projects/ng-zenduit/src/lib/breadcrumbs/zendu-breadcrumbs.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/comment-textarea/zendu-comment-textarea.component.ts","../../../projects/ng-zenduit/src/lib/comment-textarea/zendu-comment-textarea.component.html","../../../projects/ng-zenduit/src/lib/comment-item/zendu-comment-item.component.ts","../../../projects/ng-zenduit/src/lib/comment-item/zendu-comment-item.component.html","../../../projects/ng-zenduit/src/lib/comment-list/zendu-comment-list.component.ts","../../../projects/ng-zenduit/src/lib/comment-list/zendu-comment-list.component.html","../../../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/button/zen-button.component.ts","../../../projects/ng-zenduit/src/lib/button/zen-button.component.html","../../../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/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/side-nav-item/zen-side-nav-item.component.ts","../../../projects/ng-zenduit/src/lib/side-nav-item/zen-side-nav-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/nav-item/zen-nav-item.component.ts","../../../projects/ng-zenduit/src/lib/nav-item/zen-nav-item.component.html","../../../projects/ng-zenduit/src/lib/top-nav-item/zen-top-nav-item.component.ts","../../../projects/ng-zenduit/src/lib/top-nav-item/zen-top-nav-item.component.html","../../../projects/ng-zenduit/src/lib/top-nav/zen-top-nav.component.ts","../../../projects/ng-zenduit/src/lib/top-nav/zen-top-nav.component.html","../../../projects/ng-zenduit/src/lib/navigation/zen-navigation.component.ts","../../../projects/ng-zenduit/src/lib/navigation/zen-navigation.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 } from '@angular/core';\n\n@Component({\n selector: 'zen-checkbox',\n templateUrl: './zendu-checkbox.component.html',\n styleUrls: ['./zendu-checkbox.component.scss']\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 <i *ngIf=\"checked && !indeterminate\"\n class=\"material-icons app-checkbox-icon\">done</i>\n <i *ngIf=\"indeterminate\"\n class=\"material-icons app-checkbox-icon\">remove</i>\n </button>\n <div class=\"app-checkbox-text-wrap\"\n *ngIf=\"label || supportingText\">\n <div class=\"app-checkbox-label\"\n *ngIf=\"label\"\n [ngStyle]=\"{'color': labelColor }\">\n <img class=\"checkbox-image\"\n [src]=\"imageUrl\"\n *ngIf=\"imageUrl\">\n {{ label }}\n </div>\n <div class=\"app-checkbox-supporting-text\"\n *ngIf=\"supportingText\">\n {{ supportingText }}\n </div>\n </div>\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-colorpicker',\n templateUrl: './zendu-colorpicker.component.html',\n styleUrls: ['./zendu-colorpicker.component.scss']\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 <ng-container *ngIf=\"!customTarget\">\n <div *ngIf=\"icon == 'text'\">\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_text.svg\"\n class=\"icon-text\">\n </div>\n\n <div *ngIf=\"icon == 'paint'\">\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\n <div class=\"color-line\"\n [ngStyle]=\"{'border-color': color}\">\n </div>\n </ng-container>\n\n <div *ngIf=\"opened\"\n class=\"color-menu\"\n [ngStyle]=\"{ 'left': menuLeft, 'top': menuTop, 'bottom': menuBottom }\">\n\n <div class=\"colors-container\">\n <div *ngFor=\"let row of colorsRows\"\n class=\"color-row\">\n <div *ngFor=\"let rowColor of row.colors\"\n (click)=\"selectColor(rowColor)\"\n class=\"color-item\"\n [ngStyle]=\"{'background-color': rowColor}\">\n <div *ngIf=\"rowColor == color\"\n class=\"select-icon\">\n <i class=\"material-icons\">check</i>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"showNone\"\n class=\"no-color\"\n (click)=\"selectColor('')\">\n None\n </div>\n </div>\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 ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output,\n ViewChild,\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})\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 @ViewChild('searchInput', { static: false }) searchInput!: ElementRef;\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 activateSearchBox() {\n this.searchInput.nativeElement.focus();\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 <i class=\"svg-icons\"\n (click)=\"activateSearchBox()\">\n <svg width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8.33333\"\n cy=\"8.33333\"\n r=\"5.83333\"\n stroke=\"#828282\"\n stroke-width=\"1.6\" />\n <path d=\"M17.5 17.5001L12.9166 12.9167\"\n stroke=\"#828282\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\" />\n </svg>\n </i>\n <input [(ngModel)]=\"text\"\n class=\"search-box\"\n (ngModelChange)=\"onChange()\"\n placeholder=\"{{placeholder | translate}}\"\n [disabled]=\"disabled\"\n #searchInput>\n <i class=\"material-icons close-icon\"\n *ngIf=\"text\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"clear(); $event.stopPropagation()\">close</i>\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\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})\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 <div *ngIf=\"showPanel\"\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\n\n <div class=\"action-menu-body dnd-container\"\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\">\n <div *ngFor=\"let config of filteredColumnsConfiguration\"\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 </div>\n\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</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 } 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})\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","<div *ngIf=\"isFeatured\"\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","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef\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})\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 <ng-container *ngIf=\"!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 <div class=\"date-placeholder\"\n *ngIf=\"!date && showDate && !showTime\">\n {{\"Select Date\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && !showDate\">\n {{\"Select Time\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && showDate && showTime\">\n {{\"Select Date & Time\" | translate}}\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n\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 </ng-container>\n\n <!-- Box design datepicker toggle -->\n <ng-container *ngIf=\"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\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showDate && !showTime\">\n {{\"Select Date\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && !showDate\">\n {{\"Select Time\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && showDate && showTime\">\n {{\"Select Date & Time\" | translate}}\n </div>\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n </button>\n </ng-container>\n\n <!-- Datepicker popup -->\n <ng-container *ngTemplateOutlet=\"dateMenuTemplate\">\n </ng-container>\n\n <ng-template #dateMenuTemplate>\n <div #dateMenu\n *ngIf=\"isPickerVisible\"\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n <ng-container *ngIf=\"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 <div *ngFor=\"let weekDay of weekDays\"\n class=\"week-day\">\n {{weekDay | translate}}\n </div>\n </div>\n <div *ngFor=\"let row of dayRows\"\n class=\"day-row\">\n <div *ngFor=\"let day of row.days\"\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 <zen-icon *ngIf=\"day.isHighlighted\"\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"showTime\"\n class=\"time-container\">\n\n <div class=\"time-lbl\">\n {{\"Select Time\" | translate}}:\n </div>\n\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 <span *ngIf=\"showSeconds\">:</span>\n <div class=\"input-wrapper\" *ngIf=\"showSeconds\">\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 <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 <div class=\"hint\"\n *ngIf=\"hint\">\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 <div class=\"footer\"\n *ngIf=\"!autoConfirm || showTime\">\n <button *ngIf=\"date\"\n (click)=\"clear()\"\n class=\"button-stroked\">\n {{\"Clear\" | translate}}\n </button>\n <button *ngIf=\"!date\"\n (click)=\"cancel()\"\n class=\"button-stroked\">\n {{\"Cancel\" | translate}}\n </button>\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n {{\"Apply\" | translate}}\n </button>\n </div>\n\n <ng-container *ngIf=\"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 <div class=\"month-item\"\n *ngFor=\"let month of months; index as index\"\n (click)=\"selectMonth(index)\">\n {{ month | translate }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"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 <div class=\"month-item\"\n *ngFor=\"let year of years\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output } 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})\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} 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})\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<div class=\"zen-groups-dropdown\" *ngIf=\"!inline\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n <span *ngIf=\"!selectedLabel\" class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n <span *ngIf=\"selectedLabel\" class=\"zen-groups-value\">{{ selectedLabel }}</span>\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n\n <div class=\"zen-groups-panel\" *ngIf=\"isOpen\" [class.open-upward]=\"openUpward\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n</div>\n\n<!-- Inline mode (used inside zen-filter) -->\n<div class=\"zen-groups-inline\" *ngIf=\"inline\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n</div>\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n <div class=\"action-item-checkbox select-all\" *ngIf=\"!hideSelectAll\">\n <zen-checkbox *ngIf=\"dataSource.length === displayDataSource.length\"\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n </div>\n\n <ng-container *ngFor=\"let dsItem of displayDataSource\">\n <div *ngIf=\"isTreeItemVisible(dsItem)\"\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n <ng-container *ngIf=\"dsItem.level > 0\">\n <div *ngFor=\"let connector of getTreeConnectors(dsItem); let i = index\"\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n </ng-container>\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 <span *ngIf=\"hasChildren(dsItem)\"\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n </div>\n <button *ngIf=\"hasChildren(dsItem)\"\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 </div>\n </ng-container>\n\n <div class=\"zen-groups-no-results\" *ngIf=\"searchText && displayDataSource.length === 0\">\n {{ 'No Results Found' | translate }}\n </div>\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss']\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 <div class=\"radio-text-wrap\"\n *ngIf=\"label || supportingText\">\n <span class=\"app-radio-button-label\">\n <img class=\"radio-image\"\n [src]=\"imageUrl\"\n *ngIf=\"imageUrl\">\n {{label | translate}}\n </span>\n <span class=\"app-radio-supporting-text\"\n *ngIf=\"supportingText\">\n {{supportingText}}\n </span>\n </div>\n</label>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-spinner',\n templateUrl: './zendu-spinner.component.html',\n styleUrls: ['./zendu-spinner.component.scss']\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 {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\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})\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', ['$event'])\n windowSizeHandling() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:scroll', ['$event'])\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 <ng-container *ngIf=\"!customTrigger\">\n <button (click)=\"toggle()\"\n class=\"button-stroked filter {{isApplied ? 'applied' : ''}}\">\n <zen-icon [src]=\"imageUrl\"\n *ngIf=\"imageUrl\"></zen-icon>\n <i class=\"filter-icon material-icons\"\n *ngIf=\"!imageUrl\">filter_list</i>\n <span *ngIf=\"label\">{{ label | translate }}</span>\n </button>\n </ng-container>\n\n <ng-content *ngIf=\"customTrigger\"></ng-content>\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 <ng-container *ngIf=\"errorMessage.length\">\n <li *ngFor=\"let item of errorMessage\"\n class=\"error-msg\">{{item | translate }}</li>\n </ng-container>\n\n <div *ngFor=\"let item of config.items\">\n <div class=\"menu-item\"\n *ngIf=\"isMenuIsVisible(item)\">\n\n <!-- Divider between two filter -->\n <div *ngIf=\"item.type === 'divider'\">\n <p class=\"filter-divider\"></p>\n </div>\n\n <!-- Boolean toggle -->\n <div *ngIf=\"item.type === 'toggle'\"\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 <button class=\"action-item expander-item\"\n *ngIf=\"item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse\"\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 <div class=\"action-item section-title\"\n *ngIf=\"item.type != 'toggle' && item.type != 'divider' && item.disableCollapse\">\n {{item.title | translate}}\n </div>\n\n <ng-container *ngIf=\"item.expanded || item.disableCollapse\">\n <div [ngSwitch]=\"item.type\">\n <!-- Multiselect -->\n <div *ngSwitchCase=\"'multiselect'\">\n <!-- Lazy loading mode -->\n <ng-container *ngIf=\"item.isLazyLoading\">\n <div *ngFor=\"let dsItem of item.filteredDataSource\"\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 <span *ngIf=\"dsItem.badgeBgColor\"\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n </div>\n <div *ngIf=\"item.canLoadMore && !item.isLoadingNow\"\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 <div *ngIf=\"item.isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!item.isLazyLoading && !hasTreeData(item)\">\n <div class=\"action-item-checkbox ds-item select-all\" *ngIf=\"!item.hideSelectAll\">\n <zen-checkbox *ngIf=\"item.dataSource.length === item.filteredDataSource.length\"\n [(checked)]=\"item.isSelectedAll\"\n [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll(item)\">\n </zen-checkbox>\n </div>\n\n <div *ngFor=\"let dsItem of item.filteredDataSource\"\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 <span *ngIf=\"dsItem.badgeBgColor\"\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n </div>\n </ng-container>\n\n <!-- Tree view mode -->\n <zen-groups *ngIf=\"!item.isLazyLoading && hasTreeData(item)\"\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 </div>\n\n <!-- Date range picker -->\n <div *ngSwitchCase=\"'dateRange'\">\n <!-- Options date range view -->\n <ng-container *ngIf=\"item.dateRangeOptions?.length\">\n <ng-container *ngFor=\"let option of item.dateRangeOptions\">\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 </ng-container>\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 <ng-container *ngIf=\"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 </ng-container>\n </ng-container>\n\n <!-- Default date range view -->\n <ng-container *ngIf=\"!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 </ng-container>\n </div>\n\n <!-- Date picker -->\n <div *ngSwitchCase=\"'date'\">\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 <div *ngSwitchCase=\"'numberRange'\"\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 <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let option of item.radioOptions\"\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 </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n <span *ngIf=\"showNoFilterResult\"\n class=\"no-item\">{{'No Results Found' | translate}}..</span>\n </div>\n\n <div class=\"action-menu-footer filter-footer\">\n <span class=\"selected-count\" *ngIf=\"hasMultiselectItems\">{{ selectedCount }} {{'Selected' | translate}}</span>\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 { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } 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})\nexport class ZenduPaginationBarComponent implements OnChanges {\n @Input() page = 1;\n @Input() perPage = 10;\n @Input() count = 0;\n\n @Output() pageChange = new EventEmitter<number>();\n\n public totalPages = 1;\n public pages: PageItem[] = [];\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 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 }\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 <button type=\"button\"\n class=\"nav-btn\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPage(page - 1)\">\n <zen-icon class=\"nav-icon\" src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n <span>{{ \"Previous\" | translate }}</span>\n </button>\n\n <div class=\"pages\">\n <ng-container *ngFor=\"let item of pages; let i = index\">\n <button *ngIf=\"item.kind === 'page'\"\n type=\"button\"\n class=\"page-btn\"\n [class.is-active]=\"item.active\"\n (click)=\"goToPage(item.page)\">\n {{ item.page }}\n </button>\n <span *ngIf=\"item.kind === 'ellipsis'\" class=\"page-ellipsis\">…</span>\n </ng-container>\n </div>\n\n <button type=\"button\"\n class=\"nav-btn\"\n [disabled]=\"page >= totalPages\"\n (click)=\"goToPage(page + 1)\">\n <span>{{ \"Next\" | translate }}</span>\n <zen-icon class=\"nav-icon\" src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } 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})\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 <div class=\"zen-dropdown-menu\"\n *ngIf=\"isExpanded\"\n [ngClass]=\"{'open': isExpanded}\">\n <!-- Countries List -->\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n *ngFor=\"let country of countryList\"\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</div>\n\n<!-- Click outside handler for dropdown -->\n<div *ngIf=\"isExpanded\"\n class=\"zen-dropdown-backdrop\"\n (click)=\"hideDropDown()\"></div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-option]'\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})\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})\nexport class ZenduSelectButtonDirective {\n\n constructor(public template: TemplateRef<HTMLElement>) { }\n\n}\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, ViewEncapsulation, ContentChild } 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})\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\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 this.filterOptions();\n }\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 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 this.filterOptions();\n }\n\n clearSearch(): void {\n this.searchText = '';\n this.filterOptions();\n }\n \n /**\n * Handle search input change for search type\n */\n onSearchInputChange(): void {\n this.searchText = this.searchInputValue;\n this.filterOptions();\n if (!this.isOpen && this.searchInputValue) {\n this.isOpen = true;\n }\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.selectModel) 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.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 <label class=\"app-select-label text text-sm text-weight-medium\" *ngIf=\"label\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n <span *ngIf=\"required\" class=\"required-indicator\">*</span>\n </label>\n\n <!-- Select Input -->\n <div class=\"app-select-wrapper\">\n <!-- Custom Trigger Template (overrides built-in trigger) -->\n <div *ngIf=\"buttonTemplate\"\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 <!-- Built-in Trigger (when no custom button template provided) -->\n <ng-container *ngIf=\"!buttonTemplate\" [ngSwitch]=\"leadingType\">\n <!-- Default Select (no leading element) -->\n <ng-container *ngSwitchCase=\"'default'\">\n <ng-container *ngTemplateOutlet=\"defaultSelectTemplate\"></ng-container>\n </ng-container>\n\n <!-- Icon Leading Select -->\n <ng-container *ngSwitchCase=\"'icon'\">\n <ng-container *ngTemplateOutlet=\"iconSelectTemplate\"></ng-container>\n </ng-container>\n\n <!-- Avatar Leading Select -->\n <ng-container *ngSwitchCase=\"'avatar'\">\n <ng-container *ngTemplateOutlet=\"avatarSelectTemplate\"></ng-container>\n </ng-container>\n\n <!-- Dot Leading Select -->\n <ng-container *ngSwitchCase=\"'dot'\">\n <ng-container *ngTemplateOutlet=\"dotSelectTemplate\"></ng-container>\n </ng-container>\n\n <!-- Search Input Select -->\n <ng-container *ngSwitchCase=\"'search'\">\n <ng-container *ngTemplateOutlet=\"searchInputTemplate\"></ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Dropdown Menu -->\n <div class=\"app-select-dropdown\" \n [ngClass]=\"getDropdownDirectionClass()\"\n *ngIf=\"isOpen\">\n \n <!-- Tree Mode: embed zen-groups inline -->\n <ng-container *ngIf=\"isTreeMode && isMultiselect; else flatList\">\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 </ng-container>\n\n <!-- Flat List Mode (default) -->\n <ng-template #flatList>\n <!-- Search Box for hasSearch (not for search type as it has inline search) -->\n <div class=\"app-select-search\" *ngIf=\"leadingType !== 'search' && hasSearch && !disabled\">\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 <zen-icon *ngIf=\"searchText\"\n class=\"app-select-search-clear\"\n [name]=\"'x'\"\n [customColor]=\"'#667085'\"\n (click)=\"clearSearch(); $event.stopPropagation()\">\n </zen-icon>\n </div>\n\n <!-- Options List -->\n <div class=\"app-select-options\">\n <!-- Select All Option for Multiselect -->\n <button *ngIf=\"isMultiselect && !hideSelectAll && filteredOptions.length > 0\"\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 <button *ngIf=\"enableAddNewOption && (showDefaultAddOption || searchText)\"\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 <button *ngIf=\"enableRemoveOption\"\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 <div *ngIf=\"filteredOptions.length === 0 && !enableAddNewOption\" class=\"app-select-no-options\">\n No matching options found\n </div>\n\n <button *ngFor=\"let option of filteredOptions\"\n class=\"app-select-option\"\n [class.selected]=\"isSelected(option)\"\n (click)=\"selectOption(option)\">\n\n <!-- Checkbox for Multiselect -->\n <zen-checkbox class=\"app-select-checkbox\"\n *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n\n <!-- Option Leading Element -->\n <div class=\"app-select-option-leading\" *ngIf=\"leadingType !== 'default'\">\n <ng-container [ngSwitch]=\"leadingType\">\n <ng-container *ngSwitchCase=\"'icon'\">\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: option }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'avatar'\">\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: option }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'dot'\">\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: option }\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Option Text -->\n <div class=\"app-select-option-text-wrapper\">\n <!-- Use custom template if provided -->\n <ng-container *ngIf=\"!isMultiselect && optionTemplate; else defaultOptionText\">\n <ng-template [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultOptionText>\n <span class=\"app-select-option-text\" [class.app-select-option-truncate]=\"isTruncate\">\n {{ getName(option) | translate }}\n </span>\n <span class=\"app-select-option-secondary\" *ngIf=\"option.secondaryText\">\n {{ option.secondaryText }}\n </span>\n </ng-template>\n </div>\n\n <!-- Check Icon for Single Select -->\n <zen-icon *ngIf=\"!isMultiselect && isSelected(option)\"\n class=\"app-select-option-check\"\n [name]=\"'check'\"\n [customColor]=\"'#136AB6'\">\n </zen-icon>\n </button>\n </div>\n </ng-template>\n </div>\n </div>\n \n <!-- Hint text / Error message -->\n <div *ngIf=\"(destructive && errorMessage) || hintText\" \n class=\"app-select-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n <i *ngIf=\"destructive\" class=\"material-icons-outlined hint-icon\">error_outline</i>\n <span>{{ ((destructive && errorMessage) ? errorMessage : hintText) | translate }}</span>\n </div>\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 <ng-container *ngIf=\"valueTemplate && !isModelEmpty(); else defaultValueDisplay\">\n <ng-template [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: getSelectedOption(), display: selectedDisplay }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultValueDisplay>\n <span class=\"app-select-value\" [class.placeholder]=\"isModelEmpty()\">\n {{ selectedDisplay || placeholder | translate }}\n </span>\n <span class=\"app-select-secondary\" *ngIf=\"getSelectedSecondaryText() && !isModelEmpty()\">\n {{ getSelectedSecondaryText() }}\n </span>\n </ng-template>\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 <ng-container *ngIf=\"icon || option?.icon || option?.iconName\">\n <ng-container *ngIf=\"getIconPath(option, icon) as iconPath\">\n <!-- If icon contains / or . treat as SVG path -->\n <ng-container *ngIf=\"(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 <img *ngIf=\"iconPath.includes('excel')\" \n [src]=\"iconPath\" \n alt=\"\"\n style=\"width: 20px; height: 20px;\">\n <!-- Use zen-icon with src for other SVG files -->\n <zen-icon *ngIf=\"!iconPath.includes('excel')\"\n [src]=\"iconPath\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n </ng-container>\n <!-- Otherwise treat as Material icon name or special cases -->\n <ng-container *ngIf=\"!((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 <img *ngIf=\"(icon === 'excel') || (option?.icon === 'excel') || (option?.iconName === 'excel')\"\n src=\"assets/ng-zenduit/icons/excel.svg\"\n alt=\"Excel\"\n style=\"width: 20px; height: 20px;\">\n <!-- Material icon names -->\n <zen-icon *ngIf=\"(icon !== 'excel') && (option?.icon !== 'excel') && (option?.iconName !== 'excel')\"\n [name]=\"icon || option?.icon || option?.iconName\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<!-- Avatar Leading Element -->\n<ng-template #avatarLeadingElement let-option=\"option\" let-avatar=\"avatar\">\n <div class=\"app-select-avatar\" *ngIf=\"avatar || option?.avatar\" >\n <img [src]=\"avatar || option?.avatar\" alt=\"\">\n </div>\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 } 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})\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 } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle',\n templateUrl: './zendu-toggle.component.html',\n styleUrls: ['./zendu-toggle.component.scss']\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 <div class=\"zen-toggle-text\" *ngIf=\"label\">\n <span class=\"zen-toggle-label\">{{label}}</span>\n <span class=\"zen-toggle-supporting\" *ngIf=\"supportingText\">{{supportingText}}</span>\n </div>\n\n</div>\n","import { Component, Input } 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})\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 <zen-icon *ngIf=\"icon\"\n [src]=\"icon\"></zen-icon>\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 } 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})\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} 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})\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 <div class=\"colors-container\" *ngIf=\"canDoodle || canAddText\">\n <div class=\"colors\" *ngFor=\"let color of colors\" [ngStyle]=\"{'background': color.hexCode, 'border':color.selected ? '1.6px solid white' : 'none'}\" (click)=\"chngClrTextOrBrush(color.hexCode, canAddText ? 'text': 'doodle')\"></div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\ninterface BreadcrumbStep {\n text: string;\n active: boolean;\n /**\n * user's custom data\n */\n tag?: unknown;\n}\n\n@Component({\n selector: 'zen-breadcrumbs',\n templateUrl: './zendu-breadcrumbs.component.html',\n styleUrls: ['./zendu-breadcrumbs.component.scss'],\n})\nexport class ZenduBreadcrumbs {\n @Input() steps: BreadcrumbStep[] = [];\n\n /**\n * Enable manual activation. In this case active trips will managed by app\n */\n @Input() manualNavigation = false;\n\n @Output() onActivate = new EventEmitter<BreadcrumbStep>();\n\n public onStepClick(step: BreadcrumbStep) {\n if (this.manualNavigation) {\n return;\n }\n const activeIdx = this.steps.indexOf(step);\n // update states\n for (let [idx, step] of this.steps.entries()) {\n step.active = idx <= activeIdx;\n }\n this.onActivate.emit(step);\n }\n}\n","<div class=\"component\">\n <ng-container *ngFor=\"let step of steps; let isLast = last;\">\n <div class=\"line\"\n [ngClass]=\"{\n 'active': step.active,\n 'width': steps.length !== 1\n }\"></div>\n <div class=\"step\"\n [ngClass]=\"{\n 'active': step.active,\n 'mannual-navigation': manualNavigation,\n 'text-nowrap': steps.length === 1\n }\"\n (click)=\"onStepClick(step)\">\n {{step.text}}\n </div>\n <!-- last line -->\n <div *ngIf=\"isLast\"\n class=\"line\"\n [ngClass]=\"{\n 'active': step.active,\n 'width': steps.length !== 1\n }\"></div>\n </ng-container>\n\n</div>","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 } 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})\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 } 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})\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 <span *ngIf=\"uploadState != 'done'\">Upload File</span>\n <span *ngIf=\"uploadState == 'done'\">Uploaded File</span>\n </div>\n <div class=\"drop-area\"\n [class.dragover]=\"isFileDragover\"\n *ngIf=\"uploadState != 'done'\">\n\n <div class=\"box\"\n *ngIf=\"!isFileSelected\">\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\n <form><input type=\"file\"\n [accept]=\"fileTypes\"\n #fileIp\n (change)=\"onFileInput($event)\" /></form>\n </div>\n </div>\n\n <ng-container *ngIf=\"isFileSelected\">\n <!-- File selected state -->\n <ng-container *ngIf=\"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 </ng-container>\n\n <!-- Uploading state -->\n <ng-container *ngIf=\"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 </ng-container>\n </ng-container>\n </div>\n\n\n <!-- Uploading done -->\n <div *ngIf=\"uploadState == 'done'\"\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\n </div>\n </div>\n\n <div class=\"btn-upload-wrapper\">\n\n <button *ngIf=\"uploadState == ''\"\n (click)=\"uploadNow()\"\n class=\"button-flat full-width\"\n [disabled]=\"!isFileSelected\">\n Upload Now\n </button>\n\n <button *ngIf=\"uploadState == 'uploading'\"\n (click)=\"cancelUploading()\"\n class=\"button-alert full-width\"\n [disabled]=\"!isFileSelected\">\n Cancel\n </button>\n </div>\n\n</div>\n","import { Component, Input } 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})\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 <div *ngIf=\"type == 'bar'\" 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\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 <div *ngIf=\"label === 'top-floating'\" 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 <div *ngIf=\"label === 'bottom-floating'\" 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 </div>\n </div>\n\n <!-- Right label -->\n <span *ngIf=\"label === 'right'\" class=\"bar-label\">{{value}}%</span>\n\n <!-- Bottom label -->\n <span *ngIf=\"label === 'bottom'\" class=\"bar-label\">{{value}}%</span>\n\n <!-- Text description (legacy support) -->\n <div *ngIf=\"text && (label === 'none')\" class=\"progress-text\">{{text}}</div>\n </div>\n\n <!-- Circle progress -->\n <div *ngIf=\"type == 'circle'\" class=\"circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': sizeConfig.containerSize\n }\">\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\n <div class=\"circle-label\">\n <span *ngIf=\"text\" class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\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 <!-- Half-Circle progress -->\n <div *ngIf=\"type == 'half-circle'\" class=\"half-circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': halfCircleContainerHeight\n }\">\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\n <div class=\"half-circle-label\">\n <span *ngIf=\"text\" class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\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</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 } 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})\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 <zen-icon src=\"https://storage.googleapis.com/ng-zenduit/icon/search.svg\"\n class=\"search-icon\"\n *ngIf=\"displaySearchIcon\"\n [style]=\"{'background-color': customStyles.color}\"></zen-icon>\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 <div class=\"search-list\"\n [class.boundaries]=\"!materialStyle\"\n *ngIf=\"address\"\n appClickOutside\n (clickOutside)=\"addressList = [];\">\n <ul class=\"search-item-list\"\n *ngIf=\"addressList.length || isSearching\">\n <li *ngIf=\"isSearching\">Searching</li>\n <div *ngIf=\"!isSearching\">\n <li *ngFor=\"let address of addressList\"\n (click)=\"selectAddress(address)\">\n {{address.name}}\n </li>\n </div>\n </ul>\n </div>\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 } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n\tselector: 'zen-html5-video-player',\n\ttemplateUrl: './html5-video-player.component.html',\n\tstyleUrls: ['./html5-video-player.component.scss']\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 } 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})\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 } 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})\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 } 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})\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 } 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})\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 } 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})\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","<zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'webrtc'\"></zen-web-rtc-player>\n\n<zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n *ngIf=\"playerType == 'snapshot'\"></zen-snapshot-player>\n\n<zen-flv-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'flv'\"></zen-flv-player>\n\n<zen-hls-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'hls'\"></zen-hls-player>\n\n<zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'html5'\"></zen-html5-video-player>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\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})\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 <div class=\"zen-tp__dropdown\"\n #pickerPopup\n *ngIf=\"isPickerVisible\"\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\n <!-- Time fields -->\n <div class=\"zen-tp__fields\">\n <!-- Hours -->\n <div class=\"zen-tp__field\" *ngIf=\"showHours\">\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 <span class=\"zen-tp__colon\" *ngIf=\"showHours\">:</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\n <!-- Seconds (duration mode or when showSeconds) -->\n <ng-container *ngIf=\"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 </ng-container>\n\n <!-- AM/PM Toggle (Clock mode only) -->\n <div class=\"zen-tp__period\" *ngIf=\"mode === 'clock'\">\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 </div>\n\n <!-- Divider -->\n <div class=\"zen-tp__divider\"></div>\n\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</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nexport interface CommentAttachment {\n file: File;\n name: string;\n size: string;\n progress: number;\n complete: boolean;\n}\n\nexport interface EmojiCategory {\n key: string;\n label: string;\n icon: string;\n emojis: string[];\n}\n\nconst EMOJI_CATEGORIES: EmojiCategory[] = [\n {\n key: 'smileys', label: 'Smileys', icon: '😀',\n emojis: ['😀','😄','😁','😆','😅','🤣','😂','🙂','😉','😊','🥰','😍','😘','😋','😛','😜','🤔','😏','🙄','😬','😴','🤯']\n },\n {\n key: 'gestures', label: 'Gestures', icon: '👋',\n emojis: ['👋','✋','👌','✌','🤞','🤙','👍','👎','👏','🙌','🤝','🙏']\n },\n {\n key: 'hearts', label: 'Hearts', icon: '❤️',\n emojis: ['❤️','🧡','💛','💚','💙','💜','🖤','💔','💕','💖']\n },\n {\n key: 'objects', label: 'Objects', icon: '⭐',\n emojis: ['⭐','🔥','✨','🎉','🏆','💯','✅','❌','⚡','💡','🔔','🔗']\n },\n];\n\n@Component({\n selector: 'zen-comment-textarea',\n templateUrl: './zendu-comment-textarea.component.html',\n styleUrls: ['./zendu-comment-textarea.component.scss'],\n})\nexport class ZenduCommentTextareaComponent implements OnInit {\n\n @Input() value = '';\n @Output() valueChange = new EventEmitter<string>();\n\n @Input() label = '';\n\n @Input() placeholder = 'Enter a comment...';\n\n @Input() rows = 4;\n\n @Input() fileTypes = '*/*';\n\n @Input() loading = false;\n\n @Output() addComment = new EventEmitter<{ text: string; files: File[] }>();\n\n @Output() filesChanged = new EventEmitter<File[]>();\n\n @Output() save = new EventEmitter<{ text: string; files: File[] }>();\n\n @Output() cancel = new EventEmitter<void>();\n\n editing = false;\n emojiPickerOpen = false;\n\n ngOnInit() {\n if (this.value?.length > 0) {\n this.editing = true;\n }\n }\n emojiCategories = EMOJI_CATEGORIES;\n activeEmojiCategory = EMOJI_CATEGORIES[0].key;\n attachments: CommentAttachment[] = [];\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (!this.emojiPickerOpen) return;\n const target = event.target as HTMLElement;\n if (!target.closest('.zen-emoji-picker') && !target.closest('.zen-comment-textarea__icon-btn[title=\"Emoji\"]')) {\n this.emojiPickerOpen = false;\n }\n }\n\n onInput(value: string) {\n this.value = value;\n this.valueChange.emit(value);\n this.editing = value.length > 0 || this.attachments.length > 0;\n }\n\n onKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.onAddComment();\n }\n }\n\n onAddComment() {\n if (this.loading) return;\n if (this.value.trim() || this.attachments.length) {\n this.addComment.emit({ text: this.value, files: this.attachments.map(a => a.file) });\n }\n }\n\n onSave() {\n if (this.loading) return;\n if (this.value.trim() || this.attachments.length) {\n this.save.emit({ text: this.value, files: this.attachments.map(a => a.file) });\n }\n }\n\n public reset() {\n this.value = '';\n this.valueChange.emit(this.value);\n this.attachments = [];\n this.filesChanged.emit([]);\n this.editing = false;\n }\n\n onCancel() {\n this.value = '';\n this.valueChange.emit(this.value);\n this.attachments = [];\n this.filesChanged.emit([]);\n this.editing = false;\n this.cancel.emit();\n }\n\n toggleEmojiPicker() {\n this.emojiPickerOpen = !this.emojiPickerOpen;\n }\n\n selectEmoji(emoji: string) {\n this.value += emoji;\n this.valueChange.emit(this.value);\n this.editing = true;\n this.emojiPickerOpen = false;\n }\n\n setEmojiCategory(key: string) {\n this.activeEmojiCategory = key;\n }\n\n get activeEmojis(): string[] {\n const cat = this.emojiCategories.find(c => c.key === this.activeEmojiCategory);\n return cat ? cat.emojis : [];\n }\n\n onFileInput(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files?.length) return;\n\n for (let i = 0; i < input.files.length; i++) {\n const file = input.files[i];\n this.attachments.push({\n file,\n name: file.name,\n size: this.formatFileSize(file.size),\n progress: 100,\n complete: true,\n });\n }\n\n this.editing = true;\n this.filesChanged.emit(this.attachments.map(a => a.file));\n input.value = '';\n }\n\n removeAttachment(index: number) {\n this.attachments.splice(index, 1);\n this.filesChanged.emit(this.attachments.map(a => a.file));\n if (!this.attachments.length && !this.value) {\n this.editing = false;\n }\n }\n\n getFileIcon(name: string): 'document' | 'video' | 'misc' {\n const ext = name.split('.').pop()?.toLowerCase() || '';\n if (['pdf', 'doc', 'docx', 'txt', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'].includes(ext)) return 'document';\n if (['mp4', 'mov', 'avi', 'mkv', 'webm', 'flv'].includes(ext)) return 'video';\n return 'misc';\n }\n\n private formatFileSize(bytes: number): string {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(0) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n }\n}\n","<div class=\"zen-comment-textarea\" [class.zen-comment-textarea--loading]=\"loading\">\n <!-- Label -->\n <label *ngIf=\"label\" class=\"zen-comment-textarea__label\">{{ label }}</label>\n\n <!-- Main box (top: attachments + textarea, bottom: toolbar) -->\n <div class=\"zen-comment-textarea__input-wrapper\">\n <!-- Attachments inside the textarea area -->\n <div class=\"zen-comment-textarea__attachments\" *ngIf=\"attachments.length\">\n <div class=\"zen-attachment\"\n *ngFor=\"let att of attachments; let i = index\">\n <div class=\"zen-attachment__content\">\n <div class=\"zen-attachment__icon\" [ngSwitch]=\"getFileIcon(att.name)\">\n <svg *ngSwitchCase=\"'document'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"14,2 14,8 20,8\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngSwitchCase=\"'video'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngSwitchCase=\"'misc'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"16,16 12,12 8,16\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"zen-attachment__info\">\n <div class=\"zen-attachment__name\">{{ att.name }}</div>\n <div class=\"zen-attachment__size\">{{ att.size }}</div>\n </div>\n </div>\n <button type=\"button\" class=\"zen-attachment__remove\" (click)=\"removeAttachment(i)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"3,6 5,6 21,6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Textarea -->\n <textarea class=\"zen-comment-textarea__input\"\n [rows]=\"rows\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"loading\"\n (input)=\"onInput($any($event.target).value)\"\n (keydown)=\"onKeydown($event)\"></textarea>\n </div>\n\n <!-- Toolbar (bottom part with rounded bottom corners) -->\n <div class=\"zen-comment-textarea__toolbar\">\n <div class=\"zen-comment-textarea__toolbar-divider\"></div>\n\n <div class=\"zen-comment-textarea__toolbar-content\">\n <!-- Icon buttons -->\n <div class=\"zen-comment-textarea__toolbar-icons\">\n <div class=\"zen-comment-textarea__emoji-wrapper\">\n <button type=\"button\"\n class=\"zen-comment-textarea__icon-btn\"\n [class.zen-comment-textarea__icon-btn--active]=\"emojiPickerOpen\"\n title=\"Emoji\"\n (click)=\"toggleEmojiPicker()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8 14C8 14 9.5 16 12 16C14.5 16 16 14 16 14\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Emoji picker -->\n <div class=\"zen-emoji-picker\" *ngIf=\"emojiPickerOpen\">\n <div class=\"zen-emoji-picker__grid\">\n <button type=\"button\"\n class=\"zen-emoji-picker__emoji\"\n *ngFor=\"let emoji of activeEmojis\"\n (click)=\"selectEmoji(emoji)\">\n {{ emoji }}\n </button>\n </div>\n <div class=\"zen-emoji-picker__categories\">\n <button type=\"button\"\n class=\"zen-emoji-picker__category\"\n [class.zen-emoji-picker__category--active]=\"cat.key === activeEmojiCategory\"\n *ngFor=\"let cat of emojiCategories\"\n (click)=\"setEmojiCategory(cat.key)\">\n {{ cat.icon }}\n </button>\n </div>\n </div>\n </div>\n\n <button type=\"button\"\n class=\"zen-comment-textarea__icon-btn\"\n title=\"Attach file\"\n (click)=\"fileInput.click()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.44 11.05L12.25 20.24C11.1242 21.3658 9.59723 21.9983 8.00505 21.9983C6.41286 21.9983 4.88589 21.3658 3.76005 20.24C2.6342 19.1142 2.00171 17.5872 2.00171 15.995C2.00171 14.4029 2.6342 12.8759 3.76005 11.75L12.95 2.56C13.7006 1.80944 14.7186 1.3877 15.78 1.3877C16.8415 1.3877 17.8595 1.80944 18.61 2.56C19.3606 3.31057 19.7823 4.32863 19.7823 5.39C19.7823 6.45138 19.3606 7.46944 18.61 8.22L9.41005 17.41C9.03476 17.7853 8.52573 17.9961 7.99505 17.9961C7.46436 17.9961 6.95533 17.7853 6.58005 17.41C6.20476 17.0347 5.99389 16.5257 5.99389 15.995C5.99389 15.4644 6.20476 14.9553 6.58005 14.58L15.07 6.1\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <input type=\"file\" #fileInput [accept]=\"fileTypes\" multiple hidden (change)=\"onFileInput($event)\" />\n </div>\n\n <!-- Right side actions -->\n <div class=\"zen-comment-textarea__actions\" *ngIf=\"!editing\">\n <span class=\"zen-comment-textarea__hint\">Press enter</span>\n <svg class=\"zen-comment-textarea__return-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.33337 12.5L6.66671 15.8333M3.33337 12.5L6.66671 9.16667M3.33337 12.5H13.3334C14.2175 12.5 15.0653 12.1488 15.6904 11.5237C16.3155 10.8986 16.6667 10.0507 16.6667 9.16667V4.16667\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"zen-comment-textarea__hint\">to</span>\n <button type=\"button\" class=\"zen-comment-textarea__add-btn\" [disabled]=\"loading\" (click)=\"onAddComment()\">\n <span class=\"zen-comment-textarea__spinner\" *ngIf=\"loading\"></span>\n {{ loading ? 'Sending...' : 'Add Comment' }}\n </button>\n </div>\n\n <div class=\"zen-comment-textarea__actions\" *ngIf=\"editing\">\n <button type=\"button\" class=\"zen-comment-textarea__cancel-btn\" [disabled]=\"loading\" (click)=\"onCancel()\">\n Cancel\n </button>\n <button type=\"button\" class=\"zen-comment-textarea__save-btn\" [disabled]=\"loading\" (click)=\"onSave()\">\n <span class=\"zen-comment-textarea__spinner\" *ngIf=\"loading\"></span>\n {{ loading ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nexport interface CommentData {\n id: string | number;\n authorName: string;\n authorAvatar?: string;\n timestamp: string;\n text: string;\n online?: boolean;\n editable?: boolean;\n deletable?: boolean;\n attachments?: CommentAttachmentData[];\n}\n\nexport interface CommentAttachmentData {\n name: string;\n size: string;\n url?: string;\n}\n\n@Component({\n selector: 'zen-comment-item',\n templateUrl: './zendu-comment-item.component.html',\n styleUrls: ['./zendu-comment-item.component.scss'],\n})\nexport class ZenduCommentItemComponent implements OnChanges {\n\n @Input() comment: CommentData;\n\n @Input() showConnector = true;\n\n @Input() editable = true;\n\n @Input() deletable = true;\n\n @Input() loading = false;\n\n @Output() edit = new EventEmitter<CommentData>();\n\n @Output() delete = new EventEmitter<CommentData>();\n\n @Output() saveEdit = new EventEmitter<{ comment: CommentData; text: string }>();\n\n @Output() cancelEdit = new EventEmitter<CommentData>();\n\n editing = false;\n editValue = '';\n private wasLoading = false;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['loading'] && this.wasLoading && !this.loading && this.editing) {\n this.editing = false;\n this.editValue = '';\n }\n this.wasLoading = this.loading;\n }\n\n get isEditable(): boolean {\n return this.editable && (this.comment?.editable !== false);\n }\n\n get isDeletable(): boolean {\n return this.deletable && (this.comment?.deletable !== false);\n }\n\n get initials(): string {\n if (!this.comment?.authorName) return '';\n return this.comment.authorName\n .split(' ')\n .map(n => n[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n }\n\n onEdit() {\n if (this.loading) return;\n this.editing = true;\n this.editValue = this.comment.text;\n this.edit.emit(this.comment);\n }\n\n onDelete() {\n if (this.loading) return;\n this.delete.emit(this.comment);\n }\n\n onSaveEdit(event: { text: string; files: File[] }) {\n this.saveEdit.emit({ comment: this.comment, text: event.text });\n }\n\n onCancelEdit() {\n this.editing = false;\n this.editValue = '';\n this.cancelEdit.emit(this.comment);\n }\n\n getFileIcon(name: string): 'document' | 'video' | 'misc' {\n const ext = name.split('.').pop()?.toLowerCase() || '';\n if (['pdf', 'doc', 'docx', 'txt', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'].includes(ext)) return 'document';\n if (['mp4', 'mov', 'avi', 'mkv', 'webm', 'flv'].includes(ext)) return 'video';\n return 'misc';\n }\n}\n","<div class=\"zen-comment-item\" [class.zen-comment-item--loading]=\"loading\">\n\n <div class=\"zen-comment-item__left\">\n <!-- Avatar -->\n <div class=\"zen-comment-item__avatar\">\n <img *ngIf=\"comment.authorAvatar\"\n [src]=\"comment.authorAvatar\"\n [alt]=\"comment.authorName\"\n class=\"zen-comment-item__avatar-img\" />\n <span *ngIf=\"!comment.authorAvatar\" class=\"zen-comment-item__avatar-initials\">\n {{ initials }}\n </span>\n <span *ngIf=\"comment.online\" class=\"zen-comment-item__online-dot\"></span>\n </div>\n <!-- Connector line -->\n <div *ngIf=\"showConnector\" class=\"zen-comment-item__connector\"></div>\n </div>\n\n <div class=\"zen-comment-item__body\">\n <!-- Header: name + time -->\n <div class=\"zen-comment-item__header\">\n <span class=\"zen-comment-item__author\">{{ comment.authorName }}</span>\n <span class=\"zen-comment-item__time\">{{ comment.timestamp }}</span>\n </div>\n\n <!-- Default view -->\n <ng-container *ngIf=\"!editing\">\n <p class=\"zen-comment-item__text\">{{ comment.text }}</p>\n\n <!-- Attachments -->\n <div class=\"zen-comment-item__attachment\"\n *ngFor=\"let att of comment.attachments\">\n <div class=\"zen-comment-item__attachment-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"14,2 14,8 20,8\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"zen-comment-item__attachment-info\">\n <div class=\"zen-comment-item__attachment-name\">{{ att.name }}</div>\n <div class=\"zen-comment-item__attachment-size\">{{ att.size }}</div>\n </div>\n </div>\n </ng-container>\n\n <!-- Edit view -->\n <ng-container *ngIf=\"editing\">\n <zen-comment-textarea\n [(value)]=\"editValue\"\n [loading]=\"loading\"\n (save)=\"onSaveEdit($event)\"\n (cancel)=\"onCancelEdit()\">\n </zen-comment-textarea>\n </ng-container>\n </div>\n\n <!-- Actions (always visible, individually controllable) -->\n <div class=\"zen-comment-item__actions\" *ngIf=\"(isEditable || isDeletable) && !editing\">\n <button *ngIf=\"isDeletable\"\n type=\"button\"\n class=\"zen-comment-item__action-btn\"\n title=\"Delete\"\n [disabled]=\"loading\"\n (click)=\"onDelete()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"3,6 5,6 21,6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button *ngIf=\"isEditable\"\n type=\"button\"\n class=\"zen-comment-item__action-btn\"\n title=\"Edit\"\n [disabled]=\"loading\"\n (click)=\"onEdit()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17 3C17.2626 2.73735 17.5744 2.52901 17.9176 2.38687C18.2608 2.24473 18.6286 2.17157 19 2.17157C19.3714 2.17157 19.7392 2.24473 20.0824 2.38687C20.4256 2.52901 20.7374 2.73735 21 3C21.2626 3.26264 21.471 3.57444 21.6131 3.9176C21.7553 4.26077 21.8284 4.62856 21.8284 5C21.8284 5.37143 21.7553 5.73923 21.6131 6.08239C21.471 6.42555 21.2626 6.73735 21 7L7.5 20.5L2 22L3.5 16.5L17 3Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommentData } from '../comment-item/zendu-comment-item.component';\n\n@Component({\n selector: 'zen-comment-list',\n templateUrl: './zendu-comment-list.component.html',\n styleUrls: ['./zendu-comment-list.component.scss'],\n})\nexport class ZenduCommentListComponent {\n\n @Input() comments: CommentData[] = [];\n\n @Input() collapsible = true;\n\n @Input() expanded = false;\n\n @Input() editable = true;\n\n @Input() deletable = true;\n\n @Input() loadingCommentId: string | number | null = null;\n\n @Output() expandedChange = new EventEmitter<boolean>();\n\n @Output() editComment = new EventEmitter<CommentData>();\n\n @Output() deleteComment = new EventEmitter<CommentData>();\n\n @Output() saveEditComment = new EventEmitter<{ comment: CommentData; text: string }>();\n\n @Output() cancelEditComment = new EventEmitter<CommentData>();\n\n toggle() {\n this.expanded = !this.expanded;\n this.expandedChange.emit(this.expanded);\n }\n}\n","<div class=\"zen-comment-list\">\n <!-- Toggle button (only when collapsible) -->\n <button *ngIf=\"collapsible\" type=\"button\" class=\"zen-comment-list__toggle\" (click)=\"toggle()\">\n <span class=\"zen-comment-list__toggle-text\">\n {{ expanded ? 'Hide' : 'Show' }} Comments ({{ comments.length }})\n </span>\n <svg class=\"zen-comment-list__toggle-icon\"\n [class.zen-comment-list__toggle-icon--up]=\"expanded\"\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Comments list -->\n <div class=\"zen-comment-list__items\" *ngIf=\"!collapsible || expanded\">\n <zen-comment-item\n *ngFor=\"let c of comments; let last = last\"\n [comment]=\"c\"\n [showConnector]=\"!last\"\n [editable]=\"editable\"\n [deletable]=\"deletable\"\n [loading]=\"loadingCommentId === c.id\"\n (edit)=\"editComment.emit($event)\"\n (delete)=\"deleteComment.emit($event)\"\n (saveEdit)=\"saveEditComment.emit($event)\"\n (cancelEdit)=\"cancelEditComment.emit($event)\">\n </zen-comment-item>\n </div>\n</div>\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from '../datepicker/date-picker-day';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DatePickerDropdownType, DatePickerMarker, DatePickerPreset, DateRangeValue } 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})\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\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 label: 'This year',\n getRange: () => ({\n start: moment().startOf('year').toDate(),\n end: moment().endOf('year').toDate()\n })\n },\n {\n label: 'Last year',\n getRange: () => ({\n start: moment().subtract(1, 'year').startOf('year').toDate(),\n end: moment().subtract(1, 'year').endOf('year').toDate()\n })\n },\n {\n label: 'All time',\n getRange: () => ({\n start: new Date(2000, 0, 1),\n end: moment().endOf('day').toDate()\n })\n }\n ];\n\n constructor(\n private _element: ElementRef,\n private _translate: TranslateService\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 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 = 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\n if (!this._selectedStart || (this._selectedStart && this._selectedEnd)) {\n // Start new selection\n this._selectedStart = new Date(day.date);\n this._selectedEnd = null;\n this._activePreset = null;\n } else {\n // Complete the range\n const newDate = new Date(day.date);\n if (moment(newDate).isBefore(this._selectedStart)) {\n this._selectedEnd = new Date(this._selectedStart);\n this._selectedStart = newDate;\n } else {\n this._selectedEnd = newDate;\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 }\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 enMonth = moment(slot).format('MMM');\n const translatedMonth = this._translate.instant(enMonth);\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 <div class=\"dropdown-menu\" *ngIf=\"isOpen\" [class.mobile]=\"mobile\" [ngStyle]=\"dropdownStyle\">\n <!-- RANGE DESKTOP: presets sidebar + dual calendar -->\n <ng-container *ngIf=\"type === 'range' && !mobile\">\n <!-- Presets sidebar -->\n <div class=\"presets-sidebar\">\n <div class=\"preset-item\"\n *ngFor=\"let preset of activePresets\"\n [class.active]=\"_activePreset === preset.label\"\n (click)=\"selectPreset(preset)\">\n {{ preset.label | translate }}\n </div>\n </div>\n\n <div class=\"sidebar-divider\"></div>\n\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\n <div class=\"calendar-divider\"></div>\n\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\n <!-- Time Picker -->\n <ng-container *ngIf=\"timePicker\">\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n </ng-container>\n\n <div class=\"bottom-divider\"></div>\n\n <!-- Bottom panel: inputs (or legend) + actions -->\n <div class=\"bottom-panel\">\n <div class=\"marker-legend\" *ngIf=\"legendMarkers.length; else rangeInputs\">\n <div class=\"legend-item\" *ngFor=\"let m of legendMarkers\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n </div>\n <ng-template #rangeInputs>\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 </ng-template>\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 </ng-container>\n\n <!-- RANGE MOBILE: single calendar with dual inputs on top -->\n <ng-container *ngIf=\"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\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\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n\n <!-- Time Picker -->\n <ng-container *ngIf=\"timePicker\">\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n </ng-container>\n\n <div class=\"marker-legend standalone\" *ngIf=\"legendMarkers.length\">\n <div class=\"legend-item\" *ngFor=\"let m of legendMarkers\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n </div>\n\n <div class=\"bottom-divider\"></div>\n\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 </ng-container>\n\n <!-- SINGLE DATE: single calendar + input + today button -->\n <ng-container *ngIf=\"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\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\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n\n <!-- Time Picker -->\n <ng-container *ngIf=\"timePicker\">\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n </ng-container>\n\n <div class=\"marker-legend standalone single\" *ngIf=\"legendMarkers.length\">\n <div class=\"legend-item\" *ngFor=\"let m of legendMarkers\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n </div>\n\n <ng-container *ngIf=\"!autoApply\">\n <div class=\"bottom-divider\"></div>\n\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 </ng-container>\n </div>\n </ng-container>\n </div>\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 <div class=\"cell header-cell\" *ngFor=\"let wd of weekDays\">{{ wd | translate }}</div>\n </div>\n <!-- Day rows -->\n <div class=\"day-row\" *ngFor=\"let row of dayRows\">\n <div class=\"cell day-cell\"\n *ngFor=\"let day of row.days\"\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 <div class=\"marker-dots\" *ngIf=\"day.markerColors?.length\">\n <span class=\"marker-dot\"\n *ngFor=\"let c of day.markerColors\"\n [style.background]=\"c || null\"></span>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild\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})\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 <div class=\"file-queue\" *ngIf=\"files?.length\">\n\n <!-- Progress Bar Type -->\n <ng-container *ngIf=\"progressType === 'bar'\">\n <div class=\"file-item bar-type\"\n *ngFor=\"let item of files\"\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 <button class=\"file-action\"\n *ngIf=\"item.status === 'uploading'\"\n (click)=\"removeFile(item)\">\n <zen-icon class=\"trash-icon\"\n src=\"assets/ng-zenduit/icons/trash.svg\">\n </zen-icon>\n </button>\n <zen-icon class=\"check-icon\"\n *ngIf=\"item.status === 'complete'\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n </div>\n </ng-container>\n\n <!-- Progress Fill Type -->\n <ng-container *ngIf=\"progressType === 'fill'\">\n <div class=\"file-item fill-type\"\n *ngFor=\"let item of files\">\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 <zen-spinner *ngIf=\"item.status === 'uploading'\"\n class=\"file-spinner\"\n size=\"small\">\n </zen-spinner>\n <zen-icon class=\"check-icon\"\n *ngIf=\"item.status === 'complete'\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n </div>\n </ng-container>\n </div>\n</div>\n","import { Component, Input } 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})\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 <img *ngIf=\"showImage\" [src]=\"src\" class=\"zendu-avatar__img\" alt=\"\" />\n\n <!-- Text initials -->\n <span *ngIf=\"showText\" class=\"zendu-avatar__text\">{{ text }}</span>\n\n <!-- Placeholder user icon -->\n <div *ngIf=\"showPlaceholder\" 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 <!-- Online indicator -->\n <div *ngIf=\"statusIcon === 'online'\" class=\"zendu-avatar__online-dot\"></div>\n\n <!-- Company icon -->\n <div *ngIf=\"statusIcon === 'company'\" class=\"zendu-avatar__company-icon\">\n <img *ngIf=\"companyImgSrc\" [src]=\"companyImgSrc\" alt=\"\" />\n </div>\n</div>\n","import { Component, Input } 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})\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 <div *ngFor=\"let img of images\" class=\"zendu-avatar-group__wrap\">\n <div class=\"zendu-avatar-group__avatar\">\n <img [src]=\"img\" alt=\"\" />\n </div>\n </div>\n\n <div *ngIf=\"moreCount > 0\" class=\"zendu-avatar-group__more\">\n <span>+{{ moreCount }}</span>\n </div>\n </div>\n\n <div *ngIf=\"showAddButton\" 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</div>\n","import { Component, Input } 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})\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 <span *ngIf=\"subtitle\" class=\"zendu-avatar-label-group__subtitle\">{{ subtitle }}</span>\n </div>\n</div>\n","import { Component, Input } 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})\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 <img *ngIf=\"showImage\" [src]=\"src\" class=\"zendu-avatar-profile-photo__img\" alt=\"\" />\n\n <!-- Placeholder icon -->\n <div *ngIf=\"showPlaceholder\" 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 <!-- Text initials -->\n <span *ngIf=\"showText\" class=\"zendu-avatar-profile-photo__text\">{{ text }}</span>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnDestroy } 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})\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 <ng-container *ngIf=\"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 </ng-container>\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 <ng-container *ngIf=\"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 </ng-container>\n\n <!-- Bottom plain labels -->\n <ng-container *ngIf=\"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 </ng-container>\n</div>\n","import { Component, Input, Output, EventEmitter } 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})\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<ng-container *ngIf=\"group; else standardBadge\">\n <div [class]=\"groupClasses\" (click)=\"onClick($event)\">\n\n <!-- Leading: inner badge first -->\n <ng-container *ngIf=\"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 <zen-icon *ngIf=\"showIcon\" class=\"zen-badge-group__icon\" name=\"arrow-right\"></zen-icon>\n </span>\n </ng-container>\n\n <!-- Trailing: message first, badge with optional icon last -->\n <ng-container *ngIf=\"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 <zen-icon *ngIf=\"showIcon\" class=\"zen-badge-group__badge-icon\" name=\"arrow-right\"></zen-icon>\n </span>\n </ng-container>\n\n </div>\n</ng-container>\n\n<!-- Standard badge mode -->\n<ng-template #standardBadge>\n <div [class]=\"hostClasses\" (click)=\"onClick($event)\">\n <span *ngIf=\"dot\" class=\"zen-badge__dot\"></span>\n\n <img *ngIf=\"imgSrc\" class=\"zen-badge__img\" [src]=\"imgSrc\" alt=\"\">\n\n <zen-icon *ngIf=\"hasIcon && !iconOnly && iconDirection === 'left'\" class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n\n <span *ngIf=\"!iconOnly\" class=\"zen-badge__text\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </span>\n\n <zen-icon *ngIf=\"iconOnly && hasIcon\" class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n\n <zen-icon *ngIf=\"hasIcon && !iconOnly && iconDirection === 'right'\" class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n\n <button *ngIf=\"removable\" 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 </div>\n</ng-template>\n\n<ng-template #contentTpl><ng-content></ng-content></ng-template>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-button',\n templateUrl: './zen-button.component.html',\n styleUrls: ['./zen-button.component.scss']\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() 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 <span *ngIf=\"buttonType === 'button-dot'\" class=\"button-dot\"></span>\n \n <!-- Leading icon -->\n <zen-icon *ngIf=\"buttonType === 'button-icon-leading' || isIconOnly\" \n [name]=\"getIconName()\"\n size=\"xs\"></zen-icon>\n \n <!-- Button content -->\n <ng-content *ngIf=\"!isIconOnly\"></ng-content>\n \n <!-- Trailing icon -->\n <zen-icon *ngIf=\"buttonType === 'button-icon-trailing'\" \n [name]=\"getIconName()\"\n size=\"xs\"></zen-icon>\n</button>","import { \n Component, \n Input, \n Output, \n EventEmitter, \n forwardRef,\n ViewChild,\n ElementRef,\n OnInit,\n OnChanges,\n SimpleChanges,\n HostBinding\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})\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' = '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 * 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 <label *ngIf=\"showLabel\" \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 <span *ngIf=\"required\" class=\"required-indicator\">*</span>\n </label>\n \n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n \n <!-- Leading icon -->\n <i *ngIf=\"leadingIcon && variant === 'default'\" \n class=\"material-icons zen-input-leading-icon\"\n (click)=\"onLeadingIconClick($event)\">\n {{ leadingIcon }}\n </i>\n \n <!-- Leading dropdown -->\n <div *ngIf=\"variant === 'leading-dropdown'\" \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 \n <div class=\"zen-dropdown-menu\" \n *ngIf=\"leadingDropdownOpen\"\n [ngClass]=\"{'open': leadingDropdownOpen}\">\n <button *ngFor=\"let option of leadingDropdownOptions\"\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === leadingDropdownValue}\"\n (click)=\"onLeadingDropdownChange(option.value); $event.stopPropagation()\">\n <i *ngIf=\"option.icon\" class=\"material-icons option-icon\">{{ option.icon }}</i>\n {{ option.label | translate }}\n </button>\n </div>\n </div>\n \n <!-- Leading text -->\n <span *ngIf=\"variant === 'leading-text'\" \n class=\"zen-input-leading-text text text-md text-weight-regular\">\n {{ leadingText }}\n </span>\n \n <!-- Payment card icon -->\n <div *ngIf=\"variant === 'payment'\" \n class=\"zen-payment-card-icon\">\n <i class=\"material-icons card-icon\">payment</i>\n </div>\n \n <!-- Input content based on type -->\n <ng-container *ngIf=\"type === 'tel'; else defaultInputTemplate\">\n <ng-container *ngTemplateOutlet=\"phoneInputTemplate\"></ng-container>\n </ng-container>\n \n <!-- Default input template -->\n <ng-template #defaultInputTemplate>\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 </ng-template>\n \n <!-- Trailing elements container -->\n <div class=\"zen-input-trailing-container\">\n <!-- Character counter -->\n <span *ngIf=\"showCharacterCount && !helpIcon && variant === 'default'\" \n class=\"zen-character-count text text-sm text-weight-regular\">\n {{ characterCount }}\n </span>\n \n <!-- Help icon -->\n <button *ngIf=\"helpIcon && variant !== 'trailing-dropdown'\" \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 \n <!-- Help tooltip -->\n <div class=\"zen-help-tooltip\" \n *ngIf=\"showHelpTooltip\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"tooltip-content\">\n {{ helpTooltip | translate }}\n </div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n </button>\n \n <!-- Trailing dropdown -->\n <div *ngIf=\"variant === 'trailing-dropdown'\" \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 \n <div class=\"zen-dropdown-menu dropdown-menu-right\" \n *ngIf=\"trailingDropdownOpen\"\n [ngClass]=\"{'open': trailingDropdownOpen}\">\n <button *ngFor=\"let option of trailingDropdownOptions\"\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === trailingDropdownValue}\"\n (click)=\"onTrailingDropdownChange(option.value); $event.stopPropagation()\">\n <i *ngIf=\"option.icon\" class=\"material-icons option-icon\">{{ option.icon }}</i>\n {{ option.label | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Hint text / Error message -->\n <div *ngIf=\"showHintText\" \n class=\"zen-input-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n <i *ngIf=\"destructive\" class=\"material-icons-outlined hint-icon\">error_outline</i>\n {{ displayHintText | translate }}\n </div>\n \n <!-- Phone Country Dropdown (for tel type) -->\n <div *ngIf=\"type === 'tel' && isPhoneDropdownExpanded\" \n class=\"zen-phone-dropdown-menu\">\n <div class=\"zen-phone-dropdown-list\">\n <!-- Countries List -->\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n *ngFor=\"let country of countryList\"\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</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<div *ngIf=\"leadingDropdownOpen || trailingDropdownOpen || isPhoneDropdownExpanded\" \n class=\"zen-dropdown-backdrop\" \n (click)=\"closeDropdowns(); hidePhoneDropdown()\"></div>","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, ViewChild } 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})\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 <div \n *ngIf=\"showListHeader\" \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 <!-- Icon Button Trigger -->\n <button \n *ngIf=\"showIconTrigger\"\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 <!-- Button Trigger -->\n <button \n *ngIf=\"showButton\"\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 <!-- Avatar Trigger -->\n <button \n *ngIf=\"showAvatar\"\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 <!-- DROPDOWN CONTENT SECTION -->\n <div class=\"zen-dropdown-menu__dropdown\" *ngIf=\"isOpen\" #dropdown \n [style.position]=\"'fixed'\" \n [style.opacity]=\"dropdownVisible ? 1 : 0\"\n [style.visibility]=\"dropdownVisible ? 'visible' : 'hidden'\">\n \n <!-- Header Section -->\n <div class=\"zen-dropdown-menu__header\" *ngIf=\"showHeader && headerUser\">\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 <div class=\"zen-dropdown-menu__divider\" *ngIf=\"showHeader && headerUser\"></div>\n\n <!-- Menu Items -->\n <div class=\"zen-dropdown-menu__content\">\n <ng-container *ngFor=\"let item of items\">\n <!-- Divider -->\n <div class=\"zen-dropdown-menu__divider\" *ngIf=\"item.divider\"></div>\n\n <!-- Menu Item -->\n <div \n class=\"zen-dropdown-menu__item\"\n *ngIf=\"!item.divider\"\n [class.zen-dropdown-menu__item--disabled]=\"item.disabled\"\n (click)=\"onItemClick(item, $event)\">\n \n <!-- Checkbox variant -->\n <zen-checkbox\n *ngIf=\"showCheckbox\"\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 <zen-icon\n *ngIf=\"showIcon && item.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\n <!-- Count number (shown at the end of the row) -->\n <span \n *ngIf=\"showCount && item.shortcut\"\n class=\"zen-dropdown-menu__count text text-xs text-weight-regular\">\n {{ item.shortcut }}\n </span>\n\n <!-- Shortcut -->\n <span \n *ngIf=\"showShortcut && item.shortcut && !showCount\"\n class=\"zen-dropdown-menu__shortcut text text-xs text-weight-regular\">\n {{ item.shortcut | translate }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\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})\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 <svg *ngIf=\"arrowPosition === 'top-center'\"\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 <!-- Arrow: left (for right tooltip) — points left toward element -->\n <svg *ngIf=\"arrowPosition === 'left'\"\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 <!-- Content -->\n <div class=\"zen-tooltip__content\">\n <p class=\"zen-tooltip__title\">{{ text }}</p>\n <p *ngIf=\"hasSupportingText\" class=\"zen-tooltip__supporting\">{{ supportingText }}</p>\n </div>\n\n <!-- Arrow: bottom (for top tooltip) — points down toward element -->\n <svg *ngIf=\"arrowPosition === 'bottom-center' || arrowPosition === 'bottom-left' || arrowPosition === 'bottom-right'\"\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 <!-- Arrow: right (for left tooltip) — points right toward element -->\n <svg *ngIf=\"arrowPosition === 'right'\"\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</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})\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 } 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})\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 } 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})\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 } 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})\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 <zen-icon *ngIf=\"icon\" class=\"zen-submodule-item__icon\"\n [name]=\"icon\" [customColor]=\"iconColor\"></zen-icon>\n <span class=\"zen-submodule-item__label\">{{ label }}</span>\n</button>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nexport type ZenSideNavItemType = 'collapsed' | 'expanded';\nexport type ZenSideNavItemState = 'default' | 'hover' | 'focused' | 'pressed';\n\nexport interface ZenSideNavSubItem {\n label: string;\n icon?: string;\n route?: string;\n tag?: unknown;\n}\n\n@Component({\n selector: 'zen-side-nav-item',\n templateUrl: './zen-side-nav-item.component.html',\n styleUrls: ['./zen-side-nav-item.component.scss']\n})\nexport class ZenSideNavItemComponent {\n\n @Input() type: ZenSideNavItemType = 'collapsed';\n @Input() state: ZenSideNavItemState = 'default';\n @Input() icon: string;\n @Input() label = '';\n @Input() hasSubmodule = false;\n @Input() subItems: ZenSideNavSubItem[] = [];\n @Input() expanded = false;\n\n @Output() activate = new EventEmitter<void>();\n @Output() subItemActivate = new EventEmitter<ZenSideNavSubItem>();\n @Output() expandedChange = new EventEmitter<boolean>();\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-side-nav-item',\n `zen-side-nav-item--${this.type}`,\n `zen-side-nav-item--${activeState}`,\n ];\n if (this.hasSubmodule) classes.push('zen-side-nav-item--has-submodule');\n if (this.expanded) classes.push('zen-side-nav-item--expanded');\n return classes.join(' ');\n }\n\n get iconColor(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n switch (activeState) {\n case 'focused':\n case 'pressed':\n return '#FFFFFF';\n case 'hover':\n return '#D0D5DD';\n default:\n return '#D0D5DD';\n }\n }\n\n get chevronIcon(): string {\n return this.expanded ? 'chevron-up' : 'chevron-down';\n }\n\n onContentClick(): void {\n this.activate.emit();\n }\n\n onChevronClick(event: MouseEvent): void {\n event.stopPropagation();\n this.expanded = !this.expanded;\n this.expandedChange.emit(this.expanded);\n }\n\n onSubItemClick(subItem: ZenSideNavSubItem, event: MouseEvent): void {\n event.stopPropagation();\n this.subItemActivate.emit(subItem);\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 (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n\n <!-- Main content row -->\n <div class=\"zen-side-nav-item__content\" (click)=\"onContentClick()\">\n <div class=\"zen-side-nav-item__icon-wrap\">\n <zen-icon *ngIf=\"icon\" class=\"zen-side-nav-item__icon\"\n [name]=\"icon\" [customColor]=\"iconColor\"></zen-icon>\n </div>\n\n <span class=\"zen-side-nav-item__label\">{{ label }}</span>\n\n <zen-icon *ngIf=\"hasSubmodule && type === 'expanded'\"\n class=\"zen-side-nav-item__chevron\"\n [name]=\"chevronIcon\"\n [customColor]=\"iconColor\"\n (click)=\"onChevronClick($event)\">\n </zen-icon>\n </div>\n\n <!-- Sub-items (expanded type with submodule) -->\n <div *ngIf=\"hasSubmodule && expanded && subItems.length && type === 'expanded'\"\n class=\"zen-side-nav-item__sub-items\">\n <div *ngFor=\"let sub of subItems\"\n class=\"zen-side-nav-item__sub-item\"\n (click)=\"onSubItemClick(sub, $event)\">\n {{ sub.label }}\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } 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})\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 <zen-eld-status *ngIf=\"type === 'driver' && eldStatus\"\n [status]=\"eldStatus\"\n class=\"zen-subpage-item__eld\"></zen-eld-status>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef } 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})\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","<div *ngIf=\"isOpen\" [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\n <div class=\"zen-module-popup__divider\"></div>\n\n <!-- Items -->\n <div class=\"zen-module-popup__items\">\n <div *ngFor=\"let item of items\"\n class=\"zen-module-popup__item\"\n (click)=\"onItemClick(item)\">\n {{ item.label }}\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ZenSideNavItemType, ZenSideNavItemState, ZenSideNavSubItem } from '../side-nav-item/zen-side-nav-item.component';\nimport { ZenModulePopupModule, ZenModulePopupItem } from '../module-popup/zen-module-popup.component';\n\nexport type ZenNavModule =\n | 'dashboard' | 'today' | 'fleet' | 'safety' | 'operations' | 'reports'\n | 'bus' | 'fuel' | 'more' | 'maintain' | 'vehicles'\n | 'drivers' | 'admin' | 'notification' | 'message'\n | 'manage' | 'help' | 'efficiency' | 'inventory';\n\ninterface ModuleConfig {\n icon: string;\n label: string;\n}\n\nconst MODULE_CONFIG: Record<ZenNavModule, ModuleConfig> = {\n dashboard: { icon: 'home', label: 'Dashboard' },\n today: { icon: 'sun', label: 'Today' },\n fleet: { icon: 'truck', label: 'Fleet' },\n safety: { icon: 'shield', label: 'Safety' },\n operations: { icon: 'briefcase', label: 'Operate' },\n reports: { icon: 'bar-chart-2', label: 'Reports' },\n bus: { icon: 'bus', label: 'Bus' },\n fuel: { icon: 'droplet', label: 'Fuel' },\n more: { icon: 'more-vertical', label: 'More' },\n maintain: { icon: 'tool', label: 'Maintain' },\n vehicles: { icon: 'truck', label: 'Vehicles' },\n drivers: { icon: 'users', label: 'Drivers' },\n admin: { icon: 'settings', label: 'Admin' },\n notification: { icon: 'bell', label: 'Alerts' },\n message: { icon: 'message-square', label: 'Chat' },\n manage: { icon: 'sliders', label: 'Manage' },\n help: { icon: 'help-circle', label: 'Help' },\n efficiency: { icon: 'trending-up', label: 'Efficiency' },\n inventory: { icon: 'package', label: 'Inventory' },\n};\n\nconst MODULE_TO_POPUP: Record<string, ZenModulePopupModule> = {\n fleet: 'fleet',\n safety: 'safety',\n operations: 'operations',\n reports: 'reports',\n bus: 'bus',\n fuel: 'fuel',\n more: 'more',\n maintain: 'maintain',\n efficiency: 'efficiency',\n inventory: 'inventory',\n};\n\n@Component({\n selector: 'zen-nav-item',\n templateUrl: './zen-nav-item.component.html',\n styleUrls: ['./zen-nav-item.component.scss']\n})\nexport class ZenNavItemComponent {\n\n @Input() module: ZenNavModule = 'dashboard';\n @Input() type: ZenSideNavItemType = 'collapsed';\n @Input() state: ZenSideNavItemState = 'default';\n @Input() hasSubmodule = false;\n @Input() subItems: ZenSideNavSubItem[] = [];\n @Input() expanded = false;\n\n @Output() activate = new EventEmitter<void>();\n @Output() subItemActivate = new EventEmitter<ZenSideNavSubItem>();\n @Output() expandedChange = new EventEmitter<boolean>();\n\n popupOpen = false;\n\n get moduleConfig(): ModuleConfig {\n return MODULE_CONFIG[this.module] || MODULE_CONFIG.dashboard;\n }\n\n get popupModule(): ZenModulePopupModule | null {\n return MODULE_TO_POPUP[this.module] || null;\n }\n\n get popupItems(): ZenModulePopupItem[] {\n return this.subItems.map(s => ({ label: s.label, route: s.route, tag: s.tag }));\n }\n\n get showPopupOnHover(): boolean {\n return this.type === 'collapsed' && this.hasSubmodule && this.subItems.length > 0;\n }\n\n onMouseEnter(): void {\n if (this.showPopupOnHover) {\n this.popupOpen = true;\n }\n }\n\n onMouseLeave(): void {\n this.popupOpen = false;\n }\n\n onPopupItemClick(item: ZenModulePopupItem): void {\n const subItem = this.subItems.find(s => s.label === item.label);\n if (subItem) {\n this.subItemActivate.emit(subItem);\n }\n this.popupOpen = false;\n }\n}\n","<div class=\"zen-nav-item\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <zen-side-nav-item\n [type]=\"type\"\n [state]=\"state\"\n [icon]=\"moduleConfig.icon\"\n [label]=\"moduleConfig.label\"\n [hasSubmodule]=\"hasSubmodule\"\n [subItems]=\"subItems\"\n [expanded]=\"expanded\"\n (activate)=\"activate.emit()\"\n (subItemActivate)=\"subItemActivate.emit($event)\"\n (expandedChange)=\"expandedChange.emit($event)\">\n </zen-side-nav-item>\n\n <!-- Collapsed hover popup -->\n <zen-module-popup *ngIf=\"popupOpen && popupModule\"\n class=\"zen-nav-item__popup\"\n [module]=\"popupModule\"\n [items]=\"popupItems\"\n [isOpen]=\"true\"\n (itemClick)=\"onPopupItemClick($event)\">\n </zen-module-popup>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef } from '@angular/core';\n\nexport type ZenTopNavItemMenu =\n | 'notification' | 'admin' | 'chat' | 'clarity'\n | 'message-blue' | 'call-blue' | 'message-white' | 'call-white' | 'profile';\nexport type ZenTopNavItemState = 'default' | 'hover' | 'focused';\n\nexport interface ZenTopNavProfileData {\n name: string;\n email: string;\n avatarSrc?: string;\n}\n\nexport interface ZenTopNavProfileMenuItem {\n label: string;\n icon?: string;\n route?: string;\n destructive?: boolean;\n}\n\nconst MENU_ICONS: Record<string, string> = {\n notification: 'bell',\n admin: 'settings',\n chat: 'message-square',\n 'message-blue': 'message-square',\n 'call-blue': 'phone',\n 'message-white': 'message-square',\n 'call-white': 'phone',\n};\n\nconst MENU_TOOLTIPS: Record<string, string> = {\n notification: 'Notifications',\n admin: 'Admin Settings',\n chat: 'Messages',\n 'message-blue': 'Message Driver',\n 'call-blue': 'Call Driver',\n 'message-white': 'Message Driver',\n 'call-white': 'Call Driver',\n};\n\n@Component({\n selector: 'zen-top-nav-item',\n templateUrl: './zen-top-nav-item.component.html',\n styleUrls: ['./zen-top-nav-item.component.scss']\n})\nexport class ZenTopNavItemComponent {\n\n @Input() menu: ZenTopNavItemMenu = 'notification';\n @Input() state: ZenTopNavItemState = 'default';\n @Input() tooltipText = '';\n @Input() badgeCount = 0;\n @Input() clarityLabel = 'Ask Clarity';\n\n // Profile-specific\n @Input() profileData: ZenTopNavProfileData;\n @Input() profileMenuItems: ZenTopNavProfileMenuItem[] = [];\n\n @Output() activate = new EventEmitter<void>();\n @Output() profileMenuItemClick = new EventEmitter<ZenTopNavProfileMenuItem>();\n\n _hovered = false;\n profileOpen = false;\n\n constructor(private _elementRef: ElementRef) {}\n\n get isProfile(): boolean { return this.menu === 'profile'; }\n get isClarity(): boolean { return this.menu === 'clarity'; }\n get isStandardIcon(): boolean { return !this.isProfile && !this.isClarity; }\n\n get showTooltip(): boolean {\n return this._hovered && !!MENU_TOOLTIPS[this.menu];\n }\n\n get iconName(): string {\n return MENU_ICONS[this.menu] || 'circle';\n }\n\n get resolvedTooltip(): string {\n return this.tooltipText || MENU_TOOLTIPS[this.menu] || '';\n }\n\n get hostClasses(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n const classes = [\n 'zen-top-nav-item',\n `zen-top-nav-item--${activeState}`,\n `zen-top-nav-item--${this.menu}`,\n ];\n if (this.profileOpen) classes.push('zen-top-nav-item--profile-open');\n return classes.join(' ');\n }\n\n get iconColor(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n if (activeState === 'focused') return '#FFFFFF';\n if (this.menu === 'message-blue' || this.menu === 'call-blue') return '#136AB6';\n if (this.menu === 'message-white' || this.menu === 'call-white') return '#667085';\n return '#98A2B3';\n }\n\n onClick(): void {\n if (this.isProfile) {\n this.profileOpen = !this.profileOpen;\n }\n this.activate.emit();\n }\n\n onProfileItemClick(item: ZenTopNavProfileMenuItem, event: MouseEvent): void {\n event.stopPropagation();\n this.profileMenuItemClick.emit(item);\n this.profileOpen = false;\n }\n\n onMouseEnter(): void {\n this._hovered = true;\n }\n\n onMouseLeave(): void {\n this._hovered = false;\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.profileOpen && !this._elementRef.nativeElement.contains(event.target)) {\n this.profileOpen = false;\n }\n }\n}\n","<!-- Standard icon items (bell, settings, message-square, phone) -->\n<ng-container *ngIf=\"isStandardIcon\">\n <div [class]=\"hostClasses\"\n (click)=\"onClick()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <zen-icon class=\"zen-top-nav-item__icon\"\n [name]=\"iconName\"\n [customColor]=\"iconColor\"></zen-icon>\n <span *ngIf=\"badgeCount > 0\" class=\"zen-top-nav-item__badge\">{{ badgeCount }}</span>\n <div *ngIf=\"showTooltip\" class=\"zen-top-nav-item__tooltip\">{{ resolvedTooltip }}</div>\n </div>\n</ng-container>\n\n<!-- Clarity (gradient button) -->\n<ng-container *ngIf=\"isClarity\">\n <button [class]=\"hostClasses\"\n (click)=\"onClick()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n type=\"button\">\n <svg class=\"zen-top-nav-item__clarity-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 3L13.912 8.813C14.0777 9.32848 14.6715 9.92225 15.187 10.088L21 12L15.187 13.912C14.6715 14.0777 14.0777 14.6715 13.912 15.187L12 21L10.088 15.187C9.92225 14.6715 9.32848 14.0777 8.813 13.912L3 12L8.813 10.088C9.32848 9.92225 9.92225 9.32848 10.088 8.813L12 3Z\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 3V7\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M3 5H7\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 17V21\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17 19H21\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"zen-top-nav-item__clarity-label\">{{ clarityLabel }}</span>\n </button>\n</ng-container>\n\n<!-- Profile (avatar + chevron + dropdown) -->\n<ng-container *ngIf=\"isProfile\">\n <div [class]=\"hostClasses\"\n (click)=\"onClick()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <div class=\"zen-top-nav-item__avatar\">\n <zen-icon class=\"zen-top-nav-item__avatar-icon\"\n name=\"user\"\n [customColor]=\"'#667085'\"></zen-icon>\n </div>\n <zen-icon class=\"zen-top-nav-item__chevron\"\n [name]=\"profileOpen ? 'chevron-up' : 'chevron-down'\"\n [customColor]=\"'#667085'\"></zen-icon>\n\n <!-- Profile dropdown -->\n <div *ngIf=\"profileOpen\" class=\"zen-top-nav-item__profile-dropdown\">\n <div *ngIf=\"profileData\" class=\"zen-top-nav-item__profile-header\">\n <div class=\"zen-top-nav-item__profile-avatar\">\n <zen-icon name=\"user\" [customColor]=\"'#667085'\"\n class=\"zen-top-nav-item__profile-avatar-icon\"></zen-icon>\n </div>\n <div class=\"zen-top-nav-item__profile-info\">\n <span class=\"zen-top-nav-item__profile-name\">{{ profileData.name }}</span>\n <span class=\"zen-top-nav-item__profile-email\">{{ profileData.email }}</span>\n </div>\n </div>\n <div class=\"zen-top-nav-item__profile-divider\"></div>\n <div class=\"zen-top-nav-item__profile-items\">\n <div *ngFor=\"let item of profileMenuItems\"\n class=\"zen-top-nav-item__profile-item\"\n [class.zen-top-nav-item__profile-item--destructive]=\"item.destructive\"\n (click)=\"onProfileItemClick(item, $event)\">\n <zen-icon *ngIf=\"item.icon\"\n class=\"zen-top-nav-item__profile-item-icon\"\n [name]=\"item.icon\"\n [customColor]=\"item.destructive ? '#F04438' : '#344054'\"></zen-icon>\n <span>{{ item.label }}</span>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ZenTopNavProfileData, ZenTopNavProfileMenuItem } from '../top-nav-item/zen-top-nav-item.component';\n\nexport interface ZenTopNavBreadcrumb {\n text?: string;\n icon?: string;\n active?: boolean;\n tooltip?: string;\n}\n\nexport interface ZenTopNavSubmoduleItem {\n label: string;\n icon?: string;\n tag?: unknown;\n}\n\nexport interface ZenTopNavTab {\n label: string;\n tag?: unknown;\n}\n\n@Component({\n selector: 'zen-top-nav',\n templateUrl: './zen-top-nav.component.html',\n styleUrls: ['./zen-top-nav.component.scss']\n})\nexport class ZenTopNavComponent {\n\n // Left side: breadcrumbs OR submodule tabs\n @Input() breadcrumbs: ZenTopNavBreadcrumb[] = [];\n @Input() submoduleItems: ZenTopNavSubmoduleItem[] = [];\n @Input() activeSubmodule: string;\n\n // Back button\n @Input() showBackButton = true;\n\n // Right side: top menu\n @Input() profileData: ZenTopNavProfileData;\n @Input() profileMenuItems: ZenTopNavProfileMenuItem[] = [];\n @Input() showClarity = true;\n @Input() notificationCount = 0;\n\n // Horizontal tabs (second row)\n @Input() tabs: ZenTopNavTab[] = [];\n @Input() activeTab: string;\n\n @Output() back = new EventEmitter<void>();\n @Output() breadcrumbClick = new EventEmitter<ZenTopNavBreadcrumb>();\n @Output() submoduleChange = new EventEmitter<ZenTopNavSubmoduleItem>();\n @Output() tabChange = new EventEmitter<ZenTopNavTab>();\n @Output() clarityClick = new EventEmitter<void>();\n @Output() notificationClick = new EventEmitter<void>();\n @Output() chatClick = new EventEmitter<void>();\n @Output() profileMenuItemClick = new EventEmitter<ZenTopNavProfileMenuItem>();\n\n get hasSubmodules(): boolean {\n return this.submoduleItems.length > 0;\n }\n\n get hasTabs(): boolean {\n return this.tabs.length > 0;\n }\n\n onBack(): void {\n this.back.emit();\n }\n\n onBreadcrumbClick(crumb: ZenTopNavBreadcrumb): void {\n this.breadcrumbClick.emit(crumb);\n }\n\n onSubmoduleClick(item: ZenTopNavSubmoduleItem): void {\n this.submoduleChange.emit(item);\n }\n\n onTabClick(tab: ZenTopNavTab): void {\n this.tabChange.emit(tab);\n }\n\n isLastBreadcrumb(index: number): boolean {\n return index === this.breadcrumbs.length - 1;\n }\n\n getBreadcrumbColor(crumb: ZenTopNavBreadcrumb, index: number): string {\n if (this.isLastBreadcrumb(index)) return '#136AB6';\n return '#667085';\n }\n}\n","<div class=\"zen-top-nav\" [class.zen-top-nav--with-tabs]=\"hasTabs\">\n <!-- Main bar -->\n <div class=\"zen-top-nav__bar\">\n <!-- Left side -->\n <div class=\"zen-top-nav__left\">\n <!-- Back button -->\n <button *ngIf=\"showBackButton\" class=\"zen-top-nav__back\" type=\"button\" (click)=\"onBack()\">\n <zen-icon name=\"arrow-left\" [customColor]=\"'#667085'\"\n class=\"zen-top-nav__back-icon\"></zen-icon>\n </button>\n\n <!-- Option A: Submodule tabs -->\n <div *ngIf=\"hasSubmodules\" class=\"zen-top-nav__submodules\">\n <zen-submodule-item *ngFor=\"let item of submoduleItems\"\n [label]=\"item.label\"\n [icon]=\"item.icon\"\n [current]=\"activeSubmodule === (item.tag || item.label)\"\n (activate)=\"onSubmoduleClick(item)\">\n </zen-submodule-item>\n </div>\n\n <!-- Option B: Breadcrumbs -->\n <div *ngIf=\"!hasSubmodules && breadcrumbs.length\" class=\"zen-top-nav__breadcrumbs\">\n <ng-container *ngFor=\"let crumb of breadcrumbs; let i = index; let last = last\">\n <div class=\"zen-top-nav__breadcrumb-item\"\n (click)=\"onBreadcrumbClick(crumb)\">\n <zen-icon *ngIf=\"crumb.icon\"\n class=\"zen-top-nav__breadcrumb-icon\"\n [name]=\"crumb.icon\"\n [customColor]=\"getBreadcrumbColor(crumb, i)\"></zen-icon>\n <span *ngIf=\"crumb.text\"\n class=\"zen-top-nav__breadcrumb-text\"\n [style.color]=\"getBreadcrumbColor(crumb, i)\">\n {{ crumb.text }}\n </span>\n <div *ngIf=\"crumb.tooltip\" class=\"zen-top-nav__breadcrumb-tooltip\">{{ crumb.tooltip }}</div>\n </div>\n <zen-icon *ngIf=\"!last\"\n class=\"zen-top-nav__breadcrumb-chevron\"\n name=\"chevron-right\"\n [customColor]=\"'#667085'\"></zen-icon>\n </ng-container>\n </div>\n\n <!-- Option C: Content projection for custom left content -->\n <ng-content select=\"[topNavLeft]\"></ng-content>\n </div>\n\n <!-- Right side: Top menu items -->\n <div class=\"zen-top-nav__right\">\n <ng-content select=\"[topNavRight]\"></ng-content>\n <zen-top-nav-item *ngIf=\"showClarity\"\n menu=\"clarity\"\n (activate)=\"clarityClick.emit()\"></zen-top-nav-item>\n <div class=\"zen-top-nav__actions\">\n <zen-top-nav-item menu=\"chat\"\n (activate)=\"chatClick.emit()\"></zen-top-nav-item>\n <zen-top-nav-item menu=\"notification\"\n [badgeCount]=\"notificationCount\"\n (activate)=\"notificationClick.emit()\"></zen-top-nav-item>\n <zen-top-nav-item menu=\"profile\"\n [profileData]=\"profileData\"\n [profileMenuItems]=\"profileMenuItems\"\n (profileMenuItemClick)=\"profileMenuItemClick.emit($event)\"></zen-top-nav-item>\n </div>\n </div>\n </div>\n\n <!-- Horizontal tabs (second row) -->\n <div *ngIf=\"hasTabs\" class=\"zen-top-nav__tabs\">\n <div class=\"zen-top-nav__tabs-list\">\n <a *ngFor=\"let tab of tabs\"\n class=\"zen-top-nav__tab\"\n [class.zen-top-nav__tab--active]=\"activeTab === tab.label\"\n (click)=\"onTabClick(tab)\">\n {{ tab.label }}\n </a>\n </div>\n <div class=\"zen-top-nav__tabs-divider\"></div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ZenNavModule } from '../nav-item/zen-nav-item.component';\nimport { ZenSideNavItemState, ZenSideNavSubItem } from '../side-nav-item/zen-side-nav-item.component';\n\nexport interface ZenNavigationModule {\n module: ZenNavModule;\n hasSubmodule?: boolean;\n subItems?: ZenSideNavSubItem[];\n}\n\n@Component({\n selector: 'zen-navigation',\n templateUrl: './zen-navigation.component.html',\n styleUrls: ['./zen-navigation.component.scss']\n})\nexport class ZenNavigationComponent {\n\n @Input() collapsed = false;\n @Input() modules: ZenNavigationModule[] = [];\n @Input() bottomModules: ZenNavigationModule[] = [];\n @Input() activeModule: ZenNavModule;\n\n @Output() moduleActivate = new EventEmitter<ZenNavModule>();\n @Output() subItemActivate = new EventEmitter<{ module: ZenNavModule; subItem: ZenSideNavSubItem }>();\n @Output() searchChange = new EventEmitter<string>();\n @Output() searchClick = new EventEmitter<void>();\n\n expandedModules: Set<ZenNavModule> = new Set();\n\n get hostClasses(): string {\n const classes = ['zen-navigation'];\n if (this.collapsed) classes.push('zen-navigation--collapsed');\n return classes.join(' ');\n }\n\n getModuleState(mod: ZenNavigationModule): ZenSideNavItemState {\n return this.activeModule === mod.module ? 'focused' : 'default';\n }\n\n isModuleExpanded(mod: ZenNavigationModule): boolean {\n return this.expandedModules.has(mod.module);\n }\n\n onModuleActivate(mod: ZenNavigationModule): void {\n this.moduleActivate.emit(mod.module);\n }\n\n onModuleExpandedChange(mod: ZenNavigationModule, expanded: boolean): void {\n if (expanded) {\n this.expandedModules.add(mod.module);\n } else {\n this.expandedModules.delete(mod.module);\n }\n }\n\n onSubItemActivate(mod: ZenNavigationModule, subItem: ZenSideNavSubItem): void {\n this.subItemActivate.emit({ module: mod.module, subItem });\n }\n\n onSearchChange(value: string): void {\n this.searchChange.emit(value);\n }\n\n onSearchButtonClick(): void {\n this.searchClick.emit();\n }\n}\n","<nav [class]=\"hostClasses\">\n <!-- Top section -->\n <div class=\"zen-navigation__top\">\n <!-- Logo slot -->\n <div class=\"zen-navigation__logo\">\n <ng-content select=\"[navLogo]\"></ng-content>\n </div>\n\n <!-- Search: full input when expanded, icon button when collapsed -->\n <zen-nav-search *ngIf=\"!collapsed\"\n class=\"zen-navigation__search\"\n (valueChange)=\"onSearchChange($event)\"></zen-nav-search>\n <button *ngIf=\"collapsed\" class=\"zen-navigation__search-btn\" type=\"button\"\n (click)=\"onSearchButtonClick()\">\n <zen-icon name=\"search\" [customColor]=\"'#D0D5DD'\" class=\"zen-navigation__search-icon\"></zen-icon>\n </button>\n\n <!-- Navigation items -->\n <div class=\"zen-navigation__items\">\n <zen-nav-item *ngFor=\"let mod of modules\"\n [module]=\"mod.module\"\n [type]=\"collapsed ? 'collapsed' : 'expanded'\"\n [state]=\"getModuleState(mod)\"\n [hasSubmodule]=\"mod.hasSubmodule\"\n [subItems]=\"mod.subItems || []\"\n [expanded]=\"isModuleExpanded(mod)\"\n (activate)=\"onModuleActivate(mod)\"\n (subItemActivate)=\"onSubItemActivate(mod, $event)\"\n (expandedChange)=\"onModuleExpandedChange(mod, $event)\">\n </zen-nav-item>\n </div>\n </div>\n\n <!-- Bottom section (More, Admin, Help) -->\n <div *ngIf=\"bottomModules.length\" class=\"zen-navigation__bottom\">\n <div class=\"zen-navigation__divider\"></div>\n <zen-nav-item *ngFor=\"let mod of bottomModules\"\n [module]=\"mod.module\"\n [type]=\"collapsed ? 'collapsed' : 'expanded'\"\n [state]=\"getModuleState(mod)\"\n [hasSubmodule]=\"mod.hasSubmodule\"\n [subItems]=\"mod.subItems || []\"\n [expanded]=\"isModuleExpanded(mod)\"\n (activate)=\"onModuleActivate(mod)\"\n (subItemActivate)=\"onSubItemActivate(mod, $event)\"\n (expandedChange)=\"onModuleExpandedChange(mod, $event)\">\n </zen-nav-item>\n </div>\n\n <!-- Extra slot -->\n <ng-content select=\"[navBottom]\"></ng-content>\n</nav>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ElementRef,\n AfterViewInit\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})\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 drawBorder: 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 borderDash: [4, 4],\n drawBorder: false\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 <div *ngIf=\"legend === 'top'\" class=\"zen-chart__legend\">\n <div *ngFor=\"let ds of datasets; let i = index\" 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 </div>\n\n <!-- Y-axis label + chart canvas -->\n <div class=\"zen-chart__body\">\n <div *ngIf=\"axisLabels && yAxisLabel\" class=\"zen-chart__y-label\">\n <span>{{ yAxisLabel }}</span>\n </div>\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 <div *ngIf=\"axisLabels && xAxisLabel\" class=\"zen-chart__x-label\">\n <span>{{ xAxisLabel }}</span>\n </div>\n\n <!-- Legend: right position -->\n <div *ngIf=\"legend === 'right'\" class=\"zen-chart__legend\">\n <div *ngFor=\"let ds of datasets; let i = index\" 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 </div>\n\n</div>\n","import { Component, Input } 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})\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 <ng-container *ngIf=\"type === 'top'\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n <div class=\"zen-step-base__content\" *ngIf=\"title || description\">\n <p class=\"zen-step-base__title\" *ngIf=\"title\">{{ title }}</p>\n <p class=\"zen-step-base__description\" *ngIf=\"description\">{{ description }}</p>\n </div>\n </ng-container>\n\n <!-- ============ TYPE: ICON ONLY (minimal-icons) ============ -->\n <ng-container *ngIf=\"type === 'icon-only'\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n\n <!-- ============ TYPE: TEXT LINE ============ -->\n <ng-container *ngIf=\"type === 'text-line'\">\n <div class=\"zen-step-base__bar\"></div>\n <div class=\"zen-step-base__content\" *ngIf=\"title || description\">\n <p class=\"zen-step-base__title\" *ngIf=\"title\">{{ title }}</p>\n <p class=\"zen-step-base__description\" *ngIf=\"description\">{{ description }}</p>\n </div>\n </ng-container>\n\n <!-- ============ TYPE: ICON LEFT (icons-text vertical) ============ -->\n <ng-container *ngIf=\"type === 'icon-left'\">\n <div class=\"zen-step-base__icon-col\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n <div *ngIf=\"showConnector\"\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 </div>\n <div class=\"zen-step-base__content\" *ngIf=\"title || description\">\n <p class=\"zen-step-base__title\" *ngIf=\"title\">{{ title }}</p>\n <p class=\"zen-step-base__description\" *ngIf=\"description\">{{ description }}</p>\n </div>\n </ng-container>\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 <svg *ngIf=\"status === 'complete'\"\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 <!-- Current / Incomplete: dot -->\n <span *ngIf=\"status !== 'complete'\"\n class=\"zen-step-base__dot\"\n [style.width.px]=\"dotSize\"\n [style.height.px]=\"dotSize\">\n </span>\n </div>\n</ng-template>\n","import { Component, Input } 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})\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 <ng-container *ngIf=\"type === 'icons-centered'\">\n <div class=\"zen-progress-steps__row\">\n <!-- Lines behind icons -->\n <div class=\"zen-progress-steps__lines\">\n <ng-container *ngFor=\"let step of steps; let i = index; let last = last\">\n <div *ngIf=\"!last\"\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 </ng-container>\n </div>\n <!-- Step columns -->\n <zen-step-base *ngFor=\"let step of steps; let i = index\"\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 </div>\n </ng-container>\n\n <!-- ============ MINIMAL ICONS / MINIMAL ICONS CONNECTED ============ -->\n <ng-container *ngIf=\"type === 'minimal-icons' || type === 'minimal-icons-connected'\">\n <div class=\"zen-progress-steps__row zen-progress-steps__row--inline\">\n <ng-container *ngFor=\"let step of steps; 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 <div *ngIf=\"!last\"\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 </ng-container>\n </div>\n <!-- Optional text row -->\n <div class=\"zen-progress-steps__text-row\" *ngIf=\"showText\">\n <zen-step-base *ngFor=\"let step of steps; let i = index\"\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 </div>\n </ng-container>\n\n <!-- ============ TEXT LINE ============ -->\n <ng-container *ngIf=\"type === 'text-line'\">\n <div class=\"zen-progress-steps__row zen-progress-steps__row--text-line\">\n <zen-step-base *ngFor=\"let step of steps; let i = index\"\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 </div>\n </ng-container>\n\n <!-- ============ ICONS TEXT (Vertical) ============ -->\n <ng-container *ngIf=\"type === 'icons-text'\">\n <div class=\"zen-progress-steps__column\">\n <zen-step-base *ngFor=\"let step of steps; let i = index; let last = last\"\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 </div>\n </ng-container>\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 { ZenduBreadcrumbs } from './breadcrumbs/zendu-breadcrumbs.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 { AngularSignaturePadModule } from '@almothafar/angular-signature-pad';\nimport { HttpClientModule } 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 { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { HttpClient } from '@angular/common/http';\nimport { ZenduSelectButtonDirective } from './select/templates/zendu-select-button.directive';\nimport { ZenduTimepickerComponent } from './timepicker/zendu-timepicker.component';\nimport { ZenduCommentTextareaComponent } from './comment-textarea/zendu-comment-textarea.component';\nimport { ZenduCommentItemComponent } from './comment-item/zendu-comment-item.component';\nimport { ZenduCommentListComponent } from './comment-list/zendu-comment-list.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 { ZenSideNavItemComponent } from './side-nav-item/zen-side-nav-item.component';\nimport { ZenSubpageItemComponent } from './subpage-item/zen-subpage-item.component';\nimport { ZenNavItemComponent } from './nav-item/zen-nav-item.component';\nimport { ZenModulePopupComponent } from './module-popup/zen-module-popup.component';\nimport { ZenTopNavItemComponent } from './top-nav-item/zen-top-nav-item.component';\nimport { ZenTopNavComponent } from './top-nav/zen-top-nav.component';\nimport { ZenNavigationComponent } from './navigation/zen-navigation.component';\nimport { NgChartsModule } 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// AoT requires an exported function for factories\nexport function HttpLoaderFactory(httpClient: HttpClient) {\n return new TranslateHttpLoader(httpClient);\n}\n\n@NgModule({\n 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 ZenduBreadcrumbs,\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 ZenduCommentTextareaComponent,\n ZenduCommentItemComponent,\n ZenduCommentListComponent,\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 ZenSideNavItemComponent,\n ZenSubpageItemComponent,\n ZenNavItemComponent,\n ZenModulePopupComponent,\n ZenTopNavItemComponent,\n ZenTopNavComponent,\n ZenNavigationComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent\n ],\n providers: [\n OpenCVService,\n ],\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n AngularSignaturePadModule,\n ReactiveFormsModule,\n HttpClientModule,\n OverlayModule,\n NgChartsModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\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 ZenduBreadcrumbs,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduCommentTextareaComponent,\n ZenduCommentItemComponent,\n ZenduCommentListComponent,\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 ZenSideNavItemComponent,\n ZenSubpageItemComponent,\n ZenNavItemComponent,\n ZenModulePopupComponent,\n ZenTopNavItemComponent,\n ZenTopNavComponent,\n ZenNavigationComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent\n ]\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/breadcrumbs/zendu-breadcrumbs.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/comment-textarea/zendu-comment-textarea.component\";\nexport * from \"./lib/comment-item/zendu-comment-item.component\";\nexport * from \"./lib/comment-list/zendu-comment-list.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/side-nav-item/zen-side-nav-item.component\";\nexport * from \"./lib/subpage-item/zen-subpage-item.component\";\nexport * from \"./lib/nav-item/zen-nav-item.component\";\nexport * from \"./lib/module-popup/zen-module-popup.component\";\nexport * from \"./lib/top-nav-item/zen-top-nav-item.component\";\nexport * from \"./lib/top-nav/zen-top-nav.component\";\nexport * from \"./lib/navigation/zen-navigation.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","i3","i2","i3.ZenduCheckboxComponent","i4.ZenduSearchBoxComponent","i1","i4","i5.ZenduIconComponent","i2.ZenduCheckboxComponent","i3.ZenduSearchBoxComponent","i4.ZenduToggleSlideComponent","i5.ZenduSearchBoxComponent","i6.ZenduDatepickerComponent","i7.ZenduGroupsComponent","i8.ZenduRadioButtonComponent","i9.ZenduIconComponent","i10.ZenduSpinner","i11","i2.ZenduIconComponent","i4.ZenduGroupsComponent","i6","i1.ZenduIconComponent","LocalLock","i1.ScriptLoader","i1.OpenCVService","i3.ZenduIconComponent","i1.GeocodingService","i4.ZenduIconComponent","i1.ZenHttpService","i2.ZenHTML5VideoPlayerComponent","i3.ZenFlvPlayerComponent","i4.ZenHlsPlayerComponent","i5.ZenSnapshotPlayerComponent","i6.ZenWebRTCPlayerComponent","i2.ZenduCommentTextareaComponent","i2.ZenduCommentItemComponent","i3.ZenduSpinner","i2.ZenduAvatarComponent","i3.ZenEldStatusComponent","i2.ZenSideNavItemComponent","i3.ZenModulePopupComponent","i3.ZenSubmoduleItemComponent","i4.ZenTopNavItemComponent","i3.ZenNavSearchComponent","i4.ZenNavItemComponent","i2.ZenStepBaseComponent"],"mappings":"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"}
|
|
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/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/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/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/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/breadcrumbs/zendu-breadcrumbs.component.ts","../../../projects/ng-zenduit/src/lib/breadcrumbs/zendu-breadcrumbs.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/comment-textarea/zendu-comment-textarea.component.ts","../../../projects/ng-zenduit/src/lib/comment-textarea/zendu-comment-textarea.component.html","../../../projects/ng-zenduit/src/lib/comment-item/zendu-comment-item.component.ts","../../../projects/ng-zenduit/src/lib/comment-item/zendu-comment-item.component.html","../../../projects/ng-zenduit/src/lib/comment-list/zendu-comment-list.component.ts","../../../projects/ng-zenduit/src/lib/comment-list/zendu-comment-list.component.html","../../../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/input/zendu-input.component.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.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/side-nav-item/zen-side-nav-item.component.ts","../../../projects/ng-zenduit/src/lib/side-nav-item/zen-side-nav-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/nav-item/zen-nav-item.component.ts","../../../projects/ng-zenduit/src/lib/nav-item/zen-nav-item.component.html","../../../projects/ng-zenduit/src/lib/top-nav-item/zen-top-nav-item.component.ts","../../../projects/ng-zenduit/src/lib/top-nav-item/zen-top-nav-item.component.html","../../../projects/ng-zenduit/src/lib/top-nav/zen-top-nav.component.ts","../../../projects/ng-zenduit/src/lib/top-nav/zen-top-nav.component.html","../../../projects/ng-zenduit/src/lib/navigation/zen-navigation.component.ts","../../../projects/ng-zenduit/src/lib/navigation/zen-navigation.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 } from '@angular/core';\n\n@Component({\n selector: 'zen-checkbox',\n templateUrl: './zendu-checkbox.component.html',\n styleUrls: ['./zendu-checkbox.component.scss']\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 <i *ngIf=\"checked && !indeterminate\"\n class=\"material-icons app-checkbox-icon\">done</i>\n <i *ngIf=\"indeterminate\"\n class=\"material-icons app-checkbox-icon\">remove</i>\n </button>\n <div class=\"app-checkbox-text-wrap\"\n *ngIf=\"label || supportingText\">\n <div class=\"app-checkbox-label\"\n *ngIf=\"label\"\n [ngStyle]=\"{'color': labelColor }\">\n <img class=\"checkbox-image\"\n [src]=\"imageUrl\"\n *ngIf=\"imageUrl\">\n {{ label }}\n </div>\n <div class=\"app-checkbox-supporting-text\"\n *ngIf=\"supportingText\">\n {{ supportingText }}\n </div>\n </div>\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-colorpicker',\n templateUrl: './zendu-colorpicker.component.html',\n styleUrls: ['./zendu-colorpicker.component.scss']\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 <ng-container *ngIf=\"!customTarget\">\n <div *ngIf=\"icon == 'text'\">\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_text.svg\"\n class=\"icon-text\">\n </div>\n\n <div *ngIf=\"icon == 'paint'\">\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\n <div class=\"color-line\"\n [ngStyle]=\"{'border-color': color}\">\n </div>\n </ng-container>\n\n <div *ngIf=\"opened\"\n class=\"color-menu\"\n [ngStyle]=\"{ 'left': menuLeft, 'top': menuTop, 'bottom': menuBottom }\">\n\n <div class=\"colors-container\">\n <div *ngFor=\"let row of colorsRows\"\n class=\"color-row\">\n <div *ngFor=\"let rowColor of row.colors\"\n (click)=\"selectColor(rowColor)\"\n class=\"color-item\"\n [ngStyle]=\"{'background-color': rowColor}\">\n <div *ngIf=\"rowColor == color\"\n class=\"select-icon\">\n <i class=\"material-icons\">check</i>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"showNone\"\n class=\"no-color\"\n (click)=\"selectColor('')\">\n None\n </div>\n </div>\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 ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output,\n ViewChild,\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})\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 @ViewChild('searchInput', { static: false }) searchInput!: ElementRef;\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 activateSearchBox() {\n this.searchInput.nativeElement.focus();\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 <i class=\"svg-icons\"\n (click)=\"activateSearchBox()\">\n <svg width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8.33333\"\n cy=\"8.33333\"\n r=\"5.83333\"\n stroke=\"#828282\"\n stroke-width=\"1.6\" />\n <path d=\"M17.5 17.5001L12.9166 12.9167\"\n stroke=\"#828282\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\" />\n </svg>\n </i>\n <input [(ngModel)]=\"text\"\n class=\"search-box\"\n (ngModelChange)=\"onChange()\"\n placeholder=\"{{placeholder | translate}}\"\n [disabled]=\"disabled\"\n #searchInput>\n <i class=\"material-icons close-icon\"\n *ngIf=\"text\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"clear(); $event.stopPropagation()\">close</i>\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\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})\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 <div *ngIf=\"showPanel\"\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\n\n <div class=\"action-menu-body dnd-container\"\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\">\n <div *ngFor=\"let config of filteredColumnsConfiguration\"\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 </div>\n\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</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 } 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})\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","<div *ngIf=\"isFeatured\"\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","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef\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})\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 <ng-container *ngIf=\"!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 <div class=\"date-placeholder\"\n *ngIf=\"!date && showDate && !showTime\">\n {{\"Select Date\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && !showDate\">\n {{\"Select Time\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && showDate && showTime\">\n {{\"Select Date & Time\" | translate}}\n </div>\n\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n\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 </ng-container>\n\n <!-- Box design datepicker toggle -->\n <ng-container *ngIf=\"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\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showDate && !showTime\">\n {{\"Select Date\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && !showDate\">\n {{\"Select Time\" | translate}}\n </div>\n <div class=\"date-placeholder\"\n *ngIf=\"!date && showTime && showDate && showTime\">\n {{\"Select Date & Time\" | translate}}\n </div>\n <!-- Selected datetime -->\n <div *ngIf=\"date\">\n <span *ngIf=\"showDate\">{{formattedDate()}}</span>\n <span *ngIf=\"showTime\"> {{formattedTime()}}</span>\n </div>\n </div>\n </button>\n </ng-container>\n\n <!-- Datepicker popup -->\n <ng-container *ngTemplateOutlet=\"dateMenuTemplate\">\n </ng-container>\n\n <ng-template #dateMenuTemplate>\n <div #dateMenu\n *ngIf=\"isPickerVisible\"\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n <ng-container *ngIf=\"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 <div *ngFor=\"let weekDay of weekDays\"\n class=\"week-day\">\n {{weekDay | translate}}\n </div>\n </div>\n <div *ngFor=\"let row of dayRows\"\n class=\"day-row\">\n <div *ngFor=\"let day of row.days\"\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 <zen-icon *ngIf=\"day.isHighlighted\"\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"showTime\"\n class=\"time-container\">\n\n <div class=\"time-lbl\">\n {{\"Select Time\" | translate}}:\n </div>\n\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 <span *ngIf=\"showSeconds\">:</span>\n <div class=\"input-wrapper\" *ngIf=\"showSeconds\">\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 <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 <div class=\"hint\"\n *ngIf=\"hint\">\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 <div class=\"footer\"\n *ngIf=\"!autoConfirm || showTime\">\n <button *ngIf=\"date\"\n (click)=\"clear()\"\n class=\"button-stroked\">\n {{\"Clear\" | translate}}\n </button>\n <button *ngIf=\"!date\"\n (click)=\"cancel()\"\n class=\"button-stroked\">\n {{\"Cancel\" | translate}}\n </button>\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n {{\"Apply\" | translate}}\n </button>\n </div>\n\n <ng-container *ngIf=\"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 <div class=\"month-item\"\n *ngFor=\"let month of months; index as index\"\n (click)=\"selectMonth(index)\">\n {{ month | translate }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"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 <div class=\"month-item\"\n *ngFor=\"let year of years\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output } 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})\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} 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})\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<div class=\"zen-groups-dropdown\" *ngIf=\"!inline\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n <span *ngIf=\"!selectedLabel\" class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n <span *ngIf=\"selectedLabel\" class=\"zen-groups-value\">{{ selectedLabel }}</span>\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n\n <div class=\"zen-groups-panel\" *ngIf=\"isOpen\" [class.open-upward]=\"openUpward\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n</div>\n\n<!-- Inline mode (used inside zen-filter) -->\n<div class=\"zen-groups-inline\" *ngIf=\"inline\">\n <div class=\"zen-groups-search\" *ngIf=\"!hideSearch\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n</div>\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n <div class=\"action-item-checkbox select-all\" *ngIf=\"!hideSelectAll\">\n <zen-checkbox *ngIf=\"dataSource.length === displayDataSource.length\"\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n </div>\n\n <ng-container *ngFor=\"let dsItem of displayDataSource\">\n <div *ngIf=\"isTreeItemVisible(dsItem)\"\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"24 + (dsItem.level || 0) * 24\">\n <ng-container *ngIf=\"dsItem.level > 0\">\n <div *ngFor=\"let connector of getTreeConnectors(dsItem); let i = index\"\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"32 + i * 24\">\n </div>\n </ng-container>\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 <span *ngIf=\"hasChildren(dsItem)\"\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n </div>\n <button *ngIf=\"hasChildren(dsItem)\"\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 </div>\n </ng-container>\n\n <div class=\"zen-groups-no-results\" *ngIf=\"searchText && displayDataSource.length === 0\">\n {{ 'No Results Found' | translate }}\n </div>\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n selector: 'zen-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss']\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 <div class=\"radio-text-wrap\"\n *ngIf=\"label || supportingText\">\n <span class=\"app-radio-button-label\">\n <img class=\"radio-image\"\n [src]=\"imageUrl\"\n *ngIf=\"imageUrl\">\n {{label | translate}}\n </span>\n <span class=\"app-radio-supporting-text\"\n *ngIf=\"supportingText\">\n {{supportingText}}\n </span>\n </div>\n</label>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'zen-spinner',\n templateUrl: './zendu-spinner.component.html',\n styleUrls: ['./zendu-spinner.component.scss']\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 } from '@angular/core';\n\n@Component({\n selector: 'zen-button',\n templateUrl: './zen-button.component.html',\n styleUrls: ['./zen-button.component.scss']\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() 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 <span *ngIf=\"buttonType === 'button-dot'\" class=\"button-dot\"></span>\n \n <!-- Leading icon -->\n <zen-icon *ngIf=\"buttonType === 'button-icon-leading' || isIconOnly\" \n [name]=\"getIconName()\"\n size=\"xs\"></zen-icon>\n \n <!-- Button content -->\n <ng-content *ngIf=\"!isIconOnly\"></ng-content>\n \n <!-- Trailing icon -->\n <zen-icon *ngIf=\"buttonType === 'button-icon-trailing'\" \n [name]=\"getIconName()\"\n size=\"xs\"></zen-icon>\n</button>","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\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})\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', ['$event'])\n windowSizeHandling() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:scroll', ['$event'])\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 <ng-container *ngIf=\"!customTrigger\">\n <zen-button (click)=\"toggle()\"\n [variant]=\"isApplied ? 'secondary' : 'secondary-gray'\"\n class=\"filter {{isApplied ? 'applied' : ''}}\">\n <zen-icon [src]=\"imageUrl\"\n *ngIf=\"imageUrl\"></zen-icon>\n <i class=\"filter-icon material-icons\"\n *ngIf=\"!imageUrl\">filter_list</i>\n <span *ngIf=\"label\">{{ label | translate }}</span>\n </zen-button>\n </ng-container>\n\n <ng-content *ngIf=\"customTrigger\"></ng-content>\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 <ng-container *ngIf=\"errorMessage.length\">\n <li *ngFor=\"let item of errorMessage\"\n class=\"error-msg\">{{item | translate }}</li>\n </ng-container>\n\n <div *ngFor=\"let item of config.items\">\n <div class=\"menu-item\"\n *ngIf=\"isMenuIsVisible(item)\">\n\n <!-- Divider between two filter -->\n <div *ngIf=\"item.type === 'divider'\">\n <p class=\"filter-divider\"></p>\n </div>\n\n <!-- Boolean toggle -->\n <div *ngIf=\"item.type === 'toggle'\"\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 <button class=\"action-item expander-item\"\n *ngIf=\"item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse\"\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 <div class=\"action-item section-title\"\n *ngIf=\"item.type != 'toggle' && item.type != 'divider' && item.disableCollapse\">\n {{item.title | translate}}\n </div>\n\n <ng-container *ngIf=\"item.expanded || item.disableCollapse\">\n <div [ngSwitch]=\"item.type\">\n <!-- Multiselect -->\n <div *ngSwitchCase=\"'multiselect'\">\n <!-- Lazy loading mode -->\n <ng-container *ngIf=\"item.isLazyLoading\">\n <div *ngFor=\"let dsItem of item.filteredDataSource\"\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 <span *ngIf=\"dsItem.badgeBgColor\"\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n </div>\n <div *ngIf=\"item.canLoadMore && !item.isLoadingNow\"\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 <div *ngIf=\"item.isLoadingNow\"\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!item.isLazyLoading && !hasTreeData(item)\">\n <div class=\"action-item-checkbox ds-item select-all\" *ngIf=\"!item.hideSelectAll\">\n <zen-checkbox *ngIf=\"item.dataSource.length === item.filteredDataSource.length\"\n [(checked)]=\"item.isSelectedAll\"\n [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll(item)\">\n </zen-checkbox>\n </div>\n\n <div *ngFor=\"let dsItem of item.filteredDataSource\"\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 <span *ngIf=\"dsItem.badgeBgColor\"\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n </div>\n </ng-container>\n\n <!-- Tree view mode -->\n <zen-groups *ngIf=\"!item.isLazyLoading && hasTreeData(item)\"\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 </div>\n\n <!-- Date range picker -->\n <div *ngSwitchCase=\"'dateRange'\">\n <!-- Options date range view -->\n <ng-container *ngIf=\"item.dateRangeOptions?.length\">\n <ng-container *ngFor=\"let option of item.dateRangeOptions\">\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 </ng-container>\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 <ng-container *ngIf=\"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 </ng-container>\n </ng-container>\n\n <!-- Default date range view -->\n <ng-container *ngIf=\"!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 </ng-container>\n </div>\n\n <!-- Date picker -->\n <div *ngSwitchCase=\"'date'\">\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 <div *ngSwitchCase=\"'numberRange'\"\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 <div *ngSwitchCase=\"'radio'\">\n <div *ngFor=\"let option of item.radioOptions\"\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 </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n <span *ngIf=\"showNoFilterResult\"\n class=\"no-item\">{{'No Results Found' | translate}}..</span>\n </div>\n\n <div class=\"action-menu-footer filter-footer\">\n <span class=\"selected-count\" *ngIf=\"hasMultiselectItems\">{{ selectedCount }} {{'Selected' | translate}}</span>\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 { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } 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})\nexport class ZenduPaginationBarComponent implements OnChanges {\n @Input() page = 1;\n @Input() perPage = 10;\n @Input() count = 0;\n\n @Output() pageChange = new EventEmitter<number>();\n\n public totalPages = 1;\n public pages: PageItem[] = [];\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 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 }\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 <button type=\"button\"\n class=\"nav-btn\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPage(page - 1)\">\n <zen-icon class=\"nav-icon\" src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n <span>{{ \"Previous\" | translate }}</span>\n </button>\n\n <div class=\"pages\">\n <ng-container *ngFor=\"let item of pages; let i = index\">\n <button *ngIf=\"item.kind === 'page'\"\n type=\"button\"\n class=\"page-btn\"\n [class.is-active]=\"item.active\"\n (click)=\"goToPage(item.page)\">\n {{ item.page }}\n </button>\n <span *ngIf=\"item.kind === 'ellipsis'\" class=\"page-ellipsis\">…</span>\n </ng-container>\n </div>\n\n <button type=\"button\"\n class=\"nav-btn\"\n [disabled]=\"page >= totalPages\"\n (click)=\"goToPage(page + 1)\">\n <span>{{ \"Next\" | translate }}</span>\n <zen-icon class=\"nav-icon\" src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } 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})\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 <div class=\"zen-dropdown-menu\"\n *ngIf=\"isExpanded\"\n [ngClass]=\"{'open': isExpanded}\">\n <!-- Countries List -->\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n *ngFor=\"let country of countryList\"\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</div>\n\n<!-- Click outside handler for dropdown -->\n<div *ngIf=\"isExpanded\"\n class=\"zen-dropdown-backdrop\"\n (click)=\"hideDropDown()\"></div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-option]'\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})\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})\nexport class ZenduSelectButtonDirective {\n\n constructor(public template: TemplateRef<HTMLElement>) { }\n\n}\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, ViewEncapsulation, ContentChild } 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})\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\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 this.filterOptions();\n }\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 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 this.filterOptions();\n }\n\n clearSearch(): void {\n this.searchText = '';\n this.filterOptions();\n }\n \n /**\n * Handle search input change for search type\n */\n onSearchInputChange(): void {\n this.searchText = this.searchInputValue;\n this.filterOptions();\n if (!this.isOpen && this.searchInputValue) {\n this.isOpen = true;\n }\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.selectModel) 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.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 <label class=\"app-select-label text text-sm text-weight-medium\" *ngIf=\"label\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n <span *ngIf=\"required\" class=\"required-indicator\">*</span>\n </label>\n\n <!-- Select Input -->\n <div class=\"app-select-wrapper\">\n <!-- Custom Trigger Template (overrides built-in trigger) -->\n <div *ngIf=\"buttonTemplate\"\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 <!-- Built-in Trigger (when no custom button template provided) -->\n <ng-container *ngIf=\"!buttonTemplate\" [ngSwitch]=\"leadingType\">\n <!-- Default Select (no leading element) -->\n <ng-container *ngSwitchCase=\"'default'\">\n <ng-container *ngTemplateOutlet=\"defaultSelectTemplate\"></ng-container>\n </ng-container>\n\n <!-- Icon Leading Select -->\n <ng-container *ngSwitchCase=\"'icon'\">\n <ng-container *ngTemplateOutlet=\"iconSelectTemplate\"></ng-container>\n </ng-container>\n\n <!-- Avatar Leading Select -->\n <ng-container *ngSwitchCase=\"'avatar'\">\n <ng-container *ngTemplateOutlet=\"avatarSelectTemplate\"></ng-container>\n </ng-container>\n\n <!-- Dot Leading Select -->\n <ng-container *ngSwitchCase=\"'dot'\">\n <ng-container *ngTemplateOutlet=\"dotSelectTemplate\"></ng-container>\n </ng-container>\n\n <!-- Search Input Select -->\n <ng-container *ngSwitchCase=\"'search'\">\n <ng-container *ngTemplateOutlet=\"searchInputTemplate\"></ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Dropdown Menu -->\n <div class=\"app-select-dropdown\" \n [ngClass]=\"getDropdownDirectionClass()\"\n *ngIf=\"isOpen\">\n \n <!-- Tree Mode: embed zen-groups inline -->\n <ng-container *ngIf=\"isTreeMode && isMultiselect; else flatList\">\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 </ng-container>\n\n <!-- Flat List Mode (default) -->\n <ng-template #flatList>\n <!-- Search Box for hasSearch (not for search type as it has inline search) -->\n <div class=\"app-select-search\" *ngIf=\"leadingType !== 'search' && hasSearch && !disabled\">\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 <zen-icon *ngIf=\"searchText\"\n class=\"app-select-search-clear\"\n [name]=\"'x'\"\n [customColor]=\"'#667085'\"\n (click)=\"clearSearch(); $event.stopPropagation()\">\n </zen-icon>\n </div>\n\n <!-- Options List -->\n <div class=\"app-select-options\">\n <!-- Select All Option for Multiselect -->\n <button *ngIf=\"isMultiselect && !hideSelectAll && filteredOptions.length > 0\"\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 <button *ngIf=\"enableAddNewOption && (showDefaultAddOption || searchText)\"\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 <button *ngIf=\"enableRemoveOption\"\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 <div *ngIf=\"filteredOptions.length === 0 && !enableAddNewOption\" class=\"app-select-no-options\">\n No matching options found\n </div>\n\n <button *ngFor=\"let option of filteredOptions\"\n class=\"app-select-option\"\n [class.selected]=\"isSelected(option)\"\n (click)=\"selectOption(option)\">\n\n <!-- Checkbox for Multiselect -->\n <zen-checkbox class=\"app-select-checkbox\"\n *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n\n <!-- Option Leading Element -->\n <div class=\"app-select-option-leading\" *ngIf=\"leadingType !== 'default'\">\n <ng-container [ngSwitch]=\"leadingType\">\n <ng-container *ngSwitchCase=\"'icon'\">\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: option }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'avatar'\">\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: option }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'dot'\">\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: option }\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <!-- Option Text -->\n <div class=\"app-select-option-text-wrapper\">\n <!-- Use custom template if provided -->\n <ng-container *ngIf=\"!isMultiselect && optionTemplate; else defaultOptionText\">\n <ng-template [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultOptionText>\n <span class=\"app-select-option-text\" [class.app-select-option-truncate]=\"isTruncate\">\n {{ getName(option) | translate }}\n </span>\n <span class=\"app-select-option-secondary\" *ngIf=\"option.secondaryText\">\n {{ option.secondaryText }}\n </span>\n </ng-template>\n </div>\n\n <!-- Check Icon for Single Select -->\n <zen-icon *ngIf=\"!isMultiselect && isSelected(option)\"\n class=\"app-select-option-check\"\n [name]=\"'check'\"\n [customColor]=\"'#136AB6'\">\n </zen-icon>\n </button>\n </div>\n </ng-template>\n </div>\n </div>\n \n <!-- Hint text / Error message -->\n <div *ngIf=\"(destructive && errorMessage) || hintText\" \n class=\"app-select-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n <i *ngIf=\"destructive\" class=\"material-icons-outlined hint-icon\">error_outline</i>\n <span>{{ ((destructive && errorMessage) ? errorMessage : hintText) | translate }}</span>\n </div>\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 <ng-container *ngIf=\"valueTemplate && !isModelEmpty(); else defaultValueDisplay\">\n <ng-template [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: getSelectedOption(), display: selectedDisplay }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultValueDisplay>\n <span class=\"app-select-value\" [class.placeholder]=\"isModelEmpty()\">\n {{ selectedDisplay || placeholder | translate }}\n </span>\n <span class=\"app-select-secondary\" *ngIf=\"getSelectedSecondaryText() && !isModelEmpty()\">\n {{ getSelectedSecondaryText() }}\n </span>\n </ng-template>\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 <ng-container *ngIf=\"icon || option?.icon || option?.iconName\">\n <ng-container *ngIf=\"getIconPath(option, icon) as iconPath\">\n <!-- If icon contains / or . treat as SVG path -->\n <ng-container *ngIf=\"(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 <img *ngIf=\"iconPath.includes('excel')\" \n [src]=\"iconPath\" \n alt=\"\"\n style=\"width: 20px; height: 20px;\">\n <!-- Use zen-icon with src for other SVG files -->\n <zen-icon *ngIf=\"!iconPath.includes('excel')\"\n [src]=\"iconPath\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n </ng-container>\n <!-- Otherwise treat as Material icon name or special cases -->\n <ng-container *ngIf=\"!((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 <img *ngIf=\"(icon === 'excel') || (option?.icon === 'excel') || (option?.iconName === 'excel')\"\n src=\"assets/ng-zenduit/icons/excel.svg\"\n alt=\"Excel\"\n style=\"width: 20px; height: 20px;\">\n <!-- Material icon names -->\n <zen-icon *ngIf=\"(icon !== 'excel') && (option?.icon !== 'excel') && (option?.iconName !== 'excel')\"\n [name]=\"icon || option?.icon || option?.iconName\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<!-- Avatar Leading Element -->\n<ng-template #avatarLeadingElement let-option=\"option\" let-avatar=\"avatar\">\n <div class=\"app-select-avatar\" *ngIf=\"avatar || option?.avatar\" >\n <img [src]=\"avatar || option?.avatar\" alt=\"\">\n </div>\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 } 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})\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 } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle',\n templateUrl: './zendu-toggle.component.html',\n styleUrls: ['./zendu-toggle.component.scss']\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 <div class=\"zen-toggle-text\" *ngIf=\"label\">\n <span class=\"zen-toggle-label\">{{label}}</span>\n <span class=\"zen-toggle-supporting\" *ngIf=\"supportingText\">{{supportingText}}</span>\n </div>\n\n</div>\n","import { Component, Input } 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})\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 <zen-icon *ngIf=\"icon\"\n [src]=\"icon\"></zen-icon>\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 } 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})\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} 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})\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 <div class=\"colors-container\" *ngIf=\"canDoodle || canAddText\">\n <div class=\"colors\" *ngFor=\"let color of colors\" [ngStyle]=\"{'background': color.hexCode, 'border':color.selected ? '1.6px solid white' : 'none'}\" (click)=\"chngClrTextOrBrush(color.hexCode, canAddText ? 'text': 'doodle')\"></div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\ninterface BreadcrumbStep {\n text: string;\n active: boolean;\n /**\n * user's custom data\n */\n tag?: unknown;\n}\n\n@Component({\n selector: 'zen-breadcrumbs',\n templateUrl: './zendu-breadcrumbs.component.html',\n styleUrls: ['./zendu-breadcrumbs.component.scss'],\n})\nexport class ZenduBreadcrumbs {\n @Input() steps: BreadcrumbStep[] = [];\n\n /**\n * Enable manual activation. In this case active trips will managed by app\n */\n @Input() manualNavigation = false;\n\n @Output() onActivate = new EventEmitter<BreadcrumbStep>();\n\n public onStepClick(step: BreadcrumbStep) {\n if (this.manualNavigation) {\n return;\n }\n const activeIdx = this.steps.indexOf(step);\n // update states\n for (let [idx, step] of this.steps.entries()) {\n step.active = idx <= activeIdx;\n }\n this.onActivate.emit(step);\n }\n}\n","<div class=\"component\">\n <ng-container *ngFor=\"let step of steps; let isLast = last;\">\n <div class=\"line\"\n [ngClass]=\"{\n 'active': step.active,\n 'width': steps.length !== 1\n }\"></div>\n <div class=\"step\"\n [ngClass]=\"{\n 'active': step.active,\n 'mannual-navigation': manualNavigation,\n 'text-nowrap': steps.length === 1\n }\"\n (click)=\"onStepClick(step)\">\n {{step.text}}\n </div>\n <!-- last line -->\n <div *ngIf=\"isLast\"\n class=\"line\"\n [ngClass]=\"{\n 'active': step.active,\n 'width': steps.length !== 1\n }\"></div>\n </ng-container>\n\n</div>","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 } 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})\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 } 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})\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 <span *ngIf=\"uploadState != 'done'\">Upload File</span>\n <span *ngIf=\"uploadState == 'done'\">Uploaded File</span>\n </div>\n <div class=\"drop-area\"\n [class.dragover]=\"isFileDragover\"\n *ngIf=\"uploadState != 'done'\">\n\n <div class=\"box\"\n *ngIf=\"!isFileSelected\">\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\n <form><input type=\"file\"\n [accept]=\"fileTypes\"\n #fileIp\n (change)=\"onFileInput($event)\" /></form>\n </div>\n </div>\n\n <ng-container *ngIf=\"isFileSelected\">\n <!-- File selected state -->\n <ng-container *ngIf=\"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 </ng-container>\n\n <!-- Uploading state -->\n <ng-container *ngIf=\"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 </ng-container>\n </ng-container>\n </div>\n\n\n <!-- Uploading done -->\n <div *ngIf=\"uploadState == 'done'\"\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\n </div>\n </div>\n\n <div class=\"btn-upload-wrapper\">\n\n <button *ngIf=\"uploadState == ''\"\n (click)=\"uploadNow()\"\n class=\"button-flat full-width\"\n [disabled]=\"!isFileSelected\">\n Upload Now\n </button>\n\n <button *ngIf=\"uploadState == 'uploading'\"\n (click)=\"cancelUploading()\"\n class=\"button-alert full-width\"\n [disabled]=\"!isFileSelected\">\n Cancel\n </button>\n </div>\n\n</div>\n","import { Component, Input } 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})\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 <div *ngIf=\"type == 'bar'\" 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\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 <div *ngIf=\"label === 'top-floating'\" 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 <div *ngIf=\"label === 'bottom-floating'\" 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 </div>\n </div>\n\n <!-- Right label -->\n <span *ngIf=\"label === 'right'\" class=\"bar-label\">{{value}}%</span>\n\n <!-- Bottom label -->\n <span *ngIf=\"label === 'bottom'\" class=\"bar-label\">{{value}}%</span>\n\n <!-- Text description (legacy support) -->\n <div *ngIf=\"text && (label === 'none')\" class=\"progress-text\">{{text}}</div>\n </div>\n\n <!-- Circle progress -->\n <div *ngIf=\"type == 'circle'\" class=\"circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': sizeConfig.containerSize\n }\">\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\n <div class=\"circle-label\">\n <span *ngIf=\"text\" class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\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 <!-- Half-Circle progress -->\n <div *ngIf=\"type == 'half-circle'\" class=\"half-circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': halfCircleContainerHeight\n }\">\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\n <div class=\"half-circle-label\">\n <span *ngIf=\"text\" class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\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</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 } 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})\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 <zen-icon src=\"https://storage.googleapis.com/ng-zenduit/icon/search.svg\"\n class=\"search-icon\"\n *ngIf=\"displaySearchIcon\"\n [style]=\"{'background-color': customStyles.color}\"></zen-icon>\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 <div class=\"search-list\"\n [class.boundaries]=\"!materialStyle\"\n *ngIf=\"address\"\n appClickOutside\n (clickOutside)=\"addressList = [];\">\n <ul class=\"search-item-list\"\n *ngIf=\"addressList.length || isSearching\">\n <li *ngIf=\"isSearching\">Searching</li>\n <div *ngIf=\"!isSearching\">\n <li *ngFor=\"let address of addressList\"\n (click)=\"selectAddress(address)\">\n {{address.name}}\n </li>\n </div>\n </ul>\n </div>\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 } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n\tselector: 'zen-html5-video-player',\n\ttemplateUrl: './html5-video-player.component.html',\n\tstyleUrls: ['./html5-video-player.component.scss']\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 } 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})\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 } 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})\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 } 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})\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 } 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})\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 } 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})\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","<zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'webrtc'\"></zen-web-rtc-player>\n\n<zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n *ngIf=\"playerType == 'snapshot'\"></zen-snapshot-player>\n\n<zen-flv-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'flv'\"></zen-flv-player>\n\n<zen-hls-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'hls'\"></zen-hls-player>\n\n<zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n *ngIf=\"playerType == 'html5'\"></zen-html5-video-player>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\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})\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 <div class=\"zen-tp__dropdown\"\n #pickerPopup\n *ngIf=\"isPickerVisible\"\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\n <!-- Time fields -->\n <div class=\"zen-tp__fields\">\n <!-- Hours -->\n <div class=\"zen-tp__field\" *ngIf=\"showHours\">\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 <span class=\"zen-tp__colon\" *ngIf=\"showHours\">:</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\n <!-- Seconds (duration mode or when showSeconds) -->\n <ng-container *ngIf=\"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 </ng-container>\n\n <!-- AM/PM Toggle (Clock mode only) -->\n <div class=\"zen-tp__period\" *ngIf=\"mode === 'clock'\">\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 </div>\n\n <!-- Divider -->\n <div class=\"zen-tp__divider\"></div>\n\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</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\n\nexport interface CommentAttachment {\n file: File;\n name: string;\n size: string;\n progress: number;\n complete: boolean;\n}\n\nexport interface EmojiCategory {\n key: string;\n label: string;\n icon: string;\n emojis: string[];\n}\n\nconst EMOJI_CATEGORIES: EmojiCategory[] = [\n {\n key: 'smileys', label: 'Smileys', icon: '😀',\n emojis: ['😀','😄','😁','😆','😅','🤣','😂','🙂','😉','😊','🥰','😍','😘','😋','😛','😜','🤔','😏','🙄','😬','😴','🤯']\n },\n {\n key: 'gestures', label: 'Gestures', icon: '👋',\n emojis: ['👋','✋','👌','✌','🤞','🤙','👍','👎','👏','🙌','🤝','🙏']\n },\n {\n key: 'hearts', label: 'Hearts', icon: '❤️',\n emojis: ['❤️','🧡','💛','💚','💙','💜','🖤','💔','💕','💖']\n },\n {\n key: 'objects', label: 'Objects', icon: '⭐',\n emojis: ['⭐','🔥','✨','🎉','🏆','💯','✅','❌','⚡','💡','🔔','🔗']\n },\n];\n\n@Component({\n selector: 'zen-comment-textarea',\n templateUrl: './zendu-comment-textarea.component.html',\n styleUrls: ['./zendu-comment-textarea.component.scss'],\n})\nexport class ZenduCommentTextareaComponent implements OnInit {\n\n @Input() value = '';\n @Output() valueChange = new EventEmitter<string>();\n\n @Input() label = '';\n\n @Input() placeholder = 'Enter a comment...';\n\n @Input() rows = 4;\n\n @Input() fileTypes = '*/*';\n\n @Input() loading = false;\n\n @Output() addComment = new EventEmitter<{ text: string; files: File[] }>();\n\n @Output() filesChanged = new EventEmitter<File[]>();\n\n @Output() save = new EventEmitter<{ text: string; files: File[] }>();\n\n @Output() cancel = new EventEmitter<void>();\n\n editing = false;\n emojiPickerOpen = false;\n\n ngOnInit() {\n if (this.value?.length > 0) {\n this.editing = true;\n }\n }\n emojiCategories = EMOJI_CATEGORIES;\n activeEmojiCategory = EMOJI_CATEGORIES[0].key;\n attachments: CommentAttachment[] = [];\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (!this.emojiPickerOpen) return;\n const target = event.target as HTMLElement;\n if (!target.closest('.zen-emoji-picker') && !target.closest('.zen-comment-textarea__icon-btn[title=\"Emoji\"]')) {\n this.emojiPickerOpen = false;\n }\n }\n\n onInput(value: string) {\n this.value = value;\n this.valueChange.emit(value);\n this.editing = value.length > 0 || this.attachments.length > 0;\n }\n\n onKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.onAddComment();\n }\n }\n\n onAddComment() {\n if (this.loading) return;\n if (this.value.trim() || this.attachments.length) {\n this.addComment.emit({ text: this.value, files: this.attachments.map(a => a.file) });\n }\n }\n\n onSave() {\n if (this.loading) return;\n if (this.value.trim() || this.attachments.length) {\n this.save.emit({ text: this.value, files: this.attachments.map(a => a.file) });\n }\n }\n\n public reset() {\n this.value = '';\n this.valueChange.emit(this.value);\n this.attachments = [];\n this.filesChanged.emit([]);\n this.editing = false;\n }\n\n onCancel() {\n this.value = '';\n this.valueChange.emit(this.value);\n this.attachments = [];\n this.filesChanged.emit([]);\n this.editing = false;\n this.cancel.emit();\n }\n\n toggleEmojiPicker() {\n this.emojiPickerOpen = !this.emojiPickerOpen;\n }\n\n selectEmoji(emoji: string) {\n this.value += emoji;\n this.valueChange.emit(this.value);\n this.editing = true;\n this.emojiPickerOpen = false;\n }\n\n setEmojiCategory(key: string) {\n this.activeEmojiCategory = key;\n }\n\n get activeEmojis(): string[] {\n const cat = this.emojiCategories.find(c => c.key === this.activeEmojiCategory);\n return cat ? cat.emojis : [];\n }\n\n onFileInput(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files?.length) return;\n\n for (let i = 0; i < input.files.length; i++) {\n const file = input.files[i];\n this.attachments.push({\n file,\n name: file.name,\n size: this.formatFileSize(file.size),\n progress: 100,\n complete: true,\n });\n }\n\n this.editing = true;\n this.filesChanged.emit(this.attachments.map(a => a.file));\n input.value = '';\n }\n\n removeAttachment(index: number) {\n this.attachments.splice(index, 1);\n this.filesChanged.emit(this.attachments.map(a => a.file));\n if (!this.attachments.length && !this.value) {\n this.editing = false;\n }\n }\n\n getFileIcon(name: string): 'document' | 'video' | 'misc' {\n const ext = name.split('.').pop()?.toLowerCase() || '';\n if (['pdf', 'doc', 'docx', 'txt', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'].includes(ext)) return 'document';\n if (['mp4', 'mov', 'avi', 'mkv', 'webm', 'flv'].includes(ext)) return 'video';\n return 'misc';\n }\n\n private formatFileSize(bytes: number): string {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(0) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n }\n}\n","<div class=\"zen-comment-textarea\" [class.zen-comment-textarea--loading]=\"loading\">\n <!-- Label -->\n <label *ngIf=\"label\" class=\"zen-comment-textarea__label\">{{ label }}</label>\n\n <!-- Main box (top: attachments + textarea, bottom: toolbar) -->\n <div class=\"zen-comment-textarea__input-wrapper\">\n <!-- Attachments inside the textarea area -->\n <div class=\"zen-comment-textarea__attachments\" *ngIf=\"attachments.length\">\n <div class=\"zen-attachment\"\n *ngFor=\"let att of attachments; let i = index\">\n <div class=\"zen-attachment__content\">\n <div class=\"zen-attachment__icon\" [ngSwitch]=\"getFileIcon(att.name)\">\n <svg *ngSwitchCase=\"'document'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"14,2 14,8 20,8\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngSwitchCase=\"'video'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngSwitchCase=\"'misc'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"16,16 12,12 8,16\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"zen-attachment__info\">\n <div class=\"zen-attachment__name\">{{ att.name }}</div>\n <div class=\"zen-attachment__size\">{{ att.size }}</div>\n </div>\n </div>\n <button type=\"button\" class=\"zen-attachment__remove\" (click)=\"removeAttachment(i)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"3,6 5,6 21,6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Textarea -->\n <textarea class=\"zen-comment-textarea__input\"\n [rows]=\"rows\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"loading\"\n (input)=\"onInput($any($event.target).value)\"\n (keydown)=\"onKeydown($event)\"></textarea>\n </div>\n\n <!-- Toolbar (bottom part with rounded bottom corners) -->\n <div class=\"zen-comment-textarea__toolbar\">\n <div class=\"zen-comment-textarea__toolbar-divider\"></div>\n\n <div class=\"zen-comment-textarea__toolbar-content\">\n <!-- Icon buttons -->\n <div class=\"zen-comment-textarea__toolbar-icons\">\n <div class=\"zen-comment-textarea__emoji-wrapper\">\n <button type=\"button\"\n class=\"zen-comment-textarea__icon-btn\"\n [class.zen-comment-textarea__icon-btn--active]=\"emojiPickerOpen\"\n title=\"Emoji\"\n (click)=\"toggleEmojiPicker()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8 14C8 14 9.5 16 12 16C14.5 16 16 14 16 14\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Emoji picker -->\n <div class=\"zen-emoji-picker\" *ngIf=\"emojiPickerOpen\">\n <div class=\"zen-emoji-picker__grid\">\n <button type=\"button\"\n class=\"zen-emoji-picker__emoji\"\n *ngFor=\"let emoji of activeEmojis\"\n (click)=\"selectEmoji(emoji)\">\n {{ emoji }}\n </button>\n </div>\n <div class=\"zen-emoji-picker__categories\">\n <button type=\"button\"\n class=\"zen-emoji-picker__category\"\n [class.zen-emoji-picker__category--active]=\"cat.key === activeEmojiCategory\"\n *ngFor=\"let cat of emojiCategories\"\n (click)=\"setEmojiCategory(cat.key)\">\n {{ cat.icon }}\n </button>\n </div>\n </div>\n </div>\n\n <button type=\"button\"\n class=\"zen-comment-textarea__icon-btn\"\n title=\"Attach file\"\n (click)=\"fileInput.click()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.44 11.05L12.25 20.24C11.1242 21.3658 9.59723 21.9983 8.00505 21.9983C6.41286 21.9983 4.88589 21.3658 3.76005 20.24C2.6342 19.1142 2.00171 17.5872 2.00171 15.995C2.00171 14.4029 2.6342 12.8759 3.76005 11.75L12.95 2.56C13.7006 1.80944 14.7186 1.3877 15.78 1.3877C16.8415 1.3877 17.8595 1.80944 18.61 2.56C19.3606 3.31057 19.7823 4.32863 19.7823 5.39C19.7823 6.45138 19.3606 7.46944 18.61 8.22L9.41005 17.41C9.03476 17.7853 8.52573 17.9961 7.99505 17.9961C7.46436 17.9961 6.95533 17.7853 6.58005 17.41C6.20476 17.0347 5.99389 16.5257 5.99389 15.995C5.99389 15.4644 6.20476 14.9553 6.58005 14.58L15.07 6.1\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <input type=\"file\" #fileInput [accept]=\"fileTypes\" multiple hidden (change)=\"onFileInput($event)\" />\n </div>\n\n <!-- Right side actions -->\n <div class=\"zen-comment-textarea__actions\" *ngIf=\"!editing\">\n <span class=\"zen-comment-textarea__hint\">Press enter</span>\n <svg class=\"zen-comment-textarea__return-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.33337 12.5L6.66671 15.8333M3.33337 12.5L6.66671 9.16667M3.33337 12.5H13.3334C14.2175 12.5 15.0653 12.1488 15.6904 11.5237C16.3155 10.8986 16.6667 10.0507 16.6667 9.16667V4.16667\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"zen-comment-textarea__hint\">to</span>\n <button type=\"button\" class=\"zen-comment-textarea__add-btn\" [disabled]=\"loading\" (click)=\"onAddComment()\">\n <span class=\"zen-comment-textarea__spinner\" *ngIf=\"loading\"></span>\n {{ loading ? 'Sending...' : 'Add Comment' }}\n </button>\n </div>\n\n <div class=\"zen-comment-textarea__actions\" *ngIf=\"editing\">\n <button type=\"button\" class=\"zen-comment-textarea__cancel-btn\" [disabled]=\"loading\" (click)=\"onCancel()\">\n Cancel\n </button>\n <button type=\"button\" class=\"zen-comment-textarea__save-btn\" [disabled]=\"loading\" (click)=\"onSave()\">\n <span class=\"zen-comment-textarea__spinner\" *ngIf=\"loading\"></span>\n {{ loading ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nexport interface CommentData {\n id: string | number;\n authorName: string;\n authorAvatar?: string;\n timestamp: string;\n text: string;\n online?: boolean;\n editable?: boolean;\n deletable?: boolean;\n attachments?: CommentAttachmentData[];\n}\n\nexport interface CommentAttachmentData {\n name: string;\n size: string;\n url?: string;\n}\n\n@Component({\n selector: 'zen-comment-item',\n templateUrl: './zendu-comment-item.component.html',\n styleUrls: ['./zendu-comment-item.component.scss'],\n})\nexport class ZenduCommentItemComponent implements OnChanges {\n\n @Input() comment: CommentData;\n\n @Input() showConnector = true;\n\n @Input() editable = true;\n\n @Input() deletable = true;\n\n @Input() loading = false;\n\n @Output() edit = new EventEmitter<CommentData>();\n\n @Output() delete = new EventEmitter<CommentData>();\n\n @Output() saveEdit = new EventEmitter<{ comment: CommentData; text: string }>();\n\n @Output() cancelEdit = new EventEmitter<CommentData>();\n\n editing = false;\n editValue = '';\n private wasLoading = false;\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['loading'] && this.wasLoading && !this.loading && this.editing) {\n this.editing = false;\n this.editValue = '';\n }\n this.wasLoading = this.loading;\n }\n\n get isEditable(): boolean {\n return this.editable && (this.comment?.editable !== false);\n }\n\n get isDeletable(): boolean {\n return this.deletable && (this.comment?.deletable !== false);\n }\n\n get initials(): string {\n if (!this.comment?.authorName) return '';\n return this.comment.authorName\n .split(' ')\n .map(n => n[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n }\n\n onEdit() {\n if (this.loading) return;\n this.editing = true;\n this.editValue = this.comment.text;\n this.edit.emit(this.comment);\n }\n\n onDelete() {\n if (this.loading) return;\n this.delete.emit(this.comment);\n }\n\n onSaveEdit(event: { text: string; files: File[] }) {\n this.saveEdit.emit({ comment: this.comment, text: event.text });\n }\n\n onCancelEdit() {\n this.editing = false;\n this.editValue = '';\n this.cancelEdit.emit(this.comment);\n }\n\n getFileIcon(name: string): 'document' | 'video' | 'misc' {\n const ext = name.split('.').pop()?.toLowerCase() || '';\n if (['pdf', 'doc', 'docx', 'txt', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'].includes(ext)) return 'document';\n if (['mp4', 'mov', 'avi', 'mkv', 'webm', 'flv'].includes(ext)) return 'video';\n return 'misc';\n }\n}\n","<div class=\"zen-comment-item\" [class.zen-comment-item--loading]=\"loading\">\n\n <div class=\"zen-comment-item__left\">\n <!-- Avatar -->\n <div class=\"zen-comment-item__avatar\">\n <img *ngIf=\"comment.authorAvatar\"\n [src]=\"comment.authorAvatar\"\n [alt]=\"comment.authorName\"\n class=\"zen-comment-item__avatar-img\" />\n <span *ngIf=\"!comment.authorAvatar\" class=\"zen-comment-item__avatar-initials\">\n {{ initials }}\n </span>\n <span *ngIf=\"comment.online\" class=\"zen-comment-item__online-dot\"></span>\n </div>\n <!-- Connector line -->\n <div *ngIf=\"showConnector\" class=\"zen-comment-item__connector\"></div>\n </div>\n\n <div class=\"zen-comment-item__body\">\n <!-- Header: name + time -->\n <div class=\"zen-comment-item__header\">\n <span class=\"zen-comment-item__author\">{{ comment.authorName }}</span>\n <span class=\"zen-comment-item__time\">{{ comment.timestamp }}</span>\n </div>\n\n <!-- Default view -->\n <ng-container *ngIf=\"!editing\">\n <p class=\"zen-comment-item__text\">{{ comment.text }}</p>\n\n <!-- Attachments -->\n <div class=\"zen-comment-item__attachment\"\n *ngFor=\"let att of comment.attachments\">\n <div class=\"zen-comment-item__attachment-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"14,2 14,8 20,8\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"zen-comment-item__attachment-info\">\n <div class=\"zen-comment-item__attachment-name\">{{ att.name }}</div>\n <div class=\"zen-comment-item__attachment-size\">{{ att.size }}</div>\n </div>\n </div>\n </ng-container>\n\n <!-- Edit view -->\n <ng-container *ngIf=\"editing\">\n <zen-comment-textarea\n [(value)]=\"editValue\"\n [loading]=\"loading\"\n (save)=\"onSaveEdit($event)\"\n (cancel)=\"onCancelEdit()\">\n </zen-comment-textarea>\n </ng-container>\n </div>\n\n <!-- Actions (always visible, individually controllable) -->\n <div class=\"zen-comment-item__actions\" *ngIf=\"(isEditable || isDeletable) && !editing\">\n <button *ngIf=\"isDeletable\"\n type=\"button\"\n class=\"zen-comment-item__action-btn\"\n title=\"Delete\"\n [disabled]=\"loading\"\n (click)=\"onDelete()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"3,6 5,6 21,6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button *ngIf=\"isEditable\"\n type=\"button\"\n class=\"zen-comment-item__action-btn\"\n title=\"Edit\"\n [disabled]=\"loading\"\n (click)=\"onEdit()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17 3C17.2626 2.73735 17.5744 2.52901 17.9176 2.38687C18.2608 2.24473 18.6286 2.17157 19 2.17157C19.3714 2.17157 19.7392 2.24473 20.0824 2.38687C20.4256 2.52901 20.7374 2.73735 21 3C21.2626 3.26264 21.471 3.57444 21.6131 3.9176C21.7553 4.26077 21.8284 4.62856 21.8284 5C21.8284 5.37143 21.7553 5.73923 21.6131 6.08239C21.471 6.42555 21.2626 6.73735 21 7L7.5 20.5L2 22L3.5 16.5L17 3Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommentData } from '../comment-item/zendu-comment-item.component';\n\n@Component({\n selector: 'zen-comment-list',\n templateUrl: './zendu-comment-list.component.html',\n styleUrls: ['./zendu-comment-list.component.scss'],\n})\nexport class ZenduCommentListComponent {\n\n @Input() comments: CommentData[] = [];\n\n @Input() collapsible = true;\n\n @Input() expanded = false;\n\n @Input() editable = true;\n\n @Input() deletable = true;\n\n @Input() loadingCommentId: string | number | null = null;\n\n @Output() expandedChange = new EventEmitter<boolean>();\n\n @Output() editComment = new EventEmitter<CommentData>();\n\n @Output() deleteComment = new EventEmitter<CommentData>();\n\n @Output() saveEditComment = new EventEmitter<{ comment: CommentData; text: string }>();\n\n @Output() cancelEditComment = new EventEmitter<CommentData>();\n\n toggle() {\n this.expanded = !this.expanded;\n this.expandedChange.emit(this.expanded);\n }\n}\n","<div class=\"zen-comment-list\">\n <!-- Toggle button (only when collapsible) -->\n <button *ngIf=\"collapsible\" type=\"button\" class=\"zen-comment-list__toggle\" (click)=\"toggle()\">\n <span class=\"zen-comment-list__toggle-text\">\n {{ expanded ? 'Hide' : 'Show' }} Comments ({{ comments.length }})\n </span>\n <svg class=\"zen-comment-list__toggle-icon\"\n [class.zen-comment-list__toggle-icon--up]=\"expanded\"\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Comments list -->\n <div class=\"zen-comment-list__items\" *ngIf=\"!collapsible || expanded\">\n <zen-comment-item\n *ngFor=\"let c of comments; let last = last\"\n [comment]=\"c\"\n [showConnector]=\"!last\"\n [editable]=\"editable\"\n [deletable]=\"deletable\"\n [loading]=\"loadingCommentId === c.id\"\n (edit)=\"editComment.emit($event)\"\n (delete)=\"deleteComment.emit($event)\"\n (saveEdit)=\"saveEditComment.emit($event)\"\n (cancelEdit)=\"cancelEditComment.emit($event)\">\n </zen-comment-item>\n </div>\n</div>\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from '../datepicker/date-picker-day';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DatePickerDropdownType, DatePickerMarker, DatePickerPreset, DateRangeValue } 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})\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\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 label: 'This year',\n getRange: () => ({\n start: moment().startOf('year').toDate(),\n end: moment().endOf('year').toDate()\n })\n },\n {\n label: 'Last year',\n getRange: () => ({\n start: moment().subtract(1, 'year').startOf('year').toDate(),\n end: moment().subtract(1, 'year').endOf('year').toDate()\n })\n },\n {\n label: 'All time',\n getRange: () => ({\n start: new Date(2000, 0, 1),\n end: moment().endOf('day').toDate()\n })\n }\n ];\n\n constructor(\n private _element: ElementRef,\n private _translate: TranslateService\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 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 = 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\n if (!this._selectedStart || (this._selectedStart && this._selectedEnd)) {\n // Start new selection\n this._selectedStart = new Date(day.date);\n this._selectedEnd = null;\n this._activePreset = null;\n } else {\n // Complete the range\n const newDate = new Date(day.date);\n if (moment(newDate).isBefore(this._selectedStart)) {\n this._selectedEnd = new Date(this._selectedStart);\n this._selectedStart = newDate;\n } else {\n this._selectedEnd = newDate;\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 }\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 enMonth = moment(slot).format('MMM');\n const translatedMonth = this._translate.instant(enMonth);\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 <div class=\"dropdown-menu\" *ngIf=\"isOpen\" [class.mobile]=\"mobile\" [ngStyle]=\"dropdownStyle\">\n <!-- RANGE DESKTOP: presets sidebar + dual calendar -->\n <ng-container *ngIf=\"type === 'range' && !mobile\">\n <!-- Presets sidebar -->\n <div class=\"presets-sidebar\">\n <div class=\"preset-item\"\n *ngFor=\"let preset of activePresets\"\n [class.active]=\"_activePreset === preset.label\"\n (click)=\"selectPreset(preset)\">\n {{ preset.label | translate }}\n </div>\n </div>\n\n <div class=\"sidebar-divider\"></div>\n\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\n <div class=\"calendar-divider\"></div>\n\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\n <!-- Time Picker -->\n <ng-container *ngIf=\"timePicker\">\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n </ng-container>\n\n <div class=\"bottom-divider\"></div>\n\n <!-- Bottom panel: inputs (or legend) + actions -->\n <div class=\"bottom-panel\">\n <div class=\"marker-legend\" *ngIf=\"legendMarkers.length; else rangeInputs\">\n <div class=\"legend-item\" *ngFor=\"let m of legendMarkers\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n </div>\n <ng-template #rangeInputs>\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 </ng-template>\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 </ng-container>\n\n <!-- RANGE MOBILE: single calendar with dual inputs on top -->\n <ng-container *ngIf=\"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\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\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n\n <!-- Time Picker -->\n <ng-container *ngIf=\"timePicker\">\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n </ng-container>\n\n <div class=\"marker-legend standalone\" *ngIf=\"legendMarkers.length\">\n <div class=\"legend-item\" *ngFor=\"let m of legendMarkers\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n </div>\n\n <div class=\"bottom-divider\"></div>\n\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 </ng-container>\n\n <!-- SINGLE DATE: single calendar + input + today button -->\n <ng-container *ngIf=\"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\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\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n\n <!-- Time Picker -->\n <ng-container *ngIf=\"timePicker\">\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection\"></ng-container>\n </ng-container>\n\n <div class=\"marker-legend standalone single\" *ngIf=\"legendMarkers.length\">\n <div class=\"legend-item\" *ngFor=\"let m of legendMarkers\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n </div>\n\n <ng-container *ngIf=\"!autoApply\">\n <div class=\"bottom-divider\"></div>\n\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 </ng-container>\n </div>\n </ng-container>\n </div>\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 <div class=\"cell header-cell\" *ngFor=\"let wd of weekDays\">{{ wd | translate }}</div>\n </div>\n <!-- Day rows -->\n <div class=\"day-row\" *ngFor=\"let row of dayRows\">\n <div class=\"cell day-cell\"\n *ngFor=\"let day of row.days\"\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 <div class=\"marker-dots\" *ngIf=\"day.markerColors?.length\">\n <span class=\"marker-dot\"\n *ngFor=\"let c of day.markerColors\"\n [style.background]=\"c || null\"></span>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild\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})\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 <div class=\"file-queue\" *ngIf=\"files?.length\">\n\n <!-- Progress Bar Type -->\n <ng-container *ngIf=\"progressType === 'bar'\">\n <div class=\"file-item bar-type\"\n *ngFor=\"let item of files\"\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 <button class=\"file-action\"\n *ngIf=\"item.status === 'uploading'\"\n (click)=\"removeFile(item)\">\n <zen-icon class=\"trash-icon\"\n src=\"assets/ng-zenduit/icons/trash.svg\">\n </zen-icon>\n </button>\n <zen-icon class=\"check-icon\"\n *ngIf=\"item.status === 'complete'\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n </div>\n </ng-container>\n\n <!-- Progress Fill Type -->\n <ng-container *ngIf=\"progressType === 'fill'\">\n <div class=\"file-item fill-type\"\n *ngFor=\"let item of files\">\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 <zen-spinner *ngIf=\"item.status === 'uploading'\"\n class=\"file-spinner\"\n size=\"small\">\n </zen-spinner>\n <zen-icon class=\"check-icon\"\n *ngIf=\"item.status === 'complete'\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n </div>\n </ng-container>\n </div>\n</div>\n","import { Component, Input } 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})\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 <img *ngIf=\"showImage\" [src]=\"src\" class=\"zendu-avatar__img\" alt=\"\" />\n\n <!-- Text initials -->\n <span *ngIf=\"showText\" class=\"zendu-avatar__text\">{{ text }}</span>\n\n <!-- Placeholder user icon -->\n <div *ngIf=\"showPlaceholder\" 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 <!-- Online indicator -->\n <div *ngIf=\"statusIcon === 'online'\" class=\"zendu-avatar__online-dot\"></div>\n\n <!-- Company icon -->\n <div *ngIf=\"statusIcon === 'company'\" class=\"zendu-avatar__company-icon\">\n <img *ngIf=\"companyImgSrc\" [src]=\"companyImgSrc\" alt=\"\" />\n </div>\n</div>\n","import { Component, Input } 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})\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 <div *ngFor=\"let img of images\" class=\"zendu-avatar-group__wrap\">\n <div class=\"zendu-avatar-group__avatar\">\n <img [src]=\"img\" alt=\"\" />\n </div>\n </div>\n\n <div *ngIf=\"moreCount > 0\" class=\"zendu-avatar-group__more\">\n <span>+{{ moreCount }}</span>\n </div>\n </div>\n\n <div *ngIf=\"showAddButton\" 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</div>\n","import { Component, Input } 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})\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 <span *ngIf=\"subtitle\" class=\"zendu-avatar-label-group__subtitle\">{{ subtitle }}</span>\n </div>\n</div>\n","import { Component, Input } 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})\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 <img *ngIf=\"showImage\" [src]=\"src\" class=\"zendu-avatar-profile-photo__img\" alt=\"\" />\n\n <!-- Placeholder icon -->\n <div *ngIf=\"showPlaceholder\" 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 <!-- Text initials -->\n <span *ngIf=\"showText\" class=\"zendu-avatar-profile-photo__text\">{{ text }}</span>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnDestroy } 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})\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 <ng-container *ngIf=\"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 </ng-container>\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 <ng-container *ngIf=\"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 </ng-container>\n\n <!-- Bottom plain labels -->\n <ng-container *ngIf=\"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 </ng-container>\n</div>\n","import { Component, Input, Output, EventEmitter } 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})\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<ng-container *ngIf=\"group; else standardBadge\">\n <div [class]=\"groupClasses\" (click)=\"onClick($event)\">\n\n <!-- Leading: inner badge first -->\n <ng-container *ngIf=\"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 <zen-icon *ngIf=\"showIcon\" class=\"zen-badge-group__icon\" name=\"arrow-right\"></zen-icon>\n </span>\n </ng-container>\n\n <!-- Trailing: message first, badge with optional icon last -->\n <ng-container *ngIf=\"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 <zen-icon *ngIf=\"showIcon\" class=\"zen-badge-group__badge-icon\" name=\"arrow-right\"></zen-icon>\n </span>\n </ng-container>\n\n </div>\n</ng-container>\n\n<!-- Standard badge mode -->\n<ng-template #standardBadge>\n <div [class]=\"hostClasses\" (click)=\"onClick($event)\">\n <span *ngIf=\"dot\" class=\"zen-badge__dot\"></span>\n\n <img *ngIf=\"imgSrc\" class=\"zen-badge__img\" [src]=\"imgSrc\" alt=\"\">\n\n <zen-icon *ngIf=\"hasIcon && !iconOnly && iconDirection === 'left'\" class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n\n <span *ngIf=\"!iconOnly\" class=\"zen-badge__text\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </span>\n\n <zen-icon *ngIf=\"iconOnly && hasIcon\" class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n\n <zen-icon *ngIf=\"hasIcon && !iconOnly && iconDirection === 'right'\" class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n\n <button *ngIf=\"removable\" 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 </div>\n</ng-template>\n\n<ng-template #contentTpl><ng-content></ng-content></ng-template>\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} 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})\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' = '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 * 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 <label *ngIf=\"showLabel\" \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 <span *ngIf=\"required\" class=\"required-indicator\">*</span>\n </label>\n \n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n \n <!-- Leading icon -->\n <i *ngIf=\"leadingIcon && variant === 'default'\" \n class=\"material-icons zen-input-leading-icon\"\n (click)=\"onLeadingIconClick($event)\">\n {{ leadingIcon }}\n </i>\n \n <!-- Leading dropdown -->\n <div *ngIf=\"variant === 'leading-dropdown'\" \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 \n <div class=\"zen-dropdown-menu\" \n *ngIf=\"leadingDropdownOpen\"\n [ngClass]=\"{'open': leadingDropdownOpen}\">\n <button *ngFor=\"let option of leadingDropdownOptions\"\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === leadingDropdownValue}\"\n (click)=\"onLeadingDropdownChange(option.value); $event.stopPropagation()\">\n <i *ngIf=\"option.icon\" class=\"material-icons option-icon\">{{ option.icon }}</i>\n {{ option.label | translate }}\n </button>\n </div>\n </div>\n \n <!-- Leading text -->\n <span *ngIf=\"variant === 'leading-text'\" \n class=\"zen-input-leading-text text text-md text-weight-regular\">\n {{ leadingText }}\n </span>\n \n <!-- Payment card icon -->\n <div *ngIf=\"variant === 'payment'\" \n class=\"zen-payment-card-icon\">\n <i class=\"material-icons card-icon\">payment</i>\n </div>\n \n <!-- Input content based on type -->\n <ng-container *ngIf=\"type === 'tel'; else defaultInputTemplate\">\n <ng-container *ngTemplateOutlet=\"phoneInputTemplate\"></ng-container>\n </ng-container>\n \n <!-- Default input template -->\n <ng-template #defaultInputTemplate>\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 </ng-template>\n \n <!-- Trailing elements container -->\n <div class=\"zen-input-trailing-container\">\n <!-- Character counter -->\n <span *ngIf=\"showCharacterCount && !helpIcon && variant === 'default'\" \n class=\"zen-character-count text text-sm text-weight-regular\">\n {{ characterCount }}\n </span>\n \n <!-- Help icon -->\n <button *ngIf=\"helpIcon && variant !== 'trailing-dropdown'\" \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 \n <!-- Help tooltip -->\n <div class=\"zen-help-tooltip\" \n *ngIf=\"showHelpTooltip\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"tooltip-content\">\n {{ helpTooltip | translate }}\n </div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n </button>\n \n <!-- Trailing dropdown -->\n <div *ngIf=\"variant === 'trailing-dropdown'\" \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 \n <div class=\"zen-dropdown-menu dropdown-menu-right\" \n *ngIf=\"trailingDropdownOpen\"\n [ngClass]=\"{'open': trailingDropdownOpen}\">\n <button *ngFor=\"let option of trailingDropdownOptions\"\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === trailingDropdownValue}\"\n (click)=\"onTrailingDropdownChange(option.value); $event.stopPropagation()\">\n <i *ngIf=\"option.icon\" class=\"material-icons option-icon\">{{ option.icon }}</i>\n {{ option.label | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Hint text / Error message -->\n <div *ngIf=\"showHintText\" \n class=\"zen-input-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n <i *ngIf=\"destructive\" class=\"material-icons-outlined hint-icon\">error_outline</i>\n {{ displayHintText | translate }}\n </div>\n \n <!-- Phone Country Dropdown (for tel type) -->\n <div *ngIf=\"type === 'tel' && isPhoneDropdownExpanded\" \n class=\"zen-phone-dropdown-menu\">\n <div class=\"zen-phone-dropdown-list\">\n <!-- Countries List -->\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n *ngFor=\"let country of countryList\"\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</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<div *ngIf=\"leadingDropdownOpen || trailingDropdownOpen || isPhoneDropdownExpanded\" \n class=\"zen-dropdown-backdrop\" \n (click)=\"closeDropdowns(); hidePhoneDropdown()\"></div>","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, ViewChild } 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})\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 <div \n *ngIf=\"showListHeader\" \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 <!-- Icon Button Trigger -->\n <button \n *ngIf=\"showIconTrigger\"\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 <!-- Button Trigger -->\n <button \n *ngIf=\"showButton\"\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 <!-- Avatar Trigger -->\n <button \n *ngIf=\"showAvatar\"\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 <!-- DROPDOWN CONTENT SECTION -->\n <div class=\"zen-dropdown-menu__dropdown\" *ngIf=\"isOpen\" #dropdown \n [style.position]=\"'fixed'\" \n [style.opacity]=\"dropdownVisible ? 1 : 0\"\n [style.visibility]=\"dropdownVisible ? 'visible' : 'hidden'\">\n \n <!-- Header Section -->\n <div class=\"zen-dropdown-menu__header\" *ngIf=\"showHeader && headerUser\">\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 <div class=\"zen-dropdown-menu__divider\" *ngIf=\"showHeader && headerUser\"></div>\n\n <!-- Menu Items -->\n <div class=\"zen-dropdown-menu__content\">\n <ng-container *ngFor=\"let item of items\">\n <!-- Divider -->\n <div class=\"zen-dropdown-menu__divider\" *ngIf=\"item.divider\"></div>\n\n <!-- Menu Item -->\n <div \n class=\"zen-dropdown-menu__item\"\n *ngIf=\"!item.divider\"\n [class.zen-dropdown-menu__item--disabled]=\"item.disabled\"\n (click)=\"onItemClick(item, $event)\">\n \n <!-- Checkbox variant -->\n <zen-checkbox\n *ngIf=\"showCheckbox\"\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 <zen-icon\n *ngIf=\"showIcon && item.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\n <!-- Count number (shown at the end of the row) -->\n <span \n *ngIf=\"showCount && item.shortcut\"\n class=\"zen-dropdown-menu__count text text-xs text-weight-regular\">\n {{ item.shortcut }}\n </span>\n\n <!-- Shortcut -->\n <span \n *ngIf=\"showShortcut && item.shortcut && !showCount\"\n class=\"zen-dropdown-menu__shortcut text text-xs text-weight-regular\">\n {{ item.shortcut | translate }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\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})\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 <svg *ngIf=\"arrowPosition === 'top-center'\"\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 <!-- Arrow: left (for right tooltip) — points left toward element -->\n <svg *ngIf=\"arrowPosition === 'left'\"\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 <!-- Content -->\n <div class=\"zen-tooltip__content\">\n <p class=\"zen-tooltip__title\">{{ text }}</p>\n <p *ngIf=\"hasSupportingText\" class=\"zen-tooltip__supporting\">{{ supportingText }}</p>\n </div>\n\n <!-- Arrow: bottom (for top tooltip) — points down toward element -->\n <svg *ngIf=\"arrowPosition === 'bottom-center' || arrowPosition === 'bottom-left' || arrowPosition === 'bottom-right'\"\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 <!-- Arrow: right (for left tooltip) — points right toward element -->\n <svg *ngIf=\"arrowPosition === 'right'\"\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</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})\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 } 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})\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 } 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})\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 } 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})\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 <zen-icon *ngIf=\"icon\" class=\"zen-submodule-item__icon\"\n [name]=\"icon\" [customColor]=\"iconColor\"></zen-icon>\n <span class=\"zen-submodule-item__label\">{{ label }}</span>\n</button>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nexport type ZenSideNavItemType = 'collapsed' | 'expanded';\nexport type ZenSideNavItemState = 'default' | 'hover' | 'focused' | 'pressed';\n\nexport interface ZenSideNavSubItem {\n label: string;\n icon?: string;\n route?: string;\n tag?: unknown;\n}\n\n@Component({\n selector: 'zen-side-nav-item',\n templateUrl: './zen-side-nav-item.component.html',\n styleUrls: ['./zen-side-nav-item.component.scss']\n})\nexport class ZenSideNavItemComponent {\n\n @Input() type: ZenSideNavItemType = 'collapsed';\n @Input() state: ZenSideNavItemState = 'default';\n @Input() icon: string;\n @Input() label = '';\n @Input() hasSubmodule = false;\n @Input() subItems: ZenSideNavSubItem[] = [];\n @Input() expanded = false;\n\n @Output() activate = new EventEmitter<void>();\n @Output() subItemActivate = new EventEmitter<ZenSideNavSubItem>();\n @Output() expandedChange = new EventEmitter<boolean>();\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-side-nav-item',\n `zen-side-nav-item--${this.type}`,\n `zen-side-nav-item--${activeState}`,\n ];\n if (this.hasSubmodule) classes.push('zen-side-nav-item--has-submodule');\n if (this.expanded) classes.push('zen-side-nav-item--expanded');\n return classes.join(' ');\n }\n\n get iconColor(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n switch (activeState) {\n case 'focused':\n case 'pressed':\n return '#FFFFFF';\n case 'hover':\n return '#D0D5DD';\n default:\n return '#D0D5DD';\n }\n }\n\n get chevronIcon(): string {\n return this.expanded ? 'chevron-up' : 'chevron-down';\n }\n\n onContentClick(): void {\n this.activate.emit();\n }\n\n onChevronClick(event: MouseEvent): void {\n event.stopPropagation();\n this.expanded = !this.expanded;\n this.expandedChange.emit(this.expanded);\n }\n\n onSubItemClick(subItem: ZenSideNavSubItem, event: MouseEvent): void {\n event.stopPropagation();\n this.subItemActivate.emit(subItem);\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 (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n\n <!-- Main content row -->\n <div class=\"zen-side-nav-item__content\" (click)=\"onContentClick()\">\n <div class=\"zen-side-nav-item__icon-wrap\">\n <zen-icon *ngIf=\"icon\" class=\"zen-side-nav-item__icon\"\n [name]=\"icon\" [customColor]=\"iconColor\"></zen-icon>\n </div>\n\n <span class=\"zen-side-nav-item__label\">{{ label }}</span>\n\n <zen-icon *ngIf=\"hasSubmodule && type === 'expanded'\"\n class=\"zen-side-nav-item__chevron\"\n [name]=\"chevronIcon\"\n [customColor]=\"iconColor\"\n (click)=\"onChevronClick($event)\">\n </zen-icon>\n </div>\n\n <!-- Sub-items (expanded type with submodule) -->\n <div *ngIf=\"hasSubmodule && expanded && subItems.length && type === 'expanded'\"\n class=\"zen-side-nav-item__sub-items\">\n <div *ngFor=\"let sub of subItems\"\n class=\"zen-side-nav-item__sub-item\"\n (click)=\"onSubItemClick(sub, $event)\">\n {{ sub.label }}\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } 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})\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 <zen-eld-status *ngIf=\"type === 'driver' && eldStatus\"\n [status]=\"eldStatus\"\n class=\"zen-subpage-item__eld\"></zen-eld-status>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef } 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})\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","<div *ngIf=\"isOpen\" [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\n <div class=\"zen-module-popup__divider\"></div>\n\n <!-- Items -->\n <div class=\"zen-module-popup__items\">\n <div *ngFor=\"let item of items\"\n class=\"zen-module-popup__item\"\n (click)=\"onItemClick(item)\">\n {{ item.label }}\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ZenSideNavItemType, ZenSideNavItemState, ZenSideNavSubItem } from '../side-nav-item/zen-side-nav-item.component';\nimport { ZenModulePopupModule, ZenModulePopupItem } from '../module-popup/zen-module-popup.component';\n\nexport type ZenNavModule =\n | 'dashboard' | 'today' | 'fleet' | 'safety' | 'operations' | 'reports'\n | 'bus' | 'fuel' | 'more' | 'maintain' | 'vehicles'\n | 'drivers' | 'admin' | 'notification' | 'message'\n | 'manage' | 'help' | 'efficiency' | 'inventory';\n\ninterface ModuleConfig {\n icon: string;\n label: string;\n}\n\nconst MODULE_CONFIG: Record<ZenNavModule, ModuleConfig> = {\n dashboard: { icon: 'home', label: 'Dashboard' },\n today: { icon: 'sun', label: 'Today' },\n fleet: { icon: 'truck', label: 'Fleet' },\n safety: { icon: 'shield', label: 'Safety' },\n operations: { icon: 'briefcase', label: 'Operate' },\n reports: { icon: 'bar-chart-2', label: 'Reports' },\n bus: { icon: 'bus', label: 'Bus' },\n fuel: { icon: 'droplet', label: 'Fuel' },\n more: { icon: 'more-vertical', label: 'More' },\n maintain: { icon: 'tool', label: 'Maintain' },\n vehicles: { icon: 'truck', label: 'Vehicles' },\n drivers: { icon: 'users', label: 'Drivers' },\n admin: { icon: 'settings', label: 'Admin' },\n notification: { icon: 'bell', label: 'Alerts' },\n message: { icon: 'message-square', label: 'Chat' },\n manage: { icon: 'sliders', label: 'Manage' },\n help: { icon: 'help-circle', label: 'Help' },\n efficiency: { icon: 'trending-up', label: 'Efficiency' },\n inventory: { icon: 'package', label: 'Inventory' },\n};\n\nconst MODULE_TO_POPUP: Record<string, ZenModulePopupModule> = {\n fleet: 'fleet',\n safety: 'safety',\n operations: 'operations',\n reports: 'reports',\n bus: 'bus',\n fuel: 'fuel',\n more: 'more',\n maintain: 'maintain',\n efficiency: 'efficiency',\n inventory: 'inventory',\n};\n\n@Component({\n selector: 'zen-nav-item',\n templateUrl: './zen-nav-item.component.html',\n styleUrls: ['./zen-nav-item.component.scss']\n})\nexport class ZenNavItemComponent {\n\n @Input() module: ZenNavModule = 'dashboard';\n @Input() type: ZenSideNavItemType = 'collapsed';\n @Input() state: ZenSideNavItemState = 'default';\n @Input() hasSubmodule = false;\n @Input() subItems: ZenSideNavSubItem[] = [];\n @Input() expanded = false;\n\n @Output() activate = new EventEmitter<void>();\n @Output() subItemActivate = new EventEmitter<ZenSideNavSubItem>();\n @Output() expandedChange = new EventEmitter<boolean>();\n\n popupOpen = false;\n\n get moduleConfig(): ModuleConfig {\n return MODULE_CONFIG[this.module] || MODULE_CONFIG.dashboard;\n }\n\n get popupModule(): ZenModulePopupModule | null {\n return MODULE_TO_POPUP[this.module] || null;\n }\n\n get popupItems(): ZenModulePopupItem[] {\n return this.subItems.map(s => ({ label: s.label, route: s.route, tag: s.tag }));\n }\n\n get showPopupOnHover(): boolean {\n return this.type === 'collapsed' && this.hasSubmodule && this.subItems.length > 0;\n }\n\n onMouseEnter(): void {\n if (this.showPopupOnHover) {\n this.popupOpen = true;\n }\n }\n\n onMouseLeave(): void {\n this.popupOpen = false;\n }\n\n onPopupItemClick(item: ZenModulePopupItem): void {\n const subItem = this.subItems.find(s => s.label === item.label);\n if (subItem) {\n this.subItemActivate.emit(subItem);\n }\n this.popupOpen = false;\n }\n}\n","<div class=\"zen-nav-item\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <zen-side-nav-item\n [type]=\"type\"\n [state]=\"state\"\n [icon]=\"moduleConfig.icon\"\n [label]=\"moduleConfig.label\"\n [hasSubmodule]=\"hasSubmodule\"\n [subItems]=\"subItems\"\n [expanded]=\"expanded\"\n (activate)=\"activate.emit()\"\n (subItemActivate)=\"subItemActivate.emit($event)\"\n (expandedChange)=\"expandedChange.emit($event)\">\n </zen-side-nav-item>\n\n <!-- Collapsed hover popup -->\n <zen-module-popup *ngIf=\"popupOpen && popupModule\"\n class=\"zen-nav-item__popup\"\n [module]=\"popupModule\"\n [items]=\"popupItems\"\n [isOpen]=\"true\"\n (itemClick)=\"onPopupItemClick($event)\">\n </zen-module-popup>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef } from '@angular/core';\n\nexport type ZenTopNavItemMenu =\n | 'notification' | 'admin' | 'chat' | 'clarity'\n | 'message-blue' | 'call-blue' | 'message-white' | 'call-white' | 'profile';\nexport type ZenTopNavItemState = 'default' | 'hover' | 'focused';\n\nexport interface ZenTopNavProfileData {\n name: string;\n email: string;\n avatarSrc?: string;\n}\n\nexport interface ZenTopNavProfileMenuItem {\n label: string;\n icon?: string;\n route?: string;\n destructive?: boolean;\n}\n\nconst MENU_ICONS: Record<string, string> = {\n notification: 'bell',\n admin: 'settings',\n chat: 'message-square',\n 'message-blue': 'message-square',\n 'call-blue': 'phone',\n 'message-white': 'message-square',\n 'call-white': 'phone',\n};\n\nconst MENU_TOOLTIPS: Record<string, string> = {\n notification: 'Notifications',\n admin: 'Admin Settings',\n chat: 'Messages',\n 'message-blue': 'Message Driver',\n 'call-blue': 'Call Driver',\n 'message-white': 'Message Driver',\n 'call-white': 'Call Driver',\n};\n\n@Component({\n selector: 'zen-top-nav-item',\n templateUrl: './zen-top-nav-item.component.html',\n styleUrls: ['./zen-top-nav-item.component.scss']\n})\nexport class ZenTopNavItemComponent {\n\n @Input() menu: ZenTopNavItemMenu = 'notification';\n @Input() state: ZenTopNavItemState = 'default';\n @Input() tooltipText = '';\n @Input() badgeCount = 0;\n @Input() clarityLabel = 'Ask Clarity';\n\n // Profile-specific\n @Input() profileData: ZenTopNavProfileData;\n @Input() profileMenuItems: ZenTopNavProfileMenuItem[] = [];\n\n @Output() activate = new EventEmitter<void>();\n @Output() profileMenuItemClick = new EventEmitter<ZenTopNavProfileMenuItem>();\n\n _hovered = false;\n profileOpen = false;\n\n constructor(private _elementRef: ElementRef) {}\n\n get isProfile(): boolean { return this.menu === 'profile'; }\n get isClarity(): boolean { return this.menu === 'clarity'; }\n get isStandardIcon(): boolean { return !this.isProfile && !this.isClarity; }\n\n get showTooltip(): boolean {\n return this._hovered && !!MENU_TOOLTIPS[this.menu];\n }\n\n get iconName(): string {\n return MENU_ICONS[this.menu] || 'circle';\n }\n\n get resolvedTooltip(): string {\n return this.tooltipText || MENU_TOOLTIPS[this.menu] || '';\n }\n\n get hostClasses(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n const classes = [\n 'zen-top-nav-item',\n `zen-top-nav-item--${activeState}`,\n `zen-top-nav-item--${this.menu}`,\n ];\n if (this.profileOpen) classes.push('zen-top-nav-item--profile-open');\n return classes.join(' ');\n }\n\n get iconColor(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n if (activeState === 'focused') return '#FFFFFF';\n if (this.menu === 'message-blue' || this.menu === 'call-blue') return '#136AB6';\n if (this.menu === 'message-white' || this.menu === 'call-white') return '#667085';\n return '#98A2B3';\n }\n\n onClick(): void {\n if (this.isProfile) {\n this.profileOpen = !this.profileOpen;\n }\n this.activate.emit();\n }\n\n onProfileItemClick(item: ZenTopNavProfileMenuItem, event: MouseEvent): void {\n event.stopPropagation();\n this.profileMenuItemClick.emit(item);\n this.profileOpen = false;\n }\n\n onMouseEnter(): void {\n this._hovered = true;\n }\n\n onMouseLeave(): void {\n this._hovered = false;\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.profileOpen && !this._elementRef.nativeElement.contains(event.target)) {\n this.profileOpen = false;\n }\n }\n}\n","<!-- Standard icon items (bell, settings, message-square, phone) -->\n<ng-container *ngIf=\"isStandardIcon\">\n <div [class]=\"hostClasses\"\n (click)=\"onClick()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <zen-icon class=\"zen-top-nav-item__icon\"\n [name]=\"iconName\"\n [customColor]=\"iconColor\"></zen-icon>\n <span *ngIf=\"badgeCount > 0\" class=\"zen-top-nav-item__badge\">{{ badgeCount }}</span>\n <div *ngIf=\"showTooltip\" class=\"zen-top-nav-item__tooltip\">{{ resolvedTooltip }}</div>\n </div>\n</ng-container>\n\n<!-- Clarity (gradient button) -->\n<ng-container *ngIf=\"isClarity\">\n <button [class]=\"hostClasses\"\n (click)=\"onClick()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n type=\"button\">\n <svg class=\"zen-top-nav-item__clarity-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 3L13.912 8.813C14.0777 9.32848 14.6715 9.92225 15.187 10.088L21 12L15.187 13.912C14.6715 14.0777 14.0777 14.6715 13.912 15.187L12 21L10.088 15.187C9.92225 14.6715 9.32848 14.0777 8.813 13.912L3 12L8.813 10.088C9.32848 9.92225 9.92225 9.32848 10.088 8.813L12 3Z\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 3V7\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M3 5H7\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 17V21\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17 19H21\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"zen-top-nav-item__clarity-label\">{{ clarityLabel }}</span>\n </button>\n</ng-container>\n\n<!-- Profile (avatar + chevron + dropdown) -->\n<ng-container *ngIf=\"isProfile\">\n <div [class]=\"hostClasses\"\n (click)=\"onClick()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <div class=\"zen-top-nav-item__avatar\">\n <zen-icon class=\"zen-top-nav-item__avatar-icon\"\n name=\"user\"\n [customColor]=\"'#667085'\"></zen-icon>\n </div>\n <zen-icon class=\"zen-top-nav-item__chevron\"\n [name]=\"profileOpen ? 'chevron-up' : 'chevron-down'\"\n [customColor]=\"'#667085'\"></zen-icon>\n\n <!-- Profile dropdown -->\n <div *ngIf=\"profileOpen\" class=\"zen-top-nav-item__profile-dropdown\">\n <div *ngIf=\"profileData\" class=\"zen-top-nav-item__profile-header\">\n <div class=\"zen-top-nav-item__profile-avatar\">\n <zen-icon name=\"user\" [customColor]=\"'#667085'\"\n class=\"zen-top-nav-item__profile-avatar-icon\"></zen-icon>\n </div>\n <div class=\"zen-top-nav-item__profile-info\">\n <span class=\"zen-top-nav-item__profile-name\">{{ profileData.name }}</span>\n <span class=\"zen-top-nav-item__profile-email\">{{ profileData.email }}</span>\n </div>\n </div>\n <div class=\"zen-top-nav-item__profile-divider\"></div>\n <div class=\"zen-top-nav-item__profile-items\">\n <div *ngFor=\"let item of profileMenuItems\"\n class=\"zen-top-nav-item__profile-item\"\n [class.zen-top-nav-item__profile-item--destructive]=\"item.destructive\"\n (click)=\"onProfileItemClick(item, $event)\">\n <zen-icon *ngIf=\"item.icon\"\n class=\"zen-top-nav-item__profile-item-icon\"\n [name]=\"item.icon\"\n [customColor]=\"item.destructive ? '#F04438' : '#344054'\"></zen-icon>\n <span>{{ item.label }}</span>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ZenTopNavProfileData, ZenTopNavProfileMenuItem } from '../top-nav-item/zen-top-nav-item.component';\n\nexport interface ZenTopNavBreadcrumb {\n text?: string;\n icon?: string;\n active?: boolean;\n tooltip?: string;\n}\n\nexport interface ZenTopNavSubmoduleItem {\n label: string;\n icon?: string;\n tag?: unknown;\n}\n\nexport interface ZenTopNavTab {\n label: string;\n tag?: unknown;\n}\n\n@Component({\n selector: 'zen-top-nav',\n templateUrl: './zen-top-nav.component.html',\n styleUrls: ['./zen-top-nav.component.scss']\n})\nexport class ZenTopNavComponent {\n\n // Left side: breadcrumbs OR submodule tabs\n @Input() breadcrumbs: ZenTopNavBreadcrumb[] = [];\n @Input() submoduleItems: ZenTopNavSubmoduleItem[] = [];\n @Input() activeSubmodule: string;\n\n // Back button\n @Input() showBackButton = true;\n\n // Right side: top menu\n @Input() profileData: ZenTopNavProfileData;\n @Input() profileMenuItems: ZenTopNavProfileMenuItem[] = [];\n @Input() showClarity = true;\n @Input() notificationCount = 0;\n\n // Horizontal tabs (second row)\n @Input() tabs: ZenTopNavTab[] = [];\n @Input() activeTab: string;\n\n @Output() back = new EventEmitter<void>();\n @Output() breadcrumbClick = new EventEmitter<ZenTopNavBreadcrumb>();\n @Output() submoduleChange = new EventEmitter<ZenTopNavSubmoduleItem>();\n @Output() tabChange = new EventEmitter<ZenTopNavTab>();\n @Output() clarityClick = new EventEmitter<void>();\n @Output() notificationClick = new EventEmitter<void>();\n @Output() chatClick = new EventEmitter<void>();\n @Output() profileMenuItemClick = new EventEmitter<ZenTopNavProfileMenuItem>();\n\n get hasSubmodules(): boolean {\n return this.submoduleItems.length > 0;\n }\n\n get hasTabs(): boolean {\n return this.tabs.length > 0;\n }\n\n onBack(): void {\n this.back.emit();\n }\n\n onBreadcrumbClick(crumb: ZenTopNavBreadcrumb): void {\n this.breadcrumbClick.emit(crumb);\n }\n\n onSubmoduleClick(item: ZenTopNavSubmoduleItem): void {\n this.submoduleChange.emit(item);\n }\n\n onTabClick(tab: ZenTopNavTab): void {\n this.tabChange.emit(tab);\n }\n\n isLastBreadcrumb(index: number): boolean {\n return index === this.breadcrumbs.length - 1;\n }\n\n getBreadcrumbColor(crumb: ZenTopNavBreadcrumb, index: number): string {\n if (this.isLastBreadcrumb(index)) return '#136AB6';\n return '#667085';\n }\n}\n","<div class=\"zen-top-nav\" [class.zen-top-nav--with-tabs]=\"hasTabs\">\n <!-- Main bar -->\n <div class=\"zen-top-nav__bar\">\n <!-- Left side -->\n <div class=\"zen-top-nav__left\">\n <!-- Back button -->\n <button *ngIf=\"showBackButton\" class=\"zen-top-nav__back\" type=\"button\" (click)=\"onBack()\">\n <zen-icon name=\"arrow-left\" [customColor]=\"'#667085'\"\n class=\"zen-top-nav__back-icon\"></zen-icon>\n </button>\n\n <!-- Option A: Submodule tabs -->\n <div *ngIf=\"hasSubmodules\" class=\"zen-top-nav__submodules\">\n <zen-submodule-item *ngFor=\"let item of submoduleItems\"\n [label]=\"item.label\"\n [icon]=\"item.icon\"\n [current]=\"activeSubmodule === (item.tag || item.label)\"\n (activate)=\"onSubmoduleClick(item)\">\n </zen-submodule-item>\n </div>\n\n <!-- Option B: Breadcrumbs -->\n <div *ngIf=\"!hasSubmodules && breadcrumbs.length\" class=\"zen-top-nav__breadcrumbs\">\n <ng-container *ngFor=\"let crumb of breadcrumbs; let i = index; let last = last\">\n <div class=\"zen-top-nav__breadcrumb-item\"\n (click)=\"onBreadcrumbClick(crumb)\">\n <zen-icon *ngIf=\"crumb.icon\"\n class=\"zen-top-nav__breadcrumb-icon\"\n [name]=\"crumb.icon\"\n [customColor]=\"getBreadcrumbColor(crumb, i)\"></zen-icon>\n <span *ngIf=\"crumb.text\"\n class=\"zen-top-nav__breadcrumb-text\"\n [style.color]=\"getBreadcrumbColor(crumb, i)\">\n {{ crumb.text }}\n </span>\n <div *ngIf=\"crumb.tooltip\" class=\"zen-top-nav__breadcrumb-tooltip\">{{ crumb.tooltip }}</div>\n </div>\n <zen-icon *ngIf=\"!last\"\n class=\"zen-top-nav__breadcrumb-chevron\"\n name=\"chevron-right\"\n [customColor]=\"'#667085'\"></zen-icon>\n </ng-container>\n </div>\n\n <!-- Option C: Content projection for custom left content -->\n <ng-content select=\"[topNavLeft]\"></ng-content>\n </div>\n\n <!-- Right side: Top menu items -->\n <div class=\"zen-top-nav__right\">\n <ng-content select=\"[topNavRight]\"></ng-content>\n <zen-top-nav-item *ngIf=\"showClarity\"\n menu=\"clarity\"\n (activate)=\"clarityClick.emit()\"></zen-top-nav-item>\n <div class=\"zen-top-nav__actions\">\n <zen-top-nav-item menu=\"chat\"\n (activate)=\"chatClick.emit()\"></zen-top-nav-item>\n <zen-top-nav-item menu=\"notification\"\n [badgeCount]=\"notificationCount\"\n (activate)=\"notificationClick.emit()\"></zen-top-nav-item>\n <zen-top-nav-item menu=\"profile\"\n [profileData]=\"profileData\"\n [profileMenuItems]=\"profileMenuItems\"\n (profileMenuItemClick)=\"profileMenuItemClick.emit($event)\"></zen-top-nav-item>\n </div>\n </div>\n </div>\n\n <!-- Horizontal tabs (second row) -->\n <div *ngIf=\"hasTabs\" class=\"zen-top-nav__tabs\">\n <div class=\"zen-top-nav__tabs-list\">\n <a *ngFor=\"let tab of tabs\"\n class=\"zen-top-nav__tab\"\n [class.zen-top-nav__tab--active]=\"activeTab === tab.label\"\n (click)=\"onTabClick(tab)\">\n {{ tab.label }}\n </a>\n </div>\n <div class=\"zen-top-nav__tabs-divider\"></div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ZenNavModule } from '../nav-item/zen-nav-item.component';\nimport { ZenSideNavItemState, ZenSideNavSubItem } from '../side-nav-item/zen-side-nav-item.component';\n\nexport interface ZenNavigationModule {\n module: ZenNavModule;\n hasSubmodule?: boolean;\n subItems?: ZenSideNavSubItem[];\n}\n\n@Component({\n selector: 'zen-navigation',\n templateUrl: './zen-navigation.component.html',\n styleUrls: ['./zen-navigation.component.scss']\n})\nexport class ZenNavigationComponent {\n\n @Input() collapsed = false;\n @Input() modules: ZenNavigationModule[] = [];\n @Input() bottomModules: ZenNavigationModule[] = [];\n @Input() activeModule: ZenNavModule;\n\n @Output() moduleActivate = new EventEmitter<ZenNavModule>();\n @Output() subItemActivate = new EventEmitter<{ module: ZenNavModule; subItem: ZenSideNavSubItem }>();\n @Output() searchChange = new EventEmitter<string>();\n @Output() searchClick = new EventEmitter<void>();\n\n expandedModules: Set<ZenNavModule> = new Set();\n\n get hostClasses(): string {\n const classes = ['zen-navigation'];\n if (this.collapsed) classes.push('zen-navigation--collapsed');\n return classes.join(' ');\n }\n\n getModuleState(mod: ZenNavigationModule): ZenSideNavItemState {\n return this.activeModule === mod.module ? 'focused' : 'default';\n }\n\n isModuleExpanded(mod: ZenNavigationModule): boolean {\n return this.expandedModules.has(mod.module);\n }\n\n onModuleActivate(mod: ZenNavigationModule): void {\n this.moduleActivate.emit(mod.module);\n }\n\n onModuleExpandedChange(mod: ZenNavigationModule, expanded: boolean): void {\n if (expanded) {\n this.expandedModules.add(mod.module);\n } else {\n this.expandedModules.delete(mod.module);\n }\n }\n\n onSubItemActivate(mod: ZenNavigationModule, subItem: ZenSideNavSubItem): void {\n this.subItemActivate.emit({ module: mod.module, subItem });\n }\n\n onSearchChange(value: string): void {\n this.searchChange.emit(value);\n }\n\n onSearchButtonClick(): void {\n this.searchClick.emit();\n }\n}\n","<nav [class]=\"hostClasses\">\n <!-- Top section -->\n <div class=\"zen-navigation__top\">\n <!-- Logo slot -->\n <div class=\"zen-navigation__logo\">\n <ng-content select=\"[navLogo]\"></ng-content>\n </div>\n\n <!-- Search: full input when expanded, icon button when collapsed -->\n <zen-nav-search *ngIf=\"!collapsed\"\n class=\"zen-navigation__search\"\n (valueChange)=\"onSearchChange($event)\"></zen-nav-search>\n <button *ngIf=\"collapsed\" class=\"zen-navigation__search-btn\" type=\"button\"\n (click)=\"onSearchButtonClick()\">\n <zen-icon name=\"search\" [customColor]=\"'#D0D5DD'\" class=\"zen-navigation__search-icon\"></zen-icon>\n </button>\n\n <!-- Navigation items -->\n <div class=\"zen-navigation__items\">\n <zen-nav-item *ngFor=\"let mod of modules\"\n [module]=\"mod.module\"\n [type]=\"collapsed ? 'collapsed' : 'expanded'\"\n [state]=\"getModuleState(mod)\"\n [hasSubmodule]=\"mod.hasSubmodule\"\n [subItems]=\"mod.subItems || []\"\n [expanded]=\"isModuleExpanded(mod)\"\n (activate)=\"onModuleActivate(mod)\"\n (subItemActivate)=\"onSubItemActivate(mod, $event)\"\n (expandedChange)=\"onModuleExpandedChange(mod, $event)\">\n </zen-nav-item>\n </div>\n </div>\n\n <!-- Bottom section (More, Admin, Help) -->\n <div *ngIf=\"bottomModules.length\" class=\"zen-navigation__bottom\">\n <div class=\"zen-navigation__divider\"></div>\n <zen-nav-item *ngFor=\"let mod of bottomModules\"\n [module]=\"mod.module\"\n [type]=\"collapsed ? 'collapsed' : 'expanded'\"\n [state]=\"getModuleState(mod)\"\n [hasSubmodule]=\"mod.hasSubmodule\"\n [subItems]=\"mod.subItems || []\"\n [expanded]=\"isModuleExpanded(mod)\"\n (activate)=\"onModuleActivate(mod)\"\n (subItemActivate)=\"onSubItemActivate(mod, $event)\"\n (expandedChange)=\"onModuleExpandedChange(mod, $event)\">\n </zen-nav-item>\n </div>\n\n <!-- Extra slot -->\n <ng-content select=\"[navBottom]\"></ng-content>\n</nav>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ElementRef,\n AfterViewInit\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})\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 drawBorder: 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 borderDash: [4, 4],\n drawBorder: false\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 <div *ngIf=\"legend === 'top'\" class=\"zen-chart__legend\">\n <div *ngFor=\"let ds of datasets; let i = index\" 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 </div>\n\n <!-- Y-axis label + chart canvas -->\n <div class=\"zen-chart__body\">\n <div *ngIf=\"axisLabels && yAxisLabel\" class=\"zen-chart__y-label\">\n <span>{{ yAxisLabel }}</span>\n </div>\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 <div *ngIf=\"axisLabels && xAxisLabel\" class=\"zen-chart__x-label\">\n <span>{{ xAxisLabel }}</span>\n </div>\n\n <!-- Legend: right position -->\n <div *ngIf=\"legend === 'right'\" class=\"zen-chart__legend\">\n <div *ngFor=\"let ds of datasets; let i = index\" 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 </div>\n\n</div>\n","import { Component, Input } 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})\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 <ng-container *ngIf=\"type === 'top'\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n <div class=\"zen-step-base__content\" *ngIf=\"title || description\">\n <p class=\"zen-step-base__title\" *ngIf=\"title\">{{ title }}</p>\n <p class=\"zen-step-base__description\" *ngIf=\"description\">{{ description }}</p>\n </div>\n </ng-container>\n\n <!-- ============ TYPE: ICON ONLY (minimal-icons) ============ -->\n <ng-container *ngIf=\"type === 'icon-only'\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ng-container>\n\n <!-- ============ TYPE: TEXT LINE ============ -->\n <ng-container *ngIf=\"type === 'text-line'\">\n <div class=\"zen-step-base__bar\"></div>\n <div class=\"zen-step-base__content\" *ngIf=\"title || description\">\n <p class=\"zen-step-base__title\" *ngIf=\"title\">{{ title }}</p>\n <p class=\"zen-step-base__description\" *ngIf=\"description\">{{ description }}</p>\n </div>\n </ng-container>\n\n <!-- ============ TYPE: ICON LEFT (icons-text vertical) ============ -->\n <ng-container *ngIf=\"type === 'icon-left'\">\n <div class=\"zen-step-base__icon-col\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n <div *ngIf=\"showConnector\"\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 </div>\n <div class=\"zen-step-base__content\" *ngIf=\"title || description\">\n <p class=\"zen-step-base__title\" *ngIf=\"title\">{{ title }}</p>\n <p class=\"zen-step-base__description\" *ngIf=\"description\">{{ description }}</p>\n </div>\n </ng-container>\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 <svg *ngIf=\"status === 'complete'\"\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 <!-- Current / Incomplete: dot -->\n <span *ngIf=\"status !== 'complete'\"\n class=\"zen-step-base__dot\"\n [style.width.px]=\"dotSize\"\n [style.height.px]=\"dotSize\">\n </span>\n </div>\n</ng-template>\n","import { Component, Input } 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})\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 <ng-container *ngIf=\"type === 'icons-centered'\">\n <div class=\"zen-progress-steps__row\">\n <!-- Lines behind icons -->\n <div class=\"zen-progress-steps__lines\">\n <ng-container *ngFor=\"let step of steps; let i = index; let last = last\">\n <div *ngIf=\"!last\"\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 </ng-container>\n </div>\n <!-- Step columns -->\n <zen-step-base *ngFor=\"let step of steps; let i = index\"\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 </div>\n </ng-container>\n\n <!-- ============ MINIMAL ICONS / MINIMAL ICONS CONNECTED ============ -->\n <ng-container *ngIf=\"type === 'minimal-icons' || type === 'minimal-icons-connected'\">\n <div class=\"zen-progress-steps__row zen-progress-steps__row--inline\">\n <ng-container *ngFor=\"let step of steps; 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 <div *ngIf=\"!last\"\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 </ng-container>\n </div>\n <!-- Optional text row -->\n <div class=\"zen-progress-steps__text-row\" *ngIf=\"showText\">\n <zen-step-base *ngFor=\"let step of steps; let i = index\"\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 </div>\n </ng-container>\n\n <!-- ============ TEXT LINE ============ -->\n <ng-container *ngIf=\"type === 'text-line'\">\n <div class=\"zen-progress-steps__row zen-progress-steps__row--text-line\">\n <zen-step-base *ngFor=\"let step of steps; let i = index\"\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 </div>\n </ng-container>\n\n <!-- ============ ICONS TEXT (Vertical) ============ -->\n <ng-container *ngIf=\"type === 'icons-text'\">\n <div class=\"zen-progress-steps__column\">\n <zen-step-base *ngFor=\"let step of steps; let i = index; let last = last\"\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 </div>\n </ng-container>\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 { ZenduBreadcrumbs } from './breadcrumbs/zendu-breadcrumbs.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 { AngularSignaturePadModule } from '@almothafar/angular-signature-pad';\nimport { HttpClientModule } 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 { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { HttpClient } from '@angular/common/http';\nimport { ZenduSelectButtonDirective } from './select/templates/zendu-select-button.directive';\nimport { ZenduTimepickerComponent } from './timepicker/zendu-timepicker.component';\nimport { ZenduCommentTextareaComponent } from './comment-textarea/zendu-comment-textarea.component';\nimport { ZenduCommentItemComponent } from './comment-item/zendu-comment-item.component';\nimport { ZenduCommentListComponent } from './comment-list/zendu-comment-list.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 { ZenSideNavItemComponent } from './side-nav-item/zen-side-nav-item.component';\nimport { ZenSubpageItemComponent } from './subpage-item/zen-subpage-item.component';\nimport { ZenNavItemComponent } from './nav-item/zen-nav-item.component';\nimport { ZenModulePopupComponent } from './module-popup/zen-module-popup.component';\nimport { ZenTopNavItemComponent } from './top-nav-item/zen-top-nav-item.component';\nimport { ZenTopNavComponent } from './top-nav/zen-top-nav.component';\nimport { ZenNavigationComponent } from './navigation/zen-navigation.component';\nimport { NgChartsModule } 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// AoT requires an exported function for factories\nexport function HttpLoaderFactory(httpClient: HttpClient) {\n return new TranslateHttpLoader(httpClient);\n}\n\n@NgModule({\n 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 ZenduBreadcrumbs,\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 ZenduCommentTextareaComponent,\n ZenduCommentItemComponent,\n ZenduCommentListComponent,\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 ZenSideNavItemComponent,\n ZenSubpageItemComponent,\n ZenNavItemComponent,\n ZenModulePopupComponent,\n ZenTopNavItemComponent,\n ZenTopNavComponent,\n ZenNavigationComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent\n ],\n providers: [\n OpenCVService,\n ],\n imports: [\n CommonModule,\n FormsModule,\n DragDropModule,\n AngularSignaturePadModule,\n ReactiveFormsModule,\n HttpClientModule,\n OverlayModule,\n NgChartsModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n })\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 ZenduBreadcrumbs,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduCommentTextareaComponent,\n ZenduCommentItemComponent,\n ZenduCommentListComponent,\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 ZenSideNavItemComponent,\n ZenSubpageItemComponent,\n ZenNavItemComponent,\n ZenModulePopupComponent,\n ZenTopNavItemComponent,\n ZenTopNavComponent,\n ZenNavigationComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent\n ]\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/breadcrumbs/zendu-breadcrumbs.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/comment-textarea/zendu-comment-textarea.component\";\nexport * from \"./lib/comment-item/zendu-comment-item.component\";\nexport * from \"./lib/comment-list/zendu-comment-list.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/side-nav-item/zen-side-nav-item.component\";\nexport * from \"./lib/subpage-item/zen-subpage-item.component\";\nexport * from \"./lib/nav-item/zen-nav-item.component\";\nexport * from \"./lib/module-popup/zen-module-popup.component\";\nexport * from \"./lib/top-nav-item/zen-top-nav-item.component\";\nexport * from \"./lib/top-nav/zen-top-nav.component\";\nexport * from \"./lib/navigation/zen-navigation.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","i3","i2","i3.ZenduCheckboxComponent","i4.ZenduSearchBoxComponent","i1","i4","i5.ZenduIconComponent","i2.ZenduCheckboxComponent","i3.ZenduSearchBoxComponent","i2.ZenduIconComponent","i4.ZenduToggleSlideComponent","i5.ZenduSearchBoxComponent","i6.ZenduDatepickerComponent","i7.ZenduGroupsComponent","i8.ZenduRadioButtonComponent","i9.ZenduIconComponent","i10.ZenduSpinner","i11.ZenButtonComponent","i12","i4.ZenduGroupsComponent","i6","i1.ZenduIconComponent","LocalLock","i1.ScriptLoader","i1.OpenCVService","i3.ZenduIconComponent","i1.GeocodingService","i4.ZenduIconComponent","i1.ZenHttpService","i2.ZenHTML5VideoPlayerComponent","i3.ZenFlvPlayerComponent","i4.ZenHlsPlayerComponent","i5.ZenSnapshotPlayerComponent","i6.ZenWebRTCPlayerComponent","i2.ZenduCommentTextareaComponent","i2.ZenduCommentItemComponent","i3.ZenduSpinner","i2.ZenduAvatarComponent","i3.ZenEldStatusComponent","i2.ZenSideNavItemComponent","i3.ZenModulePopupComponent","i3.ZenSubmoduleItemComponent","i4.ZenTopNavItemComponent","i3.ZenNavSearchComponent","i4.ZenNavItemComponent","i2.ZenStepBaseComponent"],"mappings":"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"}
|