ng-zenduit 2.3.9 → 2.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ng-zenduit.mjs +205 -213
- package/fesm2022/ng-zenduit.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ng-zenduit.d.ts +87 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-zenduit.mjs","sources":["../../../projects/ng-zenduit/src/lib/snackbar/zen-snackbar.component.ts","../../../projects/ng-zenduit/src/lib/snackbar/zen-snackbar.component.html","../../../projects/ng-zenduit/src/lib/services/zendu-notify.service.ts","../../../projects/ng-zenduit/src/lib/overlay/zendu-overlay.service.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.html","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.ts","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.html","../../../projects/ng-zenduit/src/lib/util.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.component.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.component.html","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.ts","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.html","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.ts","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.html","../../../projects/ng-zenduit/src/lib/datepicker/datepicker.ts","../../../projects/ng-zenduit/src/lib/icon/icon-config.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.html","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.ts","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.html","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.ts","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.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/date-picker-dropdown/date-picker-dropdown.types.ts","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.ts","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.html","../../../projects/ng-zenduit/src/lib/button/zen-button.component.ts","../../../projects/ng-zenduit/src/lib/button/zen-button.component.html","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.ts","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.html","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-option.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-value.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-button.directive.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.html","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.ts","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.html","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.ts","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.html","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.ts","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.html","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.ts","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.html","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.ts","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.html","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.ts","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.html","../../../projects/ng-zenduit/src/lib/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/script.loader.service.ts","../../../projects/ng-zenduit/src/lib/services/opencv.service.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.html","../../../projects/ng-zenduit/src/lib/services/map.service.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.html","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.ts","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.html","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.ts","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.html","../../../projects/ng-zenduit/src/lib/services/geoconding.service.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.html","../../../projects/ng-zenduit/src/lib/core/cevent.ts","../../../projects/ng-zenduit/src/lib/live-view-player/player.control.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.html","../../../projects/ng-zenduit/src/lib/core/thread.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.html","../../../projects/ng-zenduit/src/lib/core/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/http.service.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.html","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.ts","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.html","../../../projects/ng-zenduit/src/lib/file-uploader/zendu-file-uploader.component.ts","../../../projects/ng-zenduit/src/lib/file-uploader/zendu-file-uploader.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-group.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-group.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-label-group.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-label-group.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-profile-photo.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-profile-photo.component.html","../../../projects/ng-zenduit/src/lib/slider/zendu-slider.component.ts","../../../projects/ng-zenduit/src/lib/slider/zendu-slider.component.html","../../../projects/ng-zenduit/src/lib/badge/zen-badge.component.ts","../../../projects/ng-zenduit/src/lib/badge/zen-badge.component.html","../../../projects/ng-zenduit/src/lib/dropdown-menu/zen-dropdown-menu.component.ts","../../../projects/ng-zenduit/src/lib/dropdown-menu/zen-dropdown-menu.component.html","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.component.ts","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.component.html","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.directive.ts","../../../projects/ng-zenduit/src/lib/eld-status/zen-eld-status.component.ts","../../../projects/ng-zenduit/src/lib/eld-status/zen-eld-status.component.html","../../../projects/ng-zenduit/src/lib/nav-search/zen-nav-search.component.ts","../../../projects/ng-zenduit/src/lib/nav-search/zen-nav-search.component.html","../../../projects/ng-zenduit/src/lib/submodule-item/zen-submodule-item.component.ts","../../../projects/ng-zenduit/src/lib/submodule-item/zen-submodule-item.component.html","../../../projects/ng-zenduit/src/lib/subpage-item/zen-subpage-item.component.ts","../../../projects/ng-zenduit/src/lib/subpage-item/zen-subpage-item.component.html","../../../projects/ng-zenduit/src/lib/module-popup/zen-module-popup.component.ts","../../../projects/ng-zenduit/src/lib/module-popup/zen-module-popup.component.html","../../../projects/ng-zenduit/src/lib/chart/zen-chart.component.ts","../../../projects/ng-zenduit/src/lib/chart/zen-chart.component.html","../../../projects/ng-zenduit/src/lib/progress-steps/zen-step-base.component.ts","../../../projects/ng-zenduit/src/lib/progress-steps/zen-step-base.component.html","../../../projects/ng-zenduit/src/lib/progress-steps/zen-progress-steps.component.ts","../../../projects/ng-zenduit/src/lib/progress-steps/zen-progress-steps.component.html","../../../projects/ng-zenduit/src/lib/ng-zenduit.module.ts","../../../projects/ng-zenduit/src/public-api.ts","../../../projects/ng-zenduit/src/ng-zenduit.ts"],"sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n} from '@angular/core';\n\nexport type ZenSnackbarType = 'info' | 'neutral' | 'success' | 'warn' | 'error';\n\n/**\n * Presentational card rendered by {@link ZenNotifyService} through a CDK overlay.\n * It draws the status icon, the message and an optional dismiss button, styled\n * per the ZenduONE design system (Untitled UI \"Alert\").\n */\n@Component({\n selector: 'zen-snackbar',\n templateUrl: './zen-snackbar.component.html',\n styleUrls: ['./zen-snackbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class ZenSnackbarComponent {\n @Input() message = '';\n @Input() type: ZenSnackbarType = 'info';\n @Input() hasDismiss = true;\n\n /** Emitted when the user clicks the dismiss button. */\n @Output() dismiss = new EventEmitter<void>();\n\n onDismiss(): void {\n this.dismiss.emit();\n }\n}\n","<div\n class=\"zen-snackbar\"\n role=\"alert\"\n [class.zen-snackbar--info]=\"type === 'info'\"\n [class.zen-snackbar--neutral]=\"type === 'neutral'\"\n [class.zen-snackbar--success]=\"type === 'success'\"\n [class.zen-snackbar--warn]=\"type === 'warn'\"\n [class.zen-snackbar--error]=\"type === 'error'\">\n\n <!-- Status icon -->\n <span class=\"zen-snackbar__icon\">\n @switch (type) {\n @case ('success') {\n <!-- check-circle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 12L10.5 15L16.5 9M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @case ('warn') {\n <!-- alert-triangle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 9V13M12 17H12.01M10.2899 3.86001L1.81995 18C1.64536 18.3024 1.55291 18.6453 1.55193 18.9945C1.55096 19.3437 1.6415 19.6871 1.81439 19.9905C1.98728 20.2939 2.23673 20.5468 2.53774 20.7239C2.83875 20.901 3.1808 20.9962 3.52995 21H20.4699C20.8191 20.9962 21.1611 20.901 21.4621 20.7239C21.7632 20.5468 22.0126 20.2939 22.1855 19.9905C22.3584 19.6871 22.4489 19.3437 22.448 18.9945C22.447 18.6453 22.3545 18.3024 22.1799 18L13.7099 3.86001C13.5317 3.56611 13.2807 3.32313 12.9812 3.15449C12.6817 2.98585 12.3438 2.89726 11.9999 2.89726C11.6561 2.89726 11.3182 2.98585 11.0187 3.15449C10.7192 3.32313 10.4682 3.56611 10.2899 3.86001Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @case ('error') {\n <!-- alert-circle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 8V12M12 16H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @default {\n <!-- info (also used for the 'neutral' variant) -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 16V12M12 8H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n }\n </span>\n\n <!-- Message -->\n <p class=\"zen-snackbar__message\">{{ message }}</p>\n\n <!-- Dismiss -->\n @if (hasDismiss) {\n <button\n class=\"zen-snackbar__close\"\n type=\"button\"\n aria-label=\"Dismiss\"\n (click)=\"onDismiss()\">\n <!-- x -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n }\n</div>\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ZenSnackbarComponent, ZenSnackbarType } from '../snackbar/zen-snackbar.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenNotifyService {\n\n private readonly _overlay = inject(Overlay);\n private readonly _injector = inject(Injector);\n\n /** The currently shown snackbar overlay, if any. */\n private _overlayRef: OverlayRef | null = null;\n /** Auto-dismiss timer handle for the current snackbar. */\n private _timer: ReturnType<typeof setTimeout> | null = null;\n\n public info(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'info', duration, hasDismiss);\n }\n\n public neutral(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'neutral', duration, hasDismiss);\n }\n\n public success(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'success', duration, hasDismiss);\n }\n\n public warn(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.warn(msg);\n this._show(msg, 'warn', duration, hasDismiss);\n }\n\n public error(\n err: unknown,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.error(err);\n this._show(this.getErrorMessage(err), 'error', duration, hasDismiss);\n }\n\n /**\n * Renders the snackbar through a CDK overlay so it shares the browser top\n * layer with CDK dialogs and always paints above them. Only one snackbar is\n * shown at a time — a new call replaces the previous one.\n */\n private _show(\n message: string,\n type: ZenSnackbarType,\n duration: number,\n hasDismiss: boolean\n ): void {\n // Replace any snackbar that is currently on screen.\n this._dismiss();\n\n const positionStrategy = this._overlay\n .position()\n .global()\n .top('24px')\n .centerHorizontally();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.noop(),\n panelClass: 'zen-snackbar-overlay',\n });\n\n const portal = new ComponentPortal(ZenSnackbarComponent, null, this._injector);\n const snackbarRef = this._overlayRef.attach(portal);\n\n snackbarRef.instance.message = message;\n snackbarRef.instance.type = type;\n snackbarRef.instance.hasDismiss = hasDismiss;\n snackbarRef.instance.dismiss.subscribe(() => this._dismiss());\n snackbarRef.changeDetectorRef.markForCheck();\n\n if (duration && duration > 0) {\n this._timer = setTimeout(() => this._dismiss(), duration);\n }\n }\n\n /** Disposes the active snackbar overlay and clears the auto-dismiss timer. */\n private _dismiss(): void {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n private getErrorMessage(ex: any): string {\n if (!ex) {\n return '';\n }\n\n if (typeof ex === 'string') {\n return ex;\n }\n else if (typeof ex.error === 'string') {\n return ex.error;\n }\n else if (ex.error && ex.error.message) {\n return ex.error.message;\n }\n else if (ex.message) {\n return ex.message;\n }\n else if (ex.status && ex.statusText) {\n return `Http error ${ex.status} ${ex.statusText}`;\n }\n else if (ex.statusText) {\n return ex.statusText;\n }\n else {\n console.warn('Can\\'t extract error message from object:', ex);\n return '';\n }\n }\n}\n","import { ElementRef, Injectable, NgZone } from '@angular/core';\nimport {\n ConnectedPosition,\n Overlay,\n OverlayConfig,\n OverlayRef\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport {\n ZenConnectedPanelConfig,\n ZenConnectedPanelRef,\n ZenPanelCloseReason\n} from './zendu-overlay.types';\n\nconst DEFAULT_OFFSET_Y = 4;\nconst DEFAULT_VIEWPORT_MARGIN = 8;\n\n/**\n * Shared overlay primitive for the whole library. Opens a floating panel\n * anchored to a trigger using CDK Overlay, with viewport-aware connected\n * positioning that:\n * - renders in the overlay container, so it is never clipped by an ancestor's\n * `overflow` (cards, scroll areas) or by the viewport edge;\n * - prefers opening below the trigger and flips above when there isn't room;\n * - pushes itself into the viewport and shrinks to fit (`flexibleDimensions`),\n * so the panel scrolls internally instead of overflowing;\n * - tracks the trigger on scroll/resize (or closes, if asked).\n *\n * Consumers keep their own open/close state and panel markup — they call\n * {@link openConnectedPanel} and react to {@link ZenConnectedPanelRef.closed}.\n */\n@Injectable({ providedIn: 'root' })\nexport class ZenduOverlayService {\n constructor(private _overlay: Overlay, private _ngZone: NgZone) {}\n\n openConnectedPanel(config: ZenConnectedPanelConfig): ZenConnectedPanelRef {\n const originEl = config.origin instanceof ElementRef\n ? config.origin.nativeElement\n : config.origin;\n const offsetY = config.offsetY ?? DEFAULT_OFFSET_Y;\n\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(originEl)\n .withPositions(this._positions(offsetY))\n .withPush(true)\n .withFlexibleDimensions(true)\n .withGrowAfterOpen(true)\n .withViewportMargin(config.viewportMargin ?? DEFAULT_VIEWPORT_MARGIN);\n\n // Scroll is handled by our own capture-phase listener (set up below),\n // which — unlike CDK's reposition/close strategies — also reacts to\n // nested/non-cdkScrollable containers. Use a noop strategy so CDK\n // doesn't additionally react and double the work on every scroll.\n const scrollStrategy = this._overlay.scrollStrategies.noop();\n\n const overlayConfig: OverlayConfig = {\n positionStrategy,\n scrollStrategy,\n hasBackdrop: false,\n disposeOnNavigation: true,\n panelClass: this._panelClasses(config.panelClass)\n };\n\n // Width: match the trigger by default; otherwise honour the override.\n // 'auto' leaves width unset so the panel sizes to its content.\n const width = config.width ?? 'origin';\n if (width === 'origin') {\n overlayConfig.width = originEl.getBoundingClientRect().width;\n } else if (width !== 'auto') {\n overlayConfig.width = width;\n }\n if (config.minWidth != null) {\n overlayConfig.minWidth = config.minWidth;\n }\n\n const overlayRef = this._overlay.create(overlayConfig);\n overlayRef.attach(new TemplatePortal(config.content, config.viewContainerRef));\n\n const closed = new Subject<ZenPanelCloseReason>();\n const destroyed = new Subject<void>();\n\n // Ignore the pointer interaction that OPENED the panel. open() is\n // commonly called from inside a click handler — the picker's own\n // trigger, or a DIFFERENT element entirely (e.g. a host select's\n // \"Custom\" option that reveals a date-picker and calls open()). That\n // click bubbles to the document, and when another overlay is already\n // open the shared CDK outside-click listener reports it as an \"outside\"\n // event in the SAME task — dismissing the panel the instant it opens.\n // A real outside click happens in a later task, so clearing the flag on\n // the next macrotask lets those through while swallowing the opener.\n let ignoreOpeningInteraction = true;\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => { ignoreOpeningInteraction = false; }, 0);\n });\n\n // Outside click — also ignore clicks on the trigger itself, so the\n // consumer's own toggle handler isn't fighting a close from here.\n overlayRef.outsidePointerEvents()\n .pipe(\n filter(event => !ignoreOpeningInteraction && !originEl.contains(event.target as Node)),\n takeUntil(destroyed)\n )\n .subscribe(() => closed.next('outside'));\n\n // Escape key.\n overlayRef.keydownEvents()\n .pipe(\n filter(event => event.keyCode === ESCAPE),\n takeUntil(destroyed)\n )\n .subscribe(() => closed.next('escape'));\n\n // Detach (e.g. scrollBehavior: 'close', or navigation).\n overlayRef.detachments()\n .pipe(takeUntil(destroyed))\n .subscribe(() => closed.next('detach'));\n\n // Keep the panel anchored while open. CDK's reposition/close scroll\n // strategies react only to its ScrollDispatcher — a BUBBLE-phase global\n // `document` scroll listener plus elements explicitly tagged\n // `cdkScrollable`. But `scroll` does not bubble, so scrolling a nested\n // `overflow:auto` container or a MatDialog body (which is not a\n // registered cdkScrollable) never reaches that listener and the panel\n // freezes / detaches. A CAPTURE-phase document listener sees scroll from\n // ANY ancestor on the way down, closing that blind spot. It runs outside\n // Angular and is rAF-throttled, so scrolling stays smooth.\n let rafId: number | null = null;\n const schedule = (action: () => void) => {\n if (rafId != null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n action();\n });\n };\n const onScroll = (event: Event) => {\n // Ignore scrolling *inside* the panel (e.g. the options list / a\n // calendar's own overflow): the trigger hasn't moved, so there's\n // nothing to reposition — and for 'close' it must not self-close.\n if (overlayRef.overlayElement?.contains(event.target as Node)) return;\n if (config.scrollBehavior === 'close') {\n schedule(() => this._ngZone.run(() => {\n if (overlayRef.hasAttached()) {\n overlayRef.detach();\n }\n }));\n } else {\n schedule(() => overlayRef.updatePosition());\n }\n };\n const onResize = () => schedule(() => overlayRef.updatePosition());\n const removeViewportListeners = () => {\n document.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n if (rafId != null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n };\n this._ngZone.runOutsideAngular(() => {\n // capture: true → receives scroll from any nested container.\n document.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n });\n\n return {\n overlayRef,\n closed: closed.asObservable(),\n updatePosition: () => overlayRef.updatePosition(),\n close: () => {\n removeViewportListeners();\n destroyed.next();\n destroyed.complete();\n if (overlayRef.hasAttached()) {\n overlayRef.detach();\n }\n overlayRef.dispose();\n closed.complete();\n }\n };\n }\n\n /**\n * Fallback order: below the trigger (start- then end-aligned), then above\n * (start- then end-aligned). CDK picks the first that fits; `withPush`\n * nudges it fully on-screen.\n */\n private _positions(offsetY: number): ConnectedPosition[] {\n return [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offsetY },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offsetY }\n ];\n }\n\n private _panelClasses(extra?: string | string[]): string[] {\n const classes = ['zen-overlay-panel'];\n if (Array.isArray(extra)) {\n classes.push(...extra);\n } else if (extra) {\n classes.push(extra);\n }\n return classes;\n }\n}\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-checkbox',\n templateUrl: './zendu-checkbox.component.html',\n styleUrls: ['./zendu-checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduCheckboxComponent {\n\n @Input() checked: boolean;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n @Input() label: string | number = 'Enable';\n\n @Input() labelColor: string = \"\";\n\n @Input() disabled = false;\n\n @Input() disableValueChange = false;\n\n @Input() indeterminate = false;\n\n @Input() imageUrl: string;\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() supportingText: string;\n\n /**\n * Toggle state\n */\n public toggle(): void {\n if (this.disabled || this.disableValueChange) {\n return;\n }\n\n this.checked = !this.checked;\n this.indeterminate = false;\n\n this.checkedChange.emit(this.checked);\n }\n}\n","<div class=\"checkbox-component\"\n [ngClass]=\"{'app-disabled': disabled, 'checkbox-md': size === 'md'}\"\n (click)=\"toggle()\">\n <button class=\"app-checkbox\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'app-checked': checked && !indeterminate, 'app-indeterminate': indeterminate }\">\n @if (checked && !indeterminate) {\n <i\n class=\"material-icons app-checkbox-icon\">done</i>\n }\n @if (indeterminate) {\n <i\n class=\"material-icons app-checkbox-icon\">remove</i>\n }\n </button>\n @if (label || supportingText) {\n <div class=\"app-checkbox-text-wrap\"\n >\n @if (label) {\n <div class=\"app-checkbox-label\"\n [ngStyle]=\"{'color': labelColor }\">\n @if (imageUrl) {\n <img class=\"checkbox-image\"\n [src]=\"imageUrl\"\n >\n }\n {{ label }}\n </div>\n }\n @if (supportingText) {\n <div class=\"app-checkbox-supporting-text\"\n >\n {{ supportingText }}\n </div>\n }\n </div>\n }\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-colorpicker',\n templateUrl: './zendu-colorpicker.component.html',\n styleUrls: ['./zendu-colorpicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduColorPickerComponent implements OnChanges {\n\n @Input() color: string;\n\n @Output() colorChange = new EventEmitter<string>();\n\n @Input() icon = \"text\";\n\n @Input() customTarget: HTMLElement;\n\n @Input() showNone = true;\n\n public opened = false;\n\n public menuLeft = \"0px\";\n\n public menuTop = \"\";\n\n public menuBottom = \"\";\n public colorsRows: { colors: string[] }[] = [\n { colors: [\"#5B0F00\", \"#660000\", \"#783F04\", \"#7F6000\", \"#274E13\", \"#0C343D\", \"#1C4587\", \"#073763\", \"#20124D\", \"#4C1130\"] },\n { colors: [\"#85200C\", \"#990000\", \"#B45F06\", \"#BF9000\", \"#38761D\", \"#134F5C\", \"#1155CC\", \"#0B5394\", \"#351C75\", \"#741B47\"] },\n { colors: [\"#A61C00\", \"#CC0000\", \"#E69138\", \"#F1C232\", \"#6AA84F\", \"#45818E\", \"#3C78D8\", \"#3D85C6\", \"#674EA7\", \"#A64D79\"] },\n { colors: [\"#CC4125\", \"#E06666\", \"#F6B26B\", \"#FFD966\", \"#93C47D\", \"#76A5AF\", \"#6D9EEB\", \"#6FA8DC\", \"#8E7CC3\", \"#C27BA0\"] },\n { colors: [\"#DD7E6B\", \"#EA9999\", \"#F9CB9C\", \"#FFE599\", \"#B6D7A8\", \"#A2C4C9\", \"#A4C2F4\", \"#9FC5E8\", \"#B4A7D6\", \"#D5A6BD\"] },\n { colors: [\"#E6B8AF\", \"#F4CCCC\", \"#FCE5CD\", \"#FFF2CC\", \"#D9EAD3\", \"#D0E0E3\", \"#C9DAF8\", \"#CFE2F3\", \"#D9D2E9\", \"#EAD1DC\"] },\n ]\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hidePicker();\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n constructor(\n private _element: ElementRef\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"customTarget\"] &&\n changes[\"customTarget\"].currentValue &&\n this.customTarget) {\n this.customTarget.addEventListener(\"click\", this.toggleEvent.bind(this));\n }\n this.updatePlacement();\n }\n\n public toggleEvent(evt: MouseEvent) {\n this.toggle();\n evt.stopPropagation();\n }\n\n public toggle() {\n this.updatePlacement();\n this.opened = !this.opened;\n }\n\n public updatePlacement() {\n\n let container: HTMLElement;\n if (this.customTarget) {\n container = this.customTarget;\n }\n else {\n const component = this._element.nativeElement as HTMLElement;\n container = component.getElementsByClassName(\"colorpicker-component\").item(0) as HTMLElement;\n }\n\n const left = container.getBoundingClientRect().left;\n const top = container.getBoundingClientRect().top;\n const bottom = container.getBoundingClientRect().bottom;\n\n const margin = 8;\n\n this.menuLeft = `${left}px`;\n const distToBottomOfPage = window.innerHeight - top;\n if (distToBottomOfPage > 150) {\n this.menuTop = `${bottom + margin}px`;\n this.menuBottom = \"\";\n }\n else {\n const bottomFixed = window.innerHeight - top + margin;\n this.menuBottom = `${bottomFixed}px`;\n this.menuTop = \"\";\n }\n }\n\n private hidePicker() {\n this.opened = false;\n }\n\n public selectColor(color: string) {\n this.color = color;\n this.colorChange.emit(color);\n }\n}\n","<div class=\"colorpicker-component\"\n (click)=\"toggle()\"\n [class.opened]=\"opened\"\n [class.no-size]=\"customTarget\">\n\n @if (!customTarget) {\n @if (icon == 'text') {\n <div>\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_text.svg\"\n class=\"icon-text\">\n </div>\n }\n @if (icon == 'paint') {\n <div>\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_paint.svg\"\n class=\"icon-paint\">\n </div>\n }\n <div class=\"toggle\">\n <i class=\"material-icons\">arrow_drop_down</i>\n </div>\n <div class=\"color-line\"\n [ngStyle]=\"{'border-color': color}\">\n </div>\n }\n\n @if (opened) {\n <div\n class=\"color-menu\"\n [ngStyle]=\"{ 'left': menuLeft, 'top': menuTop, 'bottom': menuBottom }\">\n <div class=\"colors-container\">\n @for (row of colorsRows; track row) {\n <div\n class=\"color-row\">\n @for (rowColor of row.colors; track rowColor) {\n <div\n (click)=\"selectColor(rowColor)\"\n class=\"color-item\"\n [ngStyle]=\"{'background-color': rowColor}\">\n @if (rowColor == color) {\n <div\n class=\"select-icon\">\n <i class=\"material-icons\">check</i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n @if (showNone) {\n <div\n class=\"no-color\"\n (click)=\"selectColor('')\">\n None\n </div>\n }\n </div>\n }\n</div>\n","// import { environment } from 'src/environments/environment';\ninterface IGeocodingRes {\n Name: string;\n\n City: string;\n\n Country: string;\n\n PostalCode: string;\n\n Street: string;\n\n State: string;\n\n Bounds: H.geo.Rect;\n}\nexport class Util {\n\n private _platform: H.service.Platform;\n constructor() {\n // this._platform = new H.service.Platform({\n // apikey: environment.hereMaps\n // });\n}\n public static debounce(func: any, wait: number, immediate?: boolean) {\n let timeout: any;\n const context: any = this;\n\n return function executedFunction() {\n const args = arguments;\n\n const later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n const callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n public static clone<T>(source: T): T\n {\n let str = JSON.stringify(source);\n let outObj = JSON.parse(str);\n\n this.updateClone(outObj);\n\n // Convert in the output object ISO string to Date object\n //\n // @ts-ignore\n for(let key of Object.keys(source))\n {\n const val = (source as any)[key];\n if(val &&\n typeof val == \"object\" &&\n typeof val.getTime == \"function\" &&\n typeof val.getDate == \"function\")\n {\n outObj[key] = new Date(val);\n }\n }\n\n return outObj;\n }\n\n\n\n /**\n * Remove internal angularjs properties\n * @param obj\n */\n private static updateClone(obj: any)\n {\n if(!obj)\n {\n return;\n }\n if(Array.isArray(obj))\n {\n for(let item of obj)\n {\n if(!item)\n {\n item = item;\n }\n this.updateClone(item);\n }\n return;\n }\n\n let type = typeof obj;\n if(type == \"string\" || type == \"number\")\n {\n return;\n }\n\n // Remove invalid props\n let keys = Object.keys(obj);\n keys.forEach((key) =>\n {\n if(key[0] == '$' ||\n key[0] == '&')\n {\n delete obj[key];\n return;\n }\n\n let val = obj[key];\n if(Array.isArray(val))\n {\n let arr = <Array<any>>val;\n for(let k of arr)\n {\n this.updateClone(k);\n }\n }\n else if(typeof val == \"object\")\n {\n this.updateClone(val);\n }\n });\n }\n\n\n public static copyProperties(source: any, dest: any)\n {\n for(let key of Object.keys(source))\n {\n dest[key] = source[key];\n }\n }\n\n public static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n })\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ViewChild,\n ElementRef,\n OnInit,\n OnChanges,\n SimpleChanges,\n HostBinding,\n ChangeDetectionStrategy,\n booleanAttribute,\n numberAttribute\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\nexport interface DropdownOption {\n label: string;\n value: string | number;\n icon?: string;\n}\n\n@Component({\n selector: 'zen-input',\n templateUrl: './zendu-input.component.html',\n styleUrls: ['./zendu-input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZenduInputComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduInputComponent implements ControlValueAccessor, OnInit, OnChanges {\n \n @ViewChild('inputElement') inputElement: ElementRef<HTMLInputElement | HTMLTextAreaElement>;\n \n /**\n * Input type attribute\n */\n @Input() type: 'text' | 'email' | 'password' | 'tel' | 'number' | 'url' | 'search' = 'text';\n \n /**\n * Input variant type\n */\n @Input() variant: 'default' | 'input-field' | 'payment' | 'leading-dropdown' | 'leading-text' | 'trailing-dropdown' | 'trailing-text' = 'default';\n \n /**\n * Placeholder text\n */\n @Input() placeholder = '';\n \n /**\n * Label text (shown above input)\n */\n @Input() label = '';\n \n /**\n * Hint text (shown below input)\n */\n @Input() hintText = '';\n \n /**\n * Leading icon name (Material Icons)\n */\n @Input() leadingIcon = '';\n \n /**\n * Show help icon. The tooltip is shown on hover / keyboard focus.\n */\n @Input() helpIcon = false;\n\n /**\n * Tooltip text for the help icon (shown on hover / focus).\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 * Minimum value for `type=\"number\"` inputs (maps to the native `min`\n * attribute). Applied to all single-line types but only meaningful for\n * `number`; the browser ignores it otherwise. Not applied to multiline.\n */\n @Input() min?: number;\n\n /**\n * Maximum value for `type=\"number\"` inputs (maps to the native `max`\n * attribute). Applied to all single-line types but only meaningful for\n * `number`; the browser ignores it otherwise. Not applied to multiline.\n */\n @Input() max?: number;\n\n /**\n * Step increment for `type=\"number\"` inputs (maps to the native `step`\n * attribute). Accepts a number or the literal `'any'`.\n */\n @Input() step?: number | 'any';\n\n /**\n * Autocomplete attribute\n */\n @Input() autocomplete = 'off';\n \n /**\n * Name attribute\n */\n @Input() name = '';\n \n /**\n * ID attribute\n */\n @Input() id = '';\n \n /**\n * Leading dropdown options\n */\n @Input() leadingDropdownOptions: DropdownOption[] = [];\n \n /**\n * Selected leading dropdown value\n */\n @Input() leadingDropdownValue: string | number = '';\n \n /**\n * Leading dropdown placeholder\n */\n @Input() leadingDropdownPlaceholder = 'Select';\n \n /**\n * Trailing dropdown options\n */\n @Input() trailingDropdownOptions: DropdownOption[] = [];\n \n /**\n * Selected trailing dropdown value\n */\n @Input() trailingDropdownValue: string | number = '';\n \n /**\n * Trailing dropdown placeholder\n */\n @Input() trailingDropdownPlaceholder = 'Select';\n \n /**\n * Leading static text\n */\n @Input() leadingText = '';\n\n /**\n * Trailing static text\n */\n @Input() trailingText = '';\n \n /**\n * Render a multiline textarea instead of a single-line input.\n * Composes with label/hint/character-count/states; single-line\n * adornments (leading/trailing dropdowns and text) are not used.\n */\n @Input({ transform: booleanAttribute }) multiline = false;\n\n /**\n * Initial visible rows for the multiline textarea (height is then\n * user-resizable vertically). Only applies when `multiline` is true.\n */\n @Input({ transform: numberAttribute }) rows = 3;\n\n /**\n * Whether the multiline textarea can be resized via the footer drag handle.\n * When false, the handle is hidden and the height stays fixed at `rows`.\n */\n @Input({ transform: booleanAttribute }) resizable = true;\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 for the `[(value)]` two-way binding.\n *\n * NOTE — type contract for `type=\"number\"`: this output always emits the\n * RAW STRING from the input element. The CVA path (`[(ngModel)]` /\n * `formControl`) instead emits a real `number` (or '' when empty/invalid).\n * So a consumer binding BOTH `[(value)]` and ngModel/formControl to the same\n * number input will observe a `string` here and a `number` there for the\n * same edit. Bind only one, and prefer ngModel/formControl when you need the\n * numeric value.\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 * 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: string | number = '';\n public isFocused = false;\n public helpTooltipAlign: 'center' | 'start' | 'end' = 'center';\n public helpTooltipPlacement: 'above' | 'below' = 'above';\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 | number) => 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 | number): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string | number) => 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 | HTMLTextAreaElement;\n \n if (this.type === 'tel') {\n // Handle phone input\n this.phoneText = target.value;\n this.onPhoneChanged(target as HTMLInputElement);\n } else {\n // Handle regular input. The CVA path (ngModel/formControl) receives a\n // real number for type=number (or '' when empty/invalid) so reactive\n // consumers get numeric values. The [(value)] output keeps its raw\n // string contract — existing consumers bind string handlers to it.\n this.value = target.value;\n this.onChange(this.coerceValue(target.value));\n this.valueChange.emit(target.value);\n }\n }\n\n private coerceValue(raw: string): string | number {\n if (this.type === 'number' && raw !== '') {\n const num = Number(raw);\n if (!Number.isNaN(num)) {\n return num;\n }\n }\n return raw;\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 /**\n * Position the help tooltip so it never overflows the viewport. Horizontally:\n * anchored to the icon's right edge near the right border, to its left edge near\n * the left border, otherwise centered. Vertically: above by default, flipped\n * below when there isn't room above and there's more room below (e.g. an icon\n * near the top of the viewport). Computed from the icon rect synchronously\n * (before paint) so the tooltip appears in its final spot without a flicker.\n */\n updateHelpTooltipPlacement(event: Event): void {\n const icon = event.currentTarget as HTMLElement | null;\n if (!icon) {\n return;\n }\n const rect = icon.getBoundingClientRect();\n const margin = 8;\n\n const iconCenter = rect.left + rect.width / 2;\n const halfMaxWidth = 130;\n if (iconCenter + halfMaxWidth > window.innerWidth - margin) {\n this.helpTooltipAlign = 'end';\n } else if (iconCenter - halfMaxWidth < margin) {\n this.helpTooltipAlign = 'start';\n } else {\n this.helpTooltipAlign = 'center';\n }\n\n const estimatedHeight = 56;\n const spaceAbove = rect.top;\n const spaceBelow = window.innerHeight - rect.bottom;\n this.helpTooltipPlacement =\n spaceAbove < estimatedHeight + margin && spaceBelow > spaceAbove ? 'below' : 'above';\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 ? String(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 if (this.multiline) {\n classes.push('multiline');\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 /**\n * Drag-to-resize for the multiline textarea via the custom footer handle.\n * Native resize is disabled in CSS; this adjusts the textarea height while\n * the pointer is held, clamped to a minimum.\n */\n onResizeStart(event: PointerEvent): void {\n if (this.disabled) {\n return;\n }\n const textarea = this.inputElement?.nativeElement;\n const handle = event.currentTarget as HTMLElement;\n if (!textarea || !handle) {\n return;\n }\n event.preventDefault();\n\n const startY = event.clientY;\n const startHeight = textarea.offsetHeight;\n const minHeight = 80;\n\n const onMove = (moveEvent: PointerEvent): void => {\n const nextHeight = Math.max(minHeight, startHeight + (moveEvent.clientY - startY));\n textarea.style.height = `${nextHeight}px`;\n };\n const onEnd = (): void => {\n handle.removeEventListener('pointermove', onMove);\n handle.removeEventListener('pointerup', onEnd);\n handle.removeEventListener('pointercancel', onEnd);\n // Implicit capture release (context menu, re-render, gesture\n // preemption) fires lostpointercapture instead of pointerup —\n // clean up here too so the move listener can't leak.\n handle.removeEventListener('lostpointercapture', onEnd);\n };\n\n try {\n handle.setPointerCapture(event.pointerId);\n } catch {\n // Already-released or synthetic pointer — proceed without capture.\n }\n handle.addEventListener('pointermove', onMove);\n handle.addEventListener('pointerup', onEnd);\n handle.addEventListener('pointercancel', onEnd);\n handle.addEventListener('lostpointercapture', onEnd);\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(fullNumber);\n this.valueChange.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 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}\n","<div class=\"zen-input-container\" [ngClass]=\"inputClasses\">\n <!-- Label -->\n @if (showLabel) {\n <label\n [for]=\"id\"\n class=\"zen-input-label text text-sm text-weight-medium\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n @if (required) {\n <span class=\"required-indicator\">*</span>\n }\n </label>\n }\n\n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n\n <!-- Leading icon -->\n @if (leadingIcon && variant === 'default' && !multiline) {\n <i\n class=\"material-icons zen-input-leading-icon\"\n (click)=\"onLeadingIconClick($event)\">\n {{ leadingIcon }}\n </i>\n }\n\n <!-- Leading dropdown -->\n @if (variant === 'leading-dropdown') {\n <div\n class=\"zen-input-leading-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggleLeadingDropdown(); $event.stopPropagation()\">\n <span class=\"dropdown-label\">{{ getLeadingDropdownLabel() }}</span>\n <i class=\"material-icons dropdown-icon\">expand_more</i>\n </button>\n @if (leadingDropdownOpen) {\n <div class=\"zen-dropdown-menu\"\n [ngClass]=\"{'open': leadingDropdownOpen}\">\n @for (option of leadingDropdownOptions; track option) {\n <button\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === leadingDropdownValue}\"\n (click)=\"onLeadingDropdownChange(option.value); $event.stopPropagation()\">\n @if (option.icon) {\n <i class=\"material-icons option-icon\">{{ option.icon }}</i>\n }\n {{ option.label | translate }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Leading text -->\n @if (variant === 'leading-text') {\n <span\n class=\"zen-input-leading-text text text-md text-weight-regular\">\n {{ leadingText }}\n </span>\n }\n\n <!-- Payment card icon -->\n @if (variant === 'payment') {\n <div\n class=\"zen-payment-card-icon\">\n <i class=\"material-icons card-icon\">payment</i>\n </div>\n }\n\n <!-- Input content based on type -->\n @if (type === 'tel') {\n <ng-container *ngTemplateOutlet=\"phoneInputTemplate\"></ng-container>\n } @else if (multiline) {\n <textarea #inputElement\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 [rows]=\"rows\"\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)\"></textarea>\n } @else {\n <input #inputElement\n [type]=\"type\"\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [attr.maxlength]=\"maxLength\"\n [attr.minlength]=\"minLength\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.step]=\"step\"\n [pattern]=\"pattern\"\n [autocomplete]=\"autocomplete\"\n class=\"zen-input-field text text-md text-weight-regular\"\n [ngClass]=\"{'zen-payment-field': variant === 'payment'}\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\" />\n }\n\n <!-- Multiline footer: help icon (left), then character count + resize handle (right).\n Only rendered when it has content so an empty textarea keeps a full-height\n scrollbar and symmetric padding (see the no-footer rule in SCSS). -->\n @if (multiline && (resizable || helpIcon || showCharacterCount)) {\n <div class=\"zen-textarea-footer\">\n @if (helpIcon) {\n <div class=\"zen-input-trailing-container\">\n <span\n class=\"zen-help-icon\"\n role=\"img\"\n [class.disabled]=\"disabled\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-label]=\"helpTooltip | translate\"\n (mouseenter)=\"updateHelpTooltipPlacement($event)\"\n (focus)=\"updateHelpTooltipPlacement($event)\">\n <i class=\"material-icons-outlined\">help_outline</i>\n <div\n class=\"zen-help-tooltip\"\n [class.align-start]=\"helpTooltipAlign === 'start'\"\n [class.align-end]=\"helpTooltipAlign === 'end'\"\n [class.place-below]=\"helpTooltipPlacement === 'below'\">\n <div class=\"tooltip-content\">\n {{ helpTooltip | translate }}\n </div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n </span>\n </div>\n }\n <div class=\"zen-textarea-footer-end\">\n @if (showCharacterCount) {\n <span class=\"zen-character-count text text-sm text-weight-regular\">\n {{ characterCount }}\n </span>\n }\n @if (resizable) {\n <span\n class=\"zen-textarea-resize-handle\"\n [class.disabled]=\"disabled\"\n title=\"Drag to resize\"\n (pointerdown)=\"onResizeStart($event)\"\n (click)=\"$event.stopPropagation()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17.5 5.5 5.5 17.5M17.5 12.5 12.5 17.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Default input template -->\n\n <!-- Trailing elements container — render only when it has content, so a plain\n input (e.g. number) doesn't reserve trailing space or shift its spinner. -->\n @if (\n variant === 'trailing-text' ||\n (showCharacterCount && !helpIcon && variant === 'default' && !multiline) ||\n (helpIcon && variant !== 'trailing-dropdown' && !multiline) ||\n variant === 'trailing-dropdown'\n ) {\n <div class=\"zen-input-trailing-container\">\n <!-- Trailing text -->\n @if (variant === 'trailing-text') {\n <span\n class=\"zen-input-trailing-text text text-md text-weight-regular\">\n {{ trailingText }}\n </span>\n }\n\n <!-- Character counter -->\n @if (showCharacterCount && !helpIcon && variant === 'default' && !multiline) {\n <span\n class=\"zen-character-count text text-sm text-weight-regular\">\n {{ characterCount }}\n </span>\n }\n\n <!-- Help icon -->\n @if (helpIcon && variant !== 'trailing-dropdown' && !multiline) {\n <span\n class=\"zen-help-icon\"\n role=\"img\"\n [class.disabled]=\"disabled\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-label]=\"helpTooltip | translate\"\n (mouseenter)=\"updateHelpTooltipPlacement($event)\"\n (focus)=\"updateHelpTooltipPlacement($event)\">\n <i class=\"material-icons-outlined\">help_outline</i>\n <!-- Help tooltip (shown on hover / focus) -->\n <div\n class=\"zen-help-tooltip\"\n [class.align-start]=\"helpTooltipAlign === 'start'\"\n [class.align-end]=\"helpTooltipAlign === 'end'\"\n [class.place-below]=\"helpTooltipPlacement === 'below'\">\n <div class=\"tooltip-content\">\n {{ helpTooltip | translate }}\n </div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n </span>\n }\n\n <!-- Trailing dropdown -->\n @if (variant === 'trailing-dropdown') {\n <div\n class=\"zen-input-trailing-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggleTrailingDropdown(); $event.stopPropagation()\">\n <span class=\"dropdown-label\">{{ getTrailingDropdownLabel() }}</span>\n <i class=\"material-icons dropdown-icon\">expand_more</i>\n </button>\n @if (trailingDropdownOpen) {\n <div class=\"zen-dropdown-menu dropdown-menu-right\"\n [ngClass]=\"{'open': trailingDropdownOpen}\">\n @for (option of trailingDropdownOptions; track option) {\n <button\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === trailingDropdownValue}\"\n (click)=\"onTrailingDropdownChange(option.value); $event.stopPropagation()\">\n @if (option.icon) {\n <i class=\"material-icons option-icon\">{{ option.icon }}</i>\n }\n {{ option.label | translate }}\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Hint text / Error message -->\n @if (showHintText) {\n <div\n class=\"zen-input-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n @if (destructive) {\n <i class=\"material-icons-outlined hint-icon\">error_outline</i>\n }\n {{ displayHintText | translate }}\n </div>\n }\n\n <!-- Phone Country Dropdown (for tel type) -->\n @if (type === 'tel' && isPhoneDropdownExpanded) {\n <div\n class=\"zen-phone-dropdown-menu\">\n <div class=\"zen-phone-dropdown-list\">\n <!-- Countries List -->\n @for (country of countryList; track country) {\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === country.countryName}\"\n (click)=\"onCountryChanged(country)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"country.flag\"\n [alt]=\"country.countryName\">\n <span class=\"zen-phone-country-name\">{{ country.countryName | translate }}</span>\n <span class=\"zen-phone-country-code\">{{ country.countryCallingCode }}</span>\n </button>\n }\n <!-- Custom Country -->\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"onCountryChanged(customCountry)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"customCountry.flag\"\n [alt]=\"customCountry.countryName\">\n <span class=\"zen-phone-country-name\">{{ customCountry.countryName | translate }}</span>\n <span class=\"zen-phone-country-code\">{{ customCountry.countryCallingCode }}</span>\n </button>\n </div>\n </div>\n }\n</div>\n\n<!-- Phone Input Template -->\n<ng-template #phoneInputTemplate>\n <!-- Phone country selector -->\n <div class=\"zen-phone-country-select\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"selectedCountry.flag\"\n [alt]=\"selectedCountry.countryName\">\n <span class=\"zen-phone-code\">{{ selectedCountry.countryCallingCode }}</span>\n <button type=\"button\"\n class=\"zen-phone-dropdown-btn\"\n [disabled]=\"disabled\"\n (click)=\"togglePhoneDropdown(); $event.stopPropagation()\">\n <i class=\"material-icons zen-phone-expand-icon\"\n [ngClass]=\"{'active': isPhoneDropdownExpanded}\">expand_more</i>\n </button>\n </div>\n\n <!-- Phone input field -->\n <input #inputElement\n type=\"text\"\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [value]=\"phoneText\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [attr.maxlength]=\"phoneMaxLength\"\n [attr.minlength]=\"minLength\"\n [autocomplete]=\"autocomplete\"\n class=\"zen-input-field text text-md text-weight-regular\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\" />\n</ng-template>\n\n<!-- Click outside handler for dropdowns -->\n@if (leadingDropdownOpen || trailingDropdownOpen || isPhoneDropdownExpanded) {\n <div\n class=\"zen-dropdown-backdrop\"\n (click)=\"closeDropdowns(); hidePhoneDropdown()\"></div>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { Util } from '../util';\n\n@Component({\n selector: 'zen-search-box',\n templateUrl: './zendu-search-box.component.html',\n styleUrls: ['./zendu-search-box.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSearchBoxComponent implements OnInit {\n @Input() text: string;\n\n @Output() textChange = new EventEmitter<string>();\n\n @Input() set delay(val: number) {\n this.setDelay(val);\n }\n\n @Input() autoFocus = true;\n\n @Input() disabled = false;\n\n @Input() public placeholder = 'Search';\n\n private _debouncedInvoke!: () => void;\n\n private _focusAttempts = 0;\n\n public constructor(private _element: ElementRef, private _ngZone: NgZone) {\n this.setDelay(500);\n }\n\n public ngOnInit(): void {\n // give 100ms for autoFocus initalization\n setTimeout(() => {\n if (this.autoFocus) {\n this.doFocus();\n }\n }, 100);\n }\n\n public onChange() {\n this._debouncedInvoke();\n }\n\n public clearFromParent() {\n this.text = '';\n }\n\n public clear() {\n this.text = '';\n this._debouncedInvoke();\n }\n\n private invokeChange() {\n this._ngZone.run(() => {\n this.textChange.emit(this.text);\n });\n }\n\n private setDelay(delay: number) {\n this._debouncedInvoke = Util.debounce(() => {\n this.invokeChange();\n }, delay);\n }\n\n public doFocus() {\n this._focusAttempts++;\n if (this._focusAttempts > 100) {\n // stop attempts to initalize\n return;\n }\n\n const input = this.getInput(this._element.nativeElement);\n if (!input) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n // check if element visible or not\n const height = input.clientHeight;\n if (height == 0) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n\n // set focus to element\n setTimeout(() => {\n input.focus();\n }, 1);\n }\n\n private getInput(element: HTMLElement | null): HTMLInputElement | null {\n if (!element) {\n return null;\n }\n if (element.nodeName == 'INPUT') {\n return element as HTMLInputElement;\n }\n\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (el && el.nodeName == 'INPUT') {\n return el as HTMLInputElement;\n }\n }\n\n // find input in the children tree\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (!el) {\n continue;\n }\n const elInput = this.getInput(el as HTMLElement);\n if (elInput) {\n return elInput;\n }\n }\n\n return null;\n }\n}\n","<div class=\"search-box-component\"\n [class.has-text]=\"text\">\n <zen-input [(ngModel)]=\"text\"\n [placeholder]=\"placeholder | translate\"\n [disabled]=\"disabled\"\n leadingIcon=\"search\"\n autocomplete=\"off\"\n (ngModelChange)=\"onChange()\">\n </zen-input>\n @if (text) {\n <i class=\"material-icons close-icon\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"clear(); $event.stopPropagation()\">close</i>\n }\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ColumnState } from './columnState';\nimport { Util } from './../util';\n\n@Component({\n selector: 'zen-column-configuration',\n templateUrl: './zendu-column-configuration.component.html',\n styleUrls: ['./zendu-column-configuration.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduColumnConfigurationComponent implements OnChanges {\n /**\n * callback to emit changes for parent component\n */\n @Output() configurationChange = new EventEmitter<ColumnState[]>();\n\n /**\n * input propery\n */\n @Input() configuration: ColumnState[] = [];\n\n /**\n * Default configuration for reset button\n */\n @Input() defaultConfiguration: ColumnState[] = [];\n\n /**\n * dropdown position\n */\n @Input() dropdownPosition: 'right' | 'left' = 'right';\n\n /**\n * Inital configuration\n */\n private _sourceConfiguration: ColumnState[] = [];\n\n public tempColumnConfiguration: ColumnState[] = [];\n\n public filteredColumnsConfiguration: ColumnState[] = [];\n\n public showPanel: boolean = false;\n\n public searchText = '';\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n // hide the menu for outside click\n this.hide();\n }\n\n ngOnChanges(changes: any): void {\n if (changes.configuration.currentValue && this.configuration) {\n this.initData();\n }\n }\n\n public initData() {\n this.tempColumnConfiguration = Util.clone(this.configuration);\n this._sourceConfiguration = Util.clone(this.configuration);\n this.filterItems();\n }\n\n public togglePanel() {\n this.showPanel = !this.showPanel;\n // clear search\n this.searchText = '';\n if (this.showPanel) {\n // restore inital values on open\n this.tempColumnConfiguration = Util.clone(this._sourceConfiguration);\n }\n this.filterItems();\n }\n\n public apply() {\n this.configuration = Util.clone(this.tempColumnConfiguration);\n // overwrite the default as well\n this._sourceConfiguration = Util.clone(this.tempColumnConfiguration);\n this.showPanel = false;\n this.configurationChange.emit(this.configuration);\n }\n\n public hide() {\n this.showPanel = false;\n }\n\n public onDrop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(\n this.filteredColumnsConfiguration,\n event.previousIndex,\n event.currentIndex\n );\n this.tempColumnConfiguration = this.filteredColumnsConfiguration;\n }\n\n public reset() {\n if (this.defaultConfiguration && this.defaultConfiguration.length) {\n // use the default configuration\n this.tempColumnConfiguration = Util.clone(this.defaultConfiguration);\n } else {\n // activate all items\n for (const item of this.tempColumnConfiguration) {\n item.isVisible = true;\n }\n }\n this.filterItems();\n }\n\n public filterItems(): void {\n this.filteredColumnsConfiguration = this.tempColumnConfiguration.filter(\n (col) =>\n col.displayName\n .toLowerCase()\n .includes(this.searchText.trim().toLowerCase())\n );\n }\n}\n","<div class=\"column-config-component\">\n <button class=\"button-basic button-icon\"\n [ngClass]=\"{ 'active': showPanel }\"\n (click)=\"togglePanel()\">\n <i class=\"material-icons\">view_column</i>\n </button>\n\n @if (showPanel) {\n <div\n class=\"action-menu column-config-menu\"\n [ngClass]=\"{'right': dropdownPosition === 'right'}\">\n <div class=\"action-menu-header\">\n <div class=\"title\">Manage Columns</div>\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"filterItems()\"></zen-search-box>\n </div>\n <div class=\"action-menu-body dnd-container\"\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (config of filteredColumnsConfiguration; track config) {\n <div\n class=\"action-item-checkbox drag-item\"\n cdkDrag>\n <zen-checkbox class=\"flex-1\"\n [(checked)]=\"config.isVisible\"\n [label]=\"config.displayName\"></zen-checkbox>\n <i class=\"material-icons drag-icon\">drag_handle</i>\n </div>\n }\n </div>\n <div class=\"action-menu-footer\">\n <button (click)=\"reset()\"\n type=\"button\"\n class=\"button-stroked full-width\">Reset</button>\n <button (click)=\"apply()\"\n type=\"button\"\n class=\"button-flat full-width\">Apply</button>\n </div>\n </div>\n }\n</div>\n","export enum DATEPICKER_POSITION {\n AUTO = 'auto',\n LEFT = 'left',\n RIGHT = 'right',\n TOP = 'top',\n BOTTOM = 'bottom'\n}","import { InjectionToken } from '@angular/core';\n\nexport interface ZenIconConfig {\n iconBasePath: string;\n}\n\nexport const ZEN_ICON_CONFIG = new InjectionToken<ZenIconConfig>('ZEN_ICON_CONFIG', {\n providedIn: 'root',\n factory: () => ({ iconBasePath: 'https://storage.googleapis.com/trax_public/icons' })\n});\n\nexport type ZenIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type ZenIconColor = 'primary' | 'gray' | 'error' | 'warning' | 'success';\nexport type ZenIconTheme = 'light-circle' | 'light-circle-outline' | 'dark-circle' | 'light-square' | 'mid-square' | 'dark-square';\n","import { Component, ElementRef, Input, Inject, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { ZEN_ICON_CONFIG, ZenIconConfig, ZenIconSize, ZenIconColor, ZenIconTheme } from './icon-config';\n\n@Component({\n selector: 'zen-icon',\n templateUrl: './zendu-icon.component.html',\n styleUrls: ['./zendu-icon.component.scss'],\n host: {\n '[class.zen-icon--featured]': 'isFeatured'\n },\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduIconComponent implements OnChanges {\n\n @Input() src: string;\n @Input() name: string;\n @Input() size: ZenIconSize;\n @Input() color: ZenIconColor;\n @Input() theme: ZenIconTheme;\n @Input() customColor: string;\n\n resolvedSrc: string;\n isFeatured = false;\n\n constructor(\n private _host: ElementRef,\n @Inject(ZEN_ICON_CONFIG) private _config: ZenIconConfig\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Resolve icon source\n if (this.name) {\n this.resolvedSrc = `${this._config.iconBasePath}/${this.name}.svg`;\n } else if (this.src) {\n this.resolvedSrc = this.src;\n }\n\n this.isFeatured = !!(this.size && this.color && this.theme);\n\n const host = this._host.nativeElement as HTMLElement;\n\n if (this.isFeatured) {\n // Featured mode: clear host mask styles, let template handle it\n host.style.removeProperty('mask-image');\n host.style.removeProperty('-webkit-mask-image');\n host.style.removeProperty('background-color');\n } else if (this.resolvedSrc) {\n // Simple mode: apply mask to host and set background color based on color input\n host.style['mask-image'] = `url(${this.resolvedSrc})`;\n host.style['-webkit-mask-image'] = `url(${this.resolvedSrc})`;\n if (this.customColor) {\n host.style.backgroundColor = this.customColor;\n } else {\n host.style.removeProperty('background-color');\n }\n }\n }\n}\n","@if (isFeatured) {\n <div\n class=\"zen-icon-featured\"\n [ngClass]=\"['zen-icon-' + size, 'zen-icon-' + color, 'zen-icon-' + theme]\">\n <div class=\"zen-icon-inner\"\n [style.mask-image]=\"'url(' + resolvedSrc + ')'\"\n [style.-webkit-mask-image]=\"'url(' + resolvedSrc + ')'\"\n [style.background-color]=\"customColor || null\">\n </div>\n </div>\n}\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from './date-picker-day';\nimport { DatePickerHint } from \"./date-picker-hint\";\nimport { DATEPICKER_POSITION } from './datepicker';\nimport { OverlayRef, Overlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst defaultHours = '12';\nconst defaultMinuts = '00';\nconst defaultSeconds = '00';\n\n@Component({\n selector: 'zen-datepicker',\n templateUrl: './zendu-datepicker.component.html',\n styleUrls: ['./zendu-datepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDatepickerComponent implements OnChanges {\n\n /**\n * Component property\n */\n @Input() date: Date;\n\n /**\n * callback to emit changes for parent component\n */\n @Output() dateChange = new EventEmitter<Date>();\n\n @Input() showTime = false;\n\n @Input() showSeconds = false;\n\n @Input() showDate = true;\n\n @Input() parentContainer: HTMLElement | null = null;\n\n @Input() containerClass: string;\n\n @Input() minDate: Date;\n\n @Input() maxDate: Date;\n\n @Input() boxDesign: boolean = false;\n\n @Input() highlightDays: number[] = [];\n\n @Input() autoConfirm: boolean = false;\n\n @Input() hint: DatePickerHint;\n\n /**\n * datepicker states\n */\n @Input() highlightError: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() readonly: boolean = false;\n\n @Input() xPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() yPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() dispalyOverParent: boolean = false;\n\n @ViewChild('dateMenu') dateMenu!: ElementRef;\n\n @ViewChild('triggerButton') triggerButton!: ElementRef;\n\n @ViewChild('dateMenuTemplate') dateMenuTemplate: TemplateRef<unknown>;\n\n private overlayRef: OverlayRef;\n\n public selectedTime: { Hr: number, Min: number, Sec: number } = { Hr: 1, Min: 0, Sec: 0 };\n\n public isPickerVisible = false;\n\n public dayRows: Array<{ days: DatePickerDay[] }> = [];\n\n public daysTitle = \"\";\n\n public weekDays = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fri\", \"Sa\", \"Su\"];\n\n public currentSlot = new Date();\n\n public hour = defaultHours;\n\n public min = defaultMinuts;\n\n public sec = defaultSeconds;\n\n public isPM = false;\n\n public _dateToSet: Date;\n\n public months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n public years = [];\n\n public monthPickerVisible: boolean = false;\n\n public yearPickerVisible: boolean = false;\n\n right: boolean = false;\n bottom: boolean = false;\n\n constructor(\n private _element: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _translate: TranslateService\n ) { }\n\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hideTimePicker()\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.date) {\n this._dateToSet = new Date(this.date);\n\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n }\n }\n\n public updatePlacement() {\n this.right = false;\n this.bottom = false;\n if (this.xPosition === DATEPICKER_POSITION.AUTO && this.getHorizontalMenuDirection() === DATEPICKER_POSITION.LEFT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.AUTO && this.getVerticalMenuDirection() === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n if (this.xPosition === DATEPICKER_POSITION.RIGHT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n }\n\n private getVerticalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const top = element.getBoundingClientRect().top;\n const height = window.innerHeight;\n if (top > (height / 2)) {\n return DATEPICKER_POSITION.TOP\n }\n else {\n return DATEPICKER_POSITION.BOTTOM;\n }\n }\n\n /**\n * Used to get datepicker position\n * @returns either \"left\" or \"right\"\n */\n private getHorizontalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const left = element.getBoundingClientRect().left;\n const width = window.innerWidth;\n if (left > (width / 2)) {\n return DATEPICKER_POSITION.LEFT;\n }\n else {\n return DATEPICKER_POSITION.RIGHT;\n }\n }\n\n\n public togglePicker() {\n if (this.disabled) return;\n\n this._dateToSet = this.date ? new Date(this.date) : null;\n\n this.isPickerVisible = !this.isPickerVisible;\n if (this.showDate) {\n this.currentSlot = this._dateToSet || new Date();\n this.updateDays();\n }\n if (this.showTime) {\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n\n if (this.date) {\n const m = moment(this.date);\n\n this.hour = m.format('hh');\n this.min = m.format('mm');\n this.sec = m.format('ss');\n this.isPM = m.format('A') === 'PM';\n }\n }\n if (this.isPickerVisible) {\n if (this.dispalyOverParent) {\n this.createOverlay();\n } else {\n this.updatePlacement();\n this.syncMenuPositionWithDelay();\n }\n }\n }\n\n private createOverlay() {\n const verticalDirection = this.getVerticalMenuDirection();\n const horizontalDirection = this.getHorizontalMenuDirection();\n\n const position: ConnectedPosition = {\n originX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n originY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'bottom' : 'top',\n overlayX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n overlayY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'top' : 'bottom'\n };\n\n // Determine the vertical position (below or above) and set the vertical offset (0 for below, -20 for above)\n const isBelow = verticalDirection === DATEPICKER_POSITION.BOTTOM;\n const offsetY = isBelow ? 0 : -20;\n\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.triggerButton)\n .withPositions([\n position\n ])\n // Disable flexible dimensions, meaning the overlay will not resize automatically\n .withFlexibleDimensions(false)\n // Set the vertical offset to avoid overlapping with the parent button \n .withDefaultOffsetY(offsetY)\n // Disable automatic repositioning of the overlay to avoid overlap with other elements\n .withPush(false);\n\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'custom-backdrop',\n panelClass: 'custom-overlay',\n });\n\n this.overlayRef.attach(new TemplatePortal(this.dateMenuTemplate, this.viewContainerRef));\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n this.isPickerVisible = false;\n });\n\n }\n\n // Method to close the overlay\n public closePicker(): void {\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.isPickerVisible = false;\n }\n\n // Cleanup overlay on component destruction\n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n\n private showDatePicker() {\n setTimeout(() => {\n if (this.dateMenu) {\n this.dateMenu.nativeElement.style.visibility = 'visible';\n }\n }, 0)\n }\n\n private syncMenuPositionWithDelay() {\n if (!this.parentContainer) {\n this.showDatePicker();\n return;\n }\n\n setTimeout(() => {\n const elementRect = this._element.nativeElement.getBoundingClientRect();\n const parentRect = this.parentContainer.getBoundingClientRect();\n\n // Calculate the top difference between element and parent (if available)\n const top = this.calculateTopPosition(elementRect, parentRect);\n\n const dateMenuRect = this.dateMenu?.nativeElement?.getBoundingClientRect();\n this.bottom = dateMenuRect?.height < top;\n this.showDatePicker();\n }, 0);\n }\n\n private calculateTopPosition(elementRect: DOMRect, parentRect: DOMRect): number {\n let top: number;\n if (elementRect.top < parentRect.top) {\n top = parentRect.top - elementRect.top; // Reverse order if condition is met\n } else {\n top = elementRect.top - parentRect.top; // Normal calculation\n }\n return top;\n }\n\n private updateDays() {\n if (!this.currentSlot) {\n this.currentSlot = new Date();\n }\n\n const enMonth = moment(this.currentSlot).format(\"MMM\");\n const translatedMonth = this._translate.instant(enMonth);\n\n this.daysTitle = moment(this.currentSlot).format(\"MMM yyyy\").replace(enMonth, translatedMonth);\n this.dayRows = [];\n let current = moment(this.currentSlot).startOf(\"month\").startOf(\"week\").add(1, \"day\");\n let end = moment(this.currentSlot).endOf(\"month\").endOf(\"week\").add(1, \"day\");\n\n const currentMonth = moment(this.currentSlot).month();\n\n const date = moment(this._dateToSet);\n\n while (current <= end) {\n const row = { days: [] as DatePickerDay[] };\n this.dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n\n let isSelected = false;\n if (date) {\n isSelected = current.date() == date.date() &&\n date.month() == current.month();\n }\n\n let isOutside = currentMonth != current.month();\n\n let isDisabled = false;\n\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let isHighlighted = false;\n\n if (this.highlightDays && this.highlightDays.length) {\n isHighlighted = this.highlightDays.indexOf(current.valueOf()) >= 0;\n }\n\n row.days.push({\n date: current.toDate(),\n lbl: moment(current).date().toString(),\n isOutside: isOutside,\n selected: isSelected,\n isDisabled: isDisabled,\n isHighlighted: isHighlighted\n });\n\n current = moment(current).add(1, \"day\");\n }\n }\n }\n\n public nextMonth() {\n this.currentSlot = moment(this.currentSlot).add(1, \"month\").toDate();\n this.updateDays();\n }\n\n public prevMonth() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"month\").toDate();\n this.updateDays();\n }\n\n public nextYear() {\n this.currentSlot = moment(this.currentSlot).add(1, \"year\").toDate();\n this.updateDays();\n }\n\n public prevYear() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"year\").toDate();\n this.updateDays();\n }\n\n public nextYearGroup() {\n this.years = this.years.map(year => year + 15);\n }\n\n public prevYearGroup() {\n this.years = this.years.map(year => year - 15);\n }\n\n public selectDay(day: DatePickerDay) {\n if (day.isDisabled) {\n // day is disabled\n return;\n }\n\n if (this.showTime) {\n this._dateToSet = moment(day.date).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else {\n this._dateToSet = new Date(day.date);\n\n if (this.autoConfirm) {\n this.apply();\n }\n }\n\n this.updateDays();\n }\n\n public selectMonth(month: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setMonth(month);\n this.currentSlot = newDate;\n this.updateDays();\n this.monthPickerVisible = false;\n }\n\n public selectYear(year: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setFullYear(year);\n this.currentSlot = newDate;\n this.updateDays();\n this.yearPickerVisible = false;\n }\n\n public hideTimePicker() {\n if (!this.dispalyOverParent) {\n this.isPickerVisible = false;\n }\n }\n\n\n public timeChanged() {\n let min = parseInt(this.min);\n let hour = parseInt(this.hour);\n let sec = this.showSeconds ? parseInt(this.sec) : 0;\n\n if (isNaN(hour) || isNaN(min)) {\n return;\n }\n\n if (this.showSeconds && isNaN(sec)) {\n return;\n }\n\n hour = Math.min(hour, 12);\n hour = Math.max(hour, 1);\n\n min = Math.min(min, 59);\n min = Math.max(min, 0);\n\n if (this.showSeconds) {\n sec = Math.min(sec, 59);\n sec = Math.max(sec, 0);\n }\n\n const time = moment(`${hour} ${min} ${sec} ${this.isPM ? \"pm\" : \"am\"}`, \"h m s a\");\n\n this.selectedTime = {\n Hr: time.hours(),\n Min: time.minutes(),\n Sec: time.seconds()\n };\n\n // added below condition because we can select the time without date, and it was showing invalid date in the input box\n // second condition is required to disable apply button when date is not selected\n if (this._dateToSet) {\n this._dateToSet = moment(this._dateToSet).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else if (!this.showDate) {\n this._dateToSet = moment().hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n }\n\n // format\n if (hour < 10) {\n this.hour = `0${hour}`;\n }\n else {\n this.hour = `${hour}`;\n }\n\n if (min < 10) {\n this.min = `0${min}`;\n }\n else {\n this.min = `${min}`;\n }\n\n if (this.showSeconds) {\n if (sec < 10) {\n this.sec = `0${sec}`;\n }\n else {\n this.sec = `${sec}`;\n }\n }\n\n }\n\n public formattedDate() {\n if (!this.date) {\n return \"\";\n }\n\n if (this.boxDesign && moment(this.date).isSame(moment(), \"day\")) {\n return 'Today';\n }\n\n // get the translated text for day and month\n const enMonth = moment(this.date).format(\"MMM\");\n const enDay = moment(this.date).format(\"ddd\");\n const translatedMonth = this._translate.instant(enMonth);\n const translatedDay = this._translate.instant(enDay);\n\n if (this.showDate && !this.showTime && !this.boxDesign) {\n // Expanded formatting for date only picker\n return moment(this.date).format(\"ddd, DD MMM YYYY\")\n .replace(enDay, translatedDay)\n .replace(enMonth, translatedMonth);\n }\n\n return moment(this.date).format(\"MMM DD, YY\").replace(enMonth, translatedMonth);\n }\n\n public formattedTime() {\n if (!this.date) {\n return \"\";\n }\n if (this.showSeconds) {\n return moment(this.date).format(\"h:mm:ss A\");\n }\n return moment(this.date).format(\"h:mm A\");\n }\n\n public toggleTime() {\n this.isPM = !this.isPM;\n this.timeChanged();\n }\n\n public showMonthPicker() {\n this.monthPickerVisible = true;\n }\n\n public showYearPicker() {\n this.yearPickerVisible = true;\n this.years = [];\n for (let i = this.currentSlot.getFullYear() - 7; i < this.currentSlot.getFullYear() + 8; i++) {\n this.years.push(i);\n }\n }\n\n public hourUp() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour++;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public hourDown() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour--;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public minUp() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min++;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public minDown() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min--;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public secUp() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec++;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public secDown() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec--;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public apply() {\n if (this._dateToSet) {\n // If time selection has enabled and user keeps default time then triggering the timeChanged function\n if (this.showTime && this.hour === defaultHours && this.min === defaultMinuts && this.sec === defaultSeconds) {\n this.timeChanged();\n }\n\n this.date = new Date(this._dateToSet);\n }\n this.dateChange.emit(this.date);\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public cancel() {\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public clear() {\n this._dateToSet = null;\n this.hour = defaultHours;\n this.min = defaultMinuts;\n this.date = null;\n this.apply();\n }\n\n public getIcon() {\n // Change picker icon based on mode\n switch (true) {\n case this.showDate && this.showTime:\n // Date + Time\n return 'assets/ng-zenduit/icons/date.svg';\n case this.showDate && !this.showTime:\n // Date only\n return 'assets/ng-zenduit/icons/calendar.svg';\n case !this.showDate && this.showTime:\n // Time only\n return 'assets/ng-zenduit/icons/time.svg';\n default:\n return 'assets/ng-zenduit/icons/date.svg';\n }\n }\n\n public selectHintDate(date: Date): void {\n if (!date) {\n console.error('Invalid hint');\n return;\n }\n\n this._dateToSet = new Date(date);\n this.selectedTime = {\n Hr: moment(date).hours(),\n Min: moment(date).minutes(),\n Sec: moment(date).seconds()\n };\n\n if (this.autoConfirm) {\n this.apply();\n }\n\n this.updateDays();\n }\n}\n","<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n @if (!boxDesign) {\n <button class=\"date-toggle\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n @if (!date && showDate && !showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date\" | translate}}\n </div>\n }\n @if (!date && showTime && !showDate) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Time\" | translate}}\n </div>\n }\n @if (!date && showTime && showDate && showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date & Time\" | translate}}\n </div>\n }\n <!-- Selected datetime -->\n @if (date) {\n <div>\n @if (showDate) {\n <span>{{formattedDate()}}</span>\n }\n @if (showTime) {\n <span> {{formattedTime()}}</span>\n }\n </div>\n }\n </div>\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n }\n\n <!-- Box design datepicker toggle -->\n @if (boxDesign) {\n <button class=\"date-toggle new-box-design\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n @if (!date && showDate && !showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date\" | translate}}\n </div>\n }\n @if (!date && showTime && !showDate) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Time\" | translate}}\n </div>\n }\n @if (!date && showTime && showDate && showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date & Time\" | translate}}\n </div>\n }\n <!-- Selected datetime -->\n @if (date) {\n <div>\n @if (showDate) {\n <span>{{formattedDate()}}</span>\n }\n @if (showTime) {\n <span> {{formattedTime()}}</span>\n }\n </div>\n }\n </div>\n </button>\n }\n\n <!-- Datepicker popup -->\n <ng-container *ngTemplateOutlet=\"dateMenuTemplate\">\n </ng-container>\n\n <ng-template #dateMenuTemplate>\n @if (isPickerVisible) {\n <div #dateMenu\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n @if (showDate) {\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n @for (weekDay of weekDays; track weekDay) {\n <div\n class=\"week-day\">\n {{weekDay | translate}}\n </div>\n }\n </div>\n @for (row of dayRows; track row) {\n <div\n class=\"day-row\">\n @for (day of row.days; track day) {\n <div\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl | translate}}\n @if (day.isHighlighted) {\n <zen-icon\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (showTime) {\n <div\n class=\"time-container\">\n <div class=\"time-lbl\">\n {{\"Select Time\" | translate}}:\n </div>\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"hourUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"hourDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <span>:</span>\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"minUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"minDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n @if (showSeconds) {\n <span>:</span>\n }\n @if (showSeconds) {\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"secUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"sec\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"secDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n }\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'PM' : 'AM') | translate}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'AM' : 'PM') | translate}}\n </div>\n </div>\n </div>\n </div>\n }\n @if (hint) {\n <div class=\"hint\"\n >\n <div class=\"hint-description\">\n {{hint.description | translate}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText | translate}}\n </div>\n </div>\n }\n @if (!autoConfirm || showTime) {\n <div class=\"footer\"\n >\n @if (date) {\n <button\n (click)=\"clear()\"\n class=\"button-stroked\">\n {{\"Clear\" | translate}}\n </button>\n }\n @if (!date) {\n <button\n (click)=\"cancel()\"\n class=\"button-stroked\">\n {{\"Cancel\" | translate}}\n </button>\n }\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n {{\"Apply\" | translate}}\n </button>\n </div>\n }\n @if (monthPickerVisible) {\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n @for (month of months; track month; let index = $index) {\n <div class=\"month-item\"\n (click)=\"selectMonth(index)\">\n {{ month | translate }}\n </div>\n }\n </div>\n </div>\n }\n @if (yearPickerVisible) {\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n @for (year of years; track year) {\n <div class=\"month-item\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n }\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle',\n templateUrl: './zendu-toggle.component.html',\n styleUrls: ['./zendu-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduToggleComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() disabled = false;\n\n @Input() label = '';\n\n @Input() supportingText = '';\n\n /**\n * Toggle state\n */\n public toggle() {\n if (this.disabled) return;\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<div class=\"zen-toggle-wrapper\"\n [class.zen-toggle--sm]=\"size === 'sm'\"\n [class.zen-toggle--md]=\"size === 'md'\"\n [class.zen-toggle--has-text]=\"label\">\n\n <button class=\"zen-toggle-track\"\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"enabled\"\n [attr.aria-disabled]=\"disabled\"\n [class.zen-toggle--active]=\"enabled\"\n [class.zen-toggle--disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\">\n <span class=\"zen-toggle-knob\"></span>\n </button>\n\n @if (label) {\n <div class=\"zen-toggle-text\">\n <span class=\"zen-toggle-label\">{{label}}</span>\n @if (supportingText) {\n <span class=\"zen-toggle-supporting\">{{supportingText}}</span>\n }\n </div>\n }\n\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { DataSource } from '../filter/filtersConfig';\n\n@Component({\n selector: 'zen-groups',\n templateUrl: './zendu-groups.component.html',\n styleUrls: ['./zendu-groups.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduGroupsComponent implements OnChanges {\n @Input() dataSource: DataSource[] = [];\n @Input() filteredDataSource: DataSource[] = [];\n @Input() hideSelectAll = false;\n @Input() isSelectedAll = false;\n @Input() inline = false;\n @Input() width = '300px';\n @Input() placeholder = 'Select group';\n @Input() hideSearch = false;\n @Input() idProp: string = 'id';\n @Input() displayProp: string = 'name';\n\n @Output() isSelectedAllChange = new EventEmitter<boolean>();\n @Output() checkedChange = new EventEmitter<DataSource>();\n\n public isOpen = false;\n public openUpward = false;\n public searchText = '';\n private _searchFilteredDataSource: DataSource[] | null = null;\n\n private _treeMap = new Map<string | number, DataSource>();\n private _childCountCache = new Map<string | number, number>();\n\n constructor(private _elementRef: ElementRef) {}\n\n private getChildren(item: any): string[] | undefined {\n return item.children || item.Children || item.Childrens;\n }\n\n public hasChildren(item: any): boolean {\n const children = this.getChildren(item);\n return !!children && children.length > 0;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['dataSource']) {\n this.buildTreeLevels();\n }\n if ((changes['filteredDataSource'] || changes['dataSource']) &&\n this._treeMap.size > 0 && this.filteredDataSource?.length) {\n this.filteredDataSource = this.sortTreeOrder(this.filteredDataSource);\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n onOutsideClick(event: MouseEvent) {\n if (this.inline || !this.isOpen) return;\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.isOpen = false;\n }\n }\n\n public toggleDropdown(): void {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.openUpward = this.shouldOpenUpward(300);\n } else {\n this.searchText = '';\n this._searchFilteredDataSource = null;\n }\n }\n\n private shouldOpenUpward(dropdownHeight: number): boolean {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return (window.innerHeight - rect.bottom) < dropdownHeight;\n }\n\n public get displayDataSource(): DataSource[] {\n if (this._searchFilteredDataSource !== null) {\n return this._searchFilteredDataSource;\n }\n return this.filteredDataSource;\n }\n\n public onSearchChange(): void {\n if (!this.searchText) {\n this._searchFilteredDataSource = null;\n return;\n }\n\n const lowerSearch = this.searchText.toLowerCase();\n const matchingIds = new Set<string | number>();\n\n for (const el of this.dataSource) {\n const name = typeof el[this.displayProp] === 'number' ? el[this.displayProp].toString() : el[this.displayProp];\n if (name.toLowerCase().includes(lowerSearch)) {\n matchingIds.add(el[this.idProp]);\n // Include all ancestors\n let current = el;\n while (current.parentId != null) {\n matchingIds.add(current.parentId);\n const parent = this._treeMap.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n }\n }\n\n let filtered = this.dataSource.filter(el => matchingIds.has(el[this.idProp]));\n\n // Auto-expand parents when searching\n for (const el of filtered) {\n if (this.hasChildren(el)) {\n el.isOpen = true;\n }\n }\n\n this._searchFilteredDataSource = this.sortTreeOrder(filtered);\n }\n\n public get selectedCount(): number {\n return this.dataSource?.filter(d => d.checked).length || 0;\n }\n\n public get selectedLabel(): string {\n const count = this.selectedCount;\n if (count === 0) return '';\n if (count === 1) {\n const item = this.dataSource.find(d => d.checked);\n return item ? item[this.displayProp]?.toString() : '';\n }\n return `${count} selected`;\n }\n\n public get hasActiveItems(): boolean {\n return this.dataSource?.some(d => d.checked) || false;\n }\n\n public onSelectAll(): void {\n this.dataSource.forEach(d => (d.checked = this.isSelectedAll));\n this.isSelectedAllChange.emit(this.isSelectedAll);\n }\n\n public onCheckChanged(dsItem: DataSource): void {\n this.cascadeToChildren(dsItem);\n this.updateParentCheckedState(dsItem);\n this.checkedChange.emit(dsItem);\n }\n\n private buildTreeLevels(): void {\n if (!this.dataSource?.length) return;\n const hasChildren = this.dataSource.some(d => this.hasChildren(d));\n if (!hasChildren) return;\n\n const map = new Map<string | number, DataSource>();\n for (const item of this.dataSource) {\n map.set(item[this.idProp], item);\n }\n this._treeMap = map;\n\n for (const item of this.dataSource) {\n const children = this.getChildren(item);\n if (children?.length) {\n for (const childId of children) {\n const child = map.get(childId);\n if (child && child.parentId == null) {\n child.parentId = item[this.idProp];\n }\n }\n }\n }\n\n for (const item of this.dataSource) {\n let level = 0;\n let current = item;\n while (current.parentId != null) {\n level++;\n const parent = map.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n item.level = level;\n }\n\n this._childCountCache.clear();\n const countChildren = (item: DataSource): number => {\n const children = this.getChildren(item);\n if (!children?.length) return 0;\n let count = 0;\n for (const childId of children) {\n const child = map.get(childId);\n if (child) {\n const childLeaves = countChildren(child);\n count += childLeaves > 0 ? childLeaves : 1;\n }\n }\n return count;\n };\n for (const item of this.dataSource) {\n if (this.hasChildren(item)) {\n this._childCountCache.set(item[this.idProp], countChildren(item));\n }\n }\n }\n\n public sortTreeOrder(items: DataSource[]): DataSource[] {\n const itemSet = new Set(items.map(i => i[this.idProp]));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item[this.idProp])) return;\n if (!itemSet.has(item[this.idProp])) return;\n visited.add(item[this.idProp]);\n ordered.push(item);\n const children = this.getChildren(item);\n if (children?.length) {\n for (const childId of children) {\n const child = this._treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item[this.idProp])) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public isTreeItemVisible(dsItem: DataSource): boolean {\n if (dsItem.parentId == null) {\n return true;\n }\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent) {\n return true;\n }\n return parent.isOpen && this.isTreeItemVisible(parent);\n }\n\n public toggleTreeNode(dsItem: DataSource): void {\n dsItem.isOpen = !dsItem.isOpen;\n }\n\n public getChildCount(dsItem: DataSource): number {\n return this._childCountCache.get(dsItem[this.idProp]) || 0;\n }\n\n public isTreeItemIndeterminate(dsItem: DataSource): boolean {\n if (!this.hasChildren(dsItem)) return false;\n const allDescendants = this.getAllDescendants(dsItem);\n if (!allDescendants.length) return false;\n const checkedCount = allDescendants.filter(d => d.checked).length;\n return checkedCount > 0 && checkedCount < allDescendants.length;\n }\n\n private getAllDescendants(dsItem: DataSource): DataSource[] {\n const result: DataSource[] = [];\n const children = this.getChildren(dsItem);\n if (!children?.length) return result;\n for (const childId of children) {\n const child = this._treeMap.get(childId);\n if (child) {\n result.push(child);\n result.push(...this.getAllDescendants(child));\n }\n }\n return result;\n }\n\n private updateParentCheckedState(dsItem: DataSource): void {\n if (dsItem.parentId == null) return;\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent || !this.hasChildren(parent)) return;\n const allDescendants = this.getAllDescendants(parent);\n const allChecked = allDescendants.every(d => d.checked);\n parent.checked = allChecked;\n this.updateParentCheckedState(parent);\n }\n\n private cascadeToChildren(item: DataSource): void {\n const children = this.getChildren(item);\n if (!children?.length) return;\n this.dataSource.forEach(data => {\n if (item[this.idProp] == data[this.idProp]) {\n return;\n }\n if (children.includes(<string>data[this.idProp])) {\n data.checked = item.checked;\n if (this.hasChildren(data)) {\n this.cascadeToChildren(data);\n }\n }\n });\n }\n\n public getTreeConnectors(dsItem: DataSource): string[] {\n if (!dsItem.level) return [];\n\n const isLastFlags: boolean[] = [];\n let current: DataSource | undefined = dsItem;\n\n for (let l = dsItem.level; l >= 1; l--) {\n const parent = this._treeMap.get(current!.parentId!);\n const parentChildren = parent ? this.getChildren(parent) : undefined;\n if (!parentChildren?.length) {\n isLastFlags.push(true);\n } else {\n const lastChildId = parentChildren[parentChildren.length - 1];\n isLastFlags.push(current![this.idProp] === lastChildId);\n }\n current = parent;\n }\n\n isLastFlags.reverse();\n\n const result: string[] = [];\n for (let i = 0; i < isLastFlags.length; i++) {\n const isItemLevel = (i === isLastFlags.length - 1);\n const isLast = isLastFlags[i];\n\n if (isItemLevel) {\n result.push(isLast ? 'elbow' : 'branch');\n } else {\n result.push(isLast ? 'none' : 'through');\n }\n }\n return result;\n }\n\n public getTreeMap(): Map<string | number, DataSource> {\n return this._treeMap;\n }\n}\n","<!-- Dropdown mode (default) -->\n@if (!inline) {\n <div class=\"zen-groups-dropdown\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n @if (!selectedLabel) {\n <span class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n }\n @if (selectedLabel) {\n <span class=\"zen-groups-value\">{{ selectedLabel }}</span>\n }\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n @if (isOpen) {\n <div class=\"zen-groups-panel\" [class.open-upward]=\"openUpward\">\n @if (!hideSearch) {\n <div class=\"zen-groups-search\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n }\n </div>\n}\n\n<!-- Inline mode (used inside zen-filter) -->\n@if (inline) {\n <div class=\"zen-groups-inline\">\n @if (!hideSearch) {\n <div class=\"zen-groups-search\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n}\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n @if (!hideSelectAll) {\n <div class=\"action-item-checkbox select-all\">\n @if (dataSource.length === displayDataSource.length) {\n <zen-checkbox\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n }\n </div>\n }\n\n @for (dsItem of displayDataSource; track dsItem) {\n @if (isTreeItemVisible(dsItem)) {\n <div\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"(inline ? 0 : 24) + (dsItem.level || 0) * 24\">\n @if (dsItem.level > 0) {\n @for (connector of getTreeConnectors(dsItem); track connector; let i = $index) {\n <div\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"(inline ? 8 : 32) + i * 24\">\n </div>\n }\n }\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem[displayProp]?.toString() | translate\"></zen-checkbox>\n @if (hasChildren(dsItem)) {\n <span\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n }\n </div>\n @if (hasChildren(dsItem)) {\n <button\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n }\n </div>\n }\n }\n\n @if (searchText && displayDataSource.length === 0) {\n <div class=\"zen-groups-no-results\">\n {{ 'No Results Found' | translate }}\n </div>\n }\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduRadioButtonComponent implements OnInit {\n\n @Input() selected: boolean;\n\n @Output() radioChange = new EventEmitter<string>();\n\n @Input() label: string;\n\n @Input() value: string;\n\n @Input() name: string;\n\n @Input() disabled = false;\n\n @Input() imageUrl: string;\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() supportingText: string;\n\n public selectedRadio: string;\n\n constructor() { }\n\n ngOnInit() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"selected\"]) {\n if (changes[\"selected\"].currentValue) {\n this.selectedRadio = this.value;\n }\n else {\n this.selectedRadio = \"\";\n }\n }\n }\n\n public emitChange(event: any): void {\n if (this.disabled) {\n return;\n }\n this.radioChange.emit(event.target.value);\n }\n}\n","<label class=\"radio-component\"\n [ngClass]=\"{'disabled-radio': disabled, 'radio-md': size === 'md'}\"\n for=\"{{value}}\">\n <input type=\"radio\"\n class=\"radio-input\"\n name=\"{{name}}\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n id=\"{{value}}\"\n [checked]=\"selectedRadio === value\"\n (change)=\"emitChange($event)\" />\n\n <span class=\"radio-indicator\"></span>\n\n @if (label || supportingText) {\n <div class=\"radio-text-wrap\"\n >\n <span class=\"app-radio-button-label\">\n @if (imageUrl) {\n <img class=\"radio-image\"\n [src]=\"imageUrl\"\n >\n }\n {{label | translate}}\n </span>\n @if (supportingText) {\n <span class=\"app-radio-supporting-text\"\n >\n {{supportingText}}\n </span>\n }\n </div>\n }\n</label>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-spinner',\n templateUrl: './zendu-spinner.component.html',\n styleUrls: ['./zendu-spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSpinner {\n @Input() size?: \"small\" | \"default\" = \"default\";\n}\n","<div class=\"component\"\n [class.small-size]=\"size == 'small'\">\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport type DatePickerDropdownType = 'single' | 'range';\n\nexport interface DatePickerPreset {\n label: string;\n getRange: () => { start: Date; end: Date };\n}\n\nexport const ZEN_DATE_PICKER_DEFAULT_PRESETS =\n new InjectionToken<DatePickerPreset[]>('ZEN_DATE_PICKER_DEFAULT_PRESETS');\n\nexport interface DateRangeValue {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface DatePickerMarker {\n title?: string;\n color?: string;\n dates: number[];\n}\n","import {\n Component, ElementRef, EventEmitter, HostListener, Inject, Input,\n OnChanges, OnDestroy, OnInit, Optional, Output, SimpleChanges, ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from '../datepicker/date-picker-day';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n DatePickerDropdownType, DatePickerMarker, DatePickerPreset, DateRangeValue,\n ZEN_DATE_PICKER_DEFAULT_PRESETS\n} from './date-picker-dropdown.types';\n\nconst MOBILE_BREAKPOINT = 768;\n\n// Minimum viewport width needed to show the range picker's dual-calendar\n// desktop layout (presets sidebar ~192px + two 328px calendars + dividers,\n// plus viewport margins). Below this we collapse to the single-calendar compact\n// layout, so the panel stays usable at high OS zoom or in small windows — not\n// only below the mobile breakpoint.\nconst RANGE_DESKTOP_MIN_WIDTH = 880;\n\n// Gap between the trigger and the panel, and the margin the panel is kept clear\n// of the viewport edges. The margin mirrors the SCSS max-height/max-width\n// fallback (`calc(100vh - 32px)`).\nconst PANEL_GAP = 8;\nconst VIEWPORT_MARGIN = 16;\n\n// Never clamp the scrollable panel below this — a shorter panel is unusable;\n// it scrolls internally instead (and the SCSS fallback still caps it to the\n// viewport).\nconst MIN_PANEL_HEIGHT = 160;\n\n@Component({\n selector: 'zen-date-picker-dropdown',\n templateUrl: './zendu-date-picker-dropdown.component.html',\n styleUrls: ['./zendu-date-picker-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDatePickerDropdownComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() type: DatePickerDropdownType = 'single';\n @Input() date: Date | null = null;\n @Output() dateChange = new EventEmitter<Date | null>();\n\n @Input() startDate: Date | null = null;\n @Output() startDateChange = new EventEmitter<Date | null>();\n\n @Input() endDate: Date | null = null;\n @Output() endDateChange = new EventEmitter<Date | null>();\n\n @Output() rangeChange = new EventEmitter<DateRangeValue>();\n\n @Input() presets: DatePickerPreset[] | null = null;\n @Input() minDate: Date | null = null;\n @Input() maxDate: Date | null = null;\n @Input() disabled: boolean = false;\n @Input() dateMarkers: DatePickerMarker[] = [];\n @Input() placeholder: string = '';\n @Input() mobileBreakpoint: number = MOBILE_BREAKPOINT;\n @Input() timePicker: boolean = false;\n @Input() autoApply: boolean = false;\n /**\n * Hide the built-in trigger button. The popup then anchors to the host\n * element, so an external control (e.g. a select) can drive it via open().\n */\n @Input() hideTrigger: boolean = false;\n\n /** Field label rendered above the trigger. Pass an already-translated\n * string (e.g. `[label]=\"'Select Date' | translate\"`) — not translated\n * internally. */\n @Input() label: string = '';\n\n /** Adds a red `*` to the label. */\n @Input() required: boolean = false;\n\n /** Trigger height: `md` (40px, default, matches the md button) or `form`\n * (46px, to sit flush in a 46px-tall form field row). */\n @Input() size: 'md' | 'form' = 'md';\n\n @ViewChild('triggerBtn') triggerBtn?: ElementRef;\n\n mobile = false;\n isOpen = false;\n dropdownStyle: { [key: string]: string } = {};\n\n // rAF handle used to throttle repositioning while the panel is open.\n private _positionRafId: number | null = null;\n\n // Left calendar state\n leftCurrentSlot = new Date();\n leftDayRows: Array<{ days: DatePickerDay[] }> = [];\n leftDaysTitle = '';\n\n // Right calendar state (for range desktop)\n rightCurrentSlot = new Date();\n rightDayRows: Array<{ days: DatePickerDay[] }> = [];\n rightDaysTitle = '';\n\n weekDays = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sat', 'Su'];\n\n // Internal selection state\n _selectedDate: Date | null = null;\n _selectedStart: Date | null = null;\n _selectedEnd: Date | null = null;\n _activePreset: string | null = null;\n _appliedPresetLabel: string | null = null;\n _appliedPresetStartTime: number | null = null;\n _appliedPresetEndTime: number | null = null;\n\n // Time picker state (start date, and single-date mode)\n _hours: number = 12;\n _minutes: number = 0;\n _period: 'AM' | 'PM' = 'AM';\n _hoursDisplay: string = '12';\n _minutesDisplay: string = '00';\n\n // Time picker state for the range end date\n _endHours: number = 12;\n _endMinutes: number = 0;\n _endPeriod: 'AM' | 'PM' = 'AM';\n _endHoursDisplay: string = '12';\n _endMinutesDisplay: string = '00';\n\n defaultPresets: DatePickerPreset[] = [\n {\n label: 'Today',\n getRange: () => ({\n start: moment().startOf('day').toDate(),\n end: moment().endOf('day').toDate()\n })\n },\n {\n label: 'Yesterday',\n getRange: () => ({\n start: moment().subtract(1, 'day').startOf('day').toDate(),\n end: moment().subtract(1, 'day').endOf('day').toDate()\n })\n },\n {\n label: 'This week',\n getRange: () => ({\n start: moment().startOf('isoWeek').toDate(),\n end: moment().endOf('isoWeek').toDate()\n })\n },\n {\n label: 'Last week',\n getRange: () => ({\n start: moment().subtract(1, 'week').startOf('isoWeek').toDate(),\n end: moment().subtract(1, 'week').endOf('isoWeek').toDate()\n })\n },\n {\n label: 'This month',\n getRange: () => ({\n start: moment().startOf('month').toDate(),\n end: moment().endOf('month').toDate()\n })\n },\n {\n label: 'Last month',\n getRange: () => ({\n start: moment().subtract(1, 'month').startOf('month').toDate(),\n end: moment().subtract(1, 'month').endOf('month').toDate()\n })\n }\n ];\n\n constructor(\n private _element: ElementRef,\n private _translate: TranslateService,\n @Optional() @Inject(ZEN_DATE_PICKER_DEFAULT_PRESETS) globalPresets: DatePickerPreset[] | null\n ) {\n if (globalPresets && globalPresets.length) {\n this.defaultPresets = globalPresets;\n }\n }\n\n ngOnInit(): void {\n this.checkMobile();\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n if (this.isOpen) {\n this.schedulePositionUpdate();\n }\n }\n\n private checkMobile() {\n const width = window.innerWidth;\n // Space-aware: collapse the range layout to a single calendar when the\n // viewport is too narrow to fit the dual-calendar desktop panel — this\n // covers high OS zoom and small windows, not only widths below the\n // mobile breakpoint.\n const cannotFitDesktopRange = this.type === 'range' && width < RANGE_DESKTOP_MIN_WIDTH;\n this.mobile = width < this.mobileBreakpoint || cannotFitDesktopRange;\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 // `type`/`mobileBreakpoint` feed the space-aware layout decision.\n if (changes['type'] || changes['mobileBreakpoint']) {\n this.checkMobile();\n }\n }\n\n ngOnDestroy(): void {\n this.removeRepositionListeners();\n }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isOpen) return;\n if (!document.body.contains(event.target as Node)) return;\n if (this._element.nativeElement.contains(event.target)) return;\n this.close();\n }\n\n get activePresets(): DatePickerPreset[] {\n return this.presets || this.defaultPresets;\n }\n\n get showPresetsSidebar(): boolean {\n return this.type === 'range' && !this.mobile;\n }\n\n get showDualCalendars(): boolean {\n return this.type === 'range' && !this.mobile;\n }\n\n get triggerLabel(): string {\n if (this.type === 'single') {\n if (this.date) {\n return this.formatDate(this.date);\n }\n return this.placeholder || this._translate.instant('Select date');\n }\n if (this.startDate && this.endDate) {\n if (this._appliedPresetLabel\n && this.startDate.getTime() === this._appliedPresetStartTime\n && this.endDate.getTime() === this._appliedPresetEndTime) {\n return this._translate.instant(this._appliedPresetLabel);\n }\n // Show the preset name when the range matches one\n const presetLabel = this.matchingPresetLabel(this.startDate, this.endDate);\n if (presetLabel) {\n return this._translate.instant(presetLabel);\n }\n return `${this.formatDate(this.startDate)} - ${this.formatDate(this.endDate)}`;\n }\n return this.placeholder || this._translate.instant('Select dates');\n }\n\n private matchingPresetLabel(start: Date, end: Date): string | null {\n for (const preset of this.activePresets) {\n const range = preset.getRange();\n if (range.start && range.end\n && moment(start).isSame(range.start, 'day')\n && moment(end).isSame(range.end, 'day')) {\n return preset.label;\n }\n }\n return null;\n }\n\n get legendMarkers(): DatePickerMarker[] {\n return (this.dateMarkers || []).filter(m => !!m.title);\n }\n\n get hasValue(): boolean {\n if (this.type === 'single') return !!this.date;\n return !!(this.startDate && this.endDate);\n }\n\n get formattedSelectedDate(): string {\n return this._selectedDate ? this.formatDate(this._selectedDate) : '';\n }\n\n get formattedStartDate(): string {\n return this._selectedStart ? this.formatDate(this._selectedStart) : '';\n }\n\n get formattedEndDate(): string {\n return this._selectedEnd ? this.formatDate(this._selectedEnd) : '';\n }\n\n formatDate(date: Date): string {\n const enMonth = moment(date).format('MMM');\n const translatedMonth = this._translate.instant(enMonth);\n let formatted = moment(date).format('MMM D, YYYY').replace(enMonth, translatedMonth);\n if (this.timePicker) {\n formatted += ' ' + this.formatTime(date);\n }\n return formatted;\n }\n\n private formatTime(date: Date): string {\n let h = date.getHours();\n const m = date.getMinutes();\n const period = h >= 12 ? 'PM' : 'AM';\n if (h === 0) h = 12;\n else if (h > 12) h -= 12;\n return `${this.formatNum(h)}:${this.formatNum(m)} ${period}`;\n }\n\n toggle() {\n if (this.disabled) return;\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open() {\n // Recompute the layout for the current viewport/zoom before rendering,\n // so the correct (desktop vs compact) branch is shown on open.\n this.checkMobile();\n this.isOpen = true;\n this._selectedDate = this.date ? new Date(this.date) : null;\n this._selectedStart = this.startDate ? new Date(this.startDate) : null;\n this._selectedEnd = this.endDate ? new Date(this.endDate) : null;\n this._activePreset = (this._appliedPresetLabel\n && this.startDate?.getTime() === this._appliedPresetStartTime\n && this.endDate?.getTime() === this._appliedPresetEndTime)\n ? this._appliedPresetLabel\n : null;\n\n if (this.timePicker) {\n if (this.type === 'single') {\n this.initTimeFromDate(this.date, 'start');\n } else {\n this.initTimeFromDate(this.startDate, 'start');\n this.initTimeFromDate(this.endDate, 'end');\n }\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.addRepositionListeners();\n this.updateDropdownPosition();\n }\n\n private updateDropdownPosition() {\n const anchorEl = this.anchorElement();\n if (!anchorEl) return;\n\n // Synchronous first placement so the panel opens without a flash. The\n // panel hasn't rendered yet (it renders this change-detection pass), so\n // we anchor it and cap its height to the space on the chosen side up\n // front — that way the footer can't be pushed off-screen even before we\n // measure the real panel. `clampToViewport()` then refines it once the\n // dual calendars have laid out.\n const rect = anchorEl.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom - PANEL_GAP - VIEWPORT_MARGIN;\n const spaceAbove = rect.top - PANEL_GAP - VIEWPORT_MARGIN;\n this.dropdownStyle = spaceBelow >= spaceAbove\n ? {\n left: `${rect.left}px`,\n top: `${rect.bottom + PANEL_GAP}px`,\n 'max-height': `${Math.max(MIN_PANEL_HEIGHT, spaceBelow)}px`\n }\n : {\n left: `${rect.left}px`,\n bottom: `${viewportHeight - rect.top + PANEL_GAP}px`,\n 'max-height': `${Math.max(MIN_PANEL_HEIGHT, spaceAbove)}px`\n };\n\n // Measure AFTER the calendars render. The dual-calendar range layout is\n // tall, and a single pre-render frame can mis-measure its height and\n // place the footer off-screen — so wait two frames, then clamp using the\n // real panel size.\n requestAnimationFrame(() => requestAnimationFrame(() => this.clampToViewport()));\n }\n\n /**\n * Re-clamp the open panel to the viewport using its real measured size.\n * Keeps the panel anchored to the trigger and guarantees the footer stays\n * reachable (the panel scrolls internally) at any viewport size or zoom.\n */\n private clampToViewport() {\n if (!this.isOpen) return;\n const anchorEl = this.anchorElement();\n const panelEl = this._element.nativeElement.querySelector('.dropdown-menu') as HTMLElement | null;\n if (!anchorEl || !panelEl) return;\n\n const rect = anchorEl.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const panelWidth = panelEl.offsetWidth;\n const panelHeight = panelEl.scrollHeight;\n const spaceBelow = viewportHeight - rect.bottom - PANEL_GAP - VIEWPORT_MARGIN;\n const spaceAbove = rect.top - PANEL_GAP - VIEWPORT_MARGIN;\n\n const style: { [key: string]: string } = {};\n\n // Horizontal: keep the panel fully on-screen.\n style['left'] = `${Math.max(\n VIEWPORT_MARGIN,\n Math.min(rect.left, viewportWidth - panelWidth - VIEWPORT_MARGIN)\n )}px`;\n\n // Vertical: open below when it fits or there is more room below,\n // otherwise above. Always cap max-height to the available space so the\n // footer stays reachable via the panel's internal scroll.\n if (panelHeight <= spaceBelow || spaceBelow >= spaceAbove) {\n style['top'] = `${rect.bottom + PANEL_GAP}px`;\n style['max-height'] = `${Math.max(MIN_PANEL_HEIGHT, spaceBelow)}px`;\n } else {\n style['bottom'] = `${viewportHeight - rect.top + PANEL_GAP}px`;\n style['max-height'] = `${Math.max(MIN_PANEL_HEIGHT, spaceAbove)}px`;\n }\n\n this.dropdownStyle = style;\n }\n\n /**\n * Anchor to the trigger button, or to the host element when the trigger is\n * hidden (an external control drives the popup).\n */\n private anchorElement(): HTMLElement | null {\n return this.triggerBtn?.nativeElement ?? this._element.nativeElement ?? null;\n }\n\n private addRepositionListeners() {\n // Capture phase so scrolls inside ANY ancestor (e.g. a dialog body) are\n // caught — `scroll` does not bubble, so a window:scroll listener alone\n // would miss them and the fixed panel would detach from its trigger.\n window.addEventListener('scroll', this._onViewportChange, true);\n }\n\n private removeRepositionListeners() {\n window.removeEventListener('scroll', this._onViewportChange, true);\n if (this._positionRafId != null) {\n cancelAnimationFrame(this._positionRafId);\n this._positionRafId = null;\n }\n }\n\n private _onViewportChange = () => this.schedulePositionUpdate();\n\n private schedulePositionUpdate() {\n if (this._positionRafId != null) return;\n this._positionRafId = requestAnimationFrame(() => {\n this._positionRafId = null;\n this.clampToViewport();\n });\n }\n\n close() {\n this.isOpen = false;\n this.removeRepositionListeners();\n }\n\n // Calendar navigation\n leftPrevMonth() {\n this.leftCurrentSlot = moment(this.leftCurrentSlot).subtract(1, 'month').toDate();\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n leftNextMonth() {\n this.leftCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n rightPrevMonth() {\n this.rightCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.leftCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.updateCalendars();\n }\n\n rightNextMonth() {\n this.rightCurrentSlot = moment(this.rightCurrentSlot).add(1, 'month').toDate();\n this.leftCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.updateCalendars();\n }\n\n // For mobile/single mode when there's only one calendar\n prevMonth() {\n this.leftPrevMonth();\n }\n\n nextMonth() {\n this.leftNextMonth();\n }\n\n selectDay(day: DatePickerDay) {\n if (day.isDisabled || day.isOutside) return;\n\n if (this.type === 'single') {\n this._selectedDate = new Date(day.date);\n if (this.autoApply) {\n this.apply();\n return;\n }\n } else {\n // Range selection logic — start anchors to start-of-day, end to end-of-day,\n // so a same-day pick spans the full 24h (matches preset semantics).\n if (!this._selectedStart || (this._selectedStart && this._selectedEnd)) {\n // Start new selection\n this._selectedStart = moment(day.date).startOf('day').toDate();\n this._selectedEnd = null;\n this._activePreset = null;\n } else {\n // Complete the range\n const newDay = moment(day.date).startOf('day').toDate();\n if (moment(newDay).isBefore(this._selectedStart)) {\n this._selectedEnd = moment(this._selectedStart).endOf('day').toDate();\n this._selectedStart = newDay;\n } else {\n this._selectedEnd = moment(newDay).endOf('day').toDate();\n }\n }\n }\n this.updateCalendars();\n }\n\n selectPreset(preset: DatePickerPreset) {\n const range = preset.getRange();\n this._selectedStart = range.start;\n this._selectedEnd = range.end;\n this._activePreset = preset.label;\n this.leftCurrentSlot = new Date(range.start);\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n goToToday() {\n const today = new Date();\n this._selectedDate = moment(today).startOf('day').toDate();\n this.leftCurrentSlot = new Date(today);\n this.updateCalendars();\n }\n\n // Time picker methods\n private formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n incrementHours(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endHours = this._endHours >= 12 ? 1 : this._endHours + 1;\n this._endHoursDisplay = this.formatNum(this._endHours);\n } else {\n this._hours = this._hours >= 12 ? 1 : this._hours + 1;\n this._hoursDisplay = this.formatNum(this._hours);\n }\n }\n\n decrementHours(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endHours = this._endHours <= 1 ? 12 : this._endHours - 1;\n this._endHoursDisplay = this.formatNum(this._endHours);\n } else {\n this._hours = this._hours <= 1 ? 12 : this._hours - 1;\n this._hoursDisplay = this.formatNum(this._hours);\n }\n }\n\n incrementMinutes(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endMinutes = this._endMinutes >= 59 ? 0 : this._endMinutes + 1;\n this._endMinutesDisplay = this.formatNum(this._endMinutes);\n } else {\n this._minutes = this._minutes >= 59 ? 0 : this._minutes + 1;\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n }\n\n decrementMinutes(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endMinutes = this._endMinutes <= 0 ? 59 : this._endMinutes - 1;\n this._endMinutesDisplay = this.formatNum(this._endMinutes);\n } else {\n this._minutes = this._minutes <= 0 ? 59 : this._minutes - 1;\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n }\n\n onHoursInput(event: Event, target: 'start' | 'end' = 'start') {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n if (target === 'end') {\n this._endHours = 1;\n this._endHoursDisplay = '';\n } else {\n this._hours = 1;\n this._hoursDisplay = '';\n }\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 1 && val <= 12) {\n if (target === 'end') {\n this._endHours = val;\n this._endHoursDisplay = raw;\n } else {\n this._hours = val;\n this._hoursDisplay = raw;\n }\n } else {\n input.value = target === 'end' ? this._endHoursDisplay : this._hoursDisplay;\n }\n }\n\n onMinutesInput(event: Event, target: 'start' | 'end' = 'start') {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n if (target === 'end') {\n this._endMinutes = 0;\n this._endMinutesDisplay = '';\n } else {\n this._minutes = 0;\n this._minutesDisplay = '';\n }\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n if (target === 'end') {\n this._endMinutes = val;\n this._endMinutesDisplay = raw;\n } else {\n this._minutes = val;\n this._minutesDisplay = raw;\n }\n } else {\n input.value = target === 'end' ? this._endMinutesDisplay : this._minutesDisplay;\n }\n }\n\n clampHours(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endHours = Math.max(1, Math.min(12, this._endHours));\n this._endHoursDisplay = this.formatNum(this._endHours);\n } else {\n this._hours = Math.max(1, Math.min(12, this._hours));\n this._hoursDisplay = this.formatNum(this._hours);\n }\n }\n\n clampMinutes(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endMinutes = Math.max(0, Math.min(59, this._endMinutes));\n this._endMinutesDisplay = this.formatNum(this._endMinutes);\n } else {\n this._minutes = Math.max(0, Math.min(59, this._minutes));\n this._minutesDisplay = this.formatNum(this._minutes);\n }\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', target: 'start' | 'end' = 'start') {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hours') this.incrementHours(target);\n else this.incrementMinutes(target);\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hours') this.decrementHours(target);\n else this.decrementMinutes(target);\n }\n }\n\n setPeriod(period: 'AM' | 'PM', target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endPeriod = period;\n } else {\n this._period = period;\n }\n }\n\n private applyTimeToDate(date: Date, target: 'start' | 'end' = 'start'): Date {\n const result = new Date(date);\n let hours = target === 'end' ? this._endHours : this._hours;\n const minutes = target === 'end' ? this._endMinutes : this._minutes;\n const period = target === 'end' ? this._endPeriod : this._period;\n if (period === 'AM' && hours === 12) {\n hours = 0;\n } else if (period === 'PM' && hours !== 12) {\n hours += 12;\n }\n result.setHours(hours, minutes, 0, 0);\n return result;\n }\n\n private initTimeFromDate(date: Date | null, target: 'start' | 'end' = 'start') {\n let hours = 12;\n let minutes = 0;\n let period: 'AM' | 'PM' = 'AM';\n if (date) {\n const h = date.getHours();\n minutes = date.getMinutes();\n if (h === 0) {\n hours = 12;\n period = 'AM';\n } else if (h < 12) {\n hours = h;\n period = 'AM';\n } else if (h === 12) {\n hours = 12;\n period = 'PM';\n } else {\n hours = h - 12;\n period = 'PM';\n }\n }\n if (target === 'end') {\n this._endHours = hours;\n this._endMinutes = minutes;\n this._endPeriod = period;\n this._endHoursDisplay = this.formatNum(hours);\n this._endMinutesDisplay = this.formatNum(minutes);\n } else {\n this._hours = hours;\n this._minutes = minutes;\n this._period = period;\n this._hoursDisplay = this.formatNum(hours);\n this._minutesDisplay = this.formatNum(minutes);\n }\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, 'start')\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, 'end')\n : new Date(this._selectedEnd);\n this.endDateChange.emit(this.endDate);\n }\n if (this._selectedStart && this._selectedEnd) {\n this.rangeChange.emit({ start: this.startDate, end: this.endDate });\n }\n if (this._activePreset && this.startDate && this.endDate) {\n this._appliedPresetLabel = this._activePreset;\n this._appliedPresetStartTime = this.startDate.getTime();\n this._appliedPresetEndTime = this.endDate.getTime();\n } else {\n this._appliedPresetLabel = null;\n this._appliedPresetStartTime = null;\n this._appliedPresetEndTime = null;\n }\n }\n this.close();\n }\n\n cancel() {\n this.close();\n }\n\n get canApply(): boolean {\n if (this.type === 'single') return !!this._selectedDate;\n return !!(this._selectedStart && this._selectedEnd);\n }\n\n private updateCalendars() {\n this.updateDays(this.leftCurrentSlot, 'left');\n if (this.showDualCalendars) {\n this.updateDays(this.rightCurrentSlot, 'right');\n }\n }\n\n private updateDays(slot: Date, side: 'left' | 'right') {\n const title = moment(slot).format('MMMM YYYY');\n\n const dayRows: Array<{ days: DatePickerDay[] }> = [];\n let current = moment(slot).startOf('month').startOf('isoWeek');\n const end = moment(slot).endOf('month').endOf('isoWeek');\n const currentMonth = moment(slot).month();\n\n while (current.isSameOrBefore(end)) {\n const row = { days: [] as DatePickerDay[] };\n dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n const isOutside = currentMonth !== current.month();\n\n let isDisabled = false;\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let markerColors: (string | undefined)[] | undefined;\n if (!isOutside && this.dateMarkers && this.dateMarkers.length) {\n const ts = current.valueOf();\n const colors: (string | undefined)[] = [];\n for (const m of this.dateMarkers) {\n if (m.dates && m.dates.indexOf(ts) >= 0) {\n colors.push(m.color);\n }\n }\n if (colors.length) markerColors = colors;\n }\n\n const isSelected = isOutside ? false : this.isDaySelected(current);\n\n row.days.push({\n date: current.toDate(),\n lbl: isOutside ? '' : current.date().toString(),\n isOutside,\n selected: isSelected,\n isDisabled: isOutside ? true : isDisabled,\n isHighlighted: false,\n markerColors\n });\n\n current = current.clone().add(1, 'day');\n }\n }\n\n if (side === 'left') {\n this.leftDayRows = dayRows;\n this.leftDaysTitle = title;\n } else {\n this.rightDayRows = dayRows;\n this.rightDaysTitle = title;\n }\n }\n\n private isDaySelected(date: moment.Moment): boolean {\n if (this.type === 'single') {\n return this._selectedDate ? date.isSame(moment(this._selectedDate), 'day') : false;\n }\n if (this._selectedStart && date.isSame(moment(this._selectedStart), 'day')) return true;\n if (this._selectedEnd && date.isSame(moment(this._selectedEnd), 'day')) return true;\n return false;\n }\n\n isToday(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n return moment(day.date).isSame(moment(), 'day');\n }\n\n isInRange(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedStart || !this._selectedEnd) return false;\n const d = moment(day.date);\n return d.isAfter(moment(this._selectedStart), 'day') && d.isBefore(moment(this._selectedEnd), 'day');\n }\n\n isRangeStart(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedStart) return false;\n return moment(day.date).isSame(moment(this._selectedStart), 'day');\n }\n\n isRangeEnd(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedEnd) return false;\n return moment(day.date).isSame(moment(this._selectedEnd), 'day');\n }\n}\n","<div class=\"zen-dpd\">\n <!-- Field label -->\n @if (label) {\n <label class=\"zen-dpd-label\">\n {{ label }}\n @if (required) {\n <span class=\"zen-dpd-required\">*</span>\n }\n </label>\n }\n\n <!-- Trigger Button -->\n @if (!hideTrigger) {\n <button class=\"dropdown-trigger\"\n #triggerBtn\n [class.size-form]=\"size === 'form'\"\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\n <!-- Dropdown Panel -->\n @if (isOpen) {\n <div class=\"dropdown-menu\" [class.mobile]=\"mobile\" [ngStyle]=\"dropdownStyle\">\n <!-- RANGE DESKTOP: presets sidebar + dual calendar -->\n @if (type === 'range' && !mobile) {\n <!-- Presets sidebar -->\n <div class=\"presets-sidebar\">\n @for (preset of activePresets; track preset) {\n <div class=\"preset-item\"\n [class.active]=\"_activePreset === preset.label\"\n (click)=\"selectPreset(preset)\">\n {{ preset.label | translate }}\n </div>\n }\n </div>\n <div class=\"sidebar-divider\"></div>\n <!-- Calendars + bottom panel -->\n <div class=\"calendars-container\">\n <div class=\"dual-calendars\">\n <!-- Left calendar -->\n <div class=\"calendar-panel\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"leftPrevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"leftNextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n </div>\n <div class=\"calendar-divider\"></div>\n <!-- Right calendar -->\n <div class=\"calendar-panel\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"rightPrevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ rightDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"rightNextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: rightDayRows }\"></ng-container>\n </div>\n </div>\n </div>\n <!-- Time Picker (start + end, side by side) -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <div class=\"time-pickers-dual\">\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'start', label: 'Start time' }\"></ng-container>\n <div class=\"time-pickers-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'end', label: 'End time' }\"></ng-container>\n </div>\n }\n <div class=\"bottom-divider\"></div>\n <!-- Bottom panel: inputs (or legend) + actions -->\n <div class=\"bottom-panel\">\n @if (legendMarkers.length) {\n <div class=\"marker-legend\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n } @else {\n <div class=\"input-fields\">\n <div class=\"date-input\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedStart\">\n {{ _selectedStart ? formattedStartDate : ('Start date' | translate) }}\n </span>\n </div>\n <span class=\"date-separator\">–</span>\n <div class=\"date-input\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedEnd\">\n {{ _selectedEnd ? formattedEndDate : ('End date' | translate) }}\n </span>\n </div>\n </div>\n }\n <div class=\"actions\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n </div>\n }\n <!-- RANGE MOBILE: single calendar with dual inputs on top -->\n @if (type === 'range' && mobile) {\n <div class=\"single-calendar-container\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"nextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <!-- Range inputs -->\n <div class=\"mobile-range-inputs\">\n <div class=\"date-input compact\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedStart\">\n {{ _selectedStart ? formattedStartDate : ('Select date' | translate) }}\n </span>\n </div>\n <span class=\"date-separator\">–</span>\n <div class=\"date-input compact\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedEnd\">\n {{ _selectedEnd ? formattedEndDate : ('Select date' | translate) }}\n </span>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n <!-- Time Picker (start + end, side by side) -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <div class=\"time-pickers-dual\">\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'start', label: 'Start time' }\"></ng-container>\n <div class=\"time-pickers-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'end', label: 'End time' }\"></ng-container>\n </div>\n }\n @if (legendMarkers.length) {\n <div class=\"marker-legend standalone\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n }\n <div class=\"bottom-divider\"></div>\n <div class=\"bottom-panel compact\">\n <div class=\"actions full-width\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n </div>\n }\n <!-- SINGLE DATE: single calendar + input + today button -->\n @if (type === 'single') {\n <div class=\"single-calendar-container\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"nextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <!-- Date input + Today button -->\n <div class=\"single-actions-row\">\n <div class=\"date-input flex-1\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedDate\">\n {{ _selectedDate ? formattedSelectedDate : ('Select date' | translate) }}\n </span>\n </div>\n <button class=\"btn-today\" (click)=\"goToToday()\">{{ 'Today' | translate }}</button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n <!-- Time Picker -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'start' }\"></ng-container>\n }\n @if (legendMarkers.length) {\n <div class=\"marker-legend standalone single\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n }\n @if (!autoApply) {\n <div class=\"bottom-divider\"></div>\n <div class=\"bottom-panel compact\">\n <div class=\"actions full-width\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Shared time picker template -->\n<ng-template #timePickerSection let-target=\"target\" let-label=\"label\">\n <div class=\"time-picker-container\">\n <div class=\"time-picker-content\">\n <span class=\"time-picker-label\">{{ (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]=\"target === 'end' ? _endHoursDisplay : _hoursDisplay\"\n (input)=\"onHoursInput($event, target)\"\n (focus)=\"onTimeFocus($event)\"\n (blur)=\"clampHours(target)\"\n (keydown)=\"onTimeKeydown($event, 'hours', target)\"\n maxlength=\"2\" />\n <div class=\"time-arrows\">\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"incrementHours(target)\">\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(target)\">\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]=\"target === 'end' ? _endMinutesDisplay : _minutesDisplay\"\n (input)=\"onMinutesInput($event, target)\"\n (focus)=\"onTimeFocus($event)\"\n (blur)=\"clampMinutes(target)\"\n (keydown)=\"onTimeKeydown($event, 'minutes', target)\"\n maxlength=\"2\" />\n <div class=\"time-arrows\">\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"incrementMinutes(target)\">\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(target)\">\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]=\"(target === 'end' ? _endPeriod : _period) === 'AM'\"\n (click)=\"setPeriod('AM', target)\">\n AM\n </button>\n <button class=\"time-period-btn\"\n [class.active]=\"(target === 'end' ? _endPeriod : _period) === 'PM'\"\n (click)=\"setPeriod('PM', target)\">\n PM\n </button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- Shared calendar grid template -->\n<ng-template #calendarGrid let-dayRows>\n <div class=\"dates-grid\">\n <!-- Week day headers -->\n <div class=\"week-header\">\n @for (wd of weekDays; track wd) {\n <div class=\"cell header-cell\">{{ wd | translate }}</div>\n }\n </div>\n <!-- Day rows -->\n @for (row of dayRows; track row) {\n <div class=\"day-row\">\n @for (day of row.days; track day) {\n <div class=\"cell day-cell\"\n [class.outside]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.today]=\"isToday(day)\"\n [class.disabled]=\"day.isDisabled\"\n [class.in-range]=\"isInRange(day)\"\n [class.range-start]=\"isRangeStart(day)\"\n [class.range-end]=\"isRangeEnd(day)\"\n (click)=\"selectDay(day)\">\n <span class=\"day-number\">{{ day.lbl }}</span>\n @if (day.markerColors?.length) {\n <div class=\"marker-dots\">\n @for (c of day.markerColors; track c) {\n <span class=\"marker-dot\"\n [style.background]=\"c || null\"></span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n","import { Component, Input, HostBinding, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-button',\n templateUrl: './zen-button.component.html',\n styleUrls: ['./zen-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenButtonComponent {\n \n @Input() variant: 'primary' | 'secondary-gray' | 'secondary' | 'tertiary-gray' | 'tertiary' | 'link-gray' | 'link' = 'primary';\n \n @Input() buttonType: 'button' | 'button-dot' | 'button-icon-leading' | 'button-icon-trailing' | 'button-icon-only' = 'button';\n \n @Input() icon?: string;\n @Input() iconRotated: boolean = false;\n @Input() size: '2xl' | 'xl' | 'lg' | 'md' | 'sm' = 'md';\n @Input() destructive: boolean = false;\n @Input() disabled: boolean = false;\n // Bind to the host so the element itself stretches — the host defaults to\n // inline, so without this the inner button's width:100% only fills the\n // shrink-to-content host and never actually spans the parent.\n @HostBinding('class.full-width') @Input() fullWidth: boolean = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n get isIconOnly(): boolean {\n return this.buttonType === 'button-icon-only';\n }\n\n get buttonClasses(): string {\n const classes = [];\n \n // Base variant class\n if (this.variant === 'primary') {\n classes.push('button-base');\n } else if (this.variant === 'secondary-gray') {\n classes.push('button-secondary-gray');\n } else if (this.variant === 'secondary') {\n classes.push('button-secondary-color');\n } else if (this.variant === 'tertiary-gray') {\n classes.push('button-tertiary-gray');\n } else if (this.variant === 'tertiary') {\n classes.push('button-tertiary-color');\n } else if (this.variant === 'link-gray') {\n classes.push('button-link-gray');\n } else if (this.variant === 'link') {\n classes.push('button-link-color');\n }\n \n // Size class\n classes.push(`button-${this.size}`);\n \n // Typography classes based on size\n classes.push('text');\n if (this.size === '2xl') {\n classes.push('text-lg');\n classes.push('text-weight-medium');\n } else if (this.size === 'xl' || this.size === 'lg') {\n classes.push('text-md');\n classes.push('text-weight-medium');\n } else {\n classes.push('text-sm');\n classes.push('text-weight-medium');\n }\n \n // State modifiers\n if (this.destructive) {\n classes.push('destructive');\n }\n \n if (this.isIconOnly) {\n classes.push('button-icon-only');\n }\n \n if (this.fullWidth) {\n classes.push('full-width');\n }\n \n return classes.join(' ');\n }\n\n getIconName(): string {\n // Use the icon input if provided, otherwise default to circle\n return this.icon || 'circle';\n }\n}","<button\n [class]=\"buttonClasses\"\n [type]=\"type\"\n [disabled]=\"disabled\">\n\n <!-- Dot indicator -->\n @if (buttonType === 'button-dot') {\n <span class=\"button-dot\"></span>\n }\n\n <!-- Leading icon -->\n @if (buttonType === 'button-icon-leading' || isIconOnly) {\n <zen-icon\n [name]=\"getIconName()\"\n [class.rotated]=\"iconRotated\"\n size=\"xs\"></zen-icon>\n }\n\n <!-- Button content -->\n @if (!isIconOnly) {\n <ng-content></ng-content>\n }\n\n <!-- Trailing icon -->\n @if (buttonType === 'button-icon-trailing') {\n <zen-icon\n [name]=\"getIconName()\"\n [class.rotated]=\"iconRotated\"\n size=\"xs\"></zen-icon>\n }\n</button>","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n DoCheck,\n Output,\n SimpleChanges,\n ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport {\n DataSource,\n FiltersConfig,\n FiltersConfigItem,\n MultiSelectItem,\n} from './filtersConfig';\nimport uniqBy from 'lodash.uniqby';\nimport moment from 'moment/moment';\nimport { ZenduSearchBoxComponent } from '../search-box/zendu-search-box.component';\nimport { Util } from '../util';\nimport { DateRange } from './dateRange';\nimport { Renderer2 } from '@angular/core';\n\n@Component({\n selector: 'zen-filter',\n templateUrl: './zendu-filter.component.html',\n styleUrls: ['./zendu-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFilterComponent implements OnChanges, DoCheck {\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 // Optional preset that \"Clear Filter\" resets to. When provided, Clear restores\n // the panel to this filter instead of emptying it (resetBehavior is ignored in\n // that case). When omitted, Clear behaves as before, governed by resetBehavior.\n @Input() defaultFilter?: object;\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() triggerVariant: 'default' | 'icon-only' = 'default';\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 // Forces the trigger highlight on. Set internally by updateAppliedState() and\n // settable by a host (via ViewChild) to highlight independent of the live\n // selection count. Read through hasActiveFilters in ngDoCheck().\n public isApplied = false;\n\n private lastAppliedFilter: any = {};\n\n private resetedFilter: any;\n\n // Cached JSON of the default preset's filter object (getFilterObject of\n // defaultFilter). Invariant between config/defaultFilter changes, so it's\n // computed in ngOnChanges and reused each tick by ngDoCheck — avoiding a\n // rebuild of the default object on every change-detection cycle.\n private _defaultFilterSignature: string | null = null;\n\n // Plain fields (not getters) read directly in the template. Recomputed once\n // per change-detection cycle in ngDoCheck(), so the template's repeated reads\n // (badge condition, badge value, footer, trigger highlight) cost O(1) each\n // instead of re-running the count per binding.\n // Live count of the CURRENT in-panel selection (recomputed each CD in\n // ngDoCheck). Drives the in-menu footer counter, the Clear button and the\n // per-section dots — the editing surface, which reverts on cancel.\n public selectedCount = 0;\n\n // Whether the Clear / Reset button is disabled (recomputed each CD). In clear\n // mode it's disabled when nothing is selected; in default mode (defaultFilter\n // set) it's disabled only when the current selection already equals the\n // default — so resetting to the default is always offered when state differs.\n public resetDisabled = true;\n\n // Count of the APPLIED filter (last committed via Apply / external sync /\n // init). Drives the trigger badge + highlight so the trigger reflects what is\n // actually filtering the data, not in-progress edits. Updated only in\n // updateAppliedState() and on config init — never during live editing.\n public appliedCount = 0;\n\n public hasActiveFilters = false;\n\n public menuLeft = '0px';\n\n public menuRight = '0px';\n\n public menuTop = '0px';\n\n public menuBottom = '0px';\n\n public menuMaxHeight = 'none';\n\n public showNoFilterResult: boolean;\n\n public errorMessage: string[] = [];\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 // Seed the trigger count from the config's default selections so it's\n // correct on first paint even when no `filter` input is provided.\n this.appliedCount = this.computeSelectedCount();\n }\n\n if (changes.filter && changes.filter.currentValue) {\n // Reconcile the internal selection (checkboxes, radios, ranges, the\n // Select-All flag and count badge) to the incoming filter. This must run\n // even when the config changed in the same cycle (initial render / view\n // switch): the config branch only builds the unchecked option list, so\n // without this a preset — e.g. a custom view's saved filters — would be\n // recorded but never shown as checked.\n this.syncFromFilter(changes.filter.currentValue);\n }\n\n if (changes.isVisible && changes.isVisible.currentValue) {\n this.updatePlacement(this.customPosition);\n this.focusSearchBox();\n }\n\n // Cache the default preset's filter signature so ngDoCheck only diffs the\n // (mutating) live state against it, instead of rebuilding the invariant\n // default object every tick. Recomputed only when config / defaultFilter\n // change, and after the config branch above has built the data sources.\n if (changes.config || changes.defaultFilter) {\n this._defaultFilterSignature = this.defaultFilter\n ? JSON.stringify(this.getFilterObject(this.defaultFilter))\n : null;\n }\n }\n\n public ngDoCheck(): void {\n // Recompute the cached badge count + trigger highlight once per change-\n // detection cycle. Filter state is mutated in place by the item editors\n // (checkboxes, toggle, date/number inputs) without dedicated change hooks,\n // so deriving here keeps the fields fresh without scattering invalidation\n // calls across every binding.\n // Live (current panel) count for the footer / Clear / dots.\n this.selectedCount = this.computeSelectedCount();\n // Clear/Reset button enablement. With a defaultFilter, the button resets TO\n // that preset, so it's enabled whenever the current selection differs from\n // the default (even when the current selection is empty). Without one, it\n // clears, so it's disabled when nothing is selected.\n this.resetDisabled = this.defaultFilter\n ? JSON.stringify(this.getFilterObject()) === this._defaultFilterSignature\n : this.selectedCount === 0;\n // Trigger highlight tracks the APPLIED state (appliedCount), not the live\n // edit, OR a host forcing it via isApplied (set internally by\n // updateAppliedState(), and externally through a ViewChild — e.g. users /\n // facial-ai pages drive the trigger highlight that way).\n this.hasActiveFilters = this.isApplied || this.appliedCount > 0;\n }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isVisible) {\n return;\n }\n\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n // element not in the DOM\n return;\n }\n if (this._componentElement.nativeElement.contains(target)) {\n return;\n }\n\n // hide the menu for outside click\n this.hide();\n\n // restore values\n this.restorePreviousApplied();\n }\n\n @HostListener('window:resize', [])\n windowSizeHandling() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:scroll', [])\n windowScroll() {\n if (!this.isVisible) {\n return;\n }\n\n this.updatePlacement(this.customPosition);\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent) {\n if (!this.isVisible) {\n return;\n }\n\n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Home' ||\n event.key === 'End'\n ) {\n const target = event.target as HTMLElement;\n if (!document.body.contains(target)) {\n return;\n }\n\n if (\n this._componentElement.nativeElement.contains(target) &&\n !target.classList.contains('button-stroked')\n ) {\n return;\n }\n this.hide();\n this.restorePreviousApplied();\n }\n }\n\n public focusSearchBox() {\n this.searchBox.doFocus();\n }\n\n public isMenuIsVisible(item: FiltersConfigItem) {\n if (item.isLazyLoading) {\n if (item.isLoadingNow || item.canLoadMore !== false) {\n return true;\n }\n if (this.searchText) {\n return item.filteredDataSource?.length > 0;\n }\n return true;\n }\n\n if (item.filteredDataSource && this.searchText) {\n if (!item.filteredDataSource.length) {\n return false;\n }\n }\n\n return true;\n }\n\n private extractUniqueDataSource(\n array: {\n id: string | number;\n name: string | number;\n }[]\n ): MultiSelectItem[] {\n const items = array.filter((el) => {\n return Boolean(\n typeof el.id === 'number'\n ? typeof el.id !== undefined\n : el.id && typeof el.name === 'number'\n ? typeof el.name !== undefined\n : el.name\n );\n });\n const uniqItems = uniqBy(items, (el) => el.id);\n // add index to each uniqItems\n uniqItems.forEach(\n (el: MultiSelectItem, index: number) => (el.index = index)\n );\n return uniqItems;\n }\n\n public onSelectAll(item: FiltersConfigItem) {\n item.dataSource.forEach((d) => (d.checked = item.isSelectedAll));\n }\n\n public isItemActive(item: FiltersConfigItem): boolean {\n if (item.type === 'multiselect') {\n const checkedItems = item.dataSource.filter((el) => el.checked);\n item.isSelectedAll = checkedItems.length === item.dataSource.length;\n return checkedItems.length > 0;\n } else if (item.type === 'radio') {\n return item.radioOptions.some((ro) => ro.selected);\n } else if (item.type === 'numberRange') {\n return Boolean(item.numberRange.from || item.numberRange.to);\n } else if (item.type === 'dateRange') {\n return Boolean(item.dateRange.start || item.dateRange.end);\n } else if (item.type === 'date') {\n return Boolean(item.date);\n } else {\n return false;\n }\n }\n\n /**\n * Whether a section is actively contributing to the filter — used to show the\n * per-section \"applied\" dot next to its chevron. Mirrors the per-type gating\n * of computeSelectedCount() (e.g. a radio only counts when it differs from the\n * default), so the dot and the trigger count badge can never disagree. Unlike\n * isItemActive(), this has no side effects and treats a default radio as\n * inactive.\n */\n public isItemFiltered(item: FiltersConfigItem): boolean {\n switch (item.type) {\n case 'multiselect':\n return Boolean(item.dataSource?.some((d) => d.checked));\n case 'radio': {\n const selected = item.radioOptions?.find((o) => o.selected);\n const defaultId = this.resetedFilter\n ? this.resetedFilter[item.key]\n : item.selectedRadio;\n return Boolean(selected) && selected.id !== defaultId;\n }\n case 'numberRange':\n return (\n typeof item.numberRange?.from === 'number' &&\n typeof item.numberRange?.to === 'number'\n );\n case 'dateRange':\n return Boolean(item.dateRange?.start && item.dateRange?.end);\n case 'date':\n return Boolean(item.date);\n case 'toggle':\n return Boolean(item.enabled);\n default:\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 // Lets the whole toggle row act as the switch: clicking anywhere on the row\n // flips the boolean. The inner zen-toggle stops click propagation so a direct\n // click on the switch toggles once (via its own [(enabled)]) instead of twice.\n public toggleEnabled(item: FiltersConfigItem) {\n item.enabled = !item.enabled;\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.type === 'date') {\n // Clear the date (was wrongly reset to today, which left the filter active).\n item.date = null;\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 this.applyFilterToItems(this.lastAppliedFilter);\n }\n\n /**\n * Reflects a filter object onto the in-panel item state (checkboxes, radios,\n * ranges, toggle/date) without emitting. Used to restore the last-applied\n * filter and to reset the panel to a provided `defaultFilter`.\n */\n private applyFilterToItems(source: any): void {\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource) {\n const selection = source[item.key];\n\n for (const dataItem of item.dataSource) {\n dataItem.checked = selection\n ? selection.includes(dataItem.id)\n : false;\n }\n\n // Keep the \"Select All\" checkbox in sync with the restored\n // selection — otherwise clearing the filter externally (e.g. a\n // view-filters \"Clear all\") unchecks every node but leaves Select\n // All ticked, so the group checkboxes look out of sync.\n const checkedCount = item.dataSource.filter((d) => d.checked).length;\n item.isSelectedAll =\n checkedCount > 0 && checkedCount === item.dataSource.length;\n }\n break;\n case 'dateRange':\n // Clone so editing item.dateRange.start/end doesn't mutate the shared\n // snapshot (which would defeat a later cancel/revert).\n item.dateRange = source[item.key]\n ? Util.clone(source[item.key])\n : { start: null, end: null };\n break;\n case 'numberRange':\n // Clone — same aliasing concern as dateRange above.\n item.numberRange = source[item.key]\n ? Util.clone(source[item.key])\n : {};\n break;\n case 'toggle':\n // Restore the toggle's own state (was wrongly writing item.dateRange,\n // so toggles never reverted on cancel and kept counting).\n item.enabled = source[item.key];\n break;\n case 'date':\n item.date = source[item.key];\n break;\n case 'radio':\n // Restore the radio SELECTION to the source value; never touch\n // selectedRadio — that's the immutable default resetFilters() resets to\n // (overwriting it here broke Clear Filter and the active-count default).\n // When the source omits this key (e.g. a partial defaultFilter), fall\n // back to the config default so a radio group is never left with\n // nothing selected.\n if (item.radioOptions) {\n const appliedId = source[item.key] ?? item.selectedRadio;\n item.radioOptions.forEach((o) => (o.selected = o.id === appliedId));\n }\n break;\n }\n }\n }\n\n public reset() {\n if (this.defaultFilter) {\n // Reset to the provided default preset instead of emptying everything.\n this.applyFilterToItems(this.defaultFilter);\n } else {\n // No default: clear (or select-all, per resetBehavior) as before.\n this.resetFilters();\n }\n\n this.filter = this.getFilterObject();\n this.resetedFilter = this.getFilterObject();\n\n this.resetLazyLoadingSources(false);\n }\n\n /**\n * Resets the dropdown's internal selection state (checkboxes, radios, date /\n * number ranges) and the trigger count badge to match a filter object —\n * defaults to the currently bound `filter`. Call this from the host after\n * changing the bound filter outside the component's own UI (e.g. removing a\n * chip in a view-filters bar) so the dropdown and badge stay in sync.\n */\n public syncFromFilter(filter: object = this.filter): void {\n this.filter = filter ?? {};\n this.lastAppliedFilter = Util.clone(this.filter);\n this.restorePreviousApplied();\n this.updateAppliedState();\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 // Settle point for the applied state (apply / external sync / init): item\n // state now equals the applied filter, so snapshot the trigger's count here.\n this.appliedCount = this.computeSelectedCount();\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('.filter-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 /**\n * Builds a filter object from the config items. By default it reads the live\n * in-panel state; pass `source` (another filter object) to derive the SAME-\n * shaped object from that source instead — used to compare the current\n * selection against a default preset without duplicating the per-type rules.\n */\n private getFilterObject(source?: any) {\n const live = !source;\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 = live\n ? item.dataSource.filter((i) => i.checked).map((i) => i.id)\n : item.dataSource\n .filter(\n (i) =>\n Array.isArray(source[item.key]) &&\n source[item.key].includes(i.id),\n )\n .map((i) => i.id);\n\n if (checkedIds.length) {\n filter[item.key] = checkedIds;\n }\n }\n break;\n case 'dateRange': {\n const range = live ? item.dateRange : source[item.key];\n if (range && range.start && range.end) {\n filter[item.key] = range;\n }\n break;\n }\n case 'numberRange': {\n const range = live ? item.numberRange : source[item.key];\n if (\n range &&\n typeof range.from === 'number' &&\n typeof range.to === 'number'\n ) {\n filter[item.key] = range;\n }\n break;\n }\n case 'toggle':\n filter[item.key] = (live ? item.enabled : source[item.key]) || false;\n break;\n case 'date': {\n const date = live ? item.date : source[item.key];\n if (date) {\n filter[item.key] = date;\n }\n break;\n }\n case 'radio':\n // Source side falls back to the config default when the key is\n // omitted, mirroring applyFilterToItems() so a partial default\n // compares equal to the state it actually produces.\n filter[item.key] = live\n ? item.radioOptions.find((ro) => ro.selected)?.id\n : (source[item.key] ?? item.selectedRadio);\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 // Lets a click anywhere on a multiselect row toggle its checkbox. Needed for\n // badge rows, where the visible label is a separate styled span and the\n // checkbox itself carries no clickable text. The inner zen-checkbox stops\n // click propagation, so a direct click on it toggles once via its own\n // [(checked)] instead of being toggled again here.\n public toggleDsItem(dsItem: DataSource, item: FiltersConfigItem): void {\n dsItem.checked = !dsItem.checked;\n this.checkChanged(dsItem, item);\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\n // VIEWPORT_GAP: min space between the panel and the viewport edge.\n // OPEN_GAP: space between the trigger and the panel when it opens (design guide).\n const VIEWPORT_GAP = 16;\n const OPEN_GAP = 12;\n const hostRect = host.getBoundingClientRect();\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 // Anchor vertically, then cap max-height to the space available from that\n // anchor to the opposite viewport edge (minus the gap). Measuring from the\n // real panel anchor — not the trigger — keeps the bottom/top gap exact.\n let openDownTopY: number | null = null;\n let openUpBottomY: number | null = null;\n if (this.position.includes('auto')) {\n if (this.getVerticalPosition() === 'bottom') {\n openDownTopY = hostRect.bottom + OPEN_GAP;\n } else {\n openUpBottomY = hostRect.top - OPEN_GAP;\n }\n } else if (this.position.includes('top')) {\n openUpBottomY = hostRect.top - OPEN_GAP;\n } else {\n openDownTopY = hostRect.bottom + OPEN_GAP;\n }\n\n if (openDownTopY !== null) {\n this.menuTop = `${openDownTopY}px`;\n this.menuBottom = 'unset';\n this.menuMaxHeight = `${Math.max(\n 160,\n window.innerHeight - openDownTopY - VIEWPORT_GAP\n )}px`;\n } else {\n const bottomY = openUpBottomY ?? window.innerHeight;\n this.menuTop = 'unset';\n this.menuBottom = `${window.innerHeight - bottomY}px`;\n this.menuMaxHeight = `${Math.max(160, bottomY - VIEWPORT_GAP)}px`;\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 // Absolute panel opens OPEN_GAP from the trigger (dropdown margin); cap it\n // the same way so it also keeps the 16px gap from the viewport edge.\n this.menuMaxHeight =\n verticalClass === 'top'\n ? `${Math.max(160, hostRect.top - OPEN_GAP - VIEWPORT_GAP)}px`\n : `${Math.max(\n 160,\n window.innerHeight - (hostRect.bottom + OPEN_GAP) - VIEWPORT_GAP\n )}px`;\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: FiltersConfigItem, date: Date | null) {\n // Without a time picker, snap the end to end-of-day so the range covers the\n // whole final day.\n item.dateRange.end =\n date && !item.showTime ? moment(date).endOf('day').toDate() : date;\n }\n\n // Count of active filters across ALL types: multiselect counts per checked\n // item; every other type contributes +1 when active. Conditions mirror\n // getFilterObject()/resetFilters() so the badge matches what actually applies.\n // hasActiveFilters (trigger highlight) is derived from the same count in\n // ngDoCheck(), so the badge and highlight can never disagree.\n private computeSelectedCount(): number {\n let count = 0;\n for (const item of this.config.items) {\n // Multiselect contributes one per checked item; every other type\n // contributes one when active. isItemFiltered() owns the per-type \"active\"\n // rules (non-default radio, both number ends, etc.) so the badge and the\n // per-section dot stay in lockstep.\n if (item.type === 'multiselect') {\n if (item.dataSource) {\n count += item.dataSource.filter((d) => d.checked).length;\n }\n } else if (this.isItemFiltered(item)) {\n count += 1;\n }\n }\n return count;\n }\n}\n","<div class=\"filters-component\"\n #mainComponent\n click-out=\"isVisible && hide()\">\n\n @if (!customTrigger) {\n <zen-button (click)=\"toggle()\"\n [variant]=\"hasActiveFilters ? 'secondary' : 'secondary-gray'\"\n class=\"filter {{hasActiveFilters ? 'applied' : ''}} {{triggerVariant === 'icon-only' ? 'icon-only' : ''}}\">\n @if (imageUrl) {\n <zen-icon [src]=\"imageUrl\"\n ></zen-icon>\n }\n @if (!imageUrl) {\n <zen-icon class=\"filter-icon\"\n name=\"filter\"></zen-icon>\n }\n @if (triggerVariant !== 'icon-only') {\n <span class=\"filter-label\">{{ (label || 'Filter') | translate }}</span>\n @if (appliedCount > 0) {\n <span class=\"filter-count-badge\">{{ appliedCount }}</span>\n }\n }\n </zen-button>\n <!-- Icon-only mode: count rendered as a corner badge overlapping the\n button's top-right (sibling of the button so it isn't clipped). -->\n @if (triggerVariant === 'icon-only' && appliedCount > 0) {\n <span class=\"filter-icon-badge\">{{ appliedCount }}</span>\n }\n }\n\n @if (customTrigger) {\n <ng-content></ng-content>\n }\n\n <div [hidden]=\"!isVisible\"\n class=\"filter-menu menu-content\"\n [class.customTrigger]=\"customTrigger\"\n [ngStyle]=\"{ 'left': menuLeft, 'right': menuRight, 'top': menuTop, 'bottom': menuBottom, 'max-height': menuMaxHeight }\">\n <div class=\"filter-menu__header\">\n <zen-search-box [(text)]=\"searchText\"\n #searchBox\n (textChange)=\"searchTextChanged()\"></zen-search-box>\n </div>\n\n <div class=\"filter-menu__body\"\n ngClass=\"{{wrapperBodyClass}}\">\n @if (errorMessage.length) {\n @for (item of errorMessage; track item) {\n <li\n class=\"error-msg\">{{item | translate }}</li>\n }\n }\n\n @for (item of config.items; track item) {\n @if (isMenuIsVisible(item)) {\n <div [class]=\"'menu-item menu-item--' + item.type\">\n <!-- Divider between two filter -->\n @if (item.type === 'divider') {\n <p class=\"filter-divider\"></p>\n }\n <!-- Boolean toggle -->\n @if (item.type === 'toggle') {\n <div\n class=\"action-item toggle-row\"\n (click)=\"toggleEnabled(item)\">\n <div>{{item.title | translate}}</div>\n <zen-toggle [(enabled)]=\"item.enabled\"\n (click)=\"$event.stopPropagation()\"></zen-toggle>\n </div>\n }\n @if (item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse) {\n <button class=\"action-item expander-item\"\n (click)=\"toggleItem(item)\">\n <span class=\"expander-title\">{{item.title | translate}}</span>\n <span class=\"expander-indicator\">\n @if (isItemFiltered(item)) {\n <span class=\"filter-section-dot\"></span>\n }\n <zen-icon class=\"expand-icon\"\n name=\"chevron-down\"\n [class.active]=\"item.expanded\"></zen-icon>\n </span>\n </button>\n }\n @if (item.type != 'toggle' && item.type != 'divider' && item.disableCollapse) {\n <div class=\"action-item section-title\"\n >\n <span class=\"expander-title\">{{item.title | translate}}</span>\n @if (isItemFiltered(item)) {\n <span class=\"filter-section-dot\"></span>\n }\n </div>\n }\n @if (item.expanded || item.disableCollapse) {\n @switch (item.type) {\n <!-- Multiselect -->\n @case ('multiselect') {\n <div class=\"menu-item__content\">\n <!-- Lazy loading mode -->\n @if (item.isLazyLoading) {\n @for (dsItem of item.filteredDataSource; track dsItem) {\n <div\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\"\n (click)=\"toggleDsItem(dsItem, item)\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n (click)=\"$event.stopPropagation()\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n @if (dsItem.badgeBgColor) {\n <span\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n }\n </div>\n }\n @if (item.canLoadMore && !item.isLoadingNow) {\n <div\n class=\"action-item\">\n <zen-button variant=\"secondary-gray\"\n size=\"sm\"\n [fullWidth]=\"true\"\n (click)=\"loadMore(item, false)\">\n {{'Load More' | translate}}\n </zen-button>\n </div>\n }\n @if (item.isLoadingNow) {\n <div\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n }\n }\n @if (!item.isLazyLoading && !hasTreeData(item)) {\n @if (!item.hideSelectAll) {\n <div class=\"action-item-checkbox ds-item select-all\">\n @if (item.dataSource.length === item.filteredDataSource.length) {\n <zen-checkbox\n [(checked)]=\"item.isSelectedAll\"\n [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll(item)\">\n </zen-checkbox>\n }\n </div>\n }\n @for (dsItem of item.filteredDataSource; track dsItem) {\n <div\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\"\n (click)=\"toggleDsItem(dsItem, item)\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n (click)=\"$event.stopPropagation()\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n @if (dsItem.badgeBgColor) {\n <span\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n }\n </div>\n }\n }\n <!-- Tree view mode -->\n @if (!item.isLazyLoading && hasTreeData(item)) {\n <zen-groups\n [dataSource]=\"item.dataSource\"\n [filteredDataSource]=\"item.filteredDataSource\"\n [hideSelectAll]=\"item.hideSelectAll\"\n [inline]=\"true\"\n [hideSearch]=\"true\"\n [(isSelectedAll)]=\"item.isSelectedAll\"\n (checkedChange)=\"checkChanged($event, item)\">\n </zen-groups>\n }\n </div>\n }\n <!-- Date range picker -->\n @case ('dateRange') {\n <div class=\"menu-item__content\">\n <!-- Options date range view -->\n @if (item.dateRangeOptions?.length) {\n @for (option of item.dateRangeOptions; track option) {\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"></zen-radio>\n </div>\n }\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom' | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"></zen-radio>\n </div>\n @if (selectedDateRangeOptions[item.key] === 'Custom') {\n <div class=\"filter-date-fields\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-date-picker-dropdown\n type=\"single\"\n [(date)]=\"item.dateRange.start\"\n [timePicker]=\"item.showTime\">\n </zen-date-picker-dropdown>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-date-picker-dropdown\n type=\"single\"\n [date]=\"item.dateRange.end\"\n [timePicker]=\"item.showTime\"\n (dateChange)=\"handleEndDateChange(item, $event)\">\n </zen-date-picker-dropdown>\n </div>\n </div>\n }\n }\n <!-- Default date range view -->\n @if (!item.dateRangeOptions?.length) {\n <div class=\"filter-date-fields\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-date-picker-dropdown\n type=\"single\"\n [(date)]=\"item.dateRange.start\"\n [timePicker]=\"item.showTime\">\n </zen-date-picker-dropdown>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-date-picker-dropdown\n type=\"single\"\n [date]=\"item.dateRange.end\"\n [timePicker]=\"item.showTime\"\n (dateChange)=\"handleEndDateChange(item, $event)\">\n </zen-date-picker-dropdown>\n </div>\n </div>\n }\n </div>\n }\n <!-- Date picker -->\n @case ('date') {\n <div class=\"filter-row menu-item__content\">\n <zen-date-picker-dropdown\n type=\"single\"\n [(date)]=\"item.date\"\n [timePicker]=\"item.showTime\">\n </zen-date-picker-dropdown>\n </div>\n }\n <!-- Number range -->\n @case ('numberRange') {\n <div\n class=\"filter-row number-range-row menu-item__content\">\n <zen-input type=\"number\"\n size=\"sm\"\n [label]=\"'Min' | translate\"\n [(ngModel)]=\"item.numberRange.from\"></zen-input>\n <zen-input type=\"number\"\n size=\"sm\"\n [label]=\"'Max' | translate\"\n [(ngModel)]=\"item.numberRange.to\"></zen-input>\n </div>\n }\n <!-- Radio -->\n @case ('radio') {\n <div class=\"menu-item__content\">\n @for (option of item.radioOptions; track option) {\n <div\n class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.id\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [imageUrl]=\"option.imageUrl\"\n [selected]=\"option.selected\"\n (radioChange)=\"radioChanged($event, item)\"\n [disabled]=\"option.disabled\"></zen-radio>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n }\n }\n @if (showNoFilterResult) {\n <span\n class=\"no-item\">{{'No Results Found' | translate}}..</span>\n }\n </div>\n\n <div class=\"filter-menu__footer\">\n <span class=\"selected-count\">{{ selectedCount }} {{'Selected' | translate}}</span>\n <div class=\"filter-footer-actions\">\n <zen-button variant=\"secondary-gray\"\n [destructive]=\"true\"\n [disabled]=\"resetDisabled\"\n (click)=\"reset()\">\n {{ (defaultFilter ? 'Reset Default' : 'Clear All') | translate }}\n </zen-button>\n <zen-button variant=\"primary\"\n (click)=\"apply()\">\n {{'Apply' | translate}}\n </zen-button>\n </div>\n </div>\n\n </div>\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-option]',\n standalone: false\n})\nexport class ZenduSelectOptionDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-value]',\n standalone: false\n})\nexport class ZenduSelectValueDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-custom-button]',\n standalone: false\n})\nexport class ZenduSelectButtonDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ViewEncapsulation, ContentChild, ChangeDetectionStrategy, ViewChild, TemplateRef, ViewContainerRef } 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';\nimport { ZenduOverlayService } from '../overlay/zendu-overlay.service';\nimport { ZenConnectedPanelRef } from '../overlay/zendu-overlay.types';\n\nexport interface LazyLoaderSearch {\n text?: string;\n ids?: string[];\n}\n\nexport interface LazyLoaderResult {\n id: string | number;\n name?: string | number; // Compatible with DataSource\n text?: string; // Original property\n checked?: boolean;\n imageUrl?: string;\n isOpen?: boolean;\n children?: string[];\n parentId?: string | number;\n level?: number;\n index?: number;\n badgeBgColor?: string;\n badgeColor?: string;\n}\n\nexport type LazyLoaderFunction = (\n search: LazyLoaderSearch, \n offset: number, \n limit: number\n) => Promise<LazyLoaderResult[]>;\n\nexport interface AddOptionEvent {\n value: string;\n}\n\nexport interface RemoveOptionEvent {\n removed: boolean;\n}\n\nexport interface SelectOption {\n [key: string]: any;\n id?: string | number;\n name?: string;\n icon?: string;\n iconName?: string;\n avatar?: string;\n dotColor?: string;\n secondaryText?: string;\n}\n\n@Component({\n selector: 'zen-select',\n templateUrl: './zendu-select.component.html',\n styleUrls: ['./zendu-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSelectComponent implements OnChanges, OnDestroy {\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 * Show a help icon next to the label. On hover/keyboard-focus it reveals a\n * self-contained tooltip with `helpTooltip` (the library does not depend on\n * Angular Material).\n */\n @Input() helpIcon = false;\n\n /**\n * Tooltip text shown on hover/focus of the label help icon. Translated.\n */\n @Input() helpTooltip = '';\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. `isOpen` is the single source of truth — assigning it\n * attaches/detaches the CDK overlay panel, so every existing open/close path\n * (toggle, search focus/typing, option select, hideDropDown) stays correct\n * without touching each call site.\n */\n private _isOpen = false;\n public get isOpen(): boolean {\n return this._isOpen;\n }\n public set isOpen(open: boolean) {\n if (open === this._isOpen) return;\n this._isOpen = open;\n if (open) {\n this._openOverlay();\n } else {\n this._closeOverlay();\n }\n }\n public helpTooltipAlign: 'center' | 'start' | 'end' = 'center';\n public helpTooltipPlacement: 'above' | 'below' = 'above';\n public searchText = '';\n public searchInputValue = '';\n public searchFocused = false;\n public filteredOptions: SelectOption[] | any[] = [];\n public selectedDisplay = '';\n public labelText = '';\n public option: SelectOption | null = null;\n public canLoadMore = false;\n public isLoadingNow = false;\n private _searchDebounce: ReturnType<typeof setTimeout>;\n\n // Tree mode properties\n public treeFilteredDataSource: DataSource[] = [];\n public isSelectedAll = false;\n \n /**\n * Select Option Template for custom HTML\n */\n @ContentChild(ZenduSelectOptionDirective) optionTemplate: ZenduSelectOptionDirective;\n \n /**\n * Select Value Template for custom HTML\n */\n @ContentChild(ZenduSelectValueDirective) valueTemplate: ZenduSelectValueDirective;\n \n /**\n * Select Button Template for custom HTML\n */\n @ContentChild(ZenduSelectButtonDirective) buttonTemplate: ZenduSelectButtonDirective;\n\n /** Trigger element the overlay panel is anchored to. */\n @ViewChild('selectWrapper') private selectWrapper?: ElementRef<HTMLElement>;\n\n /** The dropdown panel content, rendered into the overlay when open. */\n @ViewChild('dropdownPanel') private dropdownPanel?: TemplateRef<unknown>;\n\n private _panelRef: ZenConnectedPanelRef | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private overlay: ZenduOverlayService,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n ngOnDestroy(): void {\n this._closeOverlay();\n }\n\n /**\n * Open the dropdown panel in a CDK overlay anchored to the trigger. The\n * overlay handles viewport-aware positioning (flip up/down, push into view,\n * clamp + internal scroll) and renders at the body level, so the panel is\n * never clipped by an ancestor's `overflow` or by the viewport edge.\n */\n private _openOverlay(): void {\n if (this._panelRef || !this.selectWrapper || !this.dropdownPanel) return;\n\n this._panelRef = this.overlay.openConnectedPanel({\n origin: this.selectWrapper,\n content: this.dropdownPanel,\n viewContainerRef: this.viewContainerRef,\n width: 'origin',\n scrollBehavior: 'reposition'\n });\n\n // Outside click / Escape / detach → close (and emit, as a user action).\n this._panelRef.closed.subscribe(() => this.hideDropDown(true));\n }\n\n private _closeOverlay(): void {\n this._panelRef?.close();\n this._panelRef = null;\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 /**\n * Position the help tooltip so it never overflows the viewport. Horizontally:\n * anchored to the icon's right edge near the right border, to its left edge near\n * the left border, otherwise centered. Vertically: above by default, flipped\n * below when there isn't room above and there's more room below (the label-row\n * icon sits high in the layout). Computed from the icon rect synchronously\n * (before paint) so the tooltip appears in its final spot without a flicker.\n */\n updateHelpTooltipPlacement(event: Event): void {\n const icon = event.currentTarget as HTMLElement | null;\n if (!icon) {\n return;\n }\n const rect = icon.getBoundingClientRect();\n const margin = 8;\n\n const iconCenter = rect.left + rect.width / 2;\n const halfMaxWidth = 130;\n if (iconCenter + halfMaxWidth > window.innerWidth - margin) {\n this.helpTooltipAlign = 'end';\n } else if (iconCenter - halfMaxWidth < margin) {\n this.helpTooltipAlign = 'start';\n } else {\n this.helpTooltipAlign = 'center';\n }\n\n const estimatedHeight = 56;\n const spaceAbove = rect.top;\n const spaceBelow = window.innerHeight - rect.bottom;\n this.helpTooltipPlacement =\n spaceAbove < estimatedHeight + margin && spaceBelow > spaceAbove ? 'below' : 'above';\n }\n\n toggleDropdown(): void {\n if (this.disabled) return;\n \n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.searchText = '';\n if (this.isLazyLoading) {\n // Load the first page (showing already-selected items on top) the first\n // time the dropdown is opened.\n if (!this.isLoadingNow && !this.filteredOptions?.length) {\n this.loadMore(true);\n }\n } else {\n this.filterOptions();\n }\n }\n }\n\n /**\n * Handle scroll on the options list — fetch the next page once the user\n * scrolls near the bottom (lazy loading only).\n */\n public onOptionsScroll(event: Event): void {\n if (!this.isLazyLoading || this.isLoadingNow || !this.canLoadMore) {\n return;\n }\n const el = event.target as HTMLElement;\n const threshold = 40;\n if (el.scrollHeight - el.scrollTop - el.clientHeight <= threshold) {\n this.loadMore(false);\n }\n }\n\n /**\n * Reset and re-fetch the first page when the search text changes in lazy\n * mode (debounced so we don't fire a request on every keystroke).\n */\n private reloadLazySearch(): void {\n clearTimeout(this._searchDebounce);\n this._searchDebounce = setTimeout(() => {\n this.filteredOptions = [];\n this.canLoadMore = true;\n this.loadMore(false);\n }, 300);\n }\n \n /**\n * Handle option selection\n */\n selectOption(option: SelectOption): void {\n this.option = option;\n const optionValue = this.returnOption ? option : this.getOptionValue(option);\n \n if (this.isMultiselect) {\n this.toggleMultiselectOption(optionValue);\n } else {\n this.selectModel = optionValue;\n this.isOpen = false;\n // Update search input value for search type\n if (this.leadingType === 'search') {\n this.searchInputValue = this.getOptionDisplay(option);\n }\n }\n \n this.emitChange();\n this.updateDisplay();\n }\n \n /**\n * Toggle option in multiselect mode\n */\n private toggleMultiselectOption(value: any): void {\n if (!Array.isArray(this.selectModel)) {\n this.selectModel = [];\n }\n \n const index = this.getElementIndex(value);\n \n if (index < 0) {\n this.selectModel.push(value);\n } else {\n this.selectModel.splice(index, 1);\n }\n \n this.updateLabel();\n }\n \n /**\n * Check if option is selected\n */\n isSelected(option: SelectOption): boolean {\n if (this.isModelEmpty()) {\n return false;\n }\n \n const optionId = this.getId(option);\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n return this.selectModel.findIndex(el => this.getId(el as SelectOption) === optionId) >= 0;\n } else {\n return this.getId(this.selectModel as SelectOption) === optionId;\n }\n }\n \n /**\n * Get display text for option\n */\n getOptionDisplay(option: any): string {\n if (typeof option === 'object' && option !== null) {\n if (this.displayProp) {\n const combinedProps = this.displayProp.split(\"|\")\n .map(i => this.getRecursiveProperty(option, i))\n .filter(v => v) // Filter out null values\n .join(\" \");\n return combinedProps || '';\n } else {\n console.error('App-Select: when using objects as model, a displayProp value is mandatory.');\n return \"\";\n }\n }\n return String(option);\n }\n \n /**\n * Alias for getOptionDisplay for backward compatibility\n */\n public getName(option: string | object): string {\n return this.getOptionDisplay(option);\n }\n \n \n /**\n * Get value for option (using idProp)\n */\n getOptionValue(option: SelectOption): string | number {\n return this.getId(option);\n }\n \n /**\n * Get id value from option\n */\n private getId(option: string | number | object): string | number {\n if (typeof option === 'object' && option !== null) {\n if (this.idProp) {\n return this.getRecursiveProperty(option as Record<string, unknown>, this.idProp);\n } else {\n console.error('App-Select: when using objects as model, a idProp value is mandatory.');\n return \"\";\n }\n } else {\n return option as string | number;\n }\n }\n \n /**\n * Update displayed text\n */\n private updateDisplay(): void {\n if (this.isModelEmpty()) {\n this.selectedDisplay = '';\n this.labelText = '';\n // Also clear search input for search type\n if (this.leadingType === 'search') {\n this.searchInputValue = '';\n }\n return;\n }\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n const option = this.findOptionByValue(this.selectModel[0]);\n this.selectedDisplay = option ? this.getOptionDisplay(option) : '';\n } else {\n this.selectedDisplay = `${this.selectModel.length} selected`;\n }\n // For multiselect search type, show count in search input when closed\n if (this.leadingType === 'search' && !this.searchFocused) {\n this.searchInputValue = this.selectedDisplay;\n }\n } else {\n const option = this.findOptionByValue(this.selectModel);\n this.selectedDisplay = option ? this.getOptionDisplay(option) : '';\n // Also update search input for search type\n if (this.leadingType === 'search' && option) {\n this.searchInputValue = this.getOptionDisplay(option);\n }\n }\n }\n \n /**\n * Find option by value\n */\n private findOptionByValue(value: any): SelectOption | null {\n if (this.returnOption) {\n return this.options.find(opt => opt === value) || null;\n }\n return this.options.find(opt => this.getId(opt) === value) || null;\n }\n \n /**\n * Check if model is empty\n */\n public isModelEmpty(): boolean {\n if (this.isMultiselect) {\n return !Array.isArray(this.selectModel) || !this.selectModel.length;\n } else {\n return this.selectModel === null || this.selectModel === void 0;\n }\n }\n \n /**\n * Get element index in multiselect array\n */\n private getElementIndex(value: any): number {\n if (!Array.isArray(this.selectModel)) return -1;\n \n if (typeof value === 'object') {\n const valueId = this.getId(value);\n return this.selectModel.findIndex(el => this.getId(el as SelectOption) === valueId);\n } else {\n return this.selectModel.indexOf(value);\n }\n }\n \n /**\n * Toggle all options in multiselect\n */\n public toggleAll(): void {\n const modelArray = Array.isArray(this.selectModel) ? this.selectModel : [];\n if (modelArray.length !== this.options.length) {\n this.selectModel = this.options.map((el: SelectOption) => this.returnOption ? el : this.getId(el));\n } else {\n this.selectModel = [];\n }\n \n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n \n /**\n * Toggle Select All option for flat multiselect\n */\n public toggleSelectAll(): void {\n if (this.isAllSelected()) {\n // Deselect all\n this.selectModel = [];\n } else {\n // Select all filtered options\n this.selectModel = this.filteredOptions.map((el: SelectOption) => \n this.returnOption ? el : this.getId(el)\n );\n }\n \n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n \n /**\n * Check if all filtered options are selected\n */\n public isAllSelected(): boolean {\n if (!this.isMultiselect || !Array.isArray(this.selectModel)) {\n return false;\n }\n \n if (this.filteredOptions.length === 0) {\n return false;\n }\n \n // Check if all filtered options are in the selectModel\n return this.filteredOptions.every(option => {\n const optionId = this.getId(option);\n return this.selectModel.some((selected: any) => {\n const selectedId = this.returnOption ? this.getId(selected) : selected;\n return selectedId === optionId;\n });\n });\n }\n \n /**\n * Get recursive property from nested object\n */\n private getRecursiveProperty(object: Record<string, unknown>, path: string): string | number {\n return path.split('.').reduce((obj, x) => {\n if (obj && typeof obj === 'object' && x in obj) {\n return (obj as Record<string, unknown>)[x];\n } else {\n return null;\n }\n }, object as unknown) as string | number;\n }\n \n /**\n * Update label text\n */\n public updateLabel(): void {\n if (this.isModelEmpty()) {\n this.labelText = '';\n return;\n }\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n const selectedCount = this.selectModel.length;\n \n if (selectedCount === 1) {\n this.labelText = this.getNameFromValue(this.selectModel[0]);\n } else {\n this.labelText = `${selectedCount} Selected`;\n }\n } else {\n this.labelText = this.getNameFromValue(this.selectModel);\n }\n }\n \n /**\n * Get name from value\n */\n public getNameFromValue(val: any): string {\n if (this.returnOption) {\n return this.getOptionDisplay(val as SelectOption);\n } else {\n if (this.isLazyLoading) {\n const opt = this.filteredOptions?.find(i => this.getId(i) == val);\n return opt ? this.getOptionDisplay(opt) : String(val);\n } else {\n if (!this.options || !this.options.length) {\n return '';\n }\n let option = this.options.find(el => this.getId(el) === val);\n return this.getOptionDisplay(option ?? val as SelectOption);\n }\n }\n }\n \n /**\n * Emit change event\n */\n private emitChange(): void {\n // notify with timeout\n // allow output property \"enabled\" applied by parent first and then emit the onChange\n setTimeout(() => {\n this.selectModelChange.emit(this.selectModel);\n }, 1);\n }\n \n /**\n * Filter options based on search\n */\n filterOptions(): void {\n // In lazy mode the filteredOptions are managed by loadMore(), not derived\n // from the static options array — leave them untouched here.\n if (this.isLazyLoading) {\n return;\n }\n if (!this.searchText) {\n this.filteredOptions = [...this.options];\n return;\n }\n\n const searchLower = this.searchText.toLowerCase();\n this.filteredOptions = this.options.filter(option => {\n const display = this.getOptionDisplay(option).toLowerCase();\n return display.includes(searchLower);\n });\n\n }\n \n /**\n * Handle search input\n */\n onSearchChange(): void {\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n\n clearSearch(): void {\n this.searchText = '';\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n \n /**\n * Handle search input change for search type\n */\n onSearchInputChange(): void {\n this.searchText = this.searchInputValue;\n if (!this.isOpen && this.searchInputValue) {\n this.isOpen = true;\n }\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n \n /**\n * Handle search input focus\n */\n onSearchFocus(): void {\n this.searchFocused = true;\n // Clear the search input when focused so user can type fresh\n this.searchInputValue = '';\n this.searchText = '';\n // Open dropdown to show all options\n this.isOpen = true;\n // Reset filtered options to show all\n this.filterOptions();\n }\n \n /**\n * Handle search input blur\n */\n onSearchBlur(event: FocusEvent): void {\n // Don't close immediately if clicking on dropdown\n setTimeout(() => {\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (!relatedTarget || !this.elementRef.nativeElement.contains(relatedTarget)) {\n this.searchFocused = false;\n if (!this.isOpen) {\n this.searchInputValue = this.selectedDisplay;\n }\n }\n }, 200);\n }\n \n /**\n * Get selected option for leading display\n */\n getSelectedOption(): SelectOption | null {\n if (this.isModelEmpty()) return null;\n\n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n return this.findOptionByValue(this.selectModel[0]);\n }\n return null;\n }\n\n return this.findOptionByValue(this.selectModel);\n }\n \n /**\n * Get selected secondary text for display\n */\n getSelectedSecondaryText(): string | null {\n if (!this.selectModel) return null;\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n const option = this.findOptionByValue(this.selectModel[0]);\n return option?.secondaryText || null;\n }\n // For multiple selection, we won't show secondary text to avoid confusion\n return null; \n }\n \n const option = this.findOptionByValue(this.selectModel);\n return option?.secondaryText || null;\n }\n \n /**\n * Hide dropdown\n */\n public async hideDropDown(userAction: boolean = false): Promise<void> {\n // Only emit closed event if it was open AND triggered by user action\n if (userAction && this.isOpen) {\n this.closed.emit(this.selectModel);\n }\n \n this.isOpen = false;\n }\n \n /**\n * Handle Enter key on search input\n */\n onSearchEnter(event: Event): void {\n event.preventDefault();\n if (this.enableAddNewOption && this.filteredOptions.length === 0 && (this.searchText || this.searchInputValue)?.trim()) {\n this.handleAddNewOption();\n }\n }\n\n /**\n * Handle add new option\n */\n public handleAddNewOption(): void {\n this.addNewOption.emit({ value: this.searchText || this.searchInputValue });\n this.searchText = '';\n this.searchInputValue = '';\n this.filterOptions();\n this.hideDropDown(true);\n }\n \n /**\n * Handle remove option\n */\n public handleRemoveOption(): void {\n this.removeOption.emit({ removed: true });\n this.hideDropDown(true);\n }\n \n /**\n * Get state classes\n */\n getStateClasses(): string {\n const classes = ['app-select-container'];\n\n if (this.size) classes.push(`size-${this.size}`);\n if (this.isOpen) classes.push('open');\n if (this.disabled) classes.push('disabled');\n if (this.error) classes.push('error');\n if (this.destructive) classes.push('destructive');\n if (this.label) classes.push('with-label');\n if (this.supportingText) classes.push('with-supporting');\n \n return classes.join(' ');\n }\n \n /**\n * Load more items for lazy loading\n */\n public async loadMore(showSelectedOnTop: boolean): Promise<void> {\n try {\n this.isLoadingNow = true;\n if (!this.lazyLoader) {\n throw `loader is not available`;\n }\n if (!this.filteredOptions) {\n this.filteredOptions = [];\n }\n \n // load first 10 records for the first time\n const limit = (this.filteredOptions.length == 0) ? 10 : 100;\n let newItems: LazyLoaderResult[] = await this.lazyLoader({ text: this.searchText || \"\" }, this.filteredOptions.length, limit);\n \n this.canLoadMore = (newItems.length == limit);\n \n // the selectModel contains the selected items ids \n const checkedIds = Array.isArray(this.selectModel) \n ? this.selectModel.map(item => String(this.getId(item as SelectOption)))\n : [];\n \n if (showSelectedOnTop && checkedIds?.length) {\n // remove the checked items first\n this.filteredOptions = this.filteredOptions.filter(i => !checkedIds.includes(String(this.getId(i))));\n newItems = newItems.filter(i => !checkedIds.includes(String(i.id)));\n \n // add all checked items to the top\n const checkedItems: LazyLoaderResult[] = await this.lazyLoader({ ids: checkedIds }, 0, 100);\n this.filteredOptions = [...(checkedItems as SelectOption[]), ...this.filteredOptions];\n \n this.updateLabel();\n }\n \n // the filteredDataSource contains the items that is visible to user at the current moment\n this.filteredOptions = [...this.filteredOptions, ...(newItems as SelectOption[])];\n } catch (err) {\n console.error(err);\n } finally {\n this.isLoadingNow = false;\n }\n }\n\n /**\n * Initialize tree data by syncing selectModel IDs to DataSource checked flags\n */\n private initTreeData(): void {\n if (!this.isTreeMode || !this.options?.length) return;\n const selectedIds = new Set(\n Array.isArray(this.selectModel)\n ? this.selectModel.map(v => String(typeof v === 'object' ? this.getId(v) : v))\n : []\n );\n (this.options as any[]).forEach(opt => {\n opt.checked = selectedIds.has(String(opt[this.idProp]));\n });\n this.treeFilteredDataSource = [...this.options] as DataSource[];\n this.updateTreeSelectAllState();\n }\n\n /**\n * Handle checked change from zen-groups in tree mode\n */\n public onTreeCheckedChange(dsItem: DataSource): void {\n const checkedItems = (this.options as any[]).filter(opt => opt.checked);\n this.selectModel = checkedItems.map(opt =>\n this.returnOption ? opt : opt[this.idProp]\n );\n this.updateTreeSelectAllState();\n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n\n /**\n * Handle select all change from zen-groups in tree mode\n */\n public onTreeSelectAllChange(isSelectedAll: boolean): void {\n this.isSelectedAll = isSelectedAll;\n const checkedItems = (this.options as any[]).filter(opt => opt.checked);\n this.selectModel = checkedItems.map(opt =>\n this.returnOption ? opt : opt[this.idProp]\n );\n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n\n /**\n * Update the isSelectedAll flag based on current checked state\n */\n private updateTreeSelectAllState(): void {\n if (!this.options?.length) return;\n this.isSelectedAll = (this.options as any[]).every(opt => opt.checked);\n }\n\n}","<div [class]=\"getStateClasses()\">\n <!-- Label -->\n @if (label) {\n <label class=\"app-select-label text text-sm text-weight-medium\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n @if (required) {\n <span class=\"required-indicator\">*</span>\n }\n @if (helpIcon) {\n <span\n class=\"zen-help-icon\"\n role=\"img\"\n [class.disabled]=\"disabled\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-label]=\"helpTooltip | translate\"\n (mouseenter)=\"updateHelpTooltipPlacement($event)\"\n (focus)=\"updateHelpTooltipPlacement($event)\">\n <i class=\"material-icons-outlined\">help_outline</i>\n <!-- Shown on hover/focus via CSS — no click state. -->\n <div\n class=\"zen-help-tooltip\"\n [class.align-start]=\"helpTooltipAlign === 'start'\"\n [class.align-end]=\"helpTooltipAlign === 'end'\"\n [class.place-below]=\"helpTooltipPlacement === 'below'\">\n <div class=\"tooltip-content\">{{ helpTooltip | translate }}</div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n </span>\n }\n </label>\n }\n\n <!-- Select Input -->\n <div class=\"app-select-wrapper\" #selectWrapper>\n <!-- Custom Trigger Template (overrides built-in trigger) -->\n @if (buttonTemplate) {\n <div\n class=\"app-select-custom-trigger\"\n (click)=\"toggleDropdown()\">\n <ng-template [ngTemplateOutlet]=\"buttonTemplate.template\"\n [ngTemplateOutletContext]=\"{ isOpen: isOpen, selected: getSelectedOption(), display: selectedDisplay, disabled: disabled }\">\n </ng-template>\n </div>\n }\n\n <!-- Built-in Trigger (when no custom button template provided) -->\n @if (!buttonTemplate) {\n @switch (leadingType) {\n <!-- Default Select (no leading element) -->\n @case ('default') {\n <ng-container *ngTemplateOutlet=\"defaultSelectTemplate\"></ng-container>\n }\n <!-- Icon Leading Select -->\n @case ('icon') {\n <ng-container *ngTemplateOutlet=\"iconSelectTemplate\"></ng-container>\n }\n <!-- Avatar Leading Select -->\n @case ('avatar') {\n <ng-container *ngTemplateOutlet=\"avatarSelectTemplate\"></ng-container>\n }\n <!-- Dot Leading Select -->\n @case ('dot') {\n <ng-container *ngTemplateOutlet=\"dotSelectTemplate\"></ng-container>\n }\n <!-- Search Input Select -->\n @case ('search') {\n <ng-container *ngTemplateOutlet=\"searchInputTemplate\"></ng-container>\n }\n }\n }\n\n <!-- Dropdown Menu (rendered into a CDK overlay via ZenduOverlayService;\n positioning/flip/clamping is handled there, not with absolute CSS) -->\n <ng-template #dropdownPanel>\n <div class=\"app-select-dropdown\">\n <!-- Tree Mode: embed zen-groups inline -->\n @if (isTreeMode && isMultiselect) {\n <zen-groups [inline]=\"true\"\n [dataSource]=\"$any(options)\"\n [filteredDataSource]=\"treeFilteredDataSource\"\n [hideSelectAll]=\"hideSelectAll\"\n [hideSearch]=\"hideTreeSearch\"\n [idProp]=\"idProp\"\n [displayProp]=\"displayProp\"\n [(isSelectedAll)]=\"isSelectedAll\"\n (isSelectedAllChange)=\"onTreeSelectAllChange($event)\"\n (checkedChange)=\"onTreeCheckedChange($event)\">\n </zen-groups>\n } @else {\n <!-- Search Box for hasSearch (not for search type as it has inline search) -->\n @if (leadingType !== 'search' && hasSearch && !disabled) {\n <div class=\"app-select-search\">\n <zen-icon [name]=\"'search'\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange()\"\n (keydown.enter)=\"onSearchEnter($event)\"\n placeholder=\"Search\"\n class=\"app-select-search-input\">\n @if (searchText) {\n <zen-icon\n class=\"app-select-search-clear\"\n [name]=\"'x'\"\n [customColor]=\"'#667085'\"\n (click)=\"clearSearch(); $event.stopPropagation()\">\n </zen-icon>\n }\n </div>\n }\n <!-- Options List -->\n <div class=\"app-select-options\" (scroll)=\"onOptionsScroll($event)\">\n <!-- Select All Option for Multiselect -->\n @if (isMultiselect && !hideSelectAll && !isLazyLoading && filteredOptions.length > 0) {\n <button\n class=\"app-select-option select-all\"\n (click)=\"toggleSelectAll()\">\n <zen-checkbox class=\"app-select-checkbox\"\n [checked]=\"isAllSelected()\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n <span class=\"app-select-option-text\">\n Select All\n </span>\n </button>\n }\n <!-- Add New Option -->\n @if (enableAddNewOption && (showDefaultAddOption || searchText)) {\n <button\n class=\"app-select-option add-new-option\"\n (click)=\"handleAddNewOption(); $event.stopPropagation()\">\n <zen-icon [name]=\"'plus'\" [customColor]=\"'#136AB6'\"></zen-icon>\n <span class=\"app-select-option-text\">\n {{ (newOptionText || 'Add New Option') + (searchText ? ': \"' + searchText + '\"' : '') }}\n </span>\n </button>\n }\n <!-- Remove Option -->\n @if (enableRemoveOption) {\n <button\n class=\"app-select-option remove-option\"\n (click)=\"handleRemoveOption(); $event.stopPropagation()\">\n <zen-icon [name]=\"'user-x'\" [customColor]=\"'#344054'\"></zen-icon>\n <span class=\"app-select-option-text\">\n {{ removeOptionText || 'Remove' }}\n </span>\n </button>\n }\n @if (filteredOptions.length === 0 && !enableAddNewOption && !isLoadingNow) {\n <div class=\"app-select-no-options\">\n No matching options found\n </div>\n }\n @for (option of filteredOptions; track option) {\n <button\n class=\"app-select-option\"\n [class.selected]=\"isSelected(option)\"\n (click)=\"selectOption(option)\">\n <!-- Checkbox for Multiselect -->\n @if (isMultiselect) {\n <zen-checkbox class=\"app-select-checkbox\"\n [checked]=\"isSelected(option)\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n }\n <!-- Option Leading Element -->\n @if (leadingType !== 'default') {\n <div class=\"app-select-option-leading\">\n @switch (leadingType) {\n @case ('icon') {\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: option }\"></ng-container>\n }\n @case ('avatar') {\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: option }\"></ng-container>\n }\n @case ('dot') {\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: option }\"></ng-container>\n }\n }\n </div>\n }\n <!-- Option Text -->\n <div class=\"app-select-option-text-wrapper\">\n <!-- Use custom template if provided -->\n @if (!isMultiselect && optionTemplate) {\n <ng-template [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n } @else {\n <span class=\"app-select-option-text\" [class.app-select-option-truncate]=\"isTruncate\">\n {{ getName(option) | translate }}\n </span>\n @if (option.secondaryText) {\n <span class=\"app-select-option-secondary\">\n {{ option.secondaryText }}\n </span>\n }\n }\n </div>\n <!-- Check Icon for Single Select -->\n @if (!isMultiselect && isSelected(option)) {\n <zen-icon\n class=\"app-select-option-check\"\n [name]=\"'check'\"\n [customColor]=\"'#136AB6'\">\n </zen-icon>\n }\n </button>\n }\n <!-- Lazy loading spinner -->\n @if (isLazyLoading && isLoadingNow) {\n <div class=\"app-select-loading\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n }\n </div>\n }\n <!-- Flat List Mode (default) -->\n </div>\n </ng-template>\n </div>\n\n <!-- Hint text / Error message -->\n @if ((destructive && errorMessage) || hintText) {\n <div\n class=\"app-select-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n @if (destructive) {\n <i class=\"material-icons-outlined hint-icon\">error_outline</i>\n }\n <span>{{ ((destructive && errorMessage) ? errorMessage : hintText) | translate }}</span>\n </div>\n }\n</div>\n\n<!-- ============================================= -->\n<!-- MAIN SELECT INPUT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Default Select Template (No Leading Element) -->\n<ng-template #defaultSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Icon Select Template -->\n<ng-template #iconSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: getSelectedOption(), icon: leadingIcon }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Avatar Select Template -->\n<ng-template #avatarSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: getSelectedOption(), avatar: leadingAvatar }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Dot Select Template -->\n<ng-template #dotSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: getSelectedOption(), color: leadingDotColor }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Search Input Template -->\n<ng-template #searchInputTemplate>\n <div class=\"app-select-input app-select-search-input\"\n [class.focused]=\"isOpen || searchFocused\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <!-- Search Icon -->\n <zen-icon [name]=\"'search'\"\n [customColor]=\"disabled ? '#9CA3AF' : '#667085'\">\n </zen-icon>\n\n <!-- Search Input Field -->\n <input type=\"text\"\n class=\"app-select-search-field\"\n [(ngModel)]=\"searchInputValue\"\n (ngModelChange)=\"onSearchInputChange()\"\n (keydown.enter)=\"onSearchEnter($event)\"\n (focus)=\"onSearchFocus()\"\n (blur)=\"onSearchBlur($event)\"\n [placeholder]=\"selectedDisplay || placeholder\"\n [disabled]=\"disabled\">\n </div>\n</ng-template>\n\n<!-- ============================================= -->\n<!-- SHARED COMPONENT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Select Value Display -->\n<ng-template #selectValueDisplay>\n <div class=\"app-select-value-wrapper\">\n @if (valueTemplate && !isModelEmpty()) {\n <ng-template [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: getSelectedOption(), display: selectedDisplay }\">\n </ng-template>\n } @else {\n <span class=\"app-select-value\" [class.placeholder]=\"isModelEmpty()\">\n {{ selectedDisplay || placeholder | translate }}\n </span>\n @if (getSelectedSecondaryText() && !isModelEmpty()) {\n <span class=\"app-select-secondary\">\n {{ getSelectedSecondaryText() }}\n </span>\n }\n }\n </div>\n</ng-template>\n\n<!-- Dropdown Arrow -->\n<ng-template #dropdownArrow>\n <zen-icon class=\"app-select-arrow\"\n [class.rotated]=\"isOpen\"\n [name]=\"'chevron-down'\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n</ng-template>\n\n<!-- ============================================= -->\n<!-- LEADING ELEMENT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Icon Leading Element (with smart resolution) -->\n<ng-template #iconLeadingElement let-option=\"option\" let-icon=\"icon\">\n @if (icon || option?.icon || option?.iconName) {\n @if (getIconPath(option, icon); as iconPath) {\n <!-- If icon contains / or . treat as SVG path -->\n @if ((icon && (icon.includes('/') || icon.includes('.'))) ||\n (option?.icon && (option.icon.includes('/') || option.icon.includes('.'))) ||\n (option?.iconName && (option.iconName.includes('/') || option.iconName.includes('.')))) {\n <!-- Use img tag for Excel to preserve colors -->\n @if (iconPath.includes('excel')) {\n <img\n [src]=\"iconPath\"\n alt=\"\"\n style=\"width: 20px; height: 20px;\">\n }\n <!-- Use zen-icon with src for other SVG files -->\n @if (!iconPath.includes('excel')) {\n <zen-icon\n [src]=\"iconPath\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n }\n }\n <!-- Otherwise treat as Material icon name or special cases -->\n @if (!((icon && (icon.includes('/') || icon.includes('.'))) ||\n (option?.icon && (option.icon.includes('/') || option.icon.includes('.'))) ||\n (option?.iconName && (option.iconName.includes('/') || option.iconName.includes('.'))))) {\n <!-- Special case for Excel icon - use img to preserve colors -->\n @if ((icon === 'excel') || (option?.icon === 'excel') || (option?.iconName === 'excel')) {\n <img\n src=\"assets/ng-zenduit/icons/excel.svg\"\n alt=\"Excel\"\n style=\"width: 20px; height: 20px;\">\n }\n <!-- Material icon names -->\n @if ((icon !== 'excel') && (option?.icon !== 'excel') && (option?.iconName !== 'excel')) {\n <zen-icon\n [name]=\"icon || option?.icon || option?.iconName\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n }\n }\n }\n }\n</ng-template>\n\n<!-- Avatar Leading Element -->\n<ng-template #avatarLeadingElement let-option=\"option\" let-avatar=\"avatar\">\n @if (avatar || option?.avatar) {\n <div class=\"app-select-avatar\" >\n <img [src]=\"avatar || option?.avatar\" alt=\"\">\n </div>\n }\n</ng-template>\n\n<!-- Dot Leading Element -->\n<ng-template #dotLeadingElement let-option=\"option\" let-color=\"color\">\n <div class=\"app-select-dot\"\n [style.background-color]=\"color || option?.dotColor || '#10B981'\">\n </div>\n</ng-template>","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { PageItem } from './pageItem';\n\n@Component({\n selector: 'zen-pagination-bar',\n templateUrl: './zendu-pagination-bar.component.html',\n styleUrls: ['./zendu-pagination-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduPaginationBarComponent implements OnChanges {\n @Input() page = 1;\n @Input() perPage = 10;\n @Input() count = 0;\n @Input() perPageOptions: number[] = [10, 20, 30, 40, 50];\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() perPageChange = new EventEmitter<number>();\n\n public totalPages = 1;\n public pages: PageItem[] = [];\n public rangeStart = 0;\n public rangeEnd = 0;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['count'] || changes['perPage'] || changes['page']) {\n this.recalculate();\n }\n }\n\n public goToPage(target: number): void {\n const clamped = Math.min(Math.max(1, target), this.totalPages);\n if (clamped === this.page) {\n return;\n }\n this.page = clamped;\n this.recalculate();\n this.pageChange.emit(this.page);\n }\n\n public onPerPageChange(value: number): void {\n this.perPage = value;\n this.page = 1;\n this.recalculate();\n this.perPageChange.emit(this.perPage);\n this.pageChange.emit(this.page);\n }\n\n private recalculate(): void {\n this.totalPages = Math.max(1, Math.ceil((this.count || 0) / (this.perPage || 1)));\n this.pages = this.buildPages(this.page, this.totalPages);\n this.rangeStart = this.count === 0 ? 0 : (this.page - 1) * this.perPage + 1;\n this.rangeEnd = Math.min(this.page * this.perPage, this.count);\n }\n\n private buildPages(current: number, total: number): PageItem[] {\n const result: PageItem[] = [];\n const push = (p: number) => result.push({ kind: 'page', page: p, active: p === current });\n\n if (total <= 7) {\n for (let i = 1; i <= total; i++) {\n push(i);\n }\n return result;\n }\n\n const window = new Set<number>([1, total, current - 1, current, current + 1]);\n if (current <= 3) {\n window.add(2).add(3);\n }\n if (current >= total - 2) {\n window.add(total - 1).add(total - 2);\n }\n\n const sorted = Array.from(window)\n .filter((p) => p >= 1 && p <= total)\n .sort((a, b) => a - b);\n\n let prev = 0;\n for (const p of sorted) {\n if (p - prev > 1) {\n result.push({ kind: 'ellipsis' });\n }\n push(p);\n prev = p;\n }\n return result;\n }\n}\n","<div class=\"pagination-component\">\n <p class=\"results-text\">\n {{ \"Showing\" | translate }} {{ rangeStart }} - {{ rangeEnd }}\n {{ \"of\" | translate }} {{ count }} {{ \"results\" | translate }}\n </p>\n\n <div class=\"page-navigation\">\n <zen-button\n buttonType=\"button-icon-only\"\n variant=\"tertiary-gray\"\n size=\"md\"\n icon=\"chevron-left\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPage(page - 1)\">\n </zen-button>\n\n <div class=\"pages\">\n @for (item of pages; track item; let i = $index) {\n @if (item.kind === 'page') {\n <button\n type=\"button\"\n class=\"page-btn\"\n [class.is-active]=\"item.active\"\n (click)=\"goToPage(item.page)\">\n {{ item.page }}\n </button>\n }\n @if (item.kind === 'ellipsis') {\n <span class=\"page-ellipsis\">…</span>\n }\n }\n </div>\n\n <zen-button\n buttonType=\"button-icon-only\"\n variant=\"tertiary-gray\"\n size=\"md\"\n icon=\"chevron-right\"\n [disabled]=\"page >= totalPages\"\n (click)=\"goToPage(page + 1)\">\n </zen-button>\n </div>\n\n <div class=\"rows-per-page\">\n <span class=\"rows-label\">{{ \"Rows per page\" | translate }}</span>\n <zen-select\n size=\"sm\"\n [options]=\"perPageOptions\"\n [(selectModel)]=\"perPage\"\n (selectModelChange)=\"onPerPageChange($event)\"\n preferredOpenDirection=\"up\">\n </zen-select>\n </div>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\n@Component({\n selector: 'zen-phone-input',\n templateUrl: './zendu-phone-input.component.html',\n styleUrls: ['./zendu-phone-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduPhoneInputComponent implements OnInit, OnChanges {\n\n @ViewChild('input') inputElement: ElementRef<HTMLInputElement>;\n\n @Input() phone: string;\n\n @Input() maxLength: number = 12;\n\n @Output() phoneChange = new EventEmitter<string>();\n\n @Output() validChange = new EventEmitter<boolean>();\n\n @Input() disabled = false;\n\n @Input() width: string;\n\n public phoneText = \"\";\n\n public countryList: { countryCode: string, countryName: string, countryCallingCode: string, flag: string }[] = [\n {\n countryCode: \"US\",\n countryName: \"America\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/USA.svg\"\n },\n {\n countryCode: \"CA\",\n countryName: \"Canada\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Canada.svg\"\n },\n {\n countryCode: \"MX\",\n countryName: \"Mexico\",\n countryCallingCode: \"+52\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Mexico.svg\"\n }\n ];\n\n public customCountry = {\n countryCode: \"\",\n countryName: \"Custom\",\n countryCallingCode: \"\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Custom.svg\"\n };\n\n public selectedCountry: { countryCode: string, countryName: string, countryCallingCode: string, flag: string };\n\n public isExpanded = false;\n\n public constructor() {\n this.selectedCountry = this.countryList[1];\n }\n\n public ngOnInit(): void {\n this.parseNumber();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"phone\"] && (!this.selectedCountry || !this.selectedCountry.countryCode)) {\n this.parseNumber();\n }\n }\n\n public parseNumber(): void {\n try {\n this.phoneText = this.phone || '';\n\n if (this.phone) {\n const countryFromList = this.countryList.find(country => this.phone.startsWith(country.countryCallingCode) || `+${this.phone}`.startsWith(country.countryCallingCode));\n if (countryFromList) {\n this.selectedCountry = countryFromList || this.customCountry;\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n const parsedPhone = phoneNumberUtil.parse(this.phone || \"\", 'US');\n setTimeout(() => {\n if (this.phoneText.startsWith('+')) {\n this.phoneText = this.phoneText.replace(`+${parsedPhone.getCountryCode()}`, \"\");\n } else if (this.phoneText.startsWith(parsedPhone.getCountryCode())) {\n this.phoneText = this.phoneText.replace(parsedPhone.getCountryCode(), \"\");\n }\n this.phoneChanged();\n });\n } else {\n this.selectedCountry = this.customCountry; \n }\n } else {\n this.selectedCountry = this.customCountry;\n }\n } catch (err) {\n console.warn(`Can't parse phone: ${this.phone}`, err);\n this.selectedCountry = this.customCountry;\n }\n }\n\n public countryChanged(country): void {\n this.isExpanded = false;\n this.selectedCountry = country;\n this.phoneChanged();\n }\n\n public phoneChanged(input?: HTMLInputElement): void {\n \n // allow + in custom country\n let custom = false;\n if (this.selectedCountry === this.customCountry && this.phoneText.includes('+')) {\n custom = true;\n }\n \n const phoneText = (this.phoneText || '').replace(/\\D/g, '');\n this.phoneText = custom ? `+${phoneText}`: phoneText\n if (input && input.value !== this.phoneText) {\n input.value = this.phoneText;\n }\n const fullNumber = `${this.selectedCountry.countryCallingCode}${this.phoneText}`;\n if (this.phone !== fullNumber) {\n this.phoneChange.emit(fullNumber);\n }\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n if (this.selectedCountry === this.customCountry) {\n this.validChange.emit(true);\n } else {\n try {\n this.validChange.emit(phoneNumberUtil.isValidNumber(phoneNumberUtil.parseAndKeepRawInput(fullNumber)));\n } catch {\n this.validChange.emit(false);\n }\n }\n }\n\n public hideDropDown(): void {\n this.isExpanded = false;\n }\n\n public toggle() {\n if (this.disabled) {\n return;\n }\n this.isExpanded = !this.isExpanded;\n }\n\n public focusInput(): void {\n if (this.inputElement) {\n this.inputElement.nativeElement.focus();\n }\n }\n}\n","<div class=\"zen-input-container\" [style.width]=\"width\">\n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n\n <!-- Leading dropdown: Country selector -->\n <div class=\"zen-input-leading-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggle(); $event.stopPropagation()\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"selectedCountry.flag\"\n [alt]=\"selectedCountry.countryName\">\n <span class=\"dropdown-label\">{{ selectedCountry.countryCallingCode }}</span>\n <i class=\"material-icons dropdown-icon\"\n [ngClass]=\"{'active': isExpanded}\">expand_more</i>\n </button>\n </div>\n\n <!-- Phone input field -->\n <input #input\n class=\"zen-input-field text text-md text-weight-regular\"\n type=\"text\"\n [(ngModel)]=\"phoneText\"\n (ngModelChange)=\"phoneChanged(input)\"\n (click)=\"isExpanded = false\"\n [disabled]=\"disabled\"\n country-code=\"selectedCountry.countryCode\"\n [maxlength]=\"maxLength\">\n </div>\n\n <!-- Country dropdown menu -->\n @if (isExpanded) {\n <div class=\"zen-dropdown-menu\"\n [ngClass]=\"{'open': isExpanded}\">\n <!-- Countries List -->\n @for (country of countryList; track country) {\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': selectedCountry.countryName === country.countryName}\"\n (click)=\"countryChanged(country)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"country.flag\"\n [alt]=\"country.countryName\">\n <span class=\"zen-phone-country-name\">{{ country.countryName }}</span>\n <span class=\"zen-phone-country-code\">{{ country.countryCallingCode }}</span>\n </button>\n }\n <!-- Custom Country -->\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"countryChanged(customCountry)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"customCountry.flag\"\n [alt]=\"customCountry.countryName\">\n <span class=\"zen-phone-country-name\">{{ customCountry.countryName }}</span>\n <span class=\"zen-phone-country-code\">{{ customCountry.countryCallingCode }}</span>\n </button>\n </div>\n }\n</div>\n\n<!-- Click outside handler for dropdown -->\n@if (isExpanded) {\n <div\n class=\"zen-dropdown-backdrop\"\n (click)=\"hideDropDown()\"></div>\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-sort',\n templateUrl: './zendu-sort-header.component.html',\n styleUrls: ['./zendu-sort-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSortHeaderComponent {\n\n @Input() sort!: 'asc' | 'desc' | '';\n\n @Output() sortChange = new EventEmitter<'asc' | 'desc'>();\n\n @Input() active!: boolean;\n\n public toggleSort() {\n switch (this.sort) {\n case 'asc':\n this.sort = 'desc';\n this.sortChange.emit(this.sort);\n break;\n case 'desc':\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n break;\n default:\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n }\n }\n}\n","<div class=\"sort-option\"\n (click)=\"toggleSort()\">\n <zen-icon class=\"sort-icon\"\n [class.sort-icon-active]=\"active\"\n [class.sort-icon-asc]=\"active && sort === 'asc'\"\n src=\"assets/ng-zenduit/icons/arrow-down.svg\"></zen-icon>\n</div>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle-slide',\n templateUrl: './zendu-toggle-slide.component.html',\n styleUrls: ['./zendu-toggle-slide.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduToggleSlideComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() disabled!: boolean;\n\n /**\n * Toggle state\n */\n public toggle() {\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<button class=\"toggle-slide-component\"\n (click)=\"toggle()\"\n [disabled]=\"disabled\"\n [class.active]=\"enabled\"\n [class.disabled]=\"disabled\">\n\n <div class=\"toggle-slider\"></div>\n <div class=\"toggle-btn\"></div>\n</button>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-card-block',\n templateUrl: './zendu-card-block.component.html',\n styleUrls: ['./zendu-card-block.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduCardBlockComponent {\n\n @Input() icon: string;\n\n @Input() title: string;\n\n @Input() text: string;\n\n @Input() selected: boolean;\n\n}\n","<div class=\"component\">\n @if (icon) {\n <zen-icon\n [src]=\"icon\"></zen-icon>\n }\n\n <div class=\"title\">\n {{title}}\n </div>\n <div class=\"text\">\n {{text}}\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-map-preview',\n templateUrl: './zendu-map-preview.component.html',\n styleUrls: ['./zendu-map-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduMapPreviewComponent implements OnChanges {\n\n @Input() lat: number;\n\n @Input() lng: number;\n\n @Input() apiKey: string;\n\n public source = \"\";\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && this.lat && this.lng) {\n this.source = `https://image.maps.ls.hereapi.com/mia/1.6/mapview?apiKey=${this.apiKey}&c=${this.lat},${this.lng}` +\n `&z=14&w=222&h=80&&base=reduced.night&incidents=off&traffic=off`;\n }\n else {\n this.source = \"\";\n }\n }\n\n}\n","<div class=\"component\"\n [ngStyle]=\"{ 'background-image': 'url('+source+')' }\">\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n\n}","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScriptLoader {\n\n private static _loadedLibs: string[] = [];\n\n private static _lock = new LocalLock();\n\n public async loadScript(lib: \"flv\" | \"opencv\" | \"jscanify\") {\n try {\n await ScriptLoader._lock.lock();\n\n if (ScriptLoader._loadedLibs.includes(lib)) {\n // already loaded\n return;\n }\n\n console.log(`load library \"${lib}\"...`)\n\n // Storage bucket available here:\n // https://console.cloud.google.com/storage/browser/ng-zenduit/scripts?project=zendu-one\n\n let src = \"\";\n switch (lib) {\n case \"flv\":\n // load open cv script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/flv.js\");\n await this.waitInitalization(\"flvjs\");\n break;\n case \"opencv\":\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/opencv_4.7.0.js\");\n await this.waitInitalization(\"cv\");\n break;\n case \"jscanify\":\n // load jscanify script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/jscanify_1.2.0.js\");\n await this.waitInitalization(\"jscanify\");\n break;\n default:\n throw `unknown lib \"${lib}\"`\n }\n\n console.log(`Library \"${lib}\" loaded`)\n\n ScriptLoader._loadedLibs.push(lib);\n }\n finally {\n ScriptLoader._lock.release();\n }\n }\n\n private loadScriptBySrc(src: string) {\n const script = <HTMLScriptElement>document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n\n script.src = src;\n // insert script to document\n const node = document.getElementsByTagName('script')[0];\n if (node) {\n node.parentNode.insertBefore(script, node);\n } else {\n document.head.appendChild(script);\n }\n }\n\n private async waitInitalization(globalVarName: string) {\n\n const timeout = Date.now() + 60000;\n\n // wait cv first\n while (true) {\n if (window[globalVarName]) {\n break;\n }\n await Util.sleep(1000);\n\n if (Date.now() > timeout) {\n throw `Failed initalize OpenCV. Reason: timeout`\n }\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\nimport { ScriptLoader } from './script.loader.service';\n\nexport interface ScanifyCorners {\n topLeftCorner: { x: number, y: number };\n topRightCorner: { x: number, y: number };\n bottomLeftCorner: { x: number, y: number };\n bottomRightCorner: { x: number, y: number };\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenCVService {\n\n private static _isOpenCVLoaded = false;\n\n private static _lock = new LocalLock();\n\n constructor(\n private _scriptLoader: ScriptLoader\n ) { }\n\n /**\n * extract paper from the image\n * @returns\n */\n public async extractPaper(options: {\n src: string;\n height: number;\n width: number;\n corners: ScanifyCorners;\n }): Promise<HTMLCanvasElement> {\n // load open cv\n await this.loadOpenCv();\n\n const htmlImage = await this.loadImage(options.src);\n console.log(\"image is ready\");\n\n const scanner = new window[\"jscanify\"];\n\n return scanner.extractPaper(htmlImage, options.height, options.width, options.corners);\n }\n\n /**\n * Get the paper corners from the specific image\n * @param src\n * @returns\n */\n public async getPaperCorners(src: string, height: number, width: number): Promise<ScanifyCorners> {\n // load opencv\n await this.loadOpenCv();\n\n const cv = this.getCVInternal();\n\n const htmlImage = await this.loadImage(src);\n console.log(\"image is ready\", htmlImage);\n\n const scanner = new window[\"jscanify\"];\n\n const img = cv.imread(htmlImage);\n\n const maxContour = scanner.findPaperContour(img);\n if (!maxContour) {\n return null;\n }\n\n const res = scanner.getCornerPoints(maxContour, img);\n return res;\n }\n\n private loadImage(src: string) {\n return new Promise((resolve) => {\n const image = new Image();\n image.src = src;\n image.onload = function () {\n resolve(image);\n };\n })\n\n }\n\n private async loadOpenCv() {\n try {\n await OpenCVService._lock.lock();\n\n if (OpenCVService._isOpenCVLoaded) {\n return;\n }\n\n console.log(\"load opencv...\");\n\n await Promise.all([\n this._scriptLoader.loadScript(\"opencv\"),\n this._scriptLoader.loadScript(\"jscanify\")\n ]);\n\n console.log(\"OpenCV is ready\")\n\n OpenCVService._isOpenCVLoaded = true;\n }\n finally {\n OpenCVService._lock.release();\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { fabric } from 'fabric';\nimport {\n Component,\n ElementRef,\n Input,\n AfterViewInit,\n ViewChild,\n OnChanges,\n Output,\n EventEmitter,\n SimpleChanges,\n ChangeDetectorRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { OpenCVService } from '../services/opencv.service';\nimport { IText, Transform } from 'fabric/fabric-impl';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'zen-doc-scanner',\n templateUrl: './zendu-doc-scanner.component.html',\n styleUrls: ['./zendu-doc-scanner.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDocScanner implements AfterViewInit, OnChanges {\n @ViewChild('drawCanas') _canvasElement!: ElementRef<HTMLCanvasElement>;\n\n @ViewChild('componentWrapper') _component!: ElementRef<HTMLDivElement>;\n\n @Input() src = '';\n\n @Input() width = 0;\n\n @Input() height = 0;\n\n @Input() isScanStart: boolean = false;\n\n @Input() canAddText: boolean = false;\n\n @Input() canDoodle: boolean = false;\n\n currentStateIndex: number = -1;\n\n isLoading:BehaviorSubject<boolean> =new BehaviorSubject<boolean>(false);\n\n canvasStates: { state: string; customControl: any }[] = [];\n\n isResize: boolean = false;\n initialMouseY: number;\n originalFontSize: number;\n\n @Input() isRedoing: boolean = false;\n @Input() isUndoing: boolean = false;\n @Input() expandIconSrc: string;\n @Input() rotateIconSrc: string;\n @Input() crossIconSrc: string;\n @Input() set done(completed: boolean) {\n console.log('mark as completed', completed);\n if (completed) {\n this.completeScan(completed);\n }\n }\n\n @Output() extracted = new EventEmitter<HTMLCanvasElement>();\n\n @Output() cornersChanged = new EventEmitter<void>();\n\n @Output() getUndoingChange = new EventEmitter<boolean>()\n @Output() getRedoingChange = new EventEmitter<boolean>()\n\n @Output() canAddTextOrDoole = new EventEmitter<{}>();\n\n @Output() canRedoOrUndo = new EventEmitter<{\n canRedo: boolean;\n canUndo: boolean;\n }>();\n\n private screenPoints: { x: number; y: number }[] = [];\n\n private _canvas!: fabric.Canvas;\n\n private _cornersPg!: fabric.Polygon;\n\n private _scaleFactor = 1;\n\n private _controls: fabric.Circle[] = [];\n\n selectedColor: string = '#121212';\n\n isScaned: boolean = false;\n\n textAdded: boolean = false;\n\n icons = {\n cross: new Image(),\n rotate: new Image(),\n expand: new Image(),\n };\n private Image = {\n height: 0,\n width: 0,\n };\n borderWidth: number = 5;\n colors = [\n { hexCode: '#FFFFFF', selected: false },\n { hexCode: '#121212', selected: false },\n { hexCode: '#2188D9', selected: false },\n { hexCode: '#DC3E33', selected: false },\n { hexCode: '#219653', selected: false },\n { hexCode: '#F1B10B', selected: false },\n { hexCode: '#00F0FF', selected: false },\n ];\n resizeIcon: HTMLElement;\n rotateIcon: HTMLElement;\n removeIcon: HTMLElement;\n constructor(private _opencv: OpenCVService,private cdRef: ChangeDetectorRef) {}\n\n public ngAfterViewInit() {\n this.icons.cross.src = this.crossIconSrc;\n this.icons.rotate.src = this.rotateIconSrc;\n this.icons.expand.src = this.expandIconSrc;\n setTimeout(async () => {\n await this.init();\n // Add an event listener for canvas edits\n }, 1);\n }\n\n public onCanvasEdit() {\n let objects = this._canvas.getObjects();\n if (objects && objects.length)\n this._canvas._activeObject = objects[objects.length - 1];\n if (!this.isScanStart && !this.isRedoing && !this.isUndoing) {\n //Set canvas state as base state when user is done undo at last and than try to add new object\n if (this.canvasStates.length > 1 && this.currentStateIndex === 0)\n this.canvasStates = this.canvasStates.filter(\n (state, index) => index === 0\n );\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex >= 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.saveCanvasState();\n }\n\n}\n public ngOnChanges(changes: SimpleChanges) {\n // When src changes\n if (changes['src'] && this._canvas) {\n this.build();\n }\n //When user start scan\n if (changes['isScanStart'] && changes['isScanStart'].currentValue) {\n if (this.src && this._canvas && this.isScanStart) {\n this.isLoading.next(true);\n this.addPointsTodoc();\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScaned = true;\n this._canvas.selection = false;\n this.textAdded = false;\n }\n }\n // When user wants to draw\n if (\n changes['canDoodle'] &&\n changes['canDoodle'].currentValue &&\n this._canvas\n ) {\n\n if (this.canDoodle) {\n this._canvas.isDrawingMode = this.canDoodle;\n this._canvas.freeDrawingBrush = this.canDoodle\n ? new fabric.PencilBrush(this._canvas)\n : null;\n this._canvas.freeDrawingBrush.width = 10;\n this._canvas.freeDrawingBrush.color = this.selectedColor;\n this._canvas.selection = false;\n this.isScanStart = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n }\n // When user wants to add text\n if (\n changes['canAddText'] &&\n changes['canAddText'].currentValue &&\n this.canAddText &&\n this._canvas\n ) {\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScanStart = false;\n }\n if (\n changes['isUndoing'] &&\n this._canvas\n ){\n this.isUndoing = changes['isUndoing'].currentValue\n if(changes['isUndoing'].currentValue){\n setTimeout(() => {\n this.undo();\n }, 0);\n }\n }\n if (\n changes['isRedoing'] &&\n this._canvas\n ){\n this.isRedoing = changes['isRedoing'].currentValue;\n if(changes['isRedoing'].currentValue){\n setTimeout(() => {\n this.redo();\n }, 0);\n }\n }\n }\n // To change the color of brush or text\n chngClrTextOrBrush(color: string, changeFor: string) {\n this.selectedColor = color;\n this.colors.map((clr, index) => {\n this.colors[index] = { ...this.colors[index], selected: false };\n if (this.colors[index].hexCode === color) {\n this.colors[index] = { ...this.colors[index], selected: true };\n }\n });\n if (changeFor === 'text') {\n const activeObject = this._canvas.getActiveObject();\n if (activeObject && activeObject.type === 'i-text') {\n // Check if an active text object is selected\n activeObject.set('fill', this.selectedColor); // Update the fill color\n this._canvas.renderAll(); // Render the canvas to see the changes\n }\n this._canvas.renderAll();\n this.onCanvasEdit();\n } else {\n this._canvas.freeDrawingBrush.color = color;\n }\n this.selectedColor = color;\n }\n async addPointsTodoc() {\n const corners = await this._opencv.getPaperCorners(\n this._canvas.toDataURL({\n format: 'jpeg',\n quality: 1,\n }),\n\n this.Image.height,\n this.Image.width\n );\n if (corners) {\n this.screenPoints = [\n {x:corners.topLeftCorner.x + 15,y:corners.topLeftCorner.y},\n {x:corners.topRightCorner.x - 30,y:corners.topRightCorner.y},\n {x:corners.bottomRightCorner.x - 30,y:corners.bottomRightCorner.y},\n {x:corners.bottomLeftCorner.x + 15,y:corners.bottomLeftCorner.y},\n ];\n } else {\n console.error(`can't detect document corners`);\n const width = this._canvas.getWidth() / this._scaleFactor;\n const height = this._canvas.getHeight() / this._scaleFactor;\n const offset = 20;\n this.screenPoints = [\n { x: offset, y: 0 },\n { x: width - offset, y: 0 },\n { x: width - offset, y: height - offset },\n { x: offset, y: height - offset },\n ];\n }\n\n // add polygon\n //\n this._cornersPg = new fabric.Polygon(this.screenPoints, {\n stroke: '#2188d9',\n strokeWidth: 10,\n selectable: false,\n fill: 'rgba(33, 136, 217, 0.1)',\n hasBorders: true,\n objectCaching: false,\n });\n this._canvas.add(this._cornersPg);\n this.createControls(this._cornersPg);\n this.isLoading.next(false);\n }\n\n private async init(src?: string) {\n // Create canvas with new changed src\n if (src) {\n this.createCanvas();\n } else {\n try {\n if (!this._canvasElement || !this._canvasElement.nativeElement) {\n // canvas is not ready\n return;\n }\n\n if (this._canvas) {\n // canvas already initalized\n return;\n }\n this.createCanvas();\n } catch (err) {\n console.error(err);\n }\n }\n }\n\n async createCanvas() {\n // documentation: http://fabricjs.com/docs/fabric.Canvas.html\n let canvas = this._canvasElement.nativeElement;\n this._canvas = new fabric.Canvas(canvas, {\n backgroundColor: 'white',\n selection: false,\n });\n const { width, height } = this.getCanvasSize();\n\n this._canvas.setWidth(width);\n this._canvas.setHeight(height);\n this._canvas.on('object:added', this.onCanvasEdit.bind(this));\n this._canvas.on('object:modified', this.onCanvasEdit.bind(this));\n this._canvas.on('mouse:down', this.addTextOnClick.bind(this));\n this._canvas.on('object:scaling', function(obj:any){\n })\n if (this.src) {\n await this.build();\n }\n }\n\n renderIcon(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride,\n fabricObject: fabric.Object,\n iconName: string\n ) {\n var size = 40;\n var iconBackgroundSize = 45; // Adjust the size as needed\n ctx.save();\n\n // Draw a background circle behind the icon\n ctx.fillStyle = 'white'; // Set the background color\n ctx.beginPath();\n ctx.arc(left, top - 10, iconBackgroundSize / 2, 0, 2 * Math.PI);\n ctx.fill();\n\n var img = this.icons[iconName];\n ctx.translate(left, top - 10);\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\n ctx.drawImage(img, -size / 2, -size / 2, size, size);\n ctx.restore();\n }\n\n stopResizeText(event: any) {\n if (this.isResize) {\n this.saveCanvasState();\n this.isResize = false;\n }\n }\n resizeText(event: any) {\n if (this.isResize) {\n const target = event.target;\n const deltaY = event.e.touches[0].clientY - this.initialMouseY;\n\n // Limit the scaling factor to prevent excessive resizing\n const scalingFactor = Math.min(2, Math.max(0.5, 1 + deltaY / 100));\n\n // Calculate the new font size based on the original size and scaling factor\n const newFontSize = this.originalFontSize * scalingFactor;\n\n // Set the font size of the text object\n target.fontSize = newFontSize;\n\n // Re-render the canvas to see the live change\n event.target.canvas.renderAll();\n }\n }\n addTextOnClick(event: any) {\n if (event.transform && event.transform.corner === 'expandControl') {\n this.isResize = true;\n this.initialMouseY = event.e.clientY;\n this.originalFontSize = event.target.fontSize;\n }\n if (\n !this.textAdded &&\n !this.canDoodle &&\n !this.isScanStart &&\n this.canAddText\n ) {\n this.addTextBox(event);\n }\n if (!this.textAdded && this.canAddText && this.currentStateIndex === 0) {\n this.addTextBox(event);\n this.currentStateIndex = -1;\n this.canvasStates = [];\n }\n }\n\n // Add text box with custom controls to canvas\n addTextBox(event) {\n const fixedWidthPercentage = 0.2; // Set a fixed width as a percentage of canvas width\n const fixedHeightPercentage = 0.1; // Set a fixed height as a percentage of canvas height\n\n const canvasWidth = this._canvas.getWidth();\n const canvasHeight = this._canvas.getHeight();\n\n const fixedWidth = canvasWidth * fixedWidthPercentage;\n const fixedHeight = canvasHeight * fixedHeightPercentage;\n\n let _text: IText = new fabric.IText('Type your text here', {\n left: event.pointer.x,\n top: event.pointer.y,\n fill: this.selectedColor,\n fontSize: 40,\n fontFamily: 'Roboto',\n selectable: true,\n fontWeight: 400,\n borderScaleFactor: 3,\n borderColor: 'white',\n backgroundColor: 'transparent', // Set background color of the text box\n cornerColor: 'white', // Set corner (resize handle) color of the text box\n padding: 35, // Set padding inside the text box\n width: fixedWidth, // Set the initial width of the text box\n height: fixedHeight\n });\n //Custom controls for add text box\n let customControls = {\n removeControl: new fabric.Control({\n x: -0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'cross'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n var target = transform.target;\n var canvas = target.canvas;\n canvas.remove(target);\n this.canAddText = true;\n this.textAdded = false;\n // this.canAddTextOrDoole.emit({ key: 'text', value: false });\n canvas.requestRenderAll();\n this.saveCanvasState();\n return true;\n },\n }),\n\n rotateControl: new fabric.Control({\n x: 0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'rotate'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n let fabricObject = transform.target;\n const rotationIncrement = 30; // Rotation increment in degrees\n fabricObject.set(\n 'angle',\n (fabricObject.angle + rotationIncrement) % 360\n );\n fabricObject.setCoords(); // Update object's coordinates\n // debugger;\n this.saveCanvasState();\n return true;\n },\n }),\n\n expandControl: new fabric.Control({\n x: 0.5,\n y: 0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'grab',\n actionHandler: ((eventData: MouseEvent, transform: Transform, x: number, y: number) => {\n this.scaleFunction(eventData, transform,x,y)\n return true\n }),\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'expand'\n );\n },\n }),\n };\n\n _text.controls = customControls;\n this._canvas.add(_text);\n this._canvas.renderAll();\n this.textAdded = true;\n }\n scaleFunction(eventData: MouseEvent, transform: Transform, x: number, y: number){\n const target = transform.target;\n const corner = target.controls['expandControl'];\n const pointer = this._canvas.getPointer(eventData, true);\n\n const scaleX = (pointer.x - target.get('left')) / target.get('width');\n const scaleY = (pointer.y - target.get('top')) / target.get('height');\n\n target.set('scaleX', scaleX);\n target.set('scaleY', scaleY);\n}\n // Function to save the canvas state\n saveCanvasState() {\n const state = JSON.stringify(this._canvas.toJSON());\n // const state = this._canvas.getObjects()[this._canvas.getObjects.length - 1]\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.canvasStates.length = this.currentStateIndex + 1; // Remove future states\n }\n let activeObj = this._canvas.getActiveObject();\n\n if (activeObj && activeObj.type === 'path') {\n // set remove border and controls for drawing\n activeObj.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n }\n const customControl =\n activeObj && activeObj.controls ? activeObj.controls : null;\n this.canvasStates.push({ state, customControl });\n this.currentStateIndex++;\n }\n public redo() {\n // this.isRedoing = true;\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.currentStateIndex++;\n const nextState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(nextState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n if (activeObject && activeObject.type !== 'path') {\n activeObject.controls =\n nextState && nextState.customControl\n ? nextState.customControl\n : null;\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n this._canvas.selection = false;\n }\n this._canvas.renderAll();\n this.isRedoing = false\n this.getRedoingChange.emit(this.isRedoing)\n });\n }\n }\n public undo() {\n // this.isUndoing = true;\n if (this.currentStateIndex > 0) {\n this.currentStateIndex--;\n const previousState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(previousState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n if (activeObject) {\n if (activeObject.type !== 'path') {\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this._canvas.isDrawingMode = false;\n this._canvas.freeDrawingBrush = null;\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this._canvas.selection = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n }\n this._canvas.getActiveObject().controls =\n previousState && previousState.customControl\n ? previousState.customControl\n : null;\n }else{\n this.textAdded = false;\n }\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n this._canvas.renderAll();\n this.isUndoing = false\n this.cdRef.detectChanges()\n this.getUndoingChange.emit(this.isUndoing)\n });\n }\n }\n private getCanvasSize() {\n const img = new Image();\n img.src = this.src;\n const box = this._component.nativeElement.getBoundingClientRect();\n\n const width = this.width || box.width || 1;\n const height = this.height || box.height || 1;\n return { width, height };\n }\n\n /**\n * recognize paper corners\n */\n private async build() {\n if (!this.src || !this._canvas) {\n return;\n }\n const bg = await this.loadBackgroundImage(this.src);\n\n // Remove all the existing objects before add the new image to background\n this._canvas.clear();\n\n const imgSize = bg.getOriginalSize();\n this.Image = {\n height: imgSize.height * this._scaleFactor,\n width: imgSize.width * this._scaleFactor,\n };\n const scaleX = this._canvas.width / imgSize.width;\n const scaleY = this._canvas.height / imgSize.height;\n this._scaleFactor = Math.min(scaleY, scaleX);\n this._canvas.setDimensions(\n {\n width: imgSize.width,\n height: imgSize.height,\n },\n {\n backstoreOnly: true,\n }\n );\n this._canvas.setBackgroundImage(bg, () => {\n this._canvas.renderAll();\n });\n this.saveCanvasState();\n this._canvas.renderAll();\n }\n\n private createControls(polygon: fabric.Polygon) {\n // remove previous controls\n if (this._controls.length) {\n this._canvas.remove(...this._controls);\n this._controls = [];\n }\n if (polygon) {\n for (const [index, point] of polygon.points.entries()) {\n const circle = this.createControl(index, polygon);\n this._controls.push(circle);\n this._canvas.add(circle);\n }\n }\n }\n\n private createControl(index: number, polygon: fabric.Polygon) {\n const point = polygon.points[index];\n const circle = new fabric.Circle({\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: '#2188d9',\n radius: 20,\n hasRotatingPoint: false,\n hasBorders: false,\n hasControls: false,\n objectCaching: false,\n });\n circle.on('moving', (evt) => {\n if (evt.pointer) {\n polygon.points[index] = new fabric.Point(evt.pointer.x, evt.pointer.y);\n polygon.dirty = true;\n }\n });\n circle.on('mouseup', (evt) => {\n this.cornersChanged.emit();\n this.screenPoints[index] = polygon.points[index];\n });\n return circle;\n }\n\n private loadBackgroundImage(src: string): Promise<fabric.Image> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n let fabImage = new fabric.Image(img);\n resolve(fabImage);\n };\n img.src = src;\n });\n }\n\n public async completeScan(completed: boolean) {\n if (!completed) {\n return;\n }\n console.log(`complete scan & extract paper`);\n\n if (!this._cornersPg) {\n console.error(`Corner line is not available`);\n }\n if (this._cornersPg) {\n this._canvas.remove(this._cornersPg);\n this._canvas.remove(...this._controls);\n this._canvas.renderAll();\n }\n let output: HTMLCanvasElement;\n if (this.isScaned) {\n output = await this._opencv.extractPaper({\n src: this._canvas.toDataURL({ quality: 1 }),\n corners: {\n topLeftCorner: this.screenPoints[0],\n topRightCorner: this.screenPoints[1],\n bottomRightCorner: this.screenPoints[2],\n bottomLeftCorner: this.screenPoints[3],\n },\n height: this._canvas.height,\n width: this._canvas.width,\n });\n this._canvas.remove(...this._canvas.getObjects());\n this.isScaned = false;\n } else {\n output = this._canvas.toCanvasElement();\n }\n this.currentStateIndex = -1;\n this.canvasStates = [];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.extracted.emit(output);\n this.cleanupCanvas();\n }\n private cleanupCanvas() {\n this._canvas.getObjects().forEach((obj) => (obj.evented = false));\n this._canvas.selection = false;\n this._canvas.isDrawingMode = false;\n this.canDoodle = false;\n this.isScanStart = false;\n this.canAddText = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n}\n","<div #componentWrapper\n class=\"component\">\n <canvas #drawCanas [ngClass]=\"{display: !(isLoading | async) ? 'blurred' : null}\"></canvas>\n <div class=\"loading-overlay\" [ngStyle]=\"{display: !(isLoading | async) ? 'none' : 'block'}\">\n <!-- Add your loading message or spinner here -->\n Scaning...\n </div>\n @if (canDoodle || canAddText) {\n <div class=\"colors-container\">\n @for (color of colors; track color) {\n <div class=\"colors\" [ngStyle]=\"{'background': color.hexCode, 'border':color.selected ? '1.6px solid white' : 'none'}\" (click)=\"chngClrTextOrBrush(color.hexCode, canAddText ? 'text': 'doodle')\"></div>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { ZenDevice, ZenLogRecord, ZenMapTheme, ZenTrip } from '../map/map.types';\n\n@Injectable()\nexport class MapService {\n\n public createDeviceMarker(device: ZenDevice, minZoom?: number): H.map.DomMarker {\n const contentHtml = this.getDeviceContent(device);\n\n const lat = Math.max(Math.min(device.latitude, 180), -180);\n const lng = Math.max(Math.min(device.longitude, 180), -180);\n\n const deviceMarker = new H.map.DomMarker(\n new H.geo.Point(lat, lng),\n {\n zIndex: 10,\n icon: new H.map.DomIcon(contentHtml),\n data: device,\n min: minZoom ? minZoom : 0\n });\n\n return deviceMarker;\n }\n\n private getDeviceContent(device: ZenDevice): string {\n let devIcon = \"\";\n\n if (device.icon) {\n devIcon = device.icon;\n }\n else {\n // Default icon\n devIcon = \"https://storage.googleapis.com/ng-zenduit/icon/car.svg\";\n }\n\n let isDriving = device.isDriving || false;\n let driveClass = \"\";\n if (isDriving) {\n driveClass = \"driving-marker\";\n }\n\n\n let directionSvg = 'https://storage.googleapis.com/ng-zenduit/icon/device_direction.svg';\n\n let displayDirection = isDriving ? \"block\" : \"none\";\n\n let classList = isDriving ? \"moving\" : \"stopped\";\n\n const lblContent =\n `<div class='gotrax-label ${classList}'>` +\n ` <span>${device.name}</span>` +\n ` <div class='gotrax-speed-label'></div>` +\n `</div>`;\n\n const bearing = device.bearing || 0;\n\n let contentHtml =\n `<div>` +\n `<div class='g-marker-vehilce-wrapper'>` +\n `<div class='g-marker-vehilce'>` +\n `<div class='${driveClass} gotrax-img'>\n ${lblContent}\n <div class='g-marker-icon ${classList}'><img class=\"g-marker-img svg-color white\" src=${devIcon} />\n <div class=\"direction-arrow\" style=\"display: ${displayDirection};transform: rotate(${bearing}deg); background-image: url('${directionSvg}');\"></div>\n </div></div>` +\n `</div>` +// close g-marker-vehilce\n `</div>` + // close g-marker-vehilce-wrapper\n `</div>`;\n return contentHtml;\n }\n\n\n public zoomToBounds(map: H.Map, bounds: H.geo.Rect) {\n if (!bounds || bounds.isEmpty()) {\n return;\n }\n\n if (isNaN(bounds.getCenter().lat) ||\n isNaN(bounds.getCenter().lng)) {\n return;\n }\n\n this.zoomToLatLngs(map, [bounds.getTopLeft(), bounds.getBottomRight()]);\n }\n\n private zoomToLatLngs(map: H.Map, pnts: Array<{ lat: number, lng: number }>, zoom: number = 15) {\n\n if (!pnts || pnts.length == 0) {\n return;\n }\n if (pnts.length == 1) {\n map.setZoom(zoom);\n map.setCenter(new H.geo.Point(pnts[0].lat, pnts[0].lng));\n return;\n }\n\n const latLngs: number[] = [];\n pnts.forEach(p => latLngs.push(p.lat, p.lng, 0));\n\n const bounds = H.geo.Rect.coverLatLngAlts(latLngs) as H.geo.Rect;\n\n const minSize = 0.001;\n\n if (bounds.getWidth() < minSize &&\n bounds.getHeight() < minSize) {\n map.setCenter(bounds.getCenter());\n map.setZoom(17);\n }\n else {\n const p1 = bounds.getBottomRight();\n const p2 = bounds.getTopLeft();\n const width = Math.max(bounds.getWidth(), minSize);\n const height = Math.max(bounds.getHeight(), minSize);\n\n // add offset for zooming\n const targetBox = H.geo.Rect.coverLatLngAlts(\n [\n p1.lat - (height * 0.15),\n p2.lng - (width * 0.15),\n 0,\n p2.lat + (height * 0.15),\n p1.lng + (width * 0.15),\n 0\n ]\n ) as H.geo.Rect;\n\n map.getViewPort().resize();\n map.getViewModel().setLookAtData({ bounds: targetBox });\n }\n }\n\n /**\n * Create polylines for given trip and date range.\n * Method create separte polylines for logs outside the date range.\n */\n public createTripPolyline(trip: ZenTrip, map: H.Map, theme: ZenMapTheme): {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n } {\n\n let result = {\n } as {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n };\n\n let coords = new Array<number>();\n\n trip.logs.forEach(log => {\n let latLng = new H.geo.Point(log.latitude, log.longitude);\n\n coords.push(latLng.lat, latLng.lng);\n });\n\n if (coords.length < 2) {\n // Skip the empty path\n return result;\n }\n\n if (theme == \"black\") {\n const pl = this.createPl(coords, \"#000000\", 2);\n pl.setZIndex(1);\n result.polyline = pl;\n\n map.addObject(pl);\n }\n else {\n const pl = this.createPl(coords, \"#9510e6\", 5);\n pl.setZIndex(1);\n result.polyline = pl;\n\n let arrow = this.createArrow(coords);\n result.arrows = arrow;\n\n map.addObjects([pl, arrow]);\n\n // store additional information about polyline\n pl.setData({ type: \"trip\", trip: trip });\n arrow.setData({ type: \"trip\", trip: trip });\n }\n\n\n return result;\n }\n\n private createPl(coords: Array<number>, color: string, strokeWeight: number): H.map.Polyline {\n const pl = new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n strokeColor: color,\n lineWidth: strokeWeight\n },\n arrows: {\n fillColor: \"#ffffff\"\n },\n zIndex: 0\n });\n return pl;\n }\n\n private createArrow(coords: Array<number>): H.map.Polyline {\n return new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n lineWidth: 5,\n fillColor: 'white',\n strokeColor: 'rgba(255, 255, 255, 1)',\n lineDash: [0, 5],\n lineTailCap: 'arrow-tail',\n lineHeadCap: 'arrow-head'\n } as any,\n zIndex: 1\n });\n }\n\n public createStopMarker(map: H.Map, log: ZenLogRecord, stopIdx: number, tag: any, theme: ZenMapTheme) {\n\n let icon: H.map.DomIcon;\n if (theme == \"black\") {\n const src = \"https://storage.googleapis.com/ng-zenduit/icon/stop-icon-black.svg\";\n icon = new H.map.DomIcon(`<div class=\"g-stop-img\"><img src=\"${src}\"/></div>`)\n }\n else {\n // deafault\n icon = new H.map.DomIcon(`<div class=\"g-stop\"><label>${stopIdx}</label></div>`)\n }\n\n let stop = new H.map.DomMarker(\n new H.geo.Point(log.latitude, log.longitude),\n {\n icon: icon,\n zIndex: 2\n });\n map.addObject(stop);\n stop.setData(tag);\n return stop;\n }\n}","import { Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { MapService } from '../services/map.service';\nimport { ZenDevice, ZenMapTheme, ZenTrip } from './map.types';\n\n@Component({\n selector: 'zen-map',\n templateUrl: './zendu-map.component.html',\n styleUrls: ['./zendu-map.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduMapComponent implements OnChanges {\n\n @ViewChild(\"map\") _mapElement!: ElementRef<HTMLDivElement>;\n\n @Input() apiKey: string;\n\n @Input() trips: ZenTrip[] = [];\n\n @Input() devices: ZenDevice[] = [];\n\n @Input() theme: ZenMapTheme = 'default';\n\n private _platform: H.service.Platform;\n\n private _map!: H.Map;\n\n private _objects: H.map.Object[] = [];\n\n private _mapService = new MapService();\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && !this._platform) {\n this.init();\n }\n\n if (changes[\"trips\"] || changes[\"devices\"]) {\n this.updateEntities();\n }\n }\n\n private init() {\n this._platform = new H.service.Platform({\n apikey: this.apiKey\n });\n\n setTimeout(() => {\n this.initMap();\n this.updateEntities();\n }, 1000);\n }\n\n\n private initMap() {\n\n // Obtain the default map types from the platform object\n const defaultLayers = this._platform.createDefaultLayers();\n\n this._map = new H.Map(this._mapElement.nativeElement,\n defaultLayers.vector.normal.map,\n {\n zoom: 3,\n center: { lat: 34.366, lng: -89.519 }\n });\n\n\n // Create the default UI\n const ui = H.ui.UI.createDefault(this._map, defaultLayers);\n\n const mapSettings = ui.getControl('mapsettings');\n mapSettings.setAlignment(H.ui.LayoutAlignment.RIGHT_TOP);\n mapSettings.setVisibility(false);\n\n const scalebar = ui.getControl('scalebar');\n scalebar.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM)\n\n const zoom = ui.getControl('zoom');\n zoom.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM);\n\n this._map.getBaseLayer().setMin(3);\n\n // MapEvents enables the event system\n // Behavior implements default interactions for pan/zoom (also on mobile touch environments)\n const behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(this._map));\n }\n\n private updateEntities() {\n if (!this._map) {\n // map is not ready\n return;\n }\n\n this.clearEntities();\n\n this.createTrips();\n\n this.createDevices();\n }\n\n private createTrips() {\n if (!this.trips || !this.trips.length) {\n return;\n }\n\n let box: H.geo.Rect = null;\n\n for (const trip of this.trips) {\n const res = this._mapService.createTripPolyline(trip, this._map, this.theme);\n if (res.polyline) {\n this._objects.push(res.polyline);\n if (box) {\n box = box.mergeRect(res.polyline.getBoundingBox());\n }\n else {\n box = res.polyline.getBoundingBox()\n }\n }\n if (res.arrows) {\n this._objects.push(res.arrows);\n }\n }\n\n // create stop points\n //\n for (const [stopIdx, trip] of this.trips.entries()) {\n let stopLog = trip.logs[trip.logs.length - 1];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, stopIdx + 1, trip, this.theme));\n }\n\n if (this.theme == \"black\") {\n // create a marker for first stop as well\n let stopLog = this.trips[0].logs[0];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, 0, this.trips[0], this.theme));\n }\n\n if (box) {\n this._mapService.zoomToBounds(this._map, box);\n }\n }\n\n private createDevices() {\n if (!this.devices || !this.devices.length) {\n return;\n }\n\n for (const device of this.devices) {\n const marker = this._mapService.createDeviceMarker(device)\n this._map.addObject(marker);\n this._objects.push(marker);\n }\n }\n\n private clearEntities() {\n if (!this._map) {\n return;\n }\n this._map.removeObjects(this._objects)\n this._objects = [];\n }\n\n\n\n\n\n}\n","<div class=\"component\">\n <div #map\n class=\"zen-map\"></div>\n</div>\n","import { Component, EventEmitter, HostListener, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-file-upload',\n templateUrl: './zendu-file-upload.component.html',\n styleUrls: ['./zendu-file-upload.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFileUpload {\n\n @Input() fileTypes: string = `image/*`;\n\n @Input() uploadState: \"\" | \"uploading\" | \"done\" = \"\";\n\n /**\n * fire when user clicked on \"Upload now\"\n */\n @Output() uploadFile = new EventEmitter<File[]>();\n\n /**\n * fired when user click \"Cancel\"\n */\n @Output() uploadCancelled = new EventEmitter<void>();\n\n public isFileSelected = false;\n\n public isFileDragover = false;\n\n public filename = \"\";\n\n private _selectedFiles: File[] = [];\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n\n let target = (evt.dataTransfer as DataTransfer);\n if (target && target.files?.length) {\n this.handleFiles(target.files);\n }\n console.log('File Dropped');\n }\n\n\n public async onFileInput(evt: Event) {\n const target: HTMLInputElement | null = evt.target as HTMLInputElement;\n if (target && target.files) {\n await this.handleFiles(target.files);\n }\n }\n\n public async handleFiles(files: FileList): Promise<void> {\n console.log(`handle files`, files)\n if (!files.length) {\n return;\n }\n this.filename = files.item(0).name;\n\n this._selectedFiles = [];\n for (let idx = 0; idx < files.length; idx++) {\n this._selectedFiles.push(files[idx]);\n }\n\n this.isFileSelected = true;\n this.uploadState = '';\n }\n\n public uploadNow() {\n if (!this._selectedFiles.length) {\n console.error(`no files for uploading`)\n return;\n }\n\n this.uploadFile.emit(this._selectedFiles);\n }\n\n public clear() {\n this.isFileSelected = false;\n this.isFileDragover = false;\n this.filename = \"\";\n this._selectedFiles = [];\n this.uploadState = \"\";\n }\n\n public cancelUploading() {\n this.uploadCancelled.emit();\n this.clear();\n }\n}\n","<div class=\"component\">\n <div class=\"title\">\n @if (uploadState != 'done') {\n <span>Upload File</span>\n }\n @if (uploadState == 'done') {\n <span>Uploaded File</span>\n }\n </div>\n @if (uploadState != 'done') {\n <div class=\"drop-area\"\n [class.dragover]=\"isFileDragover\"\n >\n @if (!isFileSelected) {\n <div class=\"box\"\n >\n <div>\n <zen-icon class=\"doc-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/document.svg\"></zen-icon>\n </div>\n <div>\n <div>Drag and Drop Here</div>\n <div>or</div>\n <span class=\"browse\"\n (click)=\"fileIp.click()\">Browse</span>\n <form><input type=\"file\"\n [accept]=\"fileTypes\"\n #fileIp\n (change)=\"onFileInput($event)\" /></form>\n </div>\n </div>\n }\n @if (isFileSelected) {\n <!-- File selected state -->\n @if (uploadState == '') {\n <div class=\"box-selected-file\">\n <div class=\"close-wrapper\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n <div>\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n </div>\n <div class=\"filename\">\n {{filename}}\n </div>\n </div>\n }\n <!-- Uploading state -->\n @if (uploadState == 'uploading') {\n <div class=\"box-file-uploading\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon-sm\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image-sm.svg\"></zen-icon>\n <div>{{filename}}</div>\n </div>\n <div class=\"progress\">\n <div class=\"progress-bar-value\"></div>\n </div>\n </div>\n }\n }\n </div>\n }\n\n\n <!-- Uploading done -->\n @if (uploadState == 'done') {\n <div\n class=\"box-upload-done\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n <div class=\"filename\">{{filename}}</div>\n <div class=\"close-btn\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n </div>\n </div>\n }\n\n <div class=\"btn-upload-wrapper\">\n\n @if (uploadState == '') {\n <button\n (click)=\"uploadNow()\"\n class=\"button-flat full-width\"\n [disabled]=\"!isFileSelected\">\n Upload Now\n </button>\n }\n\n @if (uploadState == 'uploading') {\n <button\n (click)=\"cancelUploading()\"\n class=\"button-alert full-width\"\n [disabled]=\"!isFileSelected\">\n Cancel\n </button>\n }\n </div>\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\ninterface CircleSizeConfig {\n containerSize: number;\n radius: number;\n strokeWidth: number;\n fontSize: number;\n labelFontSize: number;\n letterSpacing: number;\n}\n\nconst CIRCLE_SIZE_MAP: Record<string, CircleSizeConfig> = {\n xxs: { containerSize: 64, radius: 26, strokeWidth: 5, fontSize: 14, labelFontSize: 12, letterSpacing: 0 },\n xs: { containerSize: 160, radius: 64, strokeWidth: 8, fontSize: 24, labelFontSize: 12, letterSpacing: 0 },\n sm: { containerSize: 200, radius: 80, strokeWidth: 10, fontSize: 30, labelFontSize: 12, letterSpacing: 0 },\n md: { containerSize: 240, radius: 96, strokeWidth: 12, fontSize: 36, labelFontSize: 14, letterSpacing: -0.72 },\n lg: { containerSize: 280, radius: 112, strokeWidth: 14, fontSize: 48, labelFontSize: 14, letterSpacing: -0.96 },\n};\n\n@Component({\n selector: 'zen-progress',\n templateUrl: './zendu-progress.component.html',\n styleUrls: ['./zendu-progress.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduProgress {\n\n @Input() type: \"bar\" | \"circle\" | \"half-circle\" = \"bar\";\n\n /**\n * Label position for bar type.\n */\n @Input() label: 'none' | 'right' | 'bottom' | 'top-floating' | 'bottom-floating' = 'none';\n\n /**\n * Size for circle/half-circle types.\n */\n @Input() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * progress value [0, 100]\n */\n @Input() value = 20;\n\n /**\n * progress text (shown as label above percentage in circle types)\n */\n @Input() text = \"\";\n\n /**\n * Custom color for the progress fill (bar, circle stroke).\n * Accepts any valid CSS color value.\n */\n @Input() color = \"\";\n\n /**\n * Custom color for the progress track/background.\n * Accepts any valid CSS color value.\n */\n @Input() trackColor = \"\";\n\n get sizeConfig(): CircleSizeConfig {\n return CIRCLE_SIZE_MAP[this.size] || CIRCLE_SIZE_MAP['md'];\n }\n\n get circleCenter(): number {\n return this.sizeConfig.containerSize / 2;\n }\n\n get circumference(): number {\n return 2 * Math.PI * this.sizeConfig.radius;\n }\n\n get halfCircumference(): number {\n return Math.PI * this.sizeConfig.radius;\n }\n\n get circleOffset(): number {\n const clampedValue = Math.max(0, Math.min(100, this.value));\n return this.circumference * (1 - clampedValue / 100);\n }\n\n get halfCircleOffset(): number {\n const clampedValue = Math.max(0, Math.min(100, this.value));\n return this.halfCircumference * (1 - clampedValue / 100);\n }\n\n get halfCircleContainerHeight(): number {\n return this.sizeConfig.containerSize / 2 + this.sizeConfig.strokeWidth;\n }\n}\n","<div class=\"component\">\n <!-- Progress bar -->\n @if (type == 'bar') {\n <div class=\"bar-wrapper\"\n [class.bar-label-right]=\"label === 'right'\"\n [class.bar-label-bottom]=\"label === 'bottom'\"\n [class.bar-label-top-floating]=\"label === 'top-floating'\"\n [class.bar-label-bottom-floating]=\"label === 'bottom-floating'\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-bg\" [ngStyle]=\"trackColor ? { 'background-color': trackColor } : {}\"></div>\n <div class=\"progress-bar-fill\" [ngStyle]=\"{ 'width': value + '%', 'background-color': color || null }\">\n <!-- Top floating tooltip -->\n @if (label === 'top-floating') {\n <div class=\"floating-tooltip floating-tooltip-top\">\n <div class=\"tooltip-content\">\n <span class=\"tooltip-text\">{{value}}%</span>\n </div>\n <div class=\"tooltip-arrow tooltip-arrow-down\">\n <svg width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M6.58579 4.41421L2.34315 0.171573C1.41421 -0.757359 0 0 0 0H16C16 0 14.5858 -0.757359 13.6569 0.171573L9.41421 4.41421C8.63316 5.19527 7.36684 5.19527 6.58579 4.41421Z\" fill=\"white\"/>\n </svg>\n </div>\n </div>\n }\n <!-- Bottom floating tooltip -->\n @if (label === 'bottom-floating') {\n <div class=\"floating-tooltip floating-tooltip-bottom\">\n <div class=\"tooltip-arrow tooltip-arrow-up\">\n <svg width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M9.41421 1.58579L13.6569 5.82843C14.5858 6.75736 16 6 16 6H0C0 6 1.41421 6.75736 2.34315 5.82843L6.58579 1.58579C7.36684 0.804738 8.63316 0.804738 9.41421 1.58579Z\" fill=\"white\"/>\n </svg>\n </div>\n <div class=\"tooltip-content\">\n <span class=\"tooltip-text\">{{value}}%</span>\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right label -->\n @if (label === 'right') {\n <span class=\"bar-label\">{{value}}%</span>\n }\n <!-- Bottom label -->\n @if (label === 'bottom') {\n <span class=\"bar-label\">{{value}}%</span>\n }\n <!-- Text description (legacy support) -->\n @if (text && (label === 'none')) {\n <div class=\"progress-text\">{{text}}</div>\n }\n </div>\n }\n\n <!-- Circle progress -->\n @if (type == 'circle') {\n <div class=\"circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': sizeConfig.containerSize\n }\">\n <svg class=\"circle-svg\"\n [attr.width]=\"sizeConfig.containerSize\"\n [attr.height]=\"sizeConfig.containerSize\"\n [attr.viewBox]=\"'0 0 ' + sizeConfig.containerSize + ' ' + sizeConfig.containerSize\">\n <!-- Background ring -->\n <circle class=\"circle-bg\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [style.stroke]=\"trackColor || null\"\n fill=\"none\" />\n <!-- Progress ring -->\n <circle class=\"circle-progress\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"circleOffset\"\n [style.stroke]=\"color || null\"\n fill=\"none\"\n stroke-linecap=\"round\" />\n </svg>\n <div class=\"circle-label\">\n @if (text) {\n <span class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\n }\n <span class=\"circle-value\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.fontSize,\n 'letter-spacing.px': sizeConfig.letterSpacing\n }\">{{value}}%</span>\n </div>\n </div>\n }\n\n <!-- Half-Circle progress -->\n @if (type == 'half-circle') {\n <div class=\"half-circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': halfCircleContainerHeight\n }\">\n <svg class=\"circle-svg\"\n [attr.width]=\"sizeConfig.containerSize\"\n [attr.height]=\"sizeConfig.containerSize\"\n [attr.viewBox]=\"'0 0 ' + sizeConfig.containerSize + ' ' + sizeConfig.containerSize\">\n <!-- Background arc (bottom half) -->\n <circle class=\"circle-bg half-circle-ring\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"circumference / 2\"\n [style.stroke]=\"trackColor || null\"\n fill=\"none\" />\n <!-- Progress arc -->\n <circle class=\"circle-progress half-circle-ring\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"halfCircumference + ' ' + circumference\"\n [attr.stroke-dashoffset]=\"halfCircleOffset\"\n [style.stroke]=\"color || null\"\n fill=\"none\"\n stroke-linecap=\"round\" />\n </svg>\n <div class=\"half-circle-label\">\n @if (text) {\n <span class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\n }\n <span class=\"circle-value\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.fontSize,\n 'letter-spacing.px': sizeConfig.letterSpacing\n }\">{{value}}%</span>\n </div>\n </div>\n }\n</div>\n","import { Injectable } from \"@angular/core\";\n\ninterface IGeocodingRes {\n name: string;\n\n city: string;\n\n country: string;\n\n postalCode: string;\n\n street: string;\n\n state: string;\n\n bounds: { xmin: number, ymin: number, xmax: number, ymax: number };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeocodingService {\n private _platform: H.service.Platform;\n\n public setAPIKey(apiKey: string) {\n this._platform = new H.service.Platform({\n apikey: apiKey\n });\n }\n\n public async geocode(searchText: string): Promise<Array<IGeocodingRes>> {\n return new Promise((resolve, reject) => {\n if (!this._platform) {\n reject(\"API KEY NOT SET\");\n return;\n }\n const geocoder = this._platform.getGeocodingService();\n geocoder.geocode({ searchText: searchText },\n (res: any) => {\n let locations = res.Response.View[0] ? res.Response.View[0].Result : []\n\n let outItems = new Array<IGeocodingRes>();\n let boxOffset = 0.001;\n for (let location of locations) {\n let lat = location.Location.DisplayPosition.Latitude;\n let lng = location.Location.DisplayPosition.Longitude;\n let p1 = new H.geo.Point(lat - boxOffset, lng - boxOffset);\n let p2 = new H.geo.Point(lat + boxOffset, lng + boxOffset);\n let bounds = H.geo.Rect.coverPoints([p1, p2]);\n\n let street = location.Location.Address.Street;\n if (location.Location.Address.HouseNumber) {\n street += \" \" + location.Location.Address.HouseNumber;\n }\n\n outItems.push({\n name: location.Location.Address.Label,\n city: location.Location.Address.City,\n country: location.Location.Address.Country,\n postalCode: location.Location.Address.PostalCode,\n state: location.Location.Address.State,\n street: street,\n bounds: {\n xmin: bounds.getLeft(),\n xmax: bounds.getRight(),\n ymin: Math.min(bounds.getBottom(), bounds.getTop()),\n ymax: Math.max(bounds.getBottom(), bounds.getTop())\n }\n });\n }\n\n resolve(outItems);\n },\n (e: any) => {\n console.warn(e);\n resolve([]);\n }\n );\n })\n }\n\n}\n","import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { GeocodingService } from '../services/geoconding.service';\nimport { Cancellation, LocationAddress } from './location.address';\n\n@Component({\n selector: 'zen-location-search',\n templateUrl: './zendu-location-search.component.html',\n styleUrls: ['./zendu-location-search.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduLocationSearch {\n /**\n * HERE MAPS API Key\n */\n @Input() set apiKey(apiKey: string) {\n this._geocoding.setAPIKey(apiKey);\n }\n\n @Input() address!: string;\n\n @Input() displaySearchIcon: boolean = true;\n\n @Output() addressChange = new EventEmitter<string>();\n\n @Input() materialStyle = true;\n\n @Input() placeholder: string = \"Search address\";\n\n @Input() disabled = false;\n\n @Output() public onSelect = new EventEmitter<LocationAddress>;\n\n // it will apply to input element text and icon color:\n // ie. input like { color: blue}\n @Input() customStyles: any = {};\n\n private addressSearchChanged: Subject<string> = new Subject<string>();\n\n public isSearching: boolean = false;\n\n public ignoreFirstLoad: boolean = false;\n\n public addressList: LocationAddress[] = [];\n\n private _cancelation!: Cancellation;\n\n constructor(\n private _geocoding: GeocodingService,\n private _cdRef: ChangeDetectorRef) {\n\n this.addressSearchChanged\n .pipe(\n debounceTime(200),\n distinctUntilChanged()\n )\n .subscribe((addressSearch: string) => {\n\n this.address = addressSearch\n this.isSearching = true;\n\n if (this._cancelation) {\n // cancel previous\n this._cancelation.cancelled = true;\n }\n\n this._cancelation = { cancelled: false }\n\n this.ignoreFirstLoad = true;\n this.makeSearch(this._cancelation);\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['address'] && this.address) {\n this._cancelation = { cancelled: false }\n await this.makeSearch(this._cancelation);\n const address = this.addressList.find(addr => addr.name === this.address);\n if (address) {\n this.selectAddress(address);\n }\n }\n }\n\n public addressChanged(text: string) {\n this.isSearching = true;\n this.addressChange.emit(text);\n this.addressSearchChanged.next(text);\n\n this._cdRef.detectChanges();\n }\n\n private async makeSearch(cancellation: Cancellation) {\n try {\n if (!this.ignoreFirstLoad) {\n this.ignoreFirstLoad = true;\n return;\n }\n this.addressList = [];\n\n if (!this.address) {\n this.isSearching = false;\n return;\n }\n\n this.addressList = [];\n\n let locations = await this._geocoding.geocode(this.address);\n\n if (this._cancelation.cancelled) {\n // request cancelled\n return;\n }\n\n for (let location of locations) {\n this.addressList.push({\n name: location.name,\n bounds: location.bounds\n });\n }\n this.addressList = [...new Map(this.addressList.map((item: LocationAddress) => [item.name, item])).values()];\n if (this.addressList.length > 20) {\n this.addressList = this.addressList.slice(0, 20);\n }\n\n this.isSearching = false;\n } catch (err) {\n console.error(err);\n } finally {\n this._cdRef.detectChanges();\n }\n }\n\n public selectAddress(address: LocationAddress) {\n this.address = address.name;\n if (this.onSelect) {\n this.addressList = [];\n this.onSelect.emit(address);\n }\n }\n}\n","<div class=\"component\">\n\n <div class=\"search-input-wrapper\"\n [class.boundaries]=\"!materialStyle\">\n @if (displaySearchIcon) {\n <zen-icon src=\"https://storage.googleapis.com/ng-zenduit/icon/search.svg\"\n class=\"search-icon\"\n [style]=\"{'background-color': customStyles.color}\"></zen-icon>\n }\n\n <input type=\"text\"\n class=\"material-input\"\n [style]=\"customStyles\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"address\"\n [ngClass]=\"{'no-icon': !displaySearchIcon}\"\n (ngModelChange)='addressChanged($event)'>\n </div>\n\n @if (address) {\n <div class=\"search-list\"\n [class.boundaries]=\"!materialStyle\"\n appClickOutside\n (clickOutside)=\"addressList = [];\">\n @if (addressList.length || isSearching) {\n <ul class=\"search-item-list\"\n >\n @if (isSearching) {\n <li>Searching</li>\n }\n @if (!isSearching) {\n <div>\n @for (address of addressList; track address) {\n <li\n (click)=\"selectAddress(address)\">\n {{address.name}}\n </li>\n }\n </div>\n }\n </ul>\n }\n </div>\n }\n</div>\n","export class CEvent<T> {\n private index: number = 0;\n\n private handlers: {\n id: number;\n func: (data?: T) => void;\n }[] = [];\n\n public on(handler: (data?: T) => void ): number\n {\n this.index++;\n this.handlers.push({ func: handler, id: this.index });\n return this.index;\n }\n\n public off(id: number)\n {\n this.handlers = this.handlers.filter(h => h.id !== id);\n }\n\n public fire(data?: T)\n {\n if(this.handlers)\n {\n this.handlers.slice(0).forEach(h => h.func(data));\n }\n }\n}","import { CEvent } from \"../core/cevent\";\n\nexport class PlayerControl {\n\tprivate _stopEvent: CEvent<void> = new CEvent();\n\n\tprivate _playEvent: CEvent<void> = new CEvent();\n\n\tprivate _seekEvent: CEvent<number> = new CEvent();\n\n\tprivate _dataEvent: CEvent<number> = new CEvent();\n\n\t/**\n\t * Subscribe to data event\n\t */\n\t public OnData(callback: () => void): number {\n\t\treturn this._dataEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to play event\n\t */\n\t public OnPlay(callback: () => void): number {\n\t\treturn this._playEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to stop event\n\t */\n\t public OnStop(callback: () => void): number {\n\t\treturn this._stopEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to seek event\n\t */\n\tpublic OnSeek(callback: (position: number) => void): number {\n\t\treturn this._seekEvent.on(callback as any);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffPlay(id: number): void {\n\t\tthis._playEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffStop(id: number): void {\n\t\tthis._stopEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffSeek(id: number): void {\n\t\tthis._seekEvent.off(id);\n\t}\n\n\t/**\n\t * Emit the play event\n\t */\n\tpublic Play(): void {\n\t\tthis._playEvent.fire();\n\t}\n\n\t/**\n\t * Emit the stop event\n\t */\n\tpublic Stop(): void {\n\t\tthis._stopEvent.fire();\n\t}\n\n\t/**\n\t * Emit the seek event\n\t */\n\tpublic Seek(position: number) {\n\t\tthis._seekEvent.fire(position);\n\t}\n\n\t/**\n\t * Emit the data event\n\t */\n\tpublic EmitData() {\n\t\tthis._dataEvent.fire();\n\t}\n}","import { Component, Input, OnChanges, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-html5-video-player',\n templateUrl: './html5-video-player.component.html',\n styleUrls: ['./html5-video-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenHTML5VideoPlayerComponent implements OnChanges {\n\t@Input() source!: string;\n\n\t@Input() control!: PlayerControl;\n\n\tpublic async ngOnChanges() {\n\t\tif (this.source) {\n console.log(`Created the html5 video player for source \"${this.source}\"`);\n\t\t}\n\t}\n}\n","<div class=\"html5-player-component\">\n\t<video controls\n\t\t muted\n\t\t autoplay\n\t\t [src]=\"source\">\n\t</video>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { ScriptLoader } from \"../../services/script.loader.service\";\nimport { PlayerControl } from \"../player.control\";\nimport { FlvJs } from \"./flv\"\n\ndeclare var flvjs: {\n createPlayer(mediaDataSource: FlvJs.MediaDataSource, config?: FlvJs.Config): FlvJs.Player;\n isSupported(): boolean;\n getFeatureList(): FlvJs.FeatureList;\n}\n\n@Component({\n selector: 'zen-flv-player',\n templateUrl: './flv-player.component.html',\n styleUrls: ['./flv-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenFlvPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n private _flv!: FlvJs.Player | null;\n\n public IsVideoFilterVisible = false;\n\n public constructor(\n private _element: ElementRef,\n private _scriptLoader: ScriptLoader) {\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.source) {\n this.reload();\n }\n\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private async reload() {\n // load the script first\n await this._scriptLoader.loadScript(\"flv\");\n // update the player\n this.update();\n }\n\n private update(): void {\n this.destroy(Boolean(this.source));\n\n if (!this.source) {\n return;\n }\n\n this._flv = flvjs.createPlayer({\n url: this.source,\n type: \"flv\"\n }, {\n // Enable/Disable IO stash buffer. \n // Set to false if you need realtime (minimal latency) for live stream playback, but may stalled if there's network jittering.\n enableStashBuffer: false\n });\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n this._flv.attachMediaElement(element as HTMLVideoElement);\n this._flv.load();\n this._flv.muted = true;\n this._flv.play();\n\n let previousFrame = 0;\n\n this._flv.on(\"statistics_info\", (event: { decodedFrames: number }) => {\n if (event && event.decodedFrames) {\n if (previousFrame != event.decodedFrames) {\n previousFrame = event.decodedFrames;\n if (this.control) {\n // fired event when video is playing\n this.control.EmitData();\n }\n }\n }\n })\n\n this._flv.on(\"loading_complete\", () => {\n console.log(\"loading completed\");\n\n this.destroy(true);\n })\n\n\n console.log(`Created the flv player for source \"${this.source}\"`);\n }\n\n private destroy(skipNotify?: boolean) {\n if (this._flv) {\n console.log(\"Destroyed the flv player\");\n this._flv.pause();\n this._flv.unload();\n this._flv.destroy();\n this._flv = null;\n\n if (!skipNotify) {\n // this.onStop.emit();\n }\n }\n }\n\n\n}\n","<div class=\"flv-player-component\">\n <video controls\n muted></video>\n\n</div>\n","export class Thread {\n public static sleep(ms: number): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n });\n }\n}","import HLS, { ErrorTypes } from \"hls.js\";\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, Output, ViewChild, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { Thread } from \"../../core/thread\";\n\n@Component({\n selector: 'zen-hls-player',\n templateUrl: './hls-player.component.html',\n styleUrls: ['./hls-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenHlsPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control!: PlayerControl;\n\n @ViewChild(\"video_container\") _video?: ElementRef<HTMLVideoElement>;\n\n public isVideoFilterVisible = false;\n\n private _hls: HLS | null = null;\n\n private _stopCallback!: number;\n\n private _playCallback!: number;\n\n\n private _isDestroyed = false;\n\n public ngOnChanges(changeObj: any): void {\n if (this.source) {\n this.reload()\n }\n if (changeObj.control &&\n changeObj.control.currentValue) {\n this.setControl(changeObj.control.currentValue);\n }\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.destroy();\n }\n\n private async reload() {\n if (!this.source) {\n return;\n }\n\n if (this._isDestroyed) {\n return;\n }\n\n if (!this._video) {\n // wait for component\n await this.waitForComponent();\n }\n\n if (!this._video || this._isDestroyed) {\n return;\n }\n\n if (!HLS.isSupported()) {\n console.log(\"HLS not supported. Set url to the native video player\")\n // just attached the link to video player\n this._video.nativeElement.src = this.source;\n return;\n }\n\n // destroy previous\n this.destroy();\n\n console.log(`[HlsPlayerComponent] start playing for the source [${this.source}]`)\n\n // HLS configuration: https://github.com/video-dev/hls.js/blob/v1.3.0/docs/API.md\n this._hls = new HLS({\n fragLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 3,\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetryTimeout: 10000,\n maxBufferHole: 10,\n lowLatencyMode: false,\n fragLoadingMaxRetry: 1,\n // backBufferLength: 90,\n autoStartLoad: true,\n testBandwidth: false\n });\n this._hls.attachMedia(this._video.nativeElement);\n\n this._hls.loadSource(this.source);\n\n this._hls.on(HLS.Events.FRAG_LOADED, () => {\n // fired event when video is playing\n this.onData();\n });\n\n this._hls.on(HLS.Events.ERROR, (err, data) => {\n if (data.fatal) {\n console.error(\"HLS error:\", err, data);\n // reload source\n console.log(\"HLS reload source\")\n this.destroy();\n this.reload();\n }\n });\n\n console.log(`Created the hls player for source \"${this.source}\"`);\n }\n\n private async waitForComponent() {\n while (!this._video) {\n await Thread.sleep(100);\n if (this._isDestroyed) {\n return;\n }\n }\n }\n\n private setControl(control: PlayerControl): void {\n if (this.control) {\n this.control.OffStop(this._stopCallback);\n this.control.OffStop(this._playCallback);\n }\n\n this.control = control;\n\n if (this.control) {\n this._stopCallback = this.control.OnStop(() => {\n this.destroy();\n });\n\n this._playCallback = this.control.OnPlay(() => {\n this.reload();\n });\n }\n }\n\n\n private destroy() {\n if (this._hls) {\n this._hls.destroy();\n this._hls = null;\n console.log(\"Destroyed the HLS player\");\n }\n }\n\n private onData() {\n console.log(\"HLS on data event\")\n\n if (this.control) {\n this.control.EmitData();\n }\n }\n\n private onError() {\n console.log(\"HLS error\")\n\n if (this.control) {\n this.control.Stop();\n }\n }\n\n\n public toggleFilter(evt: MouseEvent): void {\n this.isVideoFilterVisible = !this.isVideoFilterVisible;\n evt.stopPropagation();\n }\n\n public hideFiler() {\n this.isVideoFilterVisible = false;\n }\n\n}\n","<div class=\"hls-player-component\">\n\t<video #video_container\n\t\t controls\n\t\t muted\n\t\t autoplay></video>\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n}","import { Injectable } from \"@angular/core\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { LocalLock } from \"../core/local.lock\";\nimport { Thread } from \"../core/thread\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenHttpService {\n private cache: {\n [key: string]: {\n lock: LocalLock,\n data: unknown,\n expiry: Date\n }\n } = {};\n\n constructor(private _http: HttpClient) { }\n\n /**\n * https post request\n * @param url the url path\n * @param data the POST payload\n * @param cacheTtl cache ttl in ms\n * @param retires number of retires\n * @returns\n */\n public async post<T>(url: string, data?: unknown, cacheTtl?: number, retires?: number) {\n\n if (cacheTtl) {\n return await this.doCachedPost(url, cacheTtl, data) as T;\n }\n else {\n\n let attemp = 0;\n while (true) {\n attemp++;\n try {\n return await this.doPost(url, data) as T;\n }\n catch (err) {\n if (retires) {\n if (attemp <= retires) {\n console.warn(`[HttpService] retry (${attemp}) for request: ${url}`)\n await Thread.sleep(1000);\n continue;\n }\n }\n throw err;\n }\n }\n }\n }\n\n private async doCachedPost(url: string, cacheTtl: number, data: any) {\n\n const cacheKey = `${url}_${JSON.stringify(data || {})}`\n\n if (!this.cache[cacheKey]) {\n this.cache[cacheKey] = {\n lock: new LocalLock(),\n data: null,\n expiry: new Date(Date.now() + cacheTtl)\n }\n }\n\n let cacheItem = this.cache[cacheKey];\n\n try {\n await cacheItem.lock.lock();\n\n if (cacheItem.data) {\n // return data from cache\n return cacheItem.data;\n }\n cacheItem.data = await this.doPost(url, data);\n return cacheItem.data;\n }\n finally {\n cacheItem.lock.release();\n }\n }\n\n private async doPost<T>(url: string, data?: any) {\n const res = await this._http.post(url,\n data ? data : {}).toPromise();\n return res as T;\n }\n\n public async get<T>(url: string, timeout?: number) {\n\n let httpOptions = {\n timeout: timeout || 60000,\n headers: new HttpHeaders()\n };\n\n const res = await this._http.get(`${url}`, httpOptions).toPromise();\n return res as T;\n }\n\n\n}\n","import { Component, Input, OnChanges, OnDestroy, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { ZenHttpService } from \"../../services/http.service\";\n\n@Component({\n selector: 'zen-snapshot-player',\n templateUrl: './snapshot-player.component.html',\n styleUrls: ['./snapshot-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSnapshotPlayerComponent implements OnChanges, OnDestroy {\n @Input() source!: string;\n\n @Input() channel!: number;\n\n @Input() control?: PlayerControl;\n\n /**\n * Interval to render a snapshot\n */\n @Input() interval!: number;\n\n public snapshot: string;\n\n private _timer: unknown;\n\n private _isRunning = false;\n\n public IsVideoFilterVisible = false;\n\n private _isDestroyed = false;\n\n public constructor(\n private _http: ZenHttpService) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlay();\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.control) {\n this.setControl(changeObj.control.currentValue);\n }\n\n this.update();\n }\n\n private setControl(control: PlayerControl): void {\n if (control) {\n this.control = control;\n this.control.OnPlay(() => {\n this.startPlay();\n });\n this.control.OnStop(() => {\n this.stopPlay();\n });\n }\n }\n\n private update(): void {\n if (this.source) {\n this.startPlay();\n }\n else {\n this.stopPlay();\n }\n }\n\n private startPlay(): void {\n this.stopPlay();\n this._isRunning = true;\n this.render();\n }\n\n private async render(): Promise<void> {\n if (!this._isRunning ||\n this._isDestroyed) {\n return;\n }\n\n await this.renderFrame();\n this._timer = setTimeout(async () => {\n this.render();\n }, this.interval || 1000);\n }\n\n private async renderFrame(): Promise<void> {\n if (this._isDestroyed) {\n return;\n }\n console.log('Request Snapshot');\n const data = await this._http.post<{ image: string }>(this.source);\n console.log('Render Snapshot');\n if (data && data.image) {\n\n this.snapshot = \"\";\n if (data.image.startsWith(\"http\")) {\n this.snapshot = data.image;\n }\n else {\n this.snapshot = `data:image/jpeg;base64,${data.image}`;\n }\n }\n }\n\n private stopPlay(): void {\n this._isRunning = false;\n clearTimeout(this._timer as number);\n }\n\n\n\n\n}\n","<div class=\"snapshot-player-component\">\n <div class=\"image\"\n [ngStyle]=\"{ 'background-image': snapshot }\"></div>\n\n</div>\n","import { CEvent } from \"../../core/cevent\";\n\nexport class WebRTC {\n\tprivate _peerId!: any;\n\n\tprivate _msg!: any;\n\n\tprivate _wsConnect!: any;\n\n\tprivate _startPlayEvent = new CEvent();\n\n\tprivate _errorServerEvent = new CEvent();\n\n\tprivate _disconnectServerEvent = new CEvent();\n\n\tprivate _onDataEvent = new CEvent();\n\n\tprivate _connectAttempts = 0;\n\n\tprivate _peerConnection!: any\n\n\t/**\n\t * Promise for local stream after constraints are approved by the user\n\t */\n\tprivate local_stream_promise!: any\n\n\tprivate _wsServer!: any;\n\n\tprivate _wsPort!: any\n\n\t// Set this to use a specific peer id instead of a random one\n\tprivate _defaultPeerId!: any\n\n\t// Override with your own STUN servers if you want\n\tprivate rtc_configuration = {\n\t\ticeServers: [{ urls: \"stun:stun.services.mozilla.com\" },\n\t\t{ urls: \"stun:stun.l.google.com:19302\" }]\n\t};\n\n\tprivate _originalSource!: any;\n\n\tprivate _socketConnectionTimer: any = null;\n\n\tpublic constructor(\n\t\tprivate _source: string,\n\t\tprivate _videoElement: HTMLVideoElement) {\n\t}\n\n\tpublic Start(): void {\n\t\tthis.CreateVideoWebRTC();\n\t}\n\n\tpublic Stop(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic Destroy(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic OnPlay(callback: () => void): void {\n\t\tthis._startPlayEvent.on(callback);\n\t}\n\n\tpublic OnData(callback: () => void): void {\n\t\tthis._onDataEvent.on(callback);\n\t}\n\n\tpublic OnError(callback: () => void): void {\n\t\tthis._errorServerEvent.on(callback);\n\t}\n\n\tpublic OnClose(callback: () => void): void {\n\t\tthis._disconnectServerEvent.on(callback);\n\t}\n\n\tprivate CreateVideoWebRTC(): void {\n\t\tthis.DestroyWebRTC();\n\t\tthis._originalSource = this._source;\n\n\t\t// Set this to override the automatic detection in websocketServerConnect()\n\t\tthis.WebsocketServerConnect();\n\t}\n\n\tprivate SetError(errorMsg: string): void {\n\t\tthis.Close();\n\t\tconsole.error(errorMsg);\n\t\tthis._errorServerEvent.fire();\n\t}\n\n\tprivate GetId() {\n\t\treturn Math.floor(Math.random() * (1000000 - 10) + 10).toString();\n\t}\n\n\tprivate WebsocketServerConnect(): void {\n\t\tthis._connectAttempts++;\n\t\tif (this._connectAttempts > 20) {\n\t\t\treturn this.SetError(\"Too many connection attempts, aborting. Refresh page to try again\");\n\t\t}\n\n\t\t// Fetch the peer id to use\n\t\tthis._peerId = this._defaultPeerId || this.GetId();\n\t\tthis._wsPort = this._wsPort || '8443';\n\t\tif (window.location.protocol.indexOf(\"file\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || \"0.0.0.0\";\n\t\t}\n\t\telse if (window.location.protocol.indexOf(\"http\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || window.location.hostname;\n\t\t}\n\t\telse {\n\t\t\treturn this.SetError(\"Don't know how to connect to the signalling server with uri\" + window.location);\n\t\t}\n\t\t//ws_server=\"devmedia1.surfsolutions.com\";\n\t\tconst mediacore_domain = new URL(this._originalSource).hostname;\n\n\t\tthis._wsServer = mediacore_domain;\n\t\tconst ws_url = 'wss://' + this._wsServer + ':' + this._wsPort;\n\t\tthis._wsConnect = new WebSocket(ws_url);\n\n\t\t/* When connected, immediately register with the server */\n\t\tthis._wsConnect.addEventListener('open', (event: any) => {\n\t\t\tthis._wsConnect.send('HELLO ' + this._peerId);\n\t\t\tthis._connectAttempts = 0;\n\t\t});\n\t\tthis._wsConnect.addEventListener('error', this.OnServerError.bind(this));\n\t\tthis._wsConnect.addEventListener('message', this.OnServerMessage.bind(this));\n\t\tthis._wsConnect.addEventListener('close', this.OnServerClose.bind(this));\n\t}\n\n\tprivate OnServerMessage(event: any): void {\n\t\tif (event.data.startsWith(\"ERROR\")) {\n\t\t\tthis.handleIncomingError(event.data);\n\t\t\treturn;\n\t\t}\n\t\tif (event.data.startsWith(\"HELLO\")) {\n\t\t\tlet arr = event.data.split(\" \");\n\t\t\tthis._peerId = arr[1];\n\t\t\tthis.SendMessageToStartCall();\n\t\t\treturn;\n\t\t}\n\t\t// Handle incoming JSON SDP and ICE messages\n\t\ttry {\n\t\t\tthis._msg = JSON.parse(event.data);\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof SyntaxError) {\n\t\t\t\tthis.handleIncomingError(\"Error parsing incoming JSON: \" + event.data);\n\t\t\t} else {\n\t\t\t\tthis.handleIncomingError(\"Unknown error parsing response: \" + event.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Incoming JSON signals the beginning of a call\n\t\tif (!this._peerConnection) {\n\t\t\tthis.CreateCall(this._msg);\n\t\t}\n\n\t\tif (this._msg.sdp != null) {\n\t\t\tthis.OnIncomingSDP(this._msg.sdp);\n\t\t}\n\t\telse if (this._msg.ice != null) {\n\t\t\tthis.OnIncomingICE(this._msg.ice);\n\t\t}\n\t\telse {\n\t\t\tthis.handleIncomingError(\"Unknown incoming JSON: \" + this._msg);\n\t\t}\n\t}\n\n\tprivate CreateCall(msg: any): void {\n\t\t// Reset connection attempts because we connected successfully\n\t\tthis._connectAttempts = 0;\n\n\t\tthis._peerConnection = new RTCPeerConnection(this.rtc_configuration);\n\t\tthis._peerConnection.ontrack = this.OnTrack.bind(this);\n\t\tthis.local_stream_promise = new Promise<void>((resolve, reject) => { resolve() });\n\n\t\t// run checks interval to see if we have a live connection\n\t\tthis.RunDataInterval();\n\n\t\tif (!msg.sdp) {\n\t\t\tconsole.warn(\"WARNING: First message wasn't an SDP message!?\");\n\t\t}\n\n\t\tthis._peerConnection.onicecandidate = (event: any) => {\n\t\t\t// We have a candidate, send it to the remote party with the\n\t\t\t// same uuid\n\t\t\tif (event.candidate == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._wsConnect.send(JSON.stringify({ ice: event.candidate }));\n\t\t};\n\t\tthis._peerConnection.oniceconnectionstatechange = (event: any) => {\n\t\t\tif (this._peerConnection && this._peerConnection.iceConnectionState) {\n\t\t\t\tif (this._peerConnection.iceConnectionState == 'failed') {\n\t\t\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\t\t\tthis.SetError('Failed ice connection state');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate RunDataInterval() {\n\n\t\tlet prevFrames = 0;\n\n\t\tconst interval = setInterval(async () => {\n\t\t\tif (!this._peerConnection) {\n\t\t\t\t// stop checking and exit\n\t\t\t\tclearInterval(interval);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(\"WebRTC state:\", this._peerConnection.connectionState);\n\t\t\tif (this._peerConnection.connectionState == \"connected\") {\n\t\t\t\tconst stat = await this._peerConnection.getStats();\n\n\t\t\t\tfor (const val of stat.values()) {\n\t\t\t\t\tif (val.id && val.type == \"track\") {\n\t\t\t\t\t\tif (typeof val.framesDecoded == \"number\") {\n\t\t\t\t\t\t\tconst framesDecoded = val.framesDecoded;\n\t\t\t\t\t\t\tconst diff = framesDecoded - prevFrames;\n\t\t\t\t\t\t\tconsole.log(`WebRTC frames decoded: ${framesDecoded}`);\n\t\t\t\t\t\t\tif (diff > 1) { \n\t\t\t\t\t\t\t\tprevFrames = framesDecoded;\n\t\t\t\t\t\t\t\tthis._onDataEvent.fire();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 5000);\n\t}\n\n\tprivate OnTrack(event: any): void {\n\n\t\tconsole.log(\"on track\")\n\n\t\tif (!event.streams && event.streams.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stream = event.streams[0];\n\t\tconst videoTracks = stream.getVideoTracks();\n\n\t\tif (videoTracks.length > 0) {\n\t\t\tthis._videoElement.srcObject = stream;\n\t\t\tthis._startPlayEvent.fire();\n\n\t\t} else {\n\t\t\tthis.handleIncomingError('Stream with unknown tracks added, resetting');\n\t\t}\n\t}\n\n\tprivate httpGetAnswer(): void {\n\t\t/* none */\n\t}\n\n\tprivate SendMessageToStartCall(): void {\n\t\tlet theUrl = this._originalSource.replace(\"#PEERID#\", this._peerId.toString());\n\t\t// making the https get call\n\t\tthis.HttpGetAsync(theUrl, this.httpGetAnswer.bind(this));\n\t}\n\n\tprivate HttpGetAsync(theUrl: string, callback: any): void {\n\t\tlet xmlHttp = new XMLHttpRequest();\n\t\txmlHttp.onreadystatechange = () => {\n\t\t\tif (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\n\t\t\t\tcallback(xmlHttp.responseText);\n\t\t\t}\n\t\t\telse if (xmlHttp.readyState == 4) {\n\t\t\t\tif (this._socketConnectionTimer) {\n\t\t\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t\t\t}\n\t\t\t\tthis.SetError(`Wrong response status '${xmlHttp.status}' for request ${theUrl}`);\n\t\t\t}\n\t\t}\n\t\txmlHttp.open(\"GET\", theUrl, true); // true for asynchronous \n\t\txmlHttp.send(null);\n\t}\n\n\tprivate OnIncomingSDP(sdp: any): void {\n\t\tthis._peerConnection.setRemoteDescription(sdp).then(() => {\n\t\t\tif (sdp.type != \"offer\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.local_stream_promise.then((stream: any) => {\n\t\t\t\tthis._peerConnection.createAnswer()\n\t\t\t\t\t.then(this.OnLocalDescription.bind(this)).catch(this.SetError);\n\t\t\t}).catch(this.SetError);\n\t\t}).catch(this.SetError);\n\t}\n\n\t// Local description was set, send it to peer\n\tprivate OnLocalDescription(desc: any): void {\n\t\tthis._peerConnection.setLocalDescription(desc).then(() => {\n\t\t\tlet sdp = { sdp: this._peerConnection.localDescription }\n\t\t\tthis._wsConnect.send(JSON.stringify(sdp));\n\t\t});\n\t}\n\n\t// ICE candidate received from peer, add it to the peer connection\n\tprivate OnIncomingICE(ice: any): void {\n\t\tlet candidate = new RTCIceCandidate(ice);\n\t\tthis._peerConnection.addIceCandidate(candidate).catch(this.SetError);\n\t}\n\n\tprivate ResetState(): void {\n\t\t// This will call OnServerClose()\n\t\tthis._wsConnect.close();\n\t}\n\n\tprivate handleIncomingError(error: any): void {\n\t\tthis.Close();\n\t\tthis.SetError(\"ERROR: \" + error);\n\t}\n\n\tprivate Close(): void {\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\t}\n\n\tprivate OnServerClose(event: any): void {\n\t\tthis.Close();\n\t\tthis._disconnectServerEvent.fire();\n\t}\n\n\tprivate OnServerError(event: any) {\n\t\tthis.SetError(\"Server Connection Error. Reconnecting shortly.....\");\n\t}\n\n\tprivate StopVideo(): void {\n\t\tthis._videoElement.pause();\n\t\tthis._videoElement.src = \"\";\n\t}\n\n\tprivate DestroyWebRTC(): void {\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\n\t\tif (this._wsConnect) {\n\t\t\tthis._wsConnect.close(4000, \"stop\");\n\t\t}\n\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\t}\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { WebRTC } from \"./web-rtc\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-web-rtc-player',\n templateUrl: './web-rtc-player.component.html',\n styleUrls: ['./web-rtc-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenWebRTCPlayerComponent implements OnChanges, OnDestroy {\n\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n @Output() onStartPlay = new EventEmitter<void>();\n\n @Output() onServerError = new EventEmitter<void>();\n\n @Output() onServerDisconnect = new EventEmitter<void>();\n\n public IsLoading = true;\n\n public IsVideoFilterVisible = false;\n\n private _webrtc!: WebRTC;\n\n private _isDestroyed = false;\n\n public constructor(\n private _element: ElementRef\n ) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlayback();\n }\n\n public ngOnChanges(changeObj: any): void {\n\n if (changeObj.source) {\n this.source = changeObj.source.currentValue;\n if (this.source) {\n this.createWebRTC();\n this.Play();\n }\n else {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n }\n }\n }\n\n private createWebRTC(): void {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n\n this._webrtc = new WebRTC(this.source, this.getVideoElement());\n this._webrtc.OnPlay(this.invokeOnStartPlay.bind(this));\n this._webrtc.OnError(this.invokeOnServerError.bind(this));\n this._webrtc.OnClose(this.invokeOnServerDisconnect.bind(this));\n this._webrtc.OnData(this.invokeOnData.bind(this));\n }\n\n private stopPlayback() {\n if (this._webrtc) {\n this._webrtc.Stop();\n }\n }\n\n private Play() {\n if (this._isDestroyed) {\n return;\n }\n if (this._webrtc) {\n this._webrtc.Start();\n }\n }\n\n private getVideoElement() {\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n return element as HTMLVideoElement;\n }\n\n private invokeOnStartPlay(): void {\n if (this._isDestroyed) {\n return;\n }\n }\n\n private invokeOnData() {\n if (this._isDestroyed) {\n return;\n }\n if (!this.control) {\n return;\n }\n this.control.EmitData();\n }\n\n private invokeOnServerError(): void {\n if (this.onServerError) {\n this.onServerError.emit();\n }\n }\n\n private invokeOnServerDisconnect(): void {\n if (this.onServerDisconnect) {\n this.onServerDisconnect.emit();\n }\n }\n\n}\n","<div class=\"web-rtc-player\">\n\n <video class=\"web-rtc-player-id\"\n ng-hide=\"IsShowSnapshotPlayer\"\n muted\n controls\n webkit-playsinline=\"true\"\n playsinline=\"true\"\n autoplay=\"\"></video>\n\n</div>\n\n<div class=\"customEventDiv\"></div>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\nexport type ZenLiveViewPlayerType = 'html5' | 'flv' | 'webrtc' | 'snapshot' | 'hls' | 'unknown';\n\n@Component({\n selector: 'zen-live-view-player',\n templateUrl: './live-view-player.component.html',\n styleUrls: ['./live-view-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenLiveViewPlayerComponent implements OnDestroy {\n @Input() control!: PlayerControl;\n\n @Input() source!: string;\n\n @Input() playerType: ZenLiveViewPlayerType = \"unknown\";\n\n @Input() snapshotInterval!: number;\n\n /**\n * Playback timeout. It uses for streamax live streaming. \n */\n @Input() timeout!: number;\n\n @Output() onData = new EventEmitter<void>();\n\n private _controlPlayHander!: number;\n\n private _controlStopHander!: number;\n\n public IsLoading = true;\n\n constructor() {\n this.control = new PlayerControl();\n this.control.OnData(() => {\n this.onData.emit();\n })\n }\n\n public ngOnDestroy(): void {\n if (this.control) {\n if (this._controlPlayHander) {\n this.control.OffPlay(this._controlPlayHander);\n }\n\n if (this._controlStopHander) {\n this.control.OffStop(this._controlStopHander);\n }\n }\n }\n\n\n\n}\n","@if (playerType == 'webrtc') {\n <zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n ></zen-web-rtc-player>\n}\n\n@if (playerType == 'snapshot') {\n <zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n ></zen-snapshot-player>\n}\n\n@if (playerType == 'flv') {\n <zen-flv-player [source]=\"source\"\n [control]=\"control\"\n ></zen-flv-player>\n}\n\n@if (playerType == 'hls') {\n <zen-hls-player [source]=\"source\"\n [control]=\"control\"\n ></zen-hls-player>\n}\n\n@if (playerType == 'html5') {\n <zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n ></zen-html5-video-player>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\n\nexport type TimePickerMode = 'clock' | 'duration';\n\nexport interface TimePickerValue {\n hours: number;\n minutes: number;\n seconds: number;\n period?: 'AM' | 'PM';\n}\n\n@Component({\n selector: 'zen-timepicker',\n templateUrl: './zendu-timepicker.component.html',\n styleUrls: ['./zendu-timepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduTimepickerComponent implements OnInit, OnChanges {\n @Input() mode: TimePickerMode = 'clock';\n @Input() label: string;\n @Input() value: TimePickerValue;\n @Input() showSeconds: boolean = false;\n @Input() showHours: boolean = true;\n @Input() disabled: boolean = false;\n @Input() readonly: boolean = false;\n @Input() placeholder: string;\n @Input() width: string;\n\n @Output() valueChange = new EventEmitter<TimePickerValue>();\n @Output() apply = new EventEmitter<TimePickerValue>();\n @Output() clear = new EventEmitter<void>();\n\n isPickerVisible = false;\n\n selectedHours = 0;\n selectedMinutes = 0;\n selectedSeconds = 0;\n selectedPeriod: 'AM' | 'PM' = 'AM';\n\n // Zero-padded display strings for the input fields\n hoursDisplay = '00';\n minutesDisplay = '00';\n secondsDisplay = '00';\n\n right = false;\n bottom = false;\n\n private maxHour = 12;\n private minHour = 1;\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideClick(event: MouseEvent): void {\n if (!document.body.contains(event.target as Node)) {\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.isPickerVisible = false;\n }\n\n get defaultLabel(): string {\n return this.mode === 'clock' ? 'Select a time' : 'Stop Duration';\n }\n\n get defaultPlaceholder(): string {\n if (this.placeholder) return this.placeholder;\n if (this.mode === 'clock') return 'Select Time';\n if (!this.showHours && this.showSeconds) return '0 min 0 sec';\n if (!this.showHours) return '0 min';\n return '0 min';\n }\n\n get formattedDisplayValue(): string {\n if (!this.value) return '';\n\n if (this.mode === 'clock') {\n const h = this.formatNum(this.value.hours);\n const m = this.formatNum(this.value.minutes);\n const s = this.formatNum(this.value.seconds);\n\n if (!this.showHours) {\n return this.showSeconds ? `${m}:${s} ${this.value.period || 'AM'}` : `${m} ${this.value.period || 'AM'}`;\n }\n if (this.showSeconds) {\n return `${h}:${m}:${s} ${this.value.period || 'AM'}`;\n }\n return `${h}:${m} ${this.value.period || 'AM'}`;\n }\n\n // Duration mode\n const parts: string[] = [];\n if (this.showHours && this.value.hours > 0) {\n parts.push(`${this.value.hours} hr`);\n }\n if (this.value.minutes > 0) {\n parts.push(`${this.value.minutes} min`);\n }\n if (this.showSeconds && this.value.seconds > 0) {\n parts.push(`${this.value.seconds} sec`);\n }\n return parts.length > 0 ? parts.join(' ') : '0 min';\n }\n\n ngOnInit(): void {\n this.updateHourLimits();\n if (this.value) {\n this.applyValue(this.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['mode']) {\n this.updateHourLimits();\n }\n if (changes['value'] && this.value) {\n this.applyValue(this.value);\n }\n }\n\n togglePicker(): void {\n if (this.disabled || this.readonly) return;\n this.isPickerVisible = !this.isPickerVisible;\n if (this.isPickerVisible) {\n if (this.value) {\n this.applyValue(this.value);\n }\n this.updatePlacement();\n }\n }\n\n // ─── Increment / Decrement ───\n\n incrementHours(): void {\n this.selectedHours = this.selectedHours >= this.maxHour ? this.minHour : this.selectedHours + 1;\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n decrementHours(): void {\n this.selectedHours = this.selectedHours <= this.minHour ? this.maxHour : this.selectedHours - 1;\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n incrementMinutes(): void {\n this.selectedMinutes = this.selectedMinutes >= 59 ? 0 : this.selectedMinutes + 1;\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n decrementMinutes(): void {\n this.selectedMinutes = this.selectedMinutes <= 0 ? 59 : this.selectedMinutes - 1;\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n incrementSeconds(): void {\n this.selectedSeconds = this.selectedSeconds >= 59 ? 0 : this.selectedSeconds + 1;\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n decrementSeconds(): void {\n this.selectedSeconds = this.selectedSeconds <= 0 ? 59 : this.selectedSeconds - 1;\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n // ─── Direct Input ───\n\n onHoursInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedHours = this.minHour;\n this.hoursDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val <= this.maxHour) {\n this.selectedHours = Math.max(this.minHour, val);\n this.hoursDisplay = raw;\n } else {\n input.value = this.hoursDisplay;\n }\n }\n\n onMinutesInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedMinutes = 0;\n this.minutesDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this.selectedMinutes = val;\n this.minutesDisplay = raw;\n } else {\n input.value = this.minutesDisplay;\n }\n }\n\n onSecondsInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedSeconds = 0;\n this.secondsDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this.selectedSeconds = val;\n this.secondsDisplay = raw;\n } else {\n input.value = this.secondsDisplay;\n }\n }\n\n onFocus(event: Event): void {\n const input = event.target as HTMLInputElement;\n input.select();\n }\n\n clampHours(): void {\n this.selectedHours = Math.max(this.minHour, Math.min(this.maxHour, this.selectedHours));\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n clampMinutes(): void {\n this.selectedMinutes = Math.max(0, Math.min(59, this.selectedMinutes));\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n clampSeconds(): void {\n this.selectedSeconds = Math.max(0, Math.min(59, this.selectedSeconds));\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n onInputKeydown(event: KeyboardEvent, type: 'hours' | 'minutes' | 'seconds'): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hours') this.incrementHours();\n else if (type === 'minutes') this.incrementMinutes();\n else this.incrementSeconds();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hours') this.decrementHours();\n else if (type === 'minutes') this.decrementMinutes();\n else this.decrementSeconds();\n }\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod = period;\n }\n\n formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n onApply(): void {\n const val = this.getCurrentValue();\n this.value = val;\n this.valueChange.emit(val);\n this.apply.emit(val);\n this.isPickerVisible = false;\n }\n\n onClear(): void {\n this.selectedHours = this.mode === 'clock' ? 12 : 0;\n this.selectedMinutes = 0;\n this.selectedSeconds = 0;\n this.selectedPeriod = 'AM';\n this.hoursDisplay = this.formatNum(this.selectedHours);\n this.minutesDisplay = '00';\n this.secondsDisplay = '00';\n this.value = null;\n this.valueChange.emit(null);\n this.clear.emit();\n this.isPickerVisible = false;\n }\n\n // ─── Private ───\n\n private updatePlacement(): void {\n this.right = false;\n this.bottom = false;\n const el = this._element.nativeElement;\n const rect = el.getBoundingClientRect();\n if (rect.left > window.innerWidth / 2) {\n this.right = true;\n }\n if (rect.top > window.innerHeight / 2) {\n this.bottom = true;\n }\n }\n\n private updateHourLimits(): void {\n if (this.mode === 'clock') {\n this.maxHour = 12;\n this.minHour = 1;\n if (this.selectedHours === 0 && this.showHours) this.selectedHours = 12;\n } else {\n this.maxHour = 23;\n this.minHour = 0;\n }\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n private applyValue(val: TimePickerValue): void {\n this.selectedHours = Math.max(this.minHour, Math.min(this.maxHour, val.hours || 0));\n this.selectedMinutes = Math.max(0, Math.min(59, val.minutes || 0));\n this.selectedSeconds = Math.max(0, Math.min(59, val.seconds || 0));\n this.hoursDisplay = this.formatNum(this.selectedHours);\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n if (val.period) {\n this.selectedPeriod = val.period;\n }\n }\n\n private getCurrentValue(): TimePickerValue {\n const val: TimePickerValue = {\n hours: this.selectedHours,\n minutes: this.selectedMinutes,\n seconds: this.selectedSeconds,\n };\n if (this.mode === 'clock') {\n val.period = this.selectedPeriod;\n }\n return val;\n }\n}\n","<div class=\"zen-tp\">\n <!-- Input toggle button -->\n <button class=\"zen-tp__toggle zen-tp__toggle--box\"\n [class.zen-tp__toggle--active]=\"isPickerVisible\"\n [class.zen-tp__toggle--disabled]=\"disabled\"\n [class.zen-tp__toggle--readonly]=\"readonly\"\n [style.width]=\"width || null\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\">\n <span class=\"zen-tp__display\" [class.zen-tp__display--placeholder]=\"!value\">\n {{ value ? formattedDisplayValue : defaultPlaceholder }}\n </span>\n <zen-icon class=\"zen-tp__icon\"\n [class.zen-tp__icon--filled]=\"value\"\n src=\"assets/ng-zenduit/icons/time.svg\">\n </zen-icon>\n </button>\n\n <!-- Picker dropdown -->\n @if (isPickerVisible) {\n <div class=\"zen-tp__dropdown\"\n #pickerPopup\n [class.zen-tp__dropdown--right]=\"right\"\n [class.zen-tp__dropdown--bottom]=\"bottom\">\n <div class=\"zen-tp__popup\">\n <!-- Header -->\n <div class=\"zen-tp__popup-label\">{{ label || defaultLabel }}</div>\n <!-- Time fields -->\n <div class=\"zen-tp__fields\">\n <!-- Hours -->\n @if (showHours) {\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Hours\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"hoursDisplay\"\n (input)=\"onHoursInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampHours()\"\n (keydown)=\"onInputKeydown($event, 'hours')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementHours()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementHours()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">HRS</span>\n </div>\n }\n @if (showHours) {\n <span class=\"zen-tp__colon\">:</span>\n }\n <!-- Minutes -->\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Minutes\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"minutesDisplay\"\n (input)=\"onMinutesInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampMinutes()\"\n (keydown)=\"onInputKeydown($event, 'minutes')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementMinutes()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementMinutes()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">MIN</span>\n </div>\n <!-- Seconds (duration mode or when showSeconds) -->\n @if (showSeconds) {\n <span class=\"zen-tp__colon\">:</span>\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Seconds\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"secondsDisplay\"\n (input)=\"onSecondsInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampSeconds()\"\n (keydown)=\"onInputKeydown($event, 'seconds')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementSeconds()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementSeconds()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">SEC</span>\n </div>\n }\n <!-- AM/PM Toggle (Clock mode only) -->\n @if (mode === 'clock') {\n <div class=\"zen-tp__period\">\n <button class=\"zen-tp__period-btn\"\n type=\"button\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'AM'\"\n (click)=\"selectPeriod('AM')\">\n AM\n </button>\n <button class=\"zen-tp__period-btn\"\n type=\"button\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'PM'\"\n (click)=\"selectPeriod('PM')\">\n PM\n </button>\n </div>\n }\n </div>\n <!-- Divider -->\n <div class=\"zen-tp__divider\"></div>\n <!-- Actions -->\n <div class=\"zen-tp__actions\">\n <button class=\"zen-tp__btn zen-tp__btn--clear\" type=\"button\" (click)=\"onClear()\">Clear</button>\n <button class=\"zen-tp__btn zen-tp__btn--apply\" type=\"button\" (click)=\"onApply()\">Apply</button>\n </div>\n </div>\n </div>\n }\n</div>\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FileUploadItem, FileUploaderProgressType } from './file-uploader.types';\n\n@Component({\n selector: 'zen-file-uploader',\n templateUrl: './zendu-file-uploader.component.html',\n styleUrls: ['./zendu-file-uploader.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFileUploaderComponent {\n\n @Input() accept: string = '*';\n @Input() multiple: boolean = true;\n @Input() maxFileSize: number = 0;\n @Input() disabled: boolean = false;\n @Input() description: string = '';\n @Input() progressType: FileUploaderProgressType = 'bar';\n @Input() files: FileUploadItem[] = [];\n\n @Output() filesSelected = new EventEmitter<File[]>();\n @Output() fileRemoved = new EventEmitter<FileUploadItem>();\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n isDragover = false;\n\n @HostListener('dragover', ['$event'])\n onDragOver(evt: DragEvent) {\n if (this.disabled) return;\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = false;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(evt: DragEvent) {\n if (this.disabled) return;\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = false;\n\n const dt = evt.dataTransfer;\n if (dt && dt.files.length) {\n const filtered = this.filterFiles(dt.files);\n if (filtered.length) {\n this.filesSelected.emit(filtered);\n }\n }\n }\n\n openFileDialog() {\n if (this.disabled) return;\n this.fileInput.nativeElement.click();\n }\n\n onFileInput(evt: Event) {\n const input = evt.target as HTMLInputElement;\n if (input.files && input.files.length) {\n const files: File[] = [];\n for (let i = 0; i < input.files.length; i++) {\n files.push(input.files[i]);\n }\n this.filesSelected.emit(files);\n }\n input.value = '';\n }\n\n removeFile(item: FileUploadItem) {\n this.fileRemoved.emit(item);\n }\n\n getFileIcon(fileType: string): string {\n switch (fileType) {\n case 'video': return 'assets/ng-zenduit/icons/film.svg';\n case 'misc': return 'assets/ng-zenduit/icons/upload-cloud.svg';\n default: return 'assets/ng-zenduit/icons/file-upload.svg';\n }\n }\n\n formatFileSize(bytes: number): string {\n if (!bytes) return '0 B';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n }\n\n private filterFiles(fileList: FileList): File[] {\n const files: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList[i];\n if (this.maxFileSize && file.size > this.maxFileSize) continue;\n if (this.accept && this.accept !== '*') {\n const accepted = this.accept.split(',').map(t => t.trim());\n const match = accepted.some(type => {\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.replace('/*', '/'));\n }\n return file.type === type;\n });\n if (!match) continue;\n }\n files.push(file);\n }\n return files;\n }\n}\n","<div class=\"zen-fu\" [class.disabled]=\"disabled\">\n <!-- Drop Zone -->\n <div class=\"drop-zone\"\n [class.dragover]=\"isDragover\"\n (click)=\"openFileDialog()\">\n <div class=\"drop-zone-icon\">\n <zen-icon src=\"assets/ng-zenduit/icons/upload-cloud.svg\"></zen-icon>\n </div>\n <div class=\"drop-zone-text\">\n <span class=\"click-text\">{{ 'Click to upload' | translate }}</span>\n <span class=\"drag-text\">{{ 'or drag and drop' | translate }}</span>\n </div>\n <p class=\"drop-zone-description\">\n {{ description || ('SVG, PNG, JPG or GIF (max. 800x400px)' | translate) }}\n </p>\n </div>\n\n <input type=\"file\"\n #fileInput\n style=\"display:none\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"onFileInput($event)\" />\n\n <!-- File Queue -->\n @if (files?.length) {\n <div class=\"file-queue\">\n <!-- Progress Bar Type -->\n @if (progressType === 'bar') {\n @for (item of files; track item) {\n <div class=\"file-item bar-type\"\n [class.complete]=\"item.status === 'complete'\">\n <div class=\"file-item-content\">\n <div class=\"file-icon-wrap\">\n <zen-icon class=\"file-icon\"\n [src]=\"getFileIcon(item.fileType)\">\n </zen-icon>\n </div>\n <div class=\"file-info\">\n <div class=\"file-text\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n <p class=\"file-size\">{{ formatFileSize(item.file.size) }}</p>\n </div>\n <div class=\"progress-row\">\n <div class=\"progress-track\">\n <div class=\"progress-fill\" [style.width.%]=\"item.progress\"></div>\n </div>\n <span class=\"progress-label\">{{ item.progress }}%</span>\n </div>\n </div>\n </div>\n @if (item.status === 'uploading') {\n <button class=\"file-action\"\n (click)=\"removeFile(item)\">\n <zen-icon class=\"trash-icon\"\n src=\"assets/ng-zenduit/icons/trash.svg\">\n </zen-icon>\n </button>\n }\n @if (item.status === 'complete') {\n <zen-icon class=\"check-icon\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n }\n </div>\n }\n }\n <!-- Progress Fill Type -->\n @if (progressType === 'fill') {\n @for (item of files; track item) {\n <div class=\"file-item fill-type\"\n >\n <div class=\"fill-bg\" [style.width.%]=\"item.progress\"></div>\n <div class=\"file-item-content\">\n <div class=\"file-icon-wrap\">\n <zen-icon class=\"file-icon\"\n [src]=\"getFileIcon(item.fileType)\">\n </zen-icon>\n </div>\n <div class=\"file-info\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n <p class=\"file-size\">{{ formatFileSize(item.file.size) }} – {{ item.progress }}% {{ 'uploaded' | translate }}</p>\n </div>\n </div>\n @if (item.status === 'uploading') {\n <zen-spinner\n class=\"file-spinner\"\n size=\"small\">\n </zen-spinner>\n }\n @if (item.status === 'complete') {\n <zen-icon class=\"check-icon\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n }\n </div>\n }\n }\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type ZenduAvatarStatusIcon = 'none' | 'online' | 'company';\n\n@Component({\n selector: 'zendu-avatar',\n templateUrl: './zendu-avatar.component.html',\n styleUrls: ['./zendu-avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarComponent {\n\n @Input() size: ZenduAvatarSize = 'md';\n @Input() src: string;\n @Input() text: string;\n @Input() statusIcon: ZenduAvatarStatusIcon = 'none';\n @Input() companyImgSrc: string;\n @Input() focused = false;\n\n get showImage(): boolean {\n return !!this.src;\n }\n\n get showText(): boolean {\n return !this.src && !!this.text;\n }\n\n get showPlaceholder(): boolean {\n return !this.src && !this.text;\n }\n\n get cssClasses(): Record<string, boolean> {\n return {\n ['zendu-avatar--' + this.size]: true,\n 'zendu-avatar--focused': this.focused\n };\n }\n}\n","<div class=\"zendu-avatar\" [ngClass]=\"cssClasses\">\n <!-- Image avatar -->\n @if (showImage) {\n <img [src]=\"src\" class=\"zendu-avatar__img\" alt=\"\" />\n }\n\n <!-- Text initials -->\n @if (showText) {\n <span class=\"zendu-avatar__text\">{{ text }}</span>\n }\n\n <!-- Placeholder user icon -->\n @if (showPlaceholder) {\n <div class=\"zendu-avatar__placeholder\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6666 17.5C16.6666 16.337 16.6666 15.7555 16.4942 15.2824C16.1544 14.3491 15.4008 13.5955 14.4675 13.2558C13.9944 13.0833 13.4129 13.0833 12.2499 13.0833H7.74992C6.58694 13.0833 6.00545 13.0833 5.53237 13.2558C4.59907 13.5955 3.84542 14.3491 3.50567 15.2824C3.33325 15.7555 3.33325 16.337 3.33325 17.5M13.7499 6.25C13.7499 8.32107 12.0710 10 9.99992 10C7.92885 10 6.24992 8.32107 6.24992 6.25C6.24992 4.17893 7.92885 2.5 9.99992 2.5C12.0710 2.5 13.7499 4.17893 13.7499 6.25Z\" stroke=\"currentColor\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- Online indicator -->\n @if (statusIcon === 'online') {\n <div class=\"zendu-avatar__online-dot\"></div>\n }\n\n <!-- Company icon -->\n @if (statusIcon === 'company') {\n <div class=\"zendu-avatar__company-icon\">\n @if (companyImgSrc) {\n <img [src]=\"companyImgSrc\" alt=\"\" />\n }\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarGroupSize = 'xs' | 'sm' | 'md';\n\n@Component({\n selector: 'zendu-avatar-group',\n templateUrl: './zendu-avatar-group.component.html',\n styleUrls: ['./zendu-avatar-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarGroupComponent {\n\n @Input() size: ZenduAvatarGroupSize = 'md';\n @Input() images: string[] = [];\n @Input() moreCount = 0;\n @Input() showAddButton = false;\n}\n","<div class=\"zendu-avatar-group\" [ngClass]=\"'zendu-avatar-group--' + size\">\n <div class=\"zendu-avatar-group__avatars\">\n @for (img of images; track img) {\n <div class=\"zendu-avatar-group__wrap\">\n <div class=\"zendu-avatar-group__avatar\">\n <img [src]=\"img\" alt=\"\" />\n </div>\n </div>\n }\n\n @if (moreCount > 0) {\n <div class=\"zendu-avatar-group__more\">\n <span>+{{ moreCount }}</span>\n </div>\n }\n </div>\n\n @if (showAddButton) {\n <div class=\"zendu-avatar-group__add-btn\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 3.333v9.334M3.333 8h9.334\" stroke=\"currentColor\" stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenduAvatarSize, ZenduAvatarStatusIcon } from './zendu-avatar.component';\n\nexport type ZenduAvatarLabelGroupSize = 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'zendu-avatar-label-group',\n templateUrl: './zendu-avatar-label-group.component.html',\n styleUrls: ['./zendu-avatar-label-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarLabelGroupComponent {\n\n @Input() size: ZenduAvatarLabelGroupSize = 'md';\n @Input() src: string;\n @Input() text: string;\n @Input() name: string;\n @Input() subtitle: string;\n @Input() statusIcon: ZenduAvatarStatusIcon = 'none';\n @Input() companyImgSrc: string;\n @Input() focused = false;\n\n get avatarSize(): ZenduAvatarSize {\n return this.size as ZenduAvatarSize;\n }\n}\n","<div class=\"zendu-avatar-label-group\" [ngClass]=\"'zendu-avatar-label-group--' + size\">\n <zendu-avatar\n [size]=\"avatarSize\"\n [src]=\"src\"\n [text]=\"text\"\n [statusIcon]=\"statusIcon\"\n [companyImgSrc]=\"companyImgSrc\"\n [focused]=\"focused\">\n </zendu-avatar>\n\n <div class=\"zendu-avatar-label-group__text\">\n <span class=\"zendu-avatar-label-group__name\">{{ name }}</span>\n @if (subtitle) {\n <span class=\"zendu-avatar-label-group__subtitle\">{{ subtitle }}</span>\n }\n </div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarProfilePhotoSize = 'md' | 'lg';\n\n@Component({\n selector: 'zendu-avatar-profile-photo',\n templateUrl: './zendu-avatar-profile-photo.component.html',\n styleUrls: ['./zendu-avatar-profile-photo.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarProfilePhotoComponent {\n\n @Input() size: ZenduAvatarProfilePhotoSize = 'lg';\n @Input() src: string;\n @Input() text: string;\n\n get showImage(): boolean {\n return !!this.src;\n }\n\n get showText(): boolean {\n return !this.src && !!this.text;\n }\n\n get showPlaceholder(): boolean {\n return !this.src && !this.text;\n }\n}\n","<div class=\"zendu-avatar-profile-photo\" [ngClass]=\"'zendu-avatar-profile-photo--' + size\">\n <!-- Image -->\n @if (showImage) {\n <img [src]=\"src\" class=\"zendu-avatar-profile-photo__img\" alt=\"\" />\n }\n\n <!-- Placeholder icon -->\n @if (showPlaceholder) {\n <div class=\"zendu-avatar-profile-photo__placeholder\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6666 17.5C16.6666 16.337 16.6666 15.7555 16.4942 15.2824C16.1544 14.3491 15.4008 13.5955 14.4675 13.2558C13.9944 13.0833 13.4129 13.0833 12.2499 13.0833H7.74992C6.58694 13.0833 6.00545 13.0833 5.53237 13.2558C4.59907 13.5955 3.84542 14.3491 3.50567 15.2824C3.33325 15.7555 3.33325 16.337 3.33325 17.5M13.7499 6.25C13.7499 8.32107 12.0710 10 9.99992 10C7.92885 10 6.24992 8.32107 6.24992 6.25C6.24992 4.17893 7.92885 2.5 9.99992 2.5C12.0710 2.5 13.7499 4.17893 13.7499 6.25Z\" stroke=\"currentColor\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- Text initials -->\n @if (showText) {\n <span class=\"zendu-avatar-profile-photo__text\">{{ text }}</span>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduSliderLabel = 'none' | 'bottom' | 'bottom-floating' | 'top-floating';\n\n@Component({\n selector: 'zendu-slider',\n templateUrl: './zendu-slider.component.html',\n styleUrls: ['./zendu-slider.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSliderComponent implements OnDestroy {\n\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() lowValue = 0;\n @Input() highValue = 100;\n @Input() label: ZenduSliderLabel = 'none';\n @Input() suffix = '%';\n @Input() disabled = false;\n\n @Output() lowValueChange = new EventEmitter<number>();\n @Output() highValueChange = new EventEmitter<number>();\n\n @ViewChild('track', { static: true }) trackRef: ElementRef<HTMLElement>;\n\n private activeThumb: 'low' | 'high' | null = null;\n private boundMouseMove = this.onMouseMove.bind(this);\n private boundMouseUp = this.onMouseUp.bind(this);\n private boundTouchMove = this.onTouchMove.bind(this);\n private boundTouchEnd = this.onTouchEnd.bind(this);\n\n get lowPercent(): number {\n return ((this.lowValue - this.min) / (this.max - this.min)) * 100;\n }\n\n get highPercent(): number {\n return ((this.highValue - this.min) / (this.max - this.min)) * 100;\n }\n\n formatValue(value: number): string {\n return `${value}${this.suffix}`;\n }\n\n onTrackClick(event: MouseEvent): void {\n if (this.disabled) return;\n const percent = this.getPercentFromEvent(event);\n const value = this.percentToValue(percent);\n const distToLow = Math.abs(value - this.lowValue);\n const distToHigh = Math.abs(value - this.highValue);\n if (distToLow <= distToHigh) {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n onThumbMouseDown(event: MouseEvent, thumb: 'low' | 'high'): void {\n if (this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.activeThumb = thumb;\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('mouseup', this.boundMouseUp);\n }\n\n onThumbTouchStart(event: TouchEvent, thumb: 'low' | 'high'): void {\n if (this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.activeThumb = thumb;\n document.addEventListener('touchmove', this.boundTouchMove, { passive: false });\n document.addEventListener('touchend', this.boundTouchEnd);\n }\n\n ngOnDestroy(): void {\n this.removeListeners();\n }\n\n private onMouseMove(event: MouseEvent): void {\n if (!this.activeThumb) return;\n const percent = this.getPercentFromEvent(event);\n const value = this.percentToValue(percent);\n if (this.activeThumb === 'low') {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n private onMouseUp(): void {\n this.activeThumb = null;\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n }\n\n private onTouchMove(event: TouchEvent): void {\n if (!this.activeThumb || !event.touches.length) return;\n event.preventDefault();\n const touch = event.touches[0];\n const percent = this.getPercentFromTouch(touch);\n const value = this.percentToValue(percent);\n if (this.activeThumb === 'low') {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n private onTouchEnd(): void {\n this.activeThumb = null;\n document.removeEventListener('touchmove', this.boundTouchMove);\n document.removeEventListener('touchend', this.boundTouchEnd);\n }\n\n private getPercentFromEvent(event: MouseEvent): number {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n return Math.max(0, Math.min(100, (x / rect.width) * 100));\n }\n\n private getPercentFromTouch(touch: Touch): number {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n const x = touch.clientX - rect.left;\n return Math.max(0, Math.min(100, (x / rect.width) * 100));\n }\n\n private percentToValue(percent: number): number {\n const raw = this.min + (percent / 100) * (this.max - this.min);\n return Math.round(raw / this.step) * this.step;\n }\n\n private updateLow(value: number): void {\n value = Math.max(this.min, Math.min(value, this.highValue));\n if (value !== this.lowValue) {\n this.lowValue = value;\n this.lowValueChange.emit(value);\n }\n }\n\n private updateHigh(value: number): void {\n value = Math.max(this.lowValue, Math.min(value, this.max));\n if (value !== this.highValue) {\n this.highValue = value;\n this.highValueChange.emit(value);\n }\n }\n\n private removeListeners(): void {\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n document.removeEventListener('touchmove', this.boundTouchMove);\n document.removeEventListener('touchend', this.boundTouchEnd);\n }\n}\n","<div class=\"zendu-slider\" [class.zendu-slider--disabled]=\"disabled\">\n\n <!-- Top floating labels -->\n @if (label === 'top-floating') {\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--top\" [style.left.%]=\"lowPercent\">\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(lowValue) }}</div>\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--down\"></div>\n </div>\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--top\" [style.left.%]=\"highPercent\">\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(highValue) }}</div>\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--down\"></div>\n </div>\n }\n\n <!-- Track -->\n <div class=\"zendu-slider__track\" #track (mousedown)=\"onTrackClick($event)\">\n <div class=\"zendu-slider__track-bg\"></div>\n <div class=\"zendu-slider__track-fill\"\n [style.left.%]=\"lowPercent\"\n [style.right.%]=\"100 - highPercent\"></div>\n\n <!-- Low thumb -->\n <div class=\"zendu-slider__thumb\"\n [style.left.%]=\"lowPercent\"\n (mousedown)=\"onThumbMouseDown($event, 'low')\"\n (touchstart)=\"onThumbTouchStart($event, 'low')\"></div>\n\n <!-- High thumb -->\n <div class=\"zendu-slider__thumb\"\n [style.left.%]=\"highPercent\"\n (mousedown)=\"onThumbMouseDown($event, 'high')\"\n (touchstart)=\"onThumbTouchStart($event, 'high')\"></div>\n </div>\n\n <!-- Bottom floating labels -->\n @if (label === 'bottom-floating') {\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--bottom\" [style.left.%]=\"lowPercent\">\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--up\"></div>\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(lowValue) }}</div>\n </div>\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--bottom\" [style.left.%]=\"highPercent\">\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--up\"></div>\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(highValue) }}</div>\n </div>\n }\n\n <!-- Bottom plain labels -->\n @if (label === 'bottom') {\n <div class=\"zendu-slider__label zendu-slider__label--bottom\" [style.left.%]=\"lowPercent\">\n {{ formatValue(lowValue) }}\n </div>\n <div class=\"zendu-slider__label zendu-slider__label--bottom\" [style.left.%]=\"highPercent\">\n {{ formatValue(highValue) }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenBadgeSize = 'sm' | 'md' | 'lg';\nexport type ZenBadgeColor =\n | 'gray' | 'primary' | 'error' | 'warning' | 'success'\n | 'blue-gray' | 'blue-light' | 'blue' | 'indigo' | 'purple'\n | 'pink' | 'rose' | 'orange';\nexport type ZenBadgeIconDirection = 'left' | 'right';\nexport type ZenBadgeGroupTheme = 'light' | 'medium' | 'dark';\nexport type ZenBadgeGroupBadgePosition = 'leading' | 'trailing';\n\n@Component({\n selector: 'zen-badge',\n templateUrl: './zen-badge.component.html',\n styleUrls: ['./zen-badge.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenBadgeComponent {\n\n @Input() size: ZenBadgeSize = 'md';\n @Input() color: ZenBadgeColor = 'primary';\n @Input() dot = false;\n @Input() removable = false;\n @Input() iconOnly = false;\n\n /** Icon name (resolved via zen-icon's iconBasePath) */\n @Input() icon: string;\n /** Direct icon src URL (use instead of name) */\n @Input() iconSrc: string;\n /** Icon placement direction */\n @Input() iconDirection: ZenBadgeIconDirection = 'left';\n\n /** Image src (country flag or avatar) — shown as a round image left of text */\n @Input() imgSrc: string;\n\n /** Badge group mode — renders as a pill with inner badge + message */\n @Input() group = false;\n /** Badge group: inner badge label text */\n @Input() badgeLabel: string;\n /** Badge group: badge position (leading = left, trailing = right) */\n @Input() badgePosition: ZenBadgeGroupBadgePosition = 'leading';\n /** Badge group: theme variant */\n @Input() theme: ZenBadgeGroupTheme = 'light';\n /** Badge group: show arrow icon */\n @Input() showIcon = false;\n\n @Output() remove = new EventEmitter<void>();\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n get hasIcon(): boolean {\n return !!(this.icon || this.iconSrc);\n }\n\n get hostClasses(): string {\n const classes = [\n 'zen-badge',\n `zen-badge--${this.size}`,\n `zen-badge--${this.color}`,\n ];\n if (this.dot) classes.push('zen-badge--dot');\n if (this.removable) classes.push('zen-badge--removable');\n if (this.iconOnly) classes.push('zen-badge--icon-only');\n if (this.imgSrc) classes.push('zen-badge--has-img');\n if (this.hasIcon && !this.iconOnly && this.iconDirection === 'left') classes.push('zen-badge--icon-left');\n if ((this.hasIcon && !this.iconOnly && this.iconDirection === 'right') || this.removable) classes.push('zen-badge--icon-right');\n return classes.join(' ');\n }\n\n get groupClasses(): string {\n const classes = [\n 'zen-badge-group',\n `zen-badge-group--${this.size}`,\n `zen-badge-group--${this.color}`,\n `zen-badge-group--${this.theme}`,\n `zen-badge-group--${this.badgePosition}`,\n ];\n if (this.showIcon) classes.push('zen-badge-group--has-icon');\n return classes.join(' ');\n }\n\n onClick(event: MouseEvent): void {\n this.clicked.emit(event);\n }\n\n onRemove(event: MouseEvent): void {\n event.stopPropagation();\n this.remove.emit();\n }\n}\n","<!-- Badge Group mode -->\n@if (group) {\n <div [class]=\"groupClasses\" (click)=\"onClick($event)\">\n <!-- Leading: inner badge first -->\n @if (badgePosition === 'leading') {\n <span class=\"zen-badge-group__badge\">{{ badgeLabel }}</span>\n <span class=\"zen-badge-group__content\">\n <span class=\"zen-badge-group__message\"><ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container></span>\n @if (showIcon) {\n <zen-icon class=\"zen-badge-group__icon\" name=\"arrow-right\"></zen-icon>\n }\n </span>\n }\n <!-- Trailing: message first, badge with optional icon last -->\n @if (badgePosition === 'trailing') {\n <span class=\"zen-badge-group__message\"><ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container></span>\n <span class=\"zen-badge-group__badge\">\n {{ badgeLabel }}\n @if (showIcon) {\n <zen-icon class=\"zen-badge-group__badge-icon\" name=\"arrow-right\"></zen-icon>\n }\n </span>\n }\n </div>\n} @else {\n <div [class]=\"hostClasses\" (click)=\"onClick($event)\">\n @if (dot) {\n <span class=\"zen-badge__dot\"></span>\n }\n @if (imgSrc) {\n <img class=\"zen-badge__img\" [src]=\"imgSrc\" alt=\"\">\n }\n @if (hasIcon && !iconOnly && iconDirection === 'left') {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (!iconOnly) {\n <span class=\"zen-badge__text\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </span>\n }\n @if (iconOnly && hasIcon) {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (hasIcon && !iconOnly && iconDirection === 'right') {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (removable) {\n <button class=\"zen-badge__close\" (click)=\"onRemove($event)\" type=\"button\" aria-label=\"Remove\">\n <zen-icon class=\"zen-badge__icon\" name=\"x\"></zen-icon>\n </button>\n }\n </div>\n}\n\n<!-- Standard badge mode -->\n\n<ng-template #contentTpl><ng-content></ng-content></ng-template>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\n\nexport interface DropdownMenuItem {\n label?: string;\n icon?: string;\n shortcut?: string;\n checked?: boolean;\n divider?: boolean;\n disabled?: boolean;\n}\n\nexport interface DropdownMenuHeader {\n name: string;\n email: string;\n avatarSrc?: string;\n}\n\nexport type DropdownTriggerType = 'list-header' | 'icon' | 'button' | 'avatar';\n\n@Component({\n selector: 'zen-dropdown-menu',\n templateUrl: './zen-dropdown-menu.component.html',\n styleUrls: ['./zen-dropdown-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenDropdownMenuComponent implements AfterViewInit, OnDestroy {\n\n // Trigger-related inputs\n @Input() triggerType: DropdownTriggerType = 'button';\n @Input() buttonText: string = 'Account';\n @Input() avatarSrc?: string;\n\n // Menu-related inputs\n @Input() items: DropdownMenuItem[] = [];\n @Input() showCheckbox: boolean = false;\n @Input() showShortcut: boolean = false;\n @Input() showIcon: boolean = false;\n @Input() showCount: boolean = false;\n @Input() headerUser?: DropdownMenuHeader;\n @Input() showHeader: boolean = true;\n\n // Positioning inputs\n @Input() position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right' | 'bottom' | '' = '';\n @Input() offset: number = 0;\n @Input() closeOnOutsideClick: boolean = true;\n @Input() scrollHandler: string = '';\n\n @Output() itemClick = new EventEmitter<DropdownMenuItem>();\n @Output() itemCheck = new EventEmitter<{item: DropdownMenuItem, checked: boolean}>();\n @Output() openChange = new EventEmitter<boolean>();\n @Output() onClose = new EventEmitter();\n\n @ViewChild('dropdown', { static: false }) dropdownElement!: ElementRef<HTMLElement>;\n\n isOpen = false;\n dropdownVisible = false;\n private scrollSubscription: Subscription = new Subscription();\n\n constructor(private elementRef: ElementRef) {}\n\n ngAfterViewInit(): void {\n if (this.scrollHandler) {\n this.scrollSubscription = fromEvent(\n document.getElementsByClassName(this.scrollHandler)[0],\n 'scroll'\n ).subscribe(() => {\n this.closeDropdown();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.scrollSubscription.unsubscribe();\n }\n\n toggleDropdown(): void {\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n openDropdown(): void {\n this.isOpen = true;\n this.openChange.emit(this.isOpen);\n \n // Position dropdown before making it visible to prevent jerk\n setTimeout(() => {\n if (this.dropdownElement) {\n this.updateDropdownPosition();\n this.dropdownVisible = true;\n }\n }, 0);\n }\n\n closeDropdown(): void {\n if (this.isOpen) {\n this.dropdownVisible = false;\n this.isOpen = false;\n this.openChange.emit(this.isOpen);\n this.onClose.emit();\n }\n }\n\n updateDropdownPosition(): void {\n if (!this.dropdownElement) return;\n\n const container = this.elementRef.nativeElement as HTMLElement;\n const dropdown = this.dropdownElement.nativeElement;\n const pos = container.getBoundingClientRect();\n \n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const dropdownWidth = 240; // Dropdown width\n const position = this.position || 'bottom-right'; // Default to bottom-right\n\n // Set positioning properties\n dropdown.style.position = 'fixed';\n dropdown.style.zIndex = '1000';\n dropdown.style.minWidth = '240px';\n\n // Parse position string to determine vertical and horizontal alignment\n const isTop = position.includes('top');\n const isBottom = position.includes('bottom') || (!isTop && position !== 'left' && position !== 'right');\n const isLeft = position.includes('left') || position === 'left';\n const isRight = position.includes('right') || position === 'right';\n\n // Vertical positioning\n if (isTop) {\n // Position above the trigger\n dropdown.style.bottom = `${viewportHeight - pos.top + 8}px`;\n dropdown.style.top = 'unset';\n } else {\n // Position below the trigger (default)\n dropdown.style.top = `${pos.bottom + 8}px`;\n dropdown.style.bottom = 'unset';\n }\n\n // Horizontal positioning\n // 'right' means dropdown extends to the right (left edge aligned with trigger's left edge)\n // 'left' means dropdown extends to the left (right edge aligned with trigger's right edge)\n if (isRight) {\n // Dropdown extends rightward: align left edges\n dropdown.style.left = `${pos.left + this.offset}px`;\n dropdown.style.right = 'unset';\n\n // Make sure dropdown doesn't go off-screen on the right\n const dropdownRight = pos.left + dropdownWidth;\n if (dropdownRight > viewportWidth) {\n dropdown.style.right = `${Math.max(8, viewportWidth - pos.right + this.offset)}px`;\n dropdown.style.left = 'unset';\n }\n } else if (isLeft) {\n // Dropdown extends leftward: align right edges\n const rightPosition = viewportWidth - pos.right + this.offset;\n dropdown.style.right = `${rightPosition}px`;\n dropdown.style.left = 'unset';\n\n // Make sure dropdown doesn't go off-screen on the left\n const dropdownLeft = pos.right - dropdownWidth;\n if (dropdownLeft < 0) {\n dropdown.style.left = `${Math.max(8, pos.left + this.offset)}px`;\n dropdown.style.right = 'unset';\n }\n }\n\n // Legacy support for old position values\n if (position === 'bottom') {\n dropdown.style.left = `${pos.left + this.offset}px`;\n dropdown.style.right = 'unset';\n }\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.closeOnOutsideClick) return;\n if (!document.body.contains(event.target as Node)) return;\n if (!this.dropdownElement) return;\n if (!this.isOpen) return;\n if (this.dropdownElement.nativeElement.contains(event.target as Node)) return;\n if (this.elementRef.nativeElement.contains(event.target as Node)) return;\n \n this.closeDropdown();\n }\n\n @HostListener('window:wheel', ['$event'])\n handleMouseScroll(event: WheelEvent): void {\n if (!this.dropdownElement || !this.isOpen) return;\n if (this.dropdownElement.nativeElement.contains(event.target as Node)) return;\n \n this.closeDropdown();\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent): void {\n if (!this.isOpen) return;\n \n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Escape'\n ) {\n this.closeDropdown();\n }\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this.isOpen && this.dropdownElement) {\n this.updateDropdownPosition();\n }\n }\n\n // Trigger type getters\n get showListHeader(): boolean {\n return this.triggerType === 'list-header';\n }\n\n get showIconTrigger(): boolean {\n return this.triggerType === 'icon';\n }\n\n get showButton(): boolean {\n return this.triggerType === 'button';\n }\n\n get showAvatar(): boolean {\n return this.triggerType === 'avatar';\n }\n\n onItemClick(item: DropdownMenuItem, event?: MouseEvent): void {\n if (!item.disabled && !item.divider) {\n // If showCheckbox is true, toggle the checkbox state when clicking the item\n if (this.showCheckbox && event) {\n // Check if click was directly on checkbox (which will have stopPropagation)\n const target = event.target as HTMLElement;\n const isCheckboxClick = target.closest('zen-checkbox');\n if (!isCheckboxClick) {\n // Toggle checkbox when clicking elsewhere on the item\n item.checked = !item.checked;\n this.itemCheck.emit({ item, checked: item.checked });\n }\n } else {\n // For non-checkbox items, emit the click event\n this.itemClick.emit(item);\n }\n }\n }\n\n onCheckboxChange(item: DropdownMenuItem, checked: boolean): void {\n if (!item.disabled) {\n item.checked = checked;\n this.itemCheck.emit({ item, checked });\n }\n }\n\n}","<div class=\"zen-dropdown-menu\" [class.zen-dropdown-menu--open]=\"isOpen\">\n\n <!-- TRIGGERS SECTION -->\n\n <!-- List Header Trigger -->\n @if (showListHeader) {\n <div\n class=\"zen-dropdown-menu__list-header\"\n (click)=\"toggleDropdown()\">\n <div class=\"zen-dropdown-menu__user-info\">\n <img\n class=\"zen-dropdown-menu__user-avatar\"\n [src]=\"headerUser?.avatarSrc\"\n [alt]=\"headerUser?.name || 'User'\">\n <div class=\"zen-dropdown-menu__user-details\">\n <div class=\"zen-dropdown-menu__user-name text text-sm text-weight-medium\">{{ (headerUser?.name || 'User') | translate }}</div>\n <div class=\"zen-dropdown-menu__user-email text text-sm text-weight-regular\">{{ headerUser?.email }}</div>\n </div>\n </div>\n </div>\n }\n\n <!-- Icon Button Trigger -->\n @if (showIconTrigger) {\n <button\n class=\"zen-dropdown-menu__icon-button\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <zen-icon name=\"more-vertical\" [customColor]=\"'#667085'\"></zen-icon>\n </button>\n }\n\n <!-- Button Trigger -->\n @if (showButton) {\n <button\n class=\"zen-dropdown-menu__button\"\n [class.zen-dropdown-menu__button--focused]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <span class=\"zen-dropdown-menu__button-text text text-sm text-weight-medium\">{{ buttonText | translate }}</span>\n <zen-icon\n [name]=\"isOpen ? 'chevron-up' : 'chevron-down'\"\n [customColor]=\"'#667085'\"\n class=\"zen-dropdown-menu__button-icon\">\n </zen-icon>\n </button>\n }\n\n <!-- Avatar Trigger -->\n @if (showAvatar) {\n <button\n class=\"zen-dropdown-menu__avatar\"\n [class.zen-dropdown-menu__avatar--focused]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <img\n class=\"zen-dropdown-menu__avatar-img\"\n [src]=\"avatarSrc\"\n alt=\"User Avatar\">\n </button>\n }\n\n <!-- DROPDOWN CONTENT SECTION -->\n @if (isOpen) {\n <div class=\"zen-dropdown-menu__dropdown\" #dropdown\n [style.position]=\"'fixed'\"\n [style.opacity]=\"dropdownVisible ? 1 : 0\"\n [style.visibility]=\"dropdownVisible ? 'visible' : 'hidden'\">\n <!-- Header Section -->\n @if (showHeader && headerUser) {\n <div class=\"zen-dropdown-menu__header\">\n <div class=\"zen-dropdown-menu__header-info\">\n <img\n class=\"zen-dropdown-menu__header-avatar\"\n [src]=\"headerUser.avatarSrc\"\n [alt]=\"headerUser.name\">\n <div class=\"zen-dropdown-menu__header-details\">\n <div class=\"zen-dropdown-menu__header-name text text-sm text-weight-medium\">{{ headerUser.name | translate }}</div>\n <div class=\"zen-dropdown-menu__header-email text text-sm text-weight-regular\">{{ headerUser.email }}</div>\n </div>\n </div>\n </div>\n }\n <!-- Divider after header -->\n @if (showHeader && headerUser) {\n <div class=\"zen-dropdown-menu__divider\"></div>\n }\n <!-- Menu Items -->\n <div class=\"zen-dropdown-menu__content\">\n @for (item of items; track item) {\n <!-- Divider -->\n @if (item.divider) {\n <div class=\"zen-dropdown-menu__divider\"></div>\n }\n <!-- Menu Item -->\n @if (!item.divider) {\n <div\n class=\"zen-dropdown-menu__item\"\n [class.zen-dropdown-menu__item--disabled]=\"item.disabled\"\n (click)=\"onItemClick(item, $event)\">\n <!-- Checkbox variant -->\n @if (showCheckbox) {\n <zen-checkbox\n class=\"zen-dropdown-menu__checkbox\"\n [checked]=\"item.checked || false\"\n [disabled]=\"item.disabled\"\n [size]=\"'sm'\"\n [label]=\"''\"\n (checkedChange)=\"onCheckboxChange(item, $event)\"\n (click)=\"$event.stopPropagation()\">\n </zen-checkbox>\n }\n <!-- Icon -->\n @if (showIcon && item.icon) {\n <zen-icon\n class=\"zen-dropdown-menu__item-icon\"\n [name]=\"item.icon\"\n [customColor]=\"'#344054'\">\n </zen-icon>\n }\n <!-- Item Content -->\n <div class=\"zen-dropdown-menu__item-content\">\n <!-- Label -->\n <span class=\"zen-dropdown-menu__label text text-sm text-weight-regular\">\n {{ item.label | translate }}\n </span>\n <!-- Count number (shown at the end of the row) -->\n @if (showCount && item.shortcut) {\n <span\n class=\"zen-dropdown-menu__count text text-xs text-weight-regular\">\n {{ item.shortcut }}\n </span>\n }\n <!-- Shortcut -->\n @if (showShortcut && item.shortcut && !showCount) {\n <span\n class=\"zen-dropdown-menu__shortcut text text-xs text-weight-regular\">\n {{ item.shortcut | translate }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n\n</div>","import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\n\nexport type ZenTooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right';\nexport type ZenTooltipTheme = 'dark' | 'light';\n\n@Component({\n selector: 'zen-tooltip-popup',\n templateUrl: './zen-tooltip.component.html',\n styleUrls: ['./zen-tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class ZenTooltipPopupComponent {\n @Input() text = '';\n @Input() supportingText = '';\n @Input() theme: ZenTooltipTheme = 'dark';\n @Input() position: ZenTooltipPosition = 'top';\n\n get arrowPosition(): string {\n switch (this.position) {\n case 'top': return 'bottom-center';\n case 'bottom': return 'top-center';\n case 'left': return 'right';\n case 'right': return 'left';\n case 'top-left': return 'bottom-left';\n case 'top-right': return 'bottom-right';\n default: return 'bottom-center';\n }\n }\n\n get hasSupportingText(): boolean {\n return !!this.supportingText;\n }\n}\n","<div class=\"zen-tooltip\"\n [class.zen-tooltip--dark]=\"theme === 'dark'\"\n [class.zen-tooltip--light]=\"theme === 'light'\"\n [class.zen-tooltip--has-supporting]=\"hasSupportingText\"\n [attr.data-arrow]=\"arrowPosition\">\n\n <!-- Arrow: top (for bottom tooltip) — points up toward element -->\n @if (arrowPosition === 'top-center') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--top\"\n width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 6L6.59 0.91C7.37 0.13 8.63 0.13 9.41 0.91L16 6H0Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Arrow: left (for right tooltip) — points left toward element -->\n @if (arrowPosition === 'left') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--left\"\n width=\"6\" height=\"16\" viewBox=\"0 0 6 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 0L0.91 6.59C0.13 7.37 0.13 8.63 0.91 9.41L6 16V0Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Content -->\n <div class=\"zen-tooltip__content\">\n <p class=\"zen-tooltip__title\">{{ text }}</p>\n @if (hasSupportingText) {\n <p class=\"zen-tooltip__supporting\">{{ supportingText }}</p>\n }\n </div>\n\n <!-- Arrow: bottom (for top tooltip) — points down toward element -->\n @if (arrowPosition === 'bottom-center' || arrowPosition === 'bottom-left' || arrowPosition === 'bottom-right') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--bottom\"\n [class.zen-tooltip__arrow--bottom-left]=\"arrowPosition === 'bottom-left'\"\n [class.zen-tooltip__arrow--bottom-right]=\"arrowPosition === 'bottom-right'\"\n width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16 0L9.41 5.09C8.63 5.87 7.37 5.87 6.59 5.09L0 0H16Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Arrow: right (for left tooltip) — points right toward element -->\n @if (arrowPosition === 'right') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--right\"\n width=\"6\" height=\"16\" viewBox=\"0 0 6 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 16L5.09 9.41C5.87 8.63 5.87 7.37 5.09 6.59L0 0V16Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n</div>\n","import {\n Directive,\n Input,\n ElementRef,\n OnDestroy,\n ComponentRef,\n ViewContainerRef,\n HostListener,\n} from '@angular/core';\nimport {\n Overlay,\n OverlayRef,\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ZenTooltipPopupComponent, ZenTooltipPosition, ZenTooltipTheme } from './zen-tooltip.component';\n\n@Directive({\n selector: '[zenTooltip]',\n standalone: false\n})\nexport class ZenTooltipDirective implements OnDestroy {\n\n @Input('zenTooltip') text = '';\n @Input() tooltipSupportingText = '';\n @Input() tooltipPosition: ZenTooltipPosition = 'top';\n @Input() tooltipTheme: ZenTooltipTheme = 'dark';\n @Input() tooltipDisabled = false;\n\n private _overlayRef: OverlayRef | null = null;\n private _tooltipRef: ComponentRef<ZenTooltipPopupComponent> | null = null;\n\n constructor(\n private _overlay: Overlay,\n private _elementRef: ElementRef,\n private _viewContainerRef: ViewContainerRef,\n ) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltipDisabled || !this.text) return;\n this._show();\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this._hide();\n }\n\n @HostListener('focus')\n onFocus(): void {\n if (this.tooltipDisabled || !this.text) return;\n this._show();\n }\n\n @HostListener('blur')\n onBlur(): void {\n this._hide();\n }\n\n ngOnDestroy(): void {\n this._hide();\n }\n\n private _show(): void {\n if (this._overlayRef) return;\n\n const positionStrategy = this._getPositionStrategy();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.close(),\n panelClass: 'zen-tooltip-overlay',\n });\n\n const portal = new ComponentPortal(\n ZenTooltipPopupComponent,\n this._viewContainerRef\n );\n\n this._tooltipRef = this._overlayRef.attach(portal);\n this._tooltipRef.instance.text = this.text;\n this._tooltipRef.instance.supportingText = this.tooltipSupportingText;\n this._tooltipRef.instance.theme = this.tooltipTheme;\n this._tooltipRef.instance.position = this.tooltipPosition;\n this._tooltipRef.changeDetectorRef.markForCheck();\n }\n\n private _hide(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n this._tooltipRef = null;\n }\n }\n\n private _getPositionStrategy(): FlexibleConnectedPositionStrategy {\n const positions = this._getPositions();\n\n return this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n\n private _getPositions(): ConnectedPosition[] {\n const offset = 4;\n\n switch (this.tooltipPosition) {\n case 'top':\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n ];\n case 'bottom':\n return [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n ];\n case 'left':\n return [\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n ];\n case 'right':\n return [\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n ];\n case 'top-left':\n return [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\n ];\n case 'top-right':\n return [\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },\n ];\n default:\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n ];\n }\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenEldStatusType = 'on-duty' | 'off-duty' | 'driving' | 'sleeper' | 'personal-conveyance' | 'yard-move';\n\nconst STATUS_ABBREVIATIONS: Record<ZenEldStatusType, string> = {\n 'on-duty': 'ON',\n 'off-duty': 'OFF',\n 'driving': 'D',\n 'sleeper': 'SB',\n 'personal-conveyance': 'PC',\n 'yard-move': 'YM',\n};\n\n@Component({\n selector: 'zen-eld-status',\n templateUrl: './zen-eld-status.component.html',\n styleUrls: ['./zen-eld-status.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenEldStatusComponent {\n\n @Input() status: ZenEldStatusType = 'off-duty';\n\n get hostClasses(): string {\n return `zen-eld-status zen-eld-status--${this.status}`;\n }\n\n get abbreviation(): string {\n return STATUS_ABBREVIATIONS[this.status] || 'OFF';\n }\n}\n","<span [class]=\"hostClasses\">{{ abbreviation }}</span>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-nav-search',\n templateUrl: './zen-nav-search.component.html',\n styleUrls: ['./zen-nav-search.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenNavSearchComponent {\n\n @Input() placeholder = 'Search';\n @Input() value = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() search = new EventEmitter<string>();\n\n hovered = false;\n\n get hostClasses(): string {\n const classes = ['zen-nav-search'];\n if (this.hovered) classes.push('zen-nav-search--hover');\n return classes.join(' ');\n }\n\n onInput(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.value = val;\n this.valueChange.emit(val);\n }\n\n onSearch(): void {\n this.search.emit(this.value);\n }\n}\n","<div [class]=\"hostClasses\"\n (mouseenter)=\"hovered = true\"\n (mouseleave)=\"hovered = false\">\n <zen-icon class=\"zen-nav-search__icon\" name=\"search\" [customColor]=\"'#D0D5DD'\"></zen-icon>\n <input class=\"zen-nav-search__input\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (keyup.enter)=\"onSearch()\" />\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-submodule-item',\n templateUrl: './zen-submodule-item.component.html',\n styleUrls: ['./zen-submodule-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSubmoduleItemComponent {\n\n @Input() label = 'Submodule';\n @Input() icon: string;\n @Input() current = false;\n\n @Output() activate = new EventEmitter<void>();\n\n get hostClasses(): string {\n const classes = ['zen-submodule-item'];\n if (this.current) classes.push('zen-submodule-item--current');\n return classes.join(' ');\n }\n\n get iconColor(): string {\n return this.current ? '#FFFFFF' : '#667085';\n }\n\n onActivate(): void {\n this.activate.emit();\n }\n}\n","<button [class]=\"hostClasses\" (click)=\"onActivate()\" type=\"button\">\n @if (icon) {\n <zen-icon class=\"zen-submodule-item__icon\"\n [name]=\"icon\" [customColor]=\"iconColor\"></zen-icon>\n }\n <span class=\"zen-submodule-item__label\">{{ label }}</span>\n</button>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenEldStatusType } from '../eld-status/zen-eld-status.component';\n\nexport type ZenSubpageItemType = 'vehicle' | 'driver';\nexport type ZenSubpageItemState = 'default' | 'hover' | 'focused';\n\n@Component({\n selector: 'zen-subpage-item',\n templateUrl: './zen-subpage-item.component.html',\n styleUrls: ['./zen-subpage-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSubpageItemComponent {\n\n @Input() type: ZenSubpageItemType = 'vehicle';\n @Input() state: ZenSubpageItemState = 'default';\n @Input() label = '';\n @Input() eldStatus: ZenEldStatusType;\n\n @Output() activate = new EventEmitter<void>();\n\n private _hovered = false;\n\n get hostClasses(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n const classes = [\n 'zen-subpage-item',\n `zen-subpage-item--${this.type}`,\n `zen-subpage-item--${activeState}`,\n ];\n return classes.join(' ');\n }\n\n get typeIcon(): string {\n return this.type === 'vehicle' ? 'truck' : 'user';\n }\n\n get iconColor(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n return activeState === 'focused' ? '#FFFFFF' : '#1D2939';\n }\n\n onActivate(): void {\n this.activate.emit();\n }\n\n onMouseEnter(): void {\n this._hovered = true;\n }\n\n onMouseLeave(): void {\n this._hovered = false;\n }\n}\n","<div [class]=\"hostClasses\"\n (click)=\"onActivate()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <zen-icon class=\"zen-subpage-item__icon\"\n [name]=\"typeIcon\"\n [customColor]=\"iconColor\"></zen-icon>\n <span class=\"zen-subpage-item__label\">{{ label }}</span>\n @if (type === 'driver' && eldStatus) {\n <zen-eld-status\n [status]=\"eldStatus\"\n class=\"zen-subpage-item__eld\"></zen-eld-status>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenModulePopupModule =\n | 'fleet' | 'safety' | 'operations' | 'reports'\n | 'bus' | 'fuel' | 'maintain' | 'efficiency' | 'inventory' | 'more';\n\nexport interface ZenModulePopupItem {\n label: string;\n route?: string;\n tag?: unknown;\n}\n\nconst MODULE_LABELS: Record<ZenModulePopupModule, string> = {\n fleet: 'Fleet',\n safety: 'Safety',\n operations: 'Operate',\n reports: 'Reports',\n bus: 'Bus',\n fuel: 'Fuel',\n maintain: 'Maintain',\n efficiency: 'Efficiency',\n inventory: 'Inventory',\n more: 'More',\n};\n\nconst MODULE_ICONS: Record<ZenModulePopupModule, string> = {\n fleet: 'truck',\n safety: 'shield',\n operations: 'briefcase',\n reports: 'bar-chart-2',\n bus: 'bus',\n fuel: 'droplet',\n maintain: 'tool',\n efficiency: 'trending-up',\n inventory: 'package',\n more: 'more-vertical',\n};\n\n@Component({\n selector: 'zen-module-popup',\n templateUrl: './zen-module-popup.component.html',\n styleUrls: ['./zen-module-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenModulePopupComponent {\n\n @Input() module: ZenModulePopupModule = 'fleet';\n @Input() items: ZenModulePopupItem[] = [];\n @Input() isOpen = false;\n\n @Output() itemClick = new EventEmitter<ZenModulePopupItem>();\n @Output() close = new EventEmitter<void>();\n\n constructor(private _elementRef: ElementRef) {}\n\n get moduleLabel(): string {\n return MODULE_LABELS[this.module] || this.module;\n }\n\n get moduleIcon(): string {\n return MODULE_ICONS[this.module] || 'circle';\n }\n\n get hostClasses(): string {\n const classes = ['zen-module-popup'];\n if (this.module === 'more') classes.push('zen-module-popup--more');\n return classes.join(' ');\n }\n\n onItemClick(item: ZenModulePopupItem): void {\n this.itemClick.emit(item);\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.isOpen && !this._elementRef.nativeElement.contains(event.target)) {\n this.close.emit();\n }\n }\n}\n","@if (isOpen) {\n <div [class]=\"hostClasses\">\n <!-- Header -->\n <div class=\"zen-module-popup__header\">\n <zen-icon class=\"zen-module-popup__header-icon\"\n [name]=\"moduleIcon\"\n [customColor]=\"'#98A2B3'\"></zen-icon>\n <span class=\"zen-module-popup__header-label\">{{ moduleLabel }}</span>\n </div>\n <div class=\"zen-module-popup__divider\"></div>\n <!-- Items -->\n <div class=\"zen-module-popup__items\">\n @for (item of items; track item) {\n <div\n class=\"zen-module-popup__item\"\n (click)=\"onItemClick(item)\">\n {{ item.label }}\n </div>\n }\n </div>\n </div>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ElementRef,\n AfterViewInit,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { ChartConfiguration, ChartData, ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { ZenChartStyle, ZenChartLegend, ZenChartDataset } from './zen-chart.types';\n\nconst DEFAULT_LINE_COLORS = ['#136AB6', '#48A2E8', '#12497A'];\nconst DEFAULT_BAR_COLORS = ['#105494', '#2188D9', '#88C1F1'];\n\n@Component({\n selector: 'zen-chart',\n templateUrl: './zen-chart.component.html',\n styleUrls: ['./zen-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenChartComponent implements OnChanges, AfterViewInit {\n\n @Input() chartStyle: ZenChartStyle = 'line';\n @Input() legend: ZenChartLegend = 'false';\n @Input() axisLabels: boolean = true;\n @Input() labels: string[] = [];\n @Input() datasets: ZenChartDataset[] = [];\n @Input() xAxisLabel: string = '';\n @Input() yAxisLabel: string = '';\n @Input() stacked: boolean = true;\n @Input() colors: string[];\n @Input() breakpoint: 'desktop' | 'mobile' = 'desktop';\n\n @Output() pointClick = new EventEmitter<{ datasetIndex: number; index: number; value: number }>();\n\n @ViewChild(BaseChartDirective) chart?: BaseChartDirective;\n\n chartData: ChartData = { labels: [], datasets: [] };\n chartOptions: ChartConfiguration['options'] = {};\n\n private initialized = false;\n\n private get defaultPalette(): string[] {\n return this.chartStyle === 'line' ? DEFAULT_LINE_COLORS : DEFAULT_BAR_COLORS;\n }\n\n get hostClasses(): string {\n const classes = ['zen-chart', `zen-chart--legend-${this.legend}`];\n if (this.breakpoint === 'mobile') classes.push('zen-chart--mobile');\n return classes.join(' ');\n }\n\n getColor(index: number): string {\n const palette = this.colors || this.defaultPalette;\n return palette[index % palette.length];\n }\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.buildChart();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.initialized) {\n this.buildChart();\n }\n }\n\n onChartClick(event: any): void {\n if (event?.active?.length) {\n const active = event.active[0];\n const value = this.datasets[active.datasetIndex]?.data[active.index];\n this.pointClick.emit({\n datasetIndex: active.datasetIndex,\n index: active.index,\n value: value ?? 0\n });\n }\n }\n\n private buildChart(): void {\n const palette = this.colors || this.defaultPalette;\n\n const datasets = this.datasets.map((ds, i) => {\n const color = ds.color || palette[i % palette.length];\n\n if (this.chartStyle === 'line') {\n return {\n label: ds.label,\n data: ds.data,\n borderColor: color,\n backgroundColor: i === 0 ? this.hexToRgba(color, 0.04) : 'transparent',\n fill: i === 0,\n tension: 0.4,\n pointRadius: 0,\n pointHoverRadius: 3,\n pointHoverBorderWidth: 2,\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: color,\n borderWidth: 1.5\n };\n }\n\n return {\n label: ds.label,\n data: ds.data,\n backgroundColor: color,\n borderRadius: 4,\n borderSkipped: 'bottom' as const,\n maxBarThickness: 32,\n categoryPercentage: 0.4,\n barPercentage: 0.9\n };\n });\n\n this.chartData = {\n labels: this.labels,\n datasets\n };\n\n const isStacked = this.chartStyle === 'bar' && this.stacked;\n\n this.chartOptions = {\n responsive: true,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n mode: 'index'\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n backgroundColor: '#101828',\n titleFont: { family: 'Inter', size: 12 },\n bodyFont: { family: 'Inter', size: 12 },\n padding: 8,\n cornerRadius: 8,\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: 8,\n boxPadding: 4\n }\n },\n scales: {\n x: {\n stacked: isStacked,\n grid: {\n display: false\n },\n border: {\n display: false\n },\n ticks: {\n font: { family: 'Inter', size: 12, weight: 400 },\n color: '#667085'\n }\n },\n y: {\n stacked: isStacked,\n grid: {\n color: '#F2F4F7'\n },\n border: {\n display: false,\n dash: [4, 4]\n },\n ticks: {\n font: { family: 'Inter', size: 12, weight: 400 },\n color: '#667085',\n callback: (value: any) => {\n return typeof value === 'number' ? value.toLocaleString() : value;\n }\n }\n }\n }\n };\n\n // Apply gradient fills for line charts after next render cycle\n if (this.chartStyle === 'line' && this.chart?.chart) {\n setTimeout(() => this.applyGradients(), 0);\n }\n }\n\n private applyGradients(): void {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n\n const ctx = chartInstance.ctx;\n const chartArea = chartInstance.chartArea;\n if (!chartArea) return;\n\n const palette = this.colors || this.defaultPalette;\n\n const firstDs = chartInstance.data.datasets[0] as any;\n if (firstDs) {\n const color = this.datasets[0]?.color || palette[0];\n const gradient = ctx.createLinearGradient(0, chartArea.top, 0, chartArea.bottom);\n gradient.addColorStop(0, this.hexToRgba(color, 0.06));\n gradient.addColorStop(1, this.hexToRgba(color, 0.01));\n firstDs.backgroundColor = gradient;\n }\n\n chartInstance.update('none');\n }\n\n private hexToRgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- Legend: top position -->\n @if (legend === 'top') {\n <div class=\"zen-chart__legend\">\n @for (ds of datasets; track ds; let i = $index) {\n <div class=\"zen-chart__legend-item\">\n <span class=\"zen-chart__legend-dot\" [style.background-color]=\"getColor(i)\"></span>\n <span class=\"zen-chart__legend-label\">{{ ds.label }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Y-axis label + chart canvas -->\n <div class=\"zen-chart__body\">\n @if (axisLabels && yAxisLabel) {\n <div class=\"zen-chart__y-label\">\n <span>{{ yAxisLabel }}</span>\n </div>\n }\n <div class=\"zen-chart__canvas-wrapper\">\n <canvas baseChart\n [type]=\"chartStyle\"\n [data]=\"chartData\"\n [options]=\"chartOptions\"\n (chartClick)=\"onChartClick($event)\">\n </canvas>\n </div>\n </div>\n\n <!-- X-axis label -->\n @if (axisLabels && xAxisLabel) {\n <div class=\"zen-chart__x-label\">\n <span>{{ xAxisLabel }}</span>\n </div>\n }\n\n <!-- Legend: right position -->\n @if (legend === 'right') {\n <div class=\"zen-chart__legend\">\n @for (ds of datasets; track ds; let i = $index) {\n <div class=\"zen-chart__legend-item\">\n <span class=\"zen-chart__legend-dot\" [style.background-color]=\"getColor(i)\"></span>\n <span class=\"zen-chart__legend-label\">{{ ds.label }}</span>\n </div>\n }\n </div>\n }\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStepBaseType\n} from './zen-progress-steps.types';\n\nexport { ZenStepBaseType } from './zen-progress-steps.types';\n\n@Component({\n selector: 'zen-step-base',\n templateUrl: './zen-step-base.component.html',\n styleUrls: ['./zen-step-base.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenStepBaseComponent {\n\n /** Layout type of the step */\n @Input() type: ZenStepBaseType = 'top';\n\n /** Size variant */\n @Input() size: ZenProgressStepsSize = 'sm';\n\n /** Theme variant */\n @Input() theme: ZenProgressStepsTheme = 'light';\n\n /** Status of this step */\n @Input() status: ZenStepStatus = 'incomplete';\n\n /** Step title */\n @Input() title: string = '';\n\n /** Step description / supporting text */\n @Input() description: string = '';\n\n /** Whether to show the vertical connector (icon-left type) */\n @Input() showConnector: boolean = false;\n\n get hostClasses(): string {\n return [\n 'zen-step-base',\n `zen-step-base--${this.type}`,\n `zen-step-base--${this.size}`,\n `zen-step-base--${this.theme}`,\n `zen-step-base--${this.status}`,\n ].join(' ');\n }\n\n get dotSize(): number {\n switch (this.size) {\n case 'sm': return 8;\n case 'md': return 10;\n case 'lg': return 12;\n }\n }\n\n get checkSize(): number {\n switch (this.size) {\n case 'sm': return 10;\n case 'md': return 14;\n case 'lg': return 16;\n }\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ============ TYPE: TOP (icons-centered) ============ -->\n @if (type === 'top') {\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n <!-- ============ TYPE: ICON ONLY (minimal-icons) ============ -->\n @if (type === 'icon-only') {\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n }\n\n <!-- ============ TYPE: TEXT LINE ============ -->\n @if (type === 'text-line') {\n <div class=\"zen-step-base__bar\"></div>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n <!-- ============ TYPE: ICON LEFT (icons-text vertical) ============ -->\n @if (type === 'icon-left') {\n <div class=\"zen-step-base__icon-col\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n @if (showConnector) {\n <div\n class=\"zen-step-base__connector\"\n [class.zen-step-base__connector--complete]=\"status === 'complete'\"\n [class.zen-step-base__connector--incomplete]=\"status !== 'complete'\">\n </div>\n }\n </div>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n</div>\n\n<!-- ============ ICON TEMPLATE ============ -->\n<ng-template #iconTpl>\n <div class=\"zen-step-base__icon\"\n [class.zen-step-base__icon--complete]=\"status === 'complete'\"\n [class.zen-step-base__icon--current]=\"status === 'current'\"\n [class.zen-step-base__icon--incomplete]=\"status === 'incomplete'\">\n <!-- Complete: checkmark -->\n @if (status === 'complete') {\n <svg\n [attr.width]=\"checkSize\" [attr.height]=\"checkSize\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.3334 4L6.00008 11.3333L2.66675 8\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n <!-- Current / Incomplete: dot -->\n @if (status !== 'complete') {\n <span\n class=\"zen-step-base__dot\"\n [style.width.px]=\"dotSize\"\n [style.height.px]=\"dotSize\">\n </span>\n }\n </div>\n</ng-template>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ZenProgressStepsType,\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStep\n} from './zen-progress-steps.types';\n\nexport {\n ZenProgressStepsType,\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStep\n} from './zen-progress-steps.types';\n\n@Component({\n selector: 'zen-progress-steps',\n templateUrl: './zen-progress-steps.component.html',\n styleUrls: ['./zen-progress-steps.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenProgressStepsComponent {\n\n @Input() type: ZenProgressStepsType = 'icons-centered';\n @Input() size: ZenProgressStepsSize = 'sm';\n @Input() theme: ZenProgressStepsTheme = 'light';\n @Input() steps: ZenStep[] = [];\n @Input() currentStep: number = 0;\n @Input() showText: boolean = true;\n @Input() connector: boolean = true;\n\n get hostClasses(): string {\n const classes = [\n 'zen-progress-steps',\n `zen-progress-steps--${this.type}`,\n `zen-progress-steps--${this.size}`,\n `zen-progress-steps--${this.theme}`,\n ];\n if (!this.showText) classes.push('zen-progress-steps--no-text');\n if (!this.connector) classes.push('zen-progress-steps--no-connector');\n return classes.join(' ');\n }\n\n getStepStatus(index: number): ZenStepStatus {\n if (index < this.currentStep) return 'complete';\n if (index === this.currentStep) return 'current';\n return 'incomplete';\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ============ ICONS CENTERED ============ -->\n @if (type === 'icons-centered') {\n <div class=\"zen-progress-steps__row\">\n <!-- Lines behind icons -->\n <div class=\"zen-progress-steps__lines\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n @if (!last) {\n <div\n class=\"zen-progress-steps__line\"\n [class.zen-progress-steps__line--complete]=\"i < currentStep\"\n [class.zen-progress-steps__line--incomplete]=\"i >= currentStep\">\n </div>\n }\n }\n </div>\n <!-- Step columns -->\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"top\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n\n <!-- ============ MINIMAL ICONS / MINIMAL ICONS CONNECTED ============ -->\n @if (type === 'minimal-icons' || type === 'minimal-icons-connected') {\n <div class=\"zen-progress-steps__row zen-progress-steps__row--inline\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n <zen-step-base class=\"zen-progress-steps__step--minimal\"\n type=\"icon-only\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\">\n </zen-step-base>\n @if (!last) {\n <div\n class=\"zen-progress-steps__line zen-progress-steps__line--horizontal\"\n [class.zen-progress-steps__line--complete]=\"i < currentStep\"\n [class.zen-progress-steps__line--incomplete]=\"i >= currentStep\">\n </div>\n }\n }\n </div>\n <!-- Optional text row -->\n @if (showText) {\n <div class=\"zen-progress-steps__text-row\">\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__text-step\"\n type=\"text-line\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n }\n\n <!-- ============ TEXT LINE ============ -->\n @if (type === 'text-line') {\n <div class=\"zen-progress-steps__row zen-progress-steps__row--text-line\">\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"text-line\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n\n <!-- ============ ICONS TEXT (Vertical) ============ -->\n @if (type === 'icons-text') {\n <div class=\"zen-progress-steps__column\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"icon-left\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\"\n [showConnector]=\"connector && !last\">\n </zen-step-base>\n }\n </div>\n }\n\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ZenduCheckboxComponent } from './checkbox/zendu-checkbox.component';\nimport { ZenduColorPickerComponent } from './colorpicker/zendu-colorpicker.component';\nimport { ZenduColumnConfigurationComponent } from './column-configuration/zendu-column-configuration.component';\nimport { ZenduDatepickerComponent } from './datepicker/zendu-datepicker.component';\nimport { ZenduFilterComponent } from './filter/zendu-filter.component';\nimport { ZenduGroupsComponent } from './groups/zendu-groups.component';\nimport { ZenduPaginationBarComponent } from './pagination-bar/zendu-pagination-bar.component';\nimport { ZenduPhoneInputComponent } from './phone-input/zendu-phone-input.component';\nimport { ZenduRadioButtonComponent } from './radio-button/radio-button.component';\nimport { ZenduSearchBoxComponent } from './search-box/zendu-search-box.component';\nimport { ZenduSelectComponent } from './select/zendu-select.component';\nimport { ZenduSelectOptionDirective } from './select/templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './select/templates/zendu-select-value.directive';\nimport { ZenduSortHeaderComponent } from './sort-header/zendu-sort-header.component';\nimport { ZenduToggleSlideComponent } from './toggle-slide/zendu-toggle-slide.component';\nimport { ZenduToggleComponent } from './toggle/zendu-toggle.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ZenduIconComponent } from './icon/zendu-icon.component';\nimport { ZenduCardBlockComponent } from './card-block/zendu-card-block.component';\nimport { ZenduMapPreviewComponent } from './map-preview/zendu-map-preview.component';\nimport { ZenduSpinner } from './spinner/zendu-spinner.component';\nimport { ZenduDocScanner } from './doc-scanner/zendu-doc-scanner.component';\nimport { ZenduMapComponent } from './map/zendu-map.component';\nimport { ZenduFileUpload } from './file-upload/zendu-file-upload.component';\nimport { ZenduProgress } from './progress/zendu-progress.component';\nimport { OpenCVService } from './services/opencv.service';\nimport { ZenduLocationSearch } from './location-search/zendu-location-search.component';\nimport { SignaturePadComponent } from '@almothafar/angular-signature-pad';\nimport { provideHttpClient, withInterceptorsFromDi, withXhr } from '@angular/common/http';\nimport { ZenLiveViewPlayerComponent } from './live-view-player/live-view-player/live-view-player.component';\nimport { ZenHTML5VideoPlayerComponent } from './live-view-player/html5-video-player/html5-video-player.component';\nimport { ZenFlvPlayerComponent } from './live-view-player/flv-player/flv-player.component';\nimport { ZenHlsPlayerComponent } from './live-view-player/hls-player/hls-player.component';\nimport { ZenWebRTCPlayerComponent } from './live-view-player/web-rtc/web-rtc-player.component';\nimport { ZenSnapshotPlayerComponent } from './live-view-player/snapshot-player/snapshot-player.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { ZenduSelectButtonDirective } from './select/templates/zendu-select-button.directive';\nimport { ZenduTimepickerComponent } from './timepicker/zendu-timepicker.component';\nimport { ZenduDatePickerDropdownComponent } from './date-picker-dropdown/zendu-date-picker-dropdown.component';\nimport { ZenduFileUploaderComponent } from './file-uploader/zendu-file-uploader.component';\nimport { ZenduAvatarComponent } from './avatar/zendu-avatar.component';\nimport { ZenduAvatarGroupComponent } from './avatar/zendu-avatar-group.component';\nimport { ZenduAvatarLabelGroupComponent } from './avatar/zendu-avatar-label-group.component';\nimport { ZenduAvatarProfilePhotoComponent } from './avatar/zendu-avatar-profile-photo.component';\nimport { ZenduSliderComponent } from './slider/zendu-slider.component';\nimport { ZenBadgeComponent } from './badge/zen-badge.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { ZenButtonComponent } from './button/zen-button.component';\nimport { ZenduInputComponent } from './input/zendu-input.component';\nimport { ZenDropdownMenuComponent } from './dropdown-menu/zen-dropdown-menu.component';\nimport { ZenTooltipDirective } from './tooltip/zen-tooltip.directive';\nimport { ZenTooltipPopupComponent } from './tooltip/zen-tooltip.component';\nimport { ZenEldStatusComponent } from './eld-status/zen-eld-status.component';\nimport { ZenNavSearchComponent } from './nav-search/zen-nav-search.component';\nimport { ZenSubmoduleItemComponent } from './submodule-item/zen-submodule-item.component';\nimport { ZenSubpageItemComponent } from './subpage-item/zen-subpage-item.component';\nimport { ZenModulePopupComponent } from './module-popup/zen-module-popup.component';\nimport { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts';\nimport { ZenChartComponent } from './chart/zen-chart.component';\nimport { ZenProgressStepsComponent } from './progress-steps/zen-progress-steps.component';\nimport { ZenStepBaseComponent } from './progress-steps/zen-step-base.component';\nimport { ZenSnackbarComponent } from './snackbar/zen-snackbar.component';\n\n@NgModule({ declarations: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenHTML5VideoPlayerComponent,\n ZenFlvPlayerComponent,\n ZenHlsPlayerComponent,\n ZenSnapshotPlayerComponent,\n ZenWebRTCPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduDatePickerDropdownComponent,\n ZenduFileUploaderComponent,\n ZenduAvatarComponent,\n ZenduAvatarGroupComponent,\n ZenduAvatarLabelGroupComponent,\n ZenduAvatarProfilePhotoComponent,\n ZenduSliderComponent,\n ZenduInputComponent,\n ZenButtonComponent,\n ZenDropdownMenuComponent,\n ZenBadgeComponent,\n ZenTooltipDirective,\n ZenTooltipPopupComponent,\n ZenEldStatusComponent,\n ZenNavSearchComponent,\n ZenSubmoduleItemComponent,\n ZenSubpageItemComponent,\n ZenModulePopupComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent,\n ZenSnackbarComponent\n ],\n exports: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduDatePickerDropdownComponent,\n ZenduFileUploaderComponent,\n ZenduAvatarComponent,\n ZenduAvatarGroupComponent,\n ZenduAvatarLabelGroupComponent,\n ZenduAvatarProfilePhotoComponent,\n ZenduSliderComponent,\n ZenduInputComponent,\n ZenButtonComponent,\n ZenDropdownMenuComponent,\n ZenBadgeComponent,\n ZenTooltipDirective,\n ZenTooltipPopupComponent,\n ZenEldStatusComponent,\n ZenNavSearchComponent,\n ZenSubmoduleItemComponent,\n ZenSubpageItemComponent,\n ZenModulePopupComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent,\n ZenSnackbarComponent\n ], imports: [CommonModule,\n FormsModule,\n DragDropModule,\n SignaturePadComponent,\n ReactiveFormsModule,\n OverlayModule,\n BaseChartDirective,\n TranslateModule.forRoot({\n loader: provideTranslateHttpLoader({\n prefix: '/assets/i18n/',\n suffix: '.json'\n })\n })], providers: [\n OpenCVService,\n provideCharts(withDefaultRegisterables()),\n provideHttpClient(withXhr(), withInterceptorsFromDi()),\n ] })\nexport class NgZenduitModule { }\n\n","/*\n * Public API of ng-zenduit\n */\nexport * from \"./lib/services/zendu-notify.service\";\nexport * from \"./lib/overlay/zendu-overlay.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/overlay/zendu-overlay.types';\nexport * from './lib/file-uploader/file-uploader.types';\n\n/**\n * Components\n */\nexport * from \"./lib/checkbox/zendu-checkbox.component\";\nexport * from \"./lib/colorpicker/zendu-colorpicker.component\";\nexport * from \"./lib/column-configuration/zendu-column-configuration.component\";\nexport * from \"./lib/datepicker/zendu-datepicker.component\";\nexport * from \"./lib/filter/zendu-filter.component\";\nexport * from \"./lib/groups/zendu-groups.component\";\nexport * from \"./lib/pagination-bar/zendu-pagination-bar.component\";\nexport * from \"./lib/phone-input/zendu-phone-input.component\";\nexport * from \"./lib/radio-button/radio-button.component\";\nexport * from \"./lib/search-box/zendu-search-box.component\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/select/templates/zendu-select-value.directive\";\nexport * from \"./lib/select/templates/zendu-select-option.directive\";\nexport * from \"./lib/select/templates/zendu-select-button.directive\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/sort-header/zendu-sort-header.component\";\nexport * from \"./lib/toggle/zendu-toggle.component\";\nexport * from \"./lib/toggle-slide/zendu-toggle-slide.component\";\nexport * from \"./lib/icon/zendu-icon.component\";\nexport * from \"./lib/icon/icon-config\";\nexport * from \"./lib/card-block/zendu-card-block.component\";\nexport * from \"./lib/map-preview/zendu-map-preview.component\";\nexport * from \"./lib/spinner/zendu-spinner.component\";\nexport * from \"./lib/doc-scanner/zendu-doc-scanner.component\";\nexport * from \"./lib/map/zendu-map.component\";\nexport * from \"./lib/file-upload/zendu-file-upload.component\";\nexport * from \"./lib/progress/zendu-progress.component\";\nexport * from \"./lib/location-search/zendu-location-search.component\";\nexport * from \"./lib/live-view-player/live-view-player/live-view-player.component\";\nexport * from \"./lib/timepicker/zendu-timepicker.component\";\nexport * from \"./lib/date-picker-dropdown/zendu-date-picker-dropdown.component\";\nexport * from \"./lib/file-uploader/zendu-file-uploader.component\";\nexport * from \"./lib/avatar/zendu-avatar.component\";\nexport * from \"./lib/avatar/zendu-avatar-group.component\";\nexport * from \"./lib/avatar/zendu-avatar-label-group.component\";\nexport * from \"./lib/avatar/zendu-avatar-profile-photo.component\";\nexport * from \"./lib/slider/zendu-slider.component\";\nexport * from \"./lib/button/zen-button.component\";\nexport * from \"./lib/input/zendu-input.component\";\nexport * from \"./lib/dropdown-menu/zen-dropdown-menu.component\";\nexport * from \"./lib/badge/zen-badge.component\";\nexport * from \"./lib/tooltip/zen-tooltip.directive\";\nexport * from \"./lib/tooltip/zen-tooltip.component\";\nexport * from \"./lib/eld-status/zen-eld-status.component\";\nexport * from \"./lib/nav-search/zen-nav-search.component\";\nexport * from \"./lib/submodule-item/zen-submodule-item.component\";\nexport * from \"./lib/subpage-item/zen-subpage-item.component\";\nexport * from \"./lib/module-popup/zen-module-popup.component\";\nexport * from \"./lib/chart/zen-chart.component\";\nexport * from \"./lib/chart/zen-chart.types\";\nexport * from \"./lib/progress-steps/zen-progress-steps.component\";\nexport * from \"./lib/progress-steps/zen-step-base.component\";\nexport * from \"./lib/snackbar/zen-snackbar.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.ZenduInputComponent","i3","i2","i3.ZenduCheckboxComponent","i4.ZenduSearchBoxComponent","i4","i5.ZenduIconComponent","i2.ZenduCheckboxComponent","i3.ZenduSearchBoxComponent","i3.ZenduIconComponent","i1.ZenduIconComponent","i4.ZenduToggleComponent","i5.ZenduSearchBoxComponent","i6.ZenduGroupsComponent","i7.ZenduRadioButtonComponent","i8.ZenduIconComponent","i9.ZenduSpinner","i10.ZenduDatePickerDropdownComponent","i11.ZenduInputComponent","i12.ZenButtonComponent","i13","i1.ZenduOverlayService","i4.ZenduCheckboxComponent","i5.ZenduGroupsComponent","i6.ZenduIconComponent","i7.ZenduSpinner","i8","i1.ZenduSelectComponent","i2.ZenButtonComponent","LocalLock","i1.ScriptLoader","i1.OpenCVService","i2.ZenduIconComponent","i1.GeocodingService","i4.ZenduIconComponent","i1.ZenHttpService","i1.ZenHTML5VideoPlayerComponent","i2.ZenFlvPlayerComponent","i3.ZenHlsPlayerComponent","i4.ZenSnapshotPlayerComponent","i5.ZenWebRTCPlayerComponent","i2.ZenduSpinner","i2.ZenduAvatarComponent","i1.ZenduCheckboxComponent","i2.ZenEldStatusComponent","i1.ZenStepBaseComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-zenduit.mjs","sources":["../../../projects/ng-zenduit/src/lib/snackbar/zen-snackbar.component.ts","../../../projects/ng-zenduit/src/lib/snackbar/zen-snackbar.component.html","../../../projects/ng-zenduit/src/lib/services/zendu-notify.service.ts","../../../projects/ng-zenduit/src/lib/overlay/zendu-overlay.service.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.ts","../../../projects/ng-zenduit/src/lib/checkbox/zendu-checkbox.component.html","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.ts","../../../projects/ng-zenduit/src/lib/colorpicker/zendu-colorpicker.component.html","../../../projects/ng-zenduit/src/lib/util.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.component.ts","../../../projects/ng-zenduit/src/lib/input/zendu-input.component.html","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.ts","../../../projects/ng-zenduit/src/lib/search-box/zendu-search-box.component.html","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.ts","../../../projects/ng-zenduit/src/lib/column-configuration/zendu-column-configuration.component.html","../../../projects/ng-zenduit/src/lib/datepicker/datepicker.ts","../../../projects/ng-zenduit/src/lib/icon/icon-config.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.ts","../../../projects/ng-zenduit/src/lib/icon/zendu-icon.component.html","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.ts","../../../projects/ng-zenduit/src/lib/datepicker/zendu-datepicker.component.html","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.component.ts","../../../projects/ng-zenduit/src/lib/toggle/zendu-toggle.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/date-picker-dropdown/date-picker-dropdown.types.ts","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.ts","../../../projects/ng-zenduit/src/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.html","../../../projects/ng-zenduit/src/lib/button/zen-button.component.ts","../../../projects/ng-zenduit/src/lib/button/zen-button.component.html","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.ts","../../../projects/ng-zenduit/src/lib/filter/zendu-filter.component.html","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-option.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-value.directive.ts","../../../projects/ng-zenduit/src/lib/select/templates/zendu-select-button.directive.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.ts","../../../projects/ng-zenduit/src/lib/select/zendu-select.component.html","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.ts","../../../projects/ng-zenduit/src/lib/pagination-bar/zendu-pagination-bar.component.html","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.ts","../../../projects/ng-zenduit/src/lib/phone-input/zendu-phone-input.component.html","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.ts","../../../projects/ng-zenduit/src/lib/sort-header/zendu-sort-header.component.html","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.ts","../../../projects/ng-zenduit/src/lib/toggle-slide/zendu-toggle-slide.component.html","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.ts","../../../projects/ng-zenduit/src/lib/card-block/zendu-card-block.component.html","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.ts","../../../projects/ng-zenduit/src/lib/map-preview/zendu-map-preview.component.html","../../../projects/ng-zenduit/src/lib/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/script.loader.service.ts","../../../projects/ng-zenduit/src/lib/services/opencv.service.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.ts","../../../projects/ng-zenduit/src/lib/doc-scanner/zendu-doc-scanner.component.html","../../../projects/ng-zenduit/src/lib/services/map.service.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.ts","../../../projects/ng-zenduit/src/lib/map/zendu-map.component.html","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.ts","../../../projects/ng-zenduit/src/lib/file-upload/zendu-file-upload.component.html","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.ts","../../../projects/ng-zenduit/src/lib/progress/zendu-progress.component.html","../../../projects/ng-zenduit/src/lib/services/geoconding.service.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.ts","../../../projects/ng-zenduit/src/lib/location-search/zendu-location-search.component.html","../../../projects/ng-zenduit/src/lib/core/cevent.ts","../../../projects/ng-zenduit/src/lib/live-view-player/player.control.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/html5-video-player/html5-video-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/flv-player/flv-player.component.html","../../../projects/ng-zenduit/src/lib/core/thread.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/hls-player/hls-player.component.html","../../../projects/ng-zenduit/src/lib/core/local.lock.ts","../../../projects/ng-zenduit/src/lib/services/http.service.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/snapshot-player/snapshot-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/web-rtc/web-rtc-player.component.html","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.ts","../../../projects/ng-zenduit/src/lib/live-view-player/live-view-player/live-view-player.component.html","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.ts","../../../projects/ng-zenduit/src/lib/timepicker/zendu-timepicker.component.html","../../../projects/ng-zenduit/src/lib/file-uploader/zendu-file-uploader.component.ts","../../../projects/ng-zenduit/src/lib/file-uploader/zendu-file-uploader.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-group.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-group.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-label-group.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-label-group.component.html","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-profile-photo.component.ts","../../../projects/ng-zenduit/src/lib/avatar/zendu-avatar-profile-photo.component.html","../../../projects/ng-zenduit/src/lib/slider/zendu-slider.component.ts","../../../projects/ng-zenduit/src/lib/slider/zendu-slider.component.html","../../../projects/ng-zenduit/src/lib/badge/zen-badge.component.ts","../../../projects/ng-zenduit/src/lib/badge/zen-badge.component.html","../../../projects/ng-zenduit/src/lib/dropdown-menu/zen-dropdown-menu.component.ts","../../../projects/ng-zenduit/src/lib/dropdown-menu/zen-dropdown-menu.component.html","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.component.ts","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.component.html","../../../projects/ng-zenduit/src/lib/tooltip/zen-tooltip.directive.ts","../../../projects/ng-zenduit/src/lib/eld-status/zen-eld-status.component.ts","../../../projects/ng-zenduit/src/lib/eld-status/zen-eld-status.component.html","../../../projects/ng-zenduit/src/lib/nav-search/zen-nav-search.component.ts","../../../projects/ng-zenduit/src/lib/nav-search/zen-nav-search.component.html","../../../projects/ng-zenduit/src/lib/submodule-item/zen-submodule-item.component.ts","../../../projects/ng-zenduit/src/lib/submodule-item/zen-submodule-item.component.html","../../../projects/ng-zenduit/src/lib/subpage-item/zen-subpage-item.component.ts","../../../projects/ng-zenduit/src/lib/subpage-item/zen-subpage-item.component.html","../../../projects/ng-zenduit/src/lib/module-popup/zen-module-popup.component.ts","../../../projects/ng-zenduit/src/lib/module-popup/zen-module-popup.component.html","../../../projects/ng-zenduit/src/lib/chart/zen-chart.component.ts","../../../projects/ng-zenduit/src/lib/chart/zen-chart.component.html","../../../projects/ng-zenduit/src/lib/progress-steps/zen-step-base.component.ts","../../../projects/ng-zenduit/src/lib/progress-steps/zen-step-base.component.html","../../../projects/ng-zenduit/src/lib/progress-steps/zen-progress-steps.component.ts","../../../projects/ng-zenduit/src/lib/progress-steps/zen-progress-steps.component.html","../../../projects/ng-zenduit/src/lib/ng-zenduit.module.ts","../../../projects/ng-zenduit/src/public-api.ts","../../../projects/ng-zenduit/src/ng-zenduit.ts"],"sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n} from '@angular/core';\n\nexport type ZenSnackbarType = 'info' | 'neutral' | 'success' | 'warn' | 'error';\n\n/**\n * Presentational card rendered by {@link ZenNotifyService} through a CDK overlay.\n * It draws the status icon, the message and an optional dismiss button, styled\n * per the ZenduONE design system (Untitled UI \"Alert\").\n */\n@Component({\n selector: 'zen-snackbar',\n templateUrl: './zen-snackbar.component.html',\n styleUrls: ['./zen-snackbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class ZenSnackbarComponent {\n @Input() message = '';\n @Input() type: ZenSnackbarType = 'info';\n @Input() hasDismiss = true;\n\n /** Emitted when the user clicks the dismiss button. */\n @Output() dismiss = new EventEmitter<void>();\n\n onDismiss(): void {\n this.dismiss.emit();\n }\n}\n","<div\n class=\"zen-snackbar\"\n role=\"alert\"\n [class.zen-snackbar--info]=\"type === 'info'\"\n [class.zen-snackbar--neutral]=\"type === 'neutral'\"\n [class.zen-snackbar--success]=\"type === 'success'\"\n [class.zen-snackbar--warn]=\"type === 'warn'\"\n [class.zen-snackbar--error]=\"type === 'error'\">\n\n <!-- Status icon -->\n <span class=\"zen-snackbar__icon\">\n @switch (type) {\n @case ('success') {\n <!-- check-circle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 12L10.5 15L16.5 9M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @case ('warn') {\n <!-- alert-triangle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 9V13M12 17H12.01M10.2899 3.86001L1.81995 18C1.64536 18.3024 1.55291 18.6453 1.55193 18.9945C1.55096 19.3437 1.6415 19.6871 1.81439 19.9905C1.98728 20.2939 2.23673 20.5468 2.53774 20.7239C2.83875 20.901 3.1808 20.9962 3.52995 21H20.4699C20.8191 20.9962 21.1611 20.901 21.4621 20.7239C21.7632 20.5468 22.0126 20.2939 22.1855 19.9905C22.3584 19.6871 22.4489 19.3437 22.448 18.9945C22.447 18.6453 22.3545 18.3024 22.1799 18L13.7099 3.86001C13.5317 3.56611 13.2807 3.32313 12.9812 3.15449C12.6817 2.98585 12.3438 2.89726 11.9999 2.89726C11.6561 2.89726 11.3182 2.98585 11.0187 3.15449C10.7192 3.32313 10.4682 3.56611 10.2899 3.86001Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @case ('error') {\n <!-- alert-circle -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 8V12M12 16H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n @default {\n <!-- info (also used for the 'neutral' variant) -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 16V12M12 8H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n }\n }\n </span>\n\n <!-- Message -->\n <p class=\"zen-snackbar__message\">{{ message }}</p>\n\n <!-- Dismiss -->\n @if (hasDismiss) {\n <button\n class=\"zen-snackbar__close\"\n type=\"button\"\n aria-label=\"Dismiss\"\n (click)=\"onDismiss()\">\n <!-- x -->\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n }\n</div>\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ZenSnackbarComponent, ZenSnackbarType } from '../snackbar/zen-snackbar.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenNotifyService {\n\n private readonly _overlay = inject(Overlay);\n private readonly _injector = inject(Injector);\n\n /** The currently shown snackbar overlay, if any. */\n private _overlayRef: OverlayRef | null = null;\n /** Auto-dismiss timer handle for the current snackbar. */\n private _timer: ReturnType<typeof setTimeout> | null = null;\n\n public info(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'info', duration, hasDismiss);\n }\n\n public neutral(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'neutral', duration, hasDismiss);\n }\n\n public success(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.log(msg);\n this._show(msg, 'success', duration, hasDismiss);\n }\n\n public warn(\n msg: string,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.warn(msg);\n this._show(msg, 'warn', duration, hasDismiss);\n }\n\n public error(\n err: unknown,\n duration: number = 5000,\n hasDismiss: boolean = true\n ): void {\n console.error(err);\n this._show(this.getErrorMessage(err), 'error', duration, hasDismiss);\n }\n\n /**\n * Renders the snackbar through a CDK overlay so it shares the browser top\n * layer with CDK dialogs and always paints above them. Only one snackbar is\n * shown at a time — a new call replaces the previous one.\n */\n private _show(\n message: string,\n type: ZenSnackbarType,\n duration: number,\n hasDismiss: boolean\n ): void {\n // Replace any snackbar that is currently on screen.\n this._dismiss();\n\n const positionStrategy = this._overlay\n .position()\n .global()\n .top('24px')\n .centerHorizontally();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.noop(),\n panelClass: 'zen-snackbar-overlay',\n });\n\n const portal = new ComponentPortal(ZenSnackbarComponent, null, this._injector);\n const snackbarRef = this._overlayRef.attach(portal);\n\n snackbarRef.instance.message = message;\n snackbarRef.instance.type = type;\n snackbarRef.instance.hasDismiss = hasDismiss;\n snackbarRef.instance.dismiss.subscribe(() => this._dismiss());\n snackbarRef.changeDetectorRef.markForCheck();\n\n if (duration && duration > 0) {\n this._timer = setTimeout(() => this._dismiss(), duration);\n }\n }\n\n /** Disposes the active snackbar overlay and clears the auto-dismiss timer. */\n private _dismiss(): void {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n private getErrorMessage(ex: any): string {\n if (!ex) {\n return '';\n }\n\n if (typeof ex === 'string') {\n return ex;\n }\n else if (typeof ex.error === 'string') {\n return ex.error;\n }\n else if (ex.error && ex.error.message) {\n return ex.error.message;\n }\n else if (ex.message) {\n return ex.message;\n }\n else if (ex.status && ex.statusText) {\n return `Http error ${ex.status} ${ex.statusText}`;\n }\n else if (ex.statusText) {\n return ex.statusText;\n }\n else {\n console.warn('Can\\'t extract error message from object:', ex);\n return '';\n }\n }\n}\n","import { ElementRef, Injectable, NgZone } from '@angular/core';\nimport {\n ConnectedPosition,\n Overlay,\n OverlayConfig,\n OverlayRef\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport {\n ZenConnectedPanelConfig,\n ZenConnectedPanelRef,\n ZenPanelCloseReason\n} from './zendu-overlay.types';\n\nconst DEFAULT_OFFSET_Y = 4;\nconst DEFAULT_VIEWPORT_MARGIN = 8;\n\n/**\n * Shared overlay primitive for the whole library. Opens a floating panel\n * anchored to a trigger using CDK Overlay, with viewport-aware connected\n * positioning that:\n * - renders in the overlay container, so it is never clipped by an ancestor's\n * `overflow` (cards, scroll areas) or by the viewport edge;\n * - prefers opening below the trigger and flips above when there isn't room;\n * - pushes itself into the viewport and shrinks to fit (`flexibleDimensions`),\n * so the panel scrolls internally instead of overflowing;\n * - tracks the trigger on scroll/resize (or closes, if asked).\n *\n * Consumers keep their own open/close state and panel markup — they call\n * {@link openConnectedPanel} and react to {@link ZenConnectedPanelRef.closed}.\n */\n@Injectable({ providedIn: 'root' })\nexport class ZenduOverlayService {\n constructor(private _overlay: Overlay, private _ngZone: NgZone) {}\n\n openConnectedPanel(config: ZenConnectedPanelConfig): ZenConnectedPanelRef {\n const originEl = config.origin instanceof ElementRef\n ? config.origin.nativeElement\n : config.origin;\n const offsetY = config.offsetY ?? DEFAULT_OFFSET_Y;\n\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(originEl)\n .withPositions(config.positions ?? this._positions(offsetY))\n .withPush(true)\n .withFlexibleDimensions(true)\n .withGrowAfterOpen(true)\n .withViewportMargin(config.viewportMargin ?? DEFAULT_VIEWPORT_MARGIN);\n\n // Scroll is handled by our own capture-phase listener (set up below),\n // which — unlike CDK's reposition/close strategies — also reacts to\n // nested/non-cdkScrollable containers. Use a noop strategy so CDK\n // doesn't additionally react and double the work on every scroll.\n const scrollStrategy = this._overlay.scrollStrategies.noop();\n\n const overlayConfig: OverlayConfig = {\n positionStrategy,\n scrollStrategy,\n hasBackdrop: false,\n disposeOnNavigation: true,\n panelClass: this._panelClasses(config.panelClass)\n };\n\n // Width: match the trigger by default; otherwise honour the override.\n // 'auto' leaves width unset so the panel sizes to its content.\n const width = config.width ?? 'origin';\n if (width === 'origin') {\n overlayConfig.width = originEl.getBoundingClientRect().width;\n } else if (width !== 'auto') {\n overlayConfig.width = width;\n }\n if (config.minWidth != null) {\n overlayConfig.minWidth = config.minWidth;\n }\n\n const overlayRef = this._overlay.create(overlayConfig);\n overlayRef.attach(new TemplatePortal(config.content, config.viewContainerRef));\n\n const closed = new Subject<ZenPanelCloseReason>();\n const destroyed = new Subject<void>();\n\n // Ignore the pointer interaction that OPENED the panel. open() is\n // commonly called from inside a click handler — the picker's own\n // trigger, or a DIFFERENT element entirely (e.g. a host select's\n // \"Custom\" option that reveals a date-picker and calls open()). That\n // click bubbles to the document, and when another overlay is already\n // open the shared CDK outside-click listener reports it as an \"outside\"\n // event in the SAME task — dismissing the panel the instant it opens.\n // A real outside click happens in a later task, so clearing the flag on\n // the next macrotask lets those through while swallowing the opener.\n let ignoreOpeningInteraction = true;\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => { ignoreOpeningInteraction = false; }, 0);\n });\n\n // Outside click — also ignore clicks on the trigger itself, so the\n // consumer's own toggle handler isn't fighting a close from here.\n overlayRef.outsidePointerEvents()\n .pipe(\n filter(event => !ignoreOpeningInteraction && !originEl.contains(event.target as Node)),\n takeUntil(destroyed)\n )\n .subscribe(() => closed.next('outside'));\n\n // Escape key.\n overlayRef.keydownEvents()\n .pipe(\n filter(event => event.keyCode === ESCAPE),\n takeUntil(destroyed)\n )\n .subscribe(() => closed.next('escape'));\n\n // Detach (e.g. scrollBehavior: 'close', or navigation).\n overlayRef.detachments()\n .pipe(takeUntil(destroyed))\n .subscribe(() => closed.next('detach'));\n\n // Keep the panel anchored while open. CDK's reposition/close scroll\n // strategies react only to its ScrollDispatcher — a BUBBLE-phase global\n // `document` scroll listener plus elements explicitly tagged\n // `cdkScrollable`. But `scroll` does not bubble, so scrolling a nested\n // `overflow:auto` container or a MatDialog body (which is not a\n // registered cdkScrollable) never reaches that listener and the panel\n // freezes / detaches. A CAPTURE-phase document listener sees scroll from\n // ANY ancestor on the way down, closing that blind spot. It runs outside\n // Angular and is rAF-throttled, so scrolling stays smooth.\n let rafId: number | null = null;\n const schedule = (action: () => void) => {\n if (rafId != null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n action();\n });\n };\n const onScroll = (event: Event) => {\n // Ignore scrolling *inside* the panel (e.g. the options list / a\n // calendar's own overflow): the trigger hasn't moved, so there's\n // nothing to reposition — and for 'close' it must not self-close.\n if (overlayRef.overlayElement?.contains(event.target as Node)) return;\n if (config.scrollBehavior === 'close') {\n schedule(() => this._ngZone.run(() => {\n if (overlayRef.hasAttached()) {\n overlayRef.detach();\n }\n }));\n } else {\n schedule(() => overlayRef.updatePosition());\n }\n };\n const onResize = () => schedule(() => overlayRef.updatePosition());\n const removeViewportListeners = () => {\n document.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n if (rafId != null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n };\n this._ngZone.runOutsideAngular(() => {\n // capture: true → receives scroll from any nested container.\n document.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n });\n\n return {\n overlayRef,\n closed: closed.asObservable(),\n updatePosition: () => overlayRef.updatePosition(),\n close: () => {\n removeViewportListeners();\n destroyed.next();\n destroyed.complete();\n if (overlayRef.hasAttached()) {\n overlayRef.detach();\n }\n overlayRef.dispose();\n closed.complete();\n }\n };\n }\n\n /**\n * Fallback order: below the trigger (start- then end-aligned), then above\n * (start- then end-aligned). CDK picks the first that fits; `withPush`\n * nudges it fully on-screen.\n */\n private _positions(offsetY: number): ConnectedPosition[] {\n return [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offsetY },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offsetY }\n ];\n }\n\n private _panelClasses(extra?: string | string[]): string[] {\n const classes = ['zen-overlay-panel'];\n if (Array.isArray(extra)) {\n classes.push(...extra);\n } else if (extra) {\n classes.push(extra);\n }\n return classes;\n }\n}\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-checkbox',\n templateUrl: './zendu-checkbox.component.html',\n styleUrls: ['./zendu-checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduCheckboxComponent {\n\n @Input() checked: boolean;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n @Input() label: string | number = 'Enable';\n\n @Input() labelColor: string = \"\";\n\n @Input() disabled = false;\n\n @Input() disableValueChange = false;\n\n @Input() indeterminate = false;\n\n @Input() imageUrl: string;\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() supportingText: string;\n\n /**\n * Toggle state\n */\n public toggle(): void {\n if (this.disabled || this.disableValueChange) {\n return;\n }\n\n this.checked = !this.checked;\n this.indeterminate = false;\n\n this.checkedChange.emit(this.checked);\n }\n}\n","<div class=\"checkbox-component\"\n [ngClass]=\"{'app-disabled': disabled, 'checkbox-md': size === 'md'}\"\n (click)=\"toggle()\">\n <button class=\"app-checkbox\"\n [disabled]=\"disabled\"\n [ngClass]=\"{ 'app-checked': checked && !indeterminate, 'app-indeterminate': indeterminate }\">\n @if (checked && !indeterminate) {\n <i\n class=\"material-icons app-checkbox-icon\">done</i>\n }\n @if (indeterminate) {\n <i\n class=\"material-icons app-checkbox-icon\">remove</i>\n }\n </button>\n @if (label || supportingText) {\n <div class=\"app-checkbox-text-wrap\"\n >\n @if (label) {\n <div class=\"app-checkbox-label\"\n [ngStyle]=\"{'color': labelColor }\">\n @if (imageUrl) {\n <img class=\"checkbox-image\"\n [src]=\"imageUrl\"\n >\n }\n {{ label }}\n </div>\n }\n @if (supportingText) {\n <div class=\"app-checkbox-supporting-text\"\n >\n {{ supportingText }}\n </div>\n }\n </div>\n }\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-colorpicker',\n templateUrl: './zendu-colorpicker.component.html',\n styleUrls: ['./zendu-colorpicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduColorPickerComponent implements OnChanges {\n\n @Input() color: string;\n\n @Output() colorChange = new EventEmitter<string>();\n\n @Input() icon = \"text\";\n\n @Input() customTarget: HTMLElement;\n\n @Input() showNone = true;\n\n public opened = false;\n\n public menuLeft = \"0px\";\n\n public menuTop = \"\";\n\n public menuBottom = \"\";\n public colorsRows: { colors: string[] }[] = [\n { colors: [\"#5B0F00\", \"#660000\", \"#783F04\", \"#7F6000\", \"#274E13\", \"#0C343D\", \"#1C4587\", \"#073763\", \"#20124D\", \"#4C1130\"] },\n { colors: [\"#85200C\", \"#990000\", \"#B45F06\", \"#BF9000\", \"#38761D\", \"#134F5C\", \"#1155CC\", \"#0B5394\", \"#351C75\", \"#741B47\"] },\n { colors: [\"#A61C00\", \"#CC0000\", \"#E69138\", \"#F1C232\", \"#6AA84F\", \"#45818E\", \"#3C78D8\", \"#3D85C6\", \"#674EA7\", \"#A64D79\"] },\n { colors: [\"#CC4125\", \"#E06666\", \"#F6B26B\", \"#FFD966\", \"#93C47D\", \"#76A5AF\", \"#6D9EEB\", \"#6FA8DC\", \"#8E7CC3\", \"#C27BA0\"] },\n { colors: [\"#DD7E6B\", \"#EA9999\", \"#F9CB9C\", \"#FFE599\", \"#B6D7A8\", \"#A2C4C9\", \"#A4C2F4\", \"#9FC5E8\", \"#B4A7D6\", \"#D5A6BD\"] },\n { colors: [\"#E6B8AF\", \"#F4CCCC\", \"#FCE5CD\", \"#FFF2CC\", \"#D9EAD3\", \"#D0E0E3\", \"#C9DAF8\", \"#CFE2F3\", \"#D9D2E9\", \"#EAD1DC\"] },\n ]\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hidePicker();\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n constructor(\n private _element: ElementRef\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"customTarget\"] &&\n changes[\"customTarget\"].currentValue &&\n this.customTarget) {\n this.customTarget.addEventListener(\"click\", this.toggleEvent.bind(this));\n }\n this.updatePlacement();\n }\n\n public toggleEvent(evt: MouseEvent) {\n this.toggle();\n evt.stopPropagation();\n }\n\n public toggle() {\n this.updatePlacement();\n this.opened = !this.opened;\n }\n\n public updatePlacement() {\n\n let container: HTMLElement;\n if (this.customTarget) {\n container = this.customTarget;\n }\n else {\n const component = this._element.nativeElement as HTMLElement;\n container = component.getElementsByClassName(\"colorpicker-component\").item(0) as HTMLElement;\n }\n\n const left = container.getBoundingClientRect().left;\n const top = container.getBoundingClientRect().top;\n const bottom = container.getBoundingClientRect().bottom;\n\n const margin = 8;\n\n this.menuLeft = `${left}px`;\n const distToBottomOfPage = window.innerHeight - top;\n if (distToBottomOfPage > 150) {\n this.menuTop = `${bottom + margin}px`;\n this.menuBottom = \"\";\n }\n else {\n const bottomFixed = window.innerHeight - top + margin;\n this.menuBottom = `${bottomFixed}px`;\n this.menuTop = \"\";\n }\n }\n\n private hidePicker() {\n this.opened = false;\n }\n\n public selectColor(color: string) {\n this.color = color;\n this.colorChange.emit(color);\n }\n}\n","<div class=\"colorpicker-component\"\n (click)=\"toggle()\"\n [class.opened]=\"opened\"\n [class.no-size]=\"customTarget\">\n\n @if (!customTarget) {\n @if (icon == 'text') {\n <div>\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_text.svg\"\n class=\"icon-text\">\n </div>\n }\n @if (icon == 'paint') {\n <div>\n <img src=\"https://storage.googleapis.com/zenduit-icons/components/color_picker_paint.svg\"\n class=\"icon-paint\">\n </div>\n }\n <div class=\"toggle\">\n <i class=\"material-icons\">arrow_drop_down</i>\n </div>\n <div class=\"color-line\"\n [ngStyle]=\"{'border-color': color}\">\n </div>\n }\n\n @if (opened) {\n <div\n class=\"color-menu\"\n [ngStyle]=\"{ 'left': menuLeft, 'top': menuTop, 'bottom': menuBottom }\">\n <div class=\"colors-container\">\n @for (row of colorsRows; track row) {\n <div\n class=\"color-row\">\n @for (rowColor of row.colors; track rowColor) {\n <div\n (click)=\"selectColor(rowColor)\"\n class=\"color-item\"\n [ngStyle]=\"{'background-color': rowColor}\">\n @if (rowColor == color) {\n <div\n class=\"select-icon\">\n <i class=\"material-icons\">check</i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n @if (showNone) {\n <div\n class=\"no-color\"\n (click)=\"selectColor('')\">\n None\n </div>\n }\n </div>\n }\n</div>\n","// import { environment } from 'src/environments/environment';\ninterface IGeocodingRes {\n Name: string;\n\n City: string;\n\n Country: string;\n\n PostalCode: string;\n\n Street: string;\n\n State: string;\n\n Bounds: H.geo.Rect;\n}\nexport class Util {\n\n private _platform: H.service.Platform;\n constructor() {\n // this._platform = new H.service.Platform({\n // apikey: environment.hereMaps\n // });\n}\n public static debounce(func: any, wait: number, immediate?: boolean) {\n let timeout: any;\n const context: any = this;\n\n return function executedFunction() {\n const args = arguments;\n\n const later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n const callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n public static clone<T>(source: T): T\n {\n let str = JSON.stringify(source);\n let outObj = JSON.parse(str);\n\n this.updateClone(outObj);\n\n // Convert in the output object ISO string to Date object\n //\n // @ts-ignore\n for(let key of Object.keys(source))\n {\n const val = (source as any)[key];\n if(val &&\n typeof val == \"object\" &&\n typeof val.getTime == \"function\" &&\n typeof val.getDate == \"function\")\n {\n outObj[key] = new Date(val);\n }\n }\n\n return outObj;\n }\n\n\n\n /**\n * Remove internal angularjs properties\n * @param obj\n */\n private static updateClone(obj: any)\n {\n if(!obj)\n {\n return;\n }\n if(Array.isArray(obj))\n {\n for(let item of obj)\n {\n if(!item)\n {\n item = item;\n }\n this.updateClone(item);\n }\n return;\n }\n\n let type = typeof obj;\n if(type == \"string\" || type == \"number\")\n {\n return;\n }\n\n // Remove invalid props\n let keys = Object.keys(obj);\n keys.forEach((key) =>\n {\n if(key[0] == '$' ||\n key[0] == '&')\n {\n delete obj[key];\n return;\n }\n\n let val = obj[key];\n if(Array.isArray(val))\n {\n let arr = <Array<any>>val;\n for(let k of arr)\n {\n this.updateClone(k);\n }\n }\n else if(typeof val == \"object\")\n {\n this.updateClone(val);\n }\n });\n }\n\n\n public static copyProperties(source: any, dest: any)\n {\n for(let key of Object.keys(source))\n {\n dest[key] = source[key];\n }\n }\n\n public static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n })\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n ViewChild,\n ElementRef,\n OnInit,\n OnChanges,\n SimpleChanges,\n HostBinding,\n ChangeDetectionStrategy,\n booleanAttribute,\n numberAttribute\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\nexport interface DropdownOption {\n label: string;\n value: string | number;\n icon?: string;\n}\n\n@Component({\n selector: 'zen-input',\n templateUrl: './zendu-input.component.html',\n styleUrls: ['./zendu-input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZenduInputComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduInputComponent implements ControlValueAccessor, OnInit, OnChanges {\n \n @ViewChild('inputElement') inputElement: ElementRef<HTMLInputElement | HTMLTextAreaElement>;\n \n /**\n * Input type attribute\n */\n @Input() type: 'text' | 'email' | 'password' | 'tel' | 'number' | 'url' | 'search' = 'text';\n \n /**\n * Input variant type\n */\n @Input() variant: 'default' | 'input-field' | 'payment' | 'leading-dropdown' | 'leading-text' | 'trailing-dropdown' | 'trailing-text' = 'default';\n \n /**\n * Placeholder text\n */\n @Input() placeholder = '';\n \n /**\n * Label text (shown above input)\n */\n @Input() label = '';\n \n /**\n * Hint text (shown below input)\n */\n @Input() hintText = '';\n \n /**\n * Leading icon name (Material Icons)\n */\n @Input() leadingIcon = '';\n \n /**\n * Show help icon. The tooltip is shown on hover / keyboard focus.\n */\n @Input() helpIcon = false;\n\n /**\n * Tooltip text for the help icon (shown on hover / focus).\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 * Minimum value for `type=\"number\"` inputs (maps to the native `min`\n * attribute). Applied to all single-line types but only meaningful for\n * `number`; the browser ignores it otherwise. Not applied to multiline.\n */\n @Input() min?: number;\n\n /**\n * Maximum value for `type=\"number\"` inputs (maps to the native `max`\n * attribute). Applied to all single-line types but only meaningful for\n * `number`; the browser ignores it otherwise. Not applied to multiline.\n */\n @Input() max?: number;\n\n /**\n * Step increment for `type=\"number\"` inputs (maps to the native `step`\n * attribute). Accepts a number or the literal `'any'`.\n */\n @Input() step?: number | 'any';\n\n /**\n * Autocomplete attribute\n */\n @Input() autocomplete = 'off';\n \n /**\n * Name attribute\n */\n @Input() name = '';\n \n /**\n * ID attribute\n */\n @Input() id = '';\n \n /**\n * Leading dropdown options\n */\n @Input() leadingDropdownOptions: DropdownOption[] = [];\n \n /**\n * Selected leading dropdown value\n */\n @Input() leadingDropdownValue: string | number = '';\n \n /**\n * Leading dropdown placeholder\n */\n @Input() leadingDropdownPlaceholder = 'Select';\n \n /**\n * Trailing dropdown options\n */\n @Input() trailingDropdownOptions: DropdownOption[] = [];\n \n /**\n * Selected trailing dropdown value\n */\n @Input() trailingDropdownValue: string | number = '';\n \n /**\n * Trailing dropdown placeholder\n */\n @Input() trailingDropdownPlaceholder = 'Select';\n \n /**\n * Leading static text\n */\n @Input() leadingText = '';\n\n /**\n * Trailing static text\n */\n @Input() trailingText = '';\n \n /**\n * Render a multiline textarea instead of a single-line input.\n * Composes with label/hint/character-count/states; single-line\n * adornments (leading/trailing dropdowns and text) are not used.\n */\n @Input({ transform: booleanAttribute }) multiline = false;\n\n /**\n * Initial visible rows for the multiline textarea (height is then\n * user-resizable vertically). Only applies when `multiline` is true.\n */\n @Input({ transform: numberAttribute }) rows = 3;\n\n /**\n * Whether the multiline textarea can be resized via the footer drag handle.\n * When false, the handle is hidden and the height stays fixed at `rows`.\n */\n @Input({ transform: booleanAttribute }) resizable = true;\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 for the `[(value)]` two-way binding.\n *\n * NOTE — type contract for `type=\"number\"`: this output always emits the\n * RAW STRING from the input element. The CVA path (`[(ngModel)]` /\n * `formControl`) instead emits a real `number` (or '' when empty/invalid).\n * So a consumer binding BOTH `[(value)]` and ngModel/formControl to the same\n * number input will observe a `string` here and a `number` there for the\n * same edit. Bind only one, and prefer ngModel/formControl when you need the\n * numeric value.\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 * 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: string | number = '';\n public isFocused = false;\n public helpTooltipAlign: 'center' | 'start' | 'end' = 'center';\n public helpTooltipPlacement: 'above' | 'below' = 'above';\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 | number) => 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 | number): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string | number) => 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 | HTMLTextAreaElement;\n \n if (this.type === 'tel') {\n // Handle phone input\n this.phoneText = target.value;\n this.onPhoneChanged(target as HTMLInputElement);\n } else {\n // Handle regular input. The CVA path (ngModel/formControl) receives a\n // real number for type=number (or '' when empty/invalid) so reactive\n // consumers get numeric values. The [(value)] output keeps its raw\n // string contract — existing consumers bind string handlers to it.\n this.value = target.value;\n this.onChange(this.coerceValue(target.value));\n this.valueChange.emit(target.value);\n }\n }\n\n private coerceValue(raw: string): string | number {\n if (this.type === 'number' && raw !== '') {\n const num = Number(raw);\n if (!Number.isNaN(num)) {\n return num;\n }\n }\n return raw;\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 /**\n * Position the help tooltip so it never overflows the viewport. Horizontally:\n * anchored to the icon's right edge near the right border, to its left edge near\n * the left border, otherwise centered. Vertically: above by default, flipped\n * below when there isn't room above and there's more room below (e.g. an icon\n * near the top of the viewport). Computed from the icon rect synchronously\n * (before paint) so the tooltip appears in its final spot without a flicker.\n */\n updateHelpTooltipPlacement(event: Event): void {\n const icon = event.currentTarget as HTMLElement | null;\n if (!icon) {\n return;\n }\n const rect = icon.getBoundingClientRect();\n const margin = 8;\n\n const iconCenter = rect.left + rect.width / 2;\n const halfMaxWidth = 130;\n if (iconCenter + halfMaxWidth > window.innerWidth - margin) {\n this.helpTooltipAlign = 'end';\n } else if (iconCenter - halfMaxWidth < margin) {\n this.helpTooltipAlign = 'start';\n } else {\n this.helpTooltipAlign = 'center';\n }\n\n const estimatedHeight = 56;\n const spaceAbove = rect.top;\n const spaceBelow = window.innerHeight - rect.bottom;\n this.helpTooltipPlacement =\n spaceAbove < estimatedHeight + margin && spaceBelow > spaceAbove ? 'below' : 'above';\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 ? String(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 if (this.multiline) {\n classes.push('multiline');\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 /**\n * Drag-to-resize for the multiline textarea via the custom footer handle.\n * Native resize is disabled in CSS; this adjusts the textarea height while\n * the pointer is held, clamped to a minimum.\n */\n onResizeStart(event: PointerEvent): void {\n if (this.disabled) {\n return;\n }\n const textarea = this.inputElement?.nativeElement;\n const handle = event.currentTarget as HTMLElement;\n if (!textarea || !handle) {\n return;\n }\n event.preventDefault();\n\n const startY = event.clientY;\n const startHeight = textarea.offsetHeight;\n const minHeight = 80;\n\n const onMove = (moveEvent: PointerEvent): void => {\n const nextHeight = Math.max(minHeight, startHeight + (moveEvent.clientY - startY));\n textarea.style.height = `${nextHeight}px`;\n };\n const onEnd = (): void => {\n handle.removeEventListener('pointermove', onMove);\n handle.removeEventListener('pointerup', onEnd);\n handle.removeEventListener('pointercancel', onEnd);\n // Implicit capture release (context menu, re-render, gesture\n // preemption) fires lostpointercapture instead of pointerup —\n // clean up here too so the move listener can't leak.\n handle.removeEventListener('lostpointercapture', onEnd);\n };\n\n try {\n handle.setPointerCapture(event.pointerId);\n } catch {\n // Already-released or synthetic pointer — proceed without capture.\n }\n handle.addEventListener('pointermove', onMove);\n handle.addEventListener('pointerup', onEnd);\n handle.addEventListener('pointercancel', onEnd);\n handle.addEventListener('lostpointercapture', onEnd);\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(fullNumber);\n this.valueChange.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 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}\n","<div class=\"zen-input-container\" [ngClass]=\"inputClasses\">\n <!-- Label -->\n @if (showLabel) {\n <label\n [for]=\"id\"\n class=\"zen-input-label text text-sm text-weight-medium\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n @if (required) {\n <span class=\"required-indicator\">*</span>\n }\n </label>\n }\n\n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n\n <!-- Leading icon -->\n @if (leadingIcon && variant === 'default' && !multiline) {\n <i\n class=\"material-icons zen-input-leading-icon\"\n (click)=\"onLeadingIconClick($event)\">\n {{ leadingIcon }}\n </i>\n }\n\n <!-- Leading dropdown -->\n @if (variant === 'leading-dropdown') {\n <div\n class=\"zen-input-leading-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggleLeadingDropdown(); $event.stopPropagation()\">\n <span class=\"dropdown-label\">{{ getLeadingDropdownLabel() }}</span>\n <i class=\"material-icons dropdown-icon\">expand_more</i>\n </button>\n @if (leadingDropdownOpen) {\n <div class=\"zen-dropdown-menu\"\n [ngClass]=\"{'open': leadingDropdownOpen}\">\n @for (option of leadingDropdownOptions; track option) {\n <button\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === leadingDropdownValue}\"\n (click)=\"onLeadingDropdownChange(option.value); $event.stopPropagation()\">\n @if (option.icon) {\n <i class=\"material-icons option-icon\">{{ option.icon }}</i>\n }\n {{ option.label | translate }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Leading text -->\n @if (variant === 'leading-text') {\n <span\n class=\"zen-input-leading-text text text-md text-weight-regular\">\n {{ leadingText }}\n </span>\n }\n\n <!-- Payment card icon -->\n @if (variant === 'payment') {\n <div\n class=\"zen-payment-card-icon\">\n <i class=\"material-icons card-icon\">payment</i>\n </div>\n }\n\n <!-- Input content based on type -->\n @if (type === 'tel') {\n <ng-container *ngTemplateOutlet=\"phoneInputTemplate\"></ng-container>\n } @else if (multiline) {\n <textarea #inputElement\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 [rows]=\"rows\"\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)\"></textarea>\n } @else {\n <input #inputElement\n [type]=\"type\"\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [attr.maxlength]=\"maxLength\"\n [attr.minlength]=\"minLength\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.step]=\"step\"\n [pattern]=\"pattern\"\n [autocomplete]=\"autocomplete\"\n class=\"zen-input-field text text-md text-weight-regular\"\n [ngClass]=\"{'zen-payment-field': variant === 'payment'}\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\" />\n }\n\n <!-- Multiline footer: help icon (left), then character count + resize handle (right).\n Only rendered when it has content so an empty textarea keeps a full-height\n scrollbar and symmetric padding (see the no-footer rule in SCSS). -->\n @if (multiline && (resizable || helpIcon || showCharacterCount)) {\n <div class=\"zen-textarea-footer\">\n @if (helpIcon) {\n <div class=\"zen-input-trailing-container\">\n <span\n class=\"zen-help-icon\"\n role=\"img\"\n [class.disabled]=\"disabled\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-label]=\"helpTooltip | translate\"\n (mouseenter)=\"updateHelpTooltipPlacement($event)\"\n (focus)=\"updateHelpTooltipPlacement($event)\">\n <i class=\"material-icons-outlined\">help_outline</i>\n <div\n class=\"zen-help-tooltip\"\n [class.align-start]=\"helpTooltipAlign === 'start'\"\n [class.align-end]=\"helpTooltipAlign === 'end'\"\n [class.place-below]=\"helpTooltipPlacement === 'below'\">\n <div class=\"tooltip-content\">\n {{ helpTooltip | translate }}\n </div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n </span>\n </div>\n }\n <div class=\"zen-textarea-footer-end\">\n @if (showCharacterCount) {\n <span class=\"zen-character-count text text-sm text-weight-regular\">\n {{ characterCount }}\n </span>\n }\n @if (resizable) {\n <span\n class=\"zen-textarea-resize-handle\"\n [class.disabled]=\"disabled\"\n title=\"Drag to resize\"\n (pointerdown)=\"onResizeStart($event)\"\n (click)=\"$event.stopPropagation()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17.5 5.5 5.5 17.5M17.5 12.5 12.5 17.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </span>\n }\n </div>\n </div>\n }\n\n <!-- Default input template -->\n\n <!-- Trailing elements container — render only when it has content, so a plain\n input (e.g. number) doesn't reserve trailing space or shift its spinner. -->\n @if (\n variant === 'trailing-text' ||\n (showCharacterCount && !helpIcon && variant === 'default' && !multiline) ||\n (helpIcon && variant !== 'trailing-dropdown' && !multiline) ||\n variant === 'trailing-dropdown'\n ) {\n <div class=\"zen-input-trailing-container\">\n <!-- Trailing text -->\n @if (variant === 'trailing-text') {\n <span\n class=\"zen-input-trailing-text text text-md text-weight-regular\">\n {{ trailingText }}\n </span>\n }\n\n <!-- Character counter -->\n @if (showCharacterCount && !helpIcon && variant === 'default' && !multiline) {\n <span\n class=\"zen-character-count text text-sm text-weight-regular\">\n {{ characterCount }}\n </span>\n }\n\n <!-- Help icon -->\n @if (helpIcon && variant !== 'trailing-dropdown' && !multiline) {\n <span\n class=\"zen-help-icon\"\n role=\"img\"\n [class.disabled]=\"disabled\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-label]=\"helpTooltip | translate\"\n (mouseenter)=\"updateHelpTooltipPlacement($event)\"\n (focus)=\"updateHelpTooltipPlacement($event)\">\n <i class=\"material-icons-outlined\">help_outline</i>\n <!-- Help tooltip (shown on hover / focus) -->\n <div\n class=\"zen-help-tooltip\"\n [class.align-start]=\"helpTooltipAlign === 'start'\"\n [class.align-end]=\"helpTooltipAlign === 'end'\"\n [class.place-below]=\"helpTooltipPlacement === 'below'\">\n <div class=\"tooltip-content\">\n {{ helpTooltip | translate }}\n </div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n </span>\n }\n\n <!-- Trailing dropdown -->\n @if (variant === 'trailing-dropdown') {\n <div\n class=\"zen-input-trailing-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggleTrailingDropdown(); $event.stopPropagation()\">\n <span class=\"dropdown-label\">{{ getTrailingDropdownLabel() }}</span>\n <i class=\"material-icons dropdown-icon\">expand_more</i>\n </button>\n @if (trailingDropdownOpen) {\n <div class=\"zen-dropdown-menu dropdown-menu-right\"\n [ngClass]=\"{'open': trailingDropdownOpen}\">\n @for (option of trailingDropdownOptions; track option) {\n <button\n type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': option.value === trailingDropdownValue}\"\n (click)=\"onTrailingDropdownChange(option.value); $event.stopPropagation()\">\n @if (option.icon) {\n <i class=\"material-icons option-icon\">{{ option.icon }}</i>\n }\n {{ option.label | translate }}\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Hint text / Error message -->\n @if (showHintText) {\n <div\n class=\"zen-input-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n @if (destructive) {\n <i class=\"material-icons-outlined hint-icon\">error_outline</i>\n }\n {{ displayHintText | translate }}\n </div>\n }\n\n <!-- Phone Country Dropdown (for tel type) -->\n @if (type === 'tel' && isPhoneDropdownExpanded) {\n <div\n class=\"zen-phone-dropdown-menu\">\n <div class=\"zen-phone-dropdown-list\">\n <!-- Countries List -->\n @for (country of countryList; track country) {\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === country.countryName}\"\n (click)=\"onCountryChanged(country)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"country.flag\"\n [alt]=\"country.countryName\">\n <span class=\"zen-phone-country-name\">{{ country.countryName | translate }}</span>\n <span class=\"zen-phone-country-code\">{{ country.countryCallingCode }}</span>\n </button>\n }\n <!-- Custom Country -->\n <button type=\"button\"\n class=\"zen-phone-dropdown-item\"\n [ngClass]=\"{'active': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"onCountryChanged(customCountry)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"customCountry.flag\"\n [alt]=\"customCountry.countryName\">\n <span class=\"zen-phone-country-name\">{{ customCountry.countryName | translate }}</span>\n <span class=\"zen-phone-country-code\">{{ customCountry.countryCallingCode }}</span>\n </button>\n </div>\n </div>\n }\n</div>\n\n<!-- Phone Input Template -->\n<ng-template #phoneInputTemplate>\n <!-- Phone country selector -->\n <div class=\"zen-phone-country-select\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"selectedCountry.flag\"\n [alt]=\"selectedCountry.countryName\">\n <span class=\"zen-phone-code\">{{ selectedCountry.countryCallingCode }}</span>\n <button type=\"button\"\n class=\"zen-phone-dropdown-btn\"\n [disabled]=\"disabled\"\n (click)=\"togglePhoneDropdown(); $event.stopPropagation()\">\n <i class=\"material-icons zen-phone-expand-icon\"\n [ngClass]=\"{'active': isPhoneDropdownExpanded}\">expand_more</i>\n </button>\n </div>\n\n <!-- Phone input field -->\n <input #inputElement\n type=\"text\"\n [id]=\"id\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [value]=\"phoneText\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [attr.maxlength]=\"phoneMaxLength\"\n [attr.minlength]=\"minLength\"\n [autocomplete]=\"autocomplete\"\n class=\"zen-input-field text text-md text-weight-regular\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\" />\n</ng-template>\n\n<!-- Click outside handler for dropdowns -->\n@if (leadingDropdownOpen || trailingDropdownOpen || isPhoneDropdownExpanded) {\n <div\n class=\"zen-dropdown-backdrop\"\n (click)=\"closeDropdowns(); hidePhoneDropdown()\"></div>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnInit,\n Output,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { Util } from '../util';\n\n@Component({\n selector: 'zen-search-box',\n templateUrl: './zendu-search-box.component.html',\n styleUrls: ['./zendu-search-box.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSearchBoxComponent implements OnInit {\n @Input() text: string;\n\n @Output() textChange = new EventEmitter<string>();\n\n @Input() set delay(val: number) {\n this.setDelay(val);\n }\n\n @Input() autoFocus = true;\n\n @Input() disabled = false;\n\n @Input() public placeholder = 'Search';\n\n private _debouncedInvoke!: () => void;\n\n private _focusAttempts = 0;\n\n public constructor(private _element: ElementRef, private _ngZone: NgZone) {\n this.setDelay(500);\n }\n\n public ngOnInit(): void {\n // give 100ms for autoFocus initalization\n setTimeout(() => {\n if (this.autoFocus) {\n this.doFocus();\n }\n }, 100);\n }\n\n public onChange() {\n this._debouncedInvoke();\n }\n\n public clearFromParent() {\n this.text = '';\n }\n\n public clear() {\n this.text = '';\n this._debouncedInvoke();\n }\n\n private invokeChange() {\n this._ngZone.run(() => {\n this.textChange.emit(this.text);\n });\n }\n\n private setDelay(delay: number) {\n this._debouncedInvoke = Util.debounce(() => {\n this.invokeChange();\n }, delay);\n }\n\n public doFocus() {\n this._focusAttempts++;\n if (this._focusAttempts > 100) {\n // stop attempts to initalize\n return;\n }\n\n const input = this.getInput(this._element.nativeElement);\n if (!input) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n // check if element visible or not\n const height = input.clientHeight;\n if (height == 0) {\n // wait 100ms to run the next check\n setTimeout(() => {\n this.doFocus();\n }, 100);\n return;\n }\n\n // set focus to element\n setTimeout(() => {\n input.focus();\n }, 1);\n }\n\n private getInput(element: HTMLElement | null): HTMLInputElement | null {\n if (!element) {\n return null;\n }\n if (element.nodeName == 'INPUT') {\n return element as HTMLInputElement;\n }\n\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (el && el.nodeName == 'INPUT') {\n return el as HTMLInputElement;\n }\n }\n\n // find input in the children tree\n for (let idx = 0; idx < element.children.length; idx++) {\n const el = element.children.item(idx);\n if (!el) {\n continue;\n }\n const elInput = this.getInput(el as HTMLElement);\n if (elInput) {\n return elInput;\n }\n }\n\n return null;\n }\n}\n","<div class=\"search-box-component\"\n [class.has-text]=\"text\">\n <zen-input [(ngModel)]=\"text\"\n [placeholder]=\"placeholder | translate\"\n [disabled]=\"disabled\"\n leadingIcon=\"search\"\n autocomplete=\"off\"\n (ngModelChange)=\"onChange()\">\n </zen-input>\n @if (text) {\n <i class=\"material-icons close-icon\"\n (mousedown)=\"$event.stopPropagation()\"\n (click)=\"clear(); $event.stopPropagation()\">close</i>\n }\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ColumnState } from './columnState';\nimport { Util } from './../util';\n\n@Component({\n selector: 'zen-column-configuration',\n templateUrl: './zendu-column-configuration.component.html',\n styleUrls: ['./zendu-column-configuration.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduColumnConfigurationComponent implements OnChanges {\n /**\n * callback to emit changes for parent component\n */\n @Output() configurationChange = new EventEmitter<ColumnState[]>();\n\n /**\n * input propery\n */\n @Input() configuration: ColumnState[] = [];\n\n /**\n * Default configuration for reset button\n */\n @Input() defaultConfiguration: ColumnState[] = [];\n\n /**\n * dropdown position\n */\n @Input() dropdownPosition: 'right' | 'left' = 'right';\n\n /**\n * Inital configuration\n */\n private _sourceConfiguration: ColumnState[] = [];\n\n public tempColumnConfiguration: ColumnState[] = [];\n\n public filteredColumnsConfiguration: ColumnState[] = [];\n\n public showPanel: boolean = false;\n\n public searchText = '';\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n // hide the menu for outside click\n this.hide();\n }\n\n ngOnChanges(changes: any): void {\n if (changes.configuration.currentValue && this.configuration) {\n this.initData();\n }\n }\n\n public initData() {\n this.tempColumnConfiguration = Util.clone(this.configuration);\n this._sourceConfiguration = Util.clone(this.configuration);\n this.filterItems();\n }\n\n public togglePanel() {\n this.showPanel = !this.showPanel;\n // clear search\n this.searchText = '';\n if (this.showPanel) {\n // restore inital values on open\n this.tempColumnConfiguration = Util.clone(this._sourceConfiguration);\n }\n this.filterItems();\n }\n\n public apply() {\n this.configuration = Util.clone(this.tempColumnConfiguration);\n // overwrite the default as well\n this._sourceConfiguration = Util.clone(this.tempColumnConfiguration);\n this.showPanel = false;\n this.configurationChange.emit(this.configuration);\n }\n\n public hide() {\n this.showPanel = false;\n }\n\n public onDrop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(\n this.filteredColumnsConfiguration,\n event.previousIndex,\n event.currentIndex\n );\n this.tempColumnConfiguration = this.filteredColumnsConfiguration;\n }\n\n public reset() {\n if (this.defaultConfiguration && this.defaultConfiguration.length) {\n // use the default configuration\n this.tempColumnConfiguration = Util.clone(this.defaultConfiguration);\n } else {\n // activate all items\n for (const item of this.tempColumnConfiguration) {\n item.isVisible = true;\n }\n }\n this.filterItems();\n }\n\n public filterItems(): void {\n this.filteredColumnsConfiguration = this.tempColumnConfiguration.filter(\n (col) =>\n col.displayName\n .toLowerCase()\n .includes(this.searchText.trim().toLowerCase())\n );\n }\n}\n","<div class=\"column-config-component\">\n <button class=\"button-basic button-icon\"\n [ngClass]=\"{ 'active': showPanel }\"\n (click)=\"togglePanel()\">\n <i class=\"material-icons\">view_column</i>\n </button>\n\n @if (showPanel) {\n <div\n class=\"action-menu column-config-menu\"\n [ngClass]=\"{'right': dropdownPosition === 'right'}\">\n <div class=\"action-menu-header\">\n <div class=\"title\">Manage Columns</div>\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"filterItems()\"></zen-search-box>\n </div>\n <div class=\"action-menu-body dnd-container\"\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (config of filteredColumnsConfiguration; track config) {\n <div\n class=\"action-item-checkbox drag-item\"\n cdkDrag>\n <zen-checkbox class=\"flex-1\"\n [(checked)]=\"config.isVisible\"\n [label]=\"config.displayName\"></zen-checkbox>\n <i class=\"material-icons drag-icon\">drag_handle</i>\n </div>\n }\n </div>\n <div class=\"action-menu-footer\">\n <button (click)=\"reset()\"\n type=\"button\"\n class=\"button-stroked full-width\">Reset</button>\n <button (click)=\"apply()\"\n type=\"button\"\n class=\"button-flat full-width\">Apply</button>\n </div>\n </div>\n }\n</div>\n","export enum DATEPICKER_POSITION {\n AUTO = 'auto',\n LEFT = 'left',\n RIGHT = 'right',\n TOP = 'top',\n BOTTOM = 'bottom'\n}","import { InjectionToken } from '@angular/core';\n\nexport interface ZenIconConfig {\n iconBasePath: string;\n}\n\nexport const ZEN_ICON_CONFIG = new InjectionToken<ZenIconConfig>('ZEN_ICON_CONFIG', {\n providedIn: 'root',\n factory: () => ({ iconBasePath: 'https://storage.googleapis.com/trax_public/icons' })\n});\n\nexport type ZenIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type ZenIconColor = 'primary' | 'gray' | 'error' | 'warning' | 'success';\nexport type ZenIconTheme = 'light-circle' | 'light-circle-outline' | 'dark-circle' | 'light-square' | 'mid-square' | 'dark-square';\n","import { Component, ElementRef, Input, Inject, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { ZEN_ICON_CONFIG, ZenIconConfig, ZenIconSize, ZenIconColor, ZenIconTheme } from './icon-config';\n\n@Component({\n selector: 'zen-icon',\n templateUrl: './zendu-icon.component.html',\n styleUrls: ['./zendu-icon.component.scss'],\n host: {\n '[class.zen-icon--featured]': 'isFeatured'\n },\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduIconComponent implements OnChanges {\n\n @Input() src: string;\n @Input() name: string;\n @Input() size: ZenIconSize;\n @Input() color: ZenIconColor;\n @Input() theme: ZenIconTheme;\n @Input() customColor: string;\n\n resolvedSrc: string;\n isFeatured = false;\n\n constructor(\n private _host: ElementRef,\n @Inject(ZEN_ICON_CONFIG) private _config: ZenIconConfig\n ) { }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Resolve icon source\n if (this.name) {\n this.resolvedSrc = `${this._config.iconBasePath}/${this.name}.svg`;\n } else if (this.src) {\n this.resolvedSrc = this.src;\n }\n\n this.isFeatured = !!(this.size && this.color && this.theme);\n\n const host = this._host.nativeElement as HTMLElement;\n\n if (this.isFeatured) {\n // Featured mode: clear host mask styles, let template handle it\n host.style.removeProperty('mask-image');\n host.style.removeProperty('-webkit-mask-image');\n host.style.removeProperty('background-color');\n } else if (this.resolvedSrc) {\n // Simple mode: apply mask to host and set background color based on color input\n host.style['mask-image'] = `url(${this.resolvedSrc})`;\n host.style['-webkit-mask-image'] = `url(${this.resolvedSrc})`;\n if (this.customColor) {\n host.style.backgroundColor = this.customColor;\n } else {\n host.style.removeProperty('background-color');\n }\n }\n }\n}\n","@if (isFeatured) {\n <div\n class=\"zen-icon-featured\"\n [ngClass]=\"['zen-icon-' + size, 'zen-icon-' + color, 'zen-icon-' + theme]\">\n <div class=\"zen-icon-inner\"\n [style.mask-image]=\"'url(' + resolvedSrc + ')'\"\n [style.-webkit-mask-image]=\"'url(' + resolvedSrc + ')'\"\n [style.background-color]=\"customColor || null\">\n </div>\n </div>\n}\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input,\n OnChanges, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from './date-picker-day';\nimport { DatePickerHint } from \"./date-picker-hint\";\nimport { DATEPICKER_POSITION } from './datepicker';\nimport { OverlayRef, Overlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst defaultHours = '12';\nconst defaultMinuts = '00';\nconst defaultSeconds = '00';\n\n@Component({\n selector: 'zen-datepicker',\n templateUrl: './zendu-datepicker.component.html',\n styleUrls: ['./zendu-datepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDatepickerComponent implements OnChanges {\n\n /**\n * Component property\n */\n @Input() date: Date;\n\n /**\n * callback to emit changes for parent component\n */\n @Output() dateChange = new EventEmitter<Date>();\n\n @Input() showTime = false;\n\n @Input() showSeconds = false;\n\n @Input() showDate = true;\n\n @Input() parentContainer: HTMLElement | null = null;\n\n @Input() containerClass: string;\n\n @Input() minDate: Date;\n\n @Input() maxDate: Date;\n\n @Input() boxDesign: boolean = false;\n\n @Input() highlightDays: number[] = [];\n\n @Input() autoConfirm: boolean = false;\n\n @Input() hint: DatePickerHint;\n\n /**\n * datepicker states\n */\n @Input() highlightError: boolean = false;\n\n @Input() disabled: boolean = false;\n\n @Input() readonly: boolean = false;\n\n @Input() xPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() yPosition: DATEPICKER_POSITION = DATEPICKER_POSITION.AUTO;\n\n @Input() dispalyOverParent: boolean = false;\n\n @ViewChild('dateMenu') dateMenu!: ElementRef;\n\n @ViewChild('triggerButton') triggerButton!: ElementRef;\n\n @ViewChild('dateMenuTemplate') dateMenuTemplate: TemplateRef<unknown>;\n\n private overlayRef: OverlayRef;\n\n public selectedTime: { Hr: number, Min: number, Sec: number } = { Hr: 1, Min: 0, Sec: 0 };\n\n public isPickerVisible = false;\n\n public dayRows: Array<{ days: DatePickerDay[] }> = [];\n\n public daysTitle = \"\";\n\n public weekDays = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fri\", \"Sa\", \"Su\"];\n\n public currentSlot = new Date();\n\n public hour = defaultHours;\n\n public min = defaultMinuts;\n\n public sec = defaultSeconds;\n\n public isPM = false;\n\n public _dateToSet: Date;\n\n public months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n public years = [];\n\n public monthPickerVisible: boolean = false;\n\n public yearPickerVisible: boolean = false;\n\n right: boolean = false;\n bottom: boolean = false;\n\n constructor(\n private _element: ElementRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _translate: TranslateService\n ) { }\n\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event) {\n if (!document.body.contains(event.target)) {\n // element not in the DOM\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.hideTimePicker()\n }\n\n @HostListener('window:scroll', [])\n scroll() {\n this.updatePlacement();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.date) {\n this._dateToSet = new Date(this.date);\n\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n }\n }\n\n public updatePlacement() {\n this.right = false;\n this.bottom = false;\n if (this.xPosition === DATEPICKER_POSITION.AUTO && this.getHorizontalMenuDirection() === DATEPICKER_POSITION.LEFT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.AUTO && this.getVerticalMenuDirection() === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n if (this.xPosition === DATEPICKER_POSITION.RIGHT) {\n this.right = true;\n }\n if (this.yPosition === DATEPICKER_POSITION.TOP) {\n this.bottom = true;\n }\n }\n\n private getVerticalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const top = element.getBoundingClientRect().top;\n const height = window.innerHeight;\n if (top > (height / 2)) {\n return DATEPICKER_POSITION.TOP\n }\n else {\n return DATEPICKER_POSITION.BOTTOM;\n }\n }\n\n /**\n * Used to get datepicker position\n * @returns either \"left\" or \"right\"\n */\n private getHorizontalMenuDirection(): DATEPICKER_POSITION {\n const element = this._element.nativeElement;\n const left = element.getBoundingClientRect().left;\n const width = window.innerWidth;\n if (left > (width / 2)) {\n return DATEPICKER_POSITION.LEFT;\n }\n else {\n return DATEPICKER_POSITION.RIGHT;\n }\n }\n\n\n public togglePicker() {\n if (this.disabled) return;\n\n this._dateToSet = this.date ? new Date(this.date) : null;\n\n this.isPickerVisible = !this.isPickerVisible;\n if (this.showDate) {\n this.currentSlot = this._dateToSet || new Date();\n this.updateDays();\n }\n if (this.showTime) {\n this.selectedTime = {\n Hr: moment(this.date).hours(),\n Min: moment(this.date).minutes(),\n Sec: moment(this.date).seconds()\n };\n\n if (this.date) {\n const m = moment(this.date);\n\n this.hour = m.format('hh');\n this.min = m.format('mm');\n this.sec = m.format('ss');\n this.isPM = m.format('A') === 'PM';\n }\n }\n if (this.isPickerVisible) {\n if (this.dispalyOverParent) {\n this.createOverlay();\n } else {\n this.updatePlacement();\n this.syncMenuPositionWithDelay();\n }\n }\n }\n\n private createOverlay() {\n const verticalDirection = this.getVerticalMenuDirection();\n const horizontalDirection = this.getHorizontalMenuDirection();\n\n const position: ConnectedPosition = {\n originX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n originY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'bottom' : 'top',\n overlayX: horizontalDirection === DATEPICKER_POSITION.RIGHT ? 'start' : 'end',\n overlayY: verticalDirection === DATEPICKER_POSITION.BOTTOM ? 'top' : 'bottom'\n };\n\n // Determine the vertical position (below or above) and set the vertical offset (0 for below, -20 for above)\n const isBelow = verticalDirection === DATEPICKER_POSITION.BOTTOM;\n const offsetY = isBelow ? 0 : -20;\n\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.triggerButton)\n .withPositions([\n position\n ])\n // Disable flexible dimensions, meaning the overlay will not resize automatically\n .withFlexibleDimensions(false)\n // Set the vertical offset to avoid overlapping with the parent button \n .withDefaultOffsetY(offsetY)\n // Disable automatic repositioning of the overlay to avoid overlap with other elements\n .withPush(false);\n\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: true,\n backdropClass: 'custom-backdrop',\n panelClass: 'custom-overlay',\n });\n\n this.overlayRef.attach(new TemplatePortal(this.dateMenuTemplate, this.viewContainerRef));\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.overlayRef.detach();\n this.isPickerVisible = false;\n });\n\n }\n\n // Method to close the overlay\n public closePicker(): void {\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.isPickerVisible = false;\n }\n\n // Cleanup overlay on component destruction\n ngOnDestroy(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n\n private showDatePicker() {\n setTimeout(() => {\n if (this.dateMenu) {\n this.dateMenu.nativeElement.style.visibility = 'visible';\n }\n }, 0)\n }\n\n private syncMenuPositionWithDelay() {\n if (!this.parentContainer) {\n this.showDatePicker();\n return;\n }\n\n setTimeout(() => {\n const elementRect = this._element.nativeElement.getBoundingClientRect();\n const parentRect = this.parentContainer.getBoundingClientRect();\n\n // Calculate the top difference between element and parent (if available)\n const top = this.calculateTopPosition(elementRect, parentRect);\n\n const dateMenuRect = this.dateMenu?.nativeElement?.getBoundingClientRect();\n this.bottom = dateMenuRect?.height < top;\n this.showDatePicker();\n }, 0);\n }\n\n private calculateTopPosition(elementRect: DOMRect, parentRect: DOMRect): number {\n let top: number;\n if (elementRect.top < parentRect.top) {\n top = parentRect.top - elementRect.top; // Reverse order if condition is met\n } else {\n top = elementRect.top - parentRect.top; // Normal calculation\n }\n return top;\n }\n\n private updateDays() {\n if (!this.currentSlot) {\n this.currentSlot = new Date();\n }\n\n const enMonth = moment(this.currentSlot).format(\"MMM\");\n const translatedMonth = this._translate.instant(enMonth);\n\n this.daysTitle = moment(this.currentSlot).format(\"MMM yyyy\").replace(enMonth, translatedMonth);\n this.dayRows = [];\n let current = moment(this.currentSlot).startOf(\"month\").startOf(\"week\").add(1, \"day\");\n let end = moment(this.currentSlot).endOf(\"month\").endOf(\"week\").add(1, \"day\");\n\n const currentMonth = moment(this.currentSlot).month();\n\n const date = moment(this._dateToSet);\n\n while (current <= end) {\n const row = { days: [] as DatePickerDay[] };\n this.dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n\n let isSelected = false;\n if (date) {\n isSelected = current.date() == date.date() &&\n date.month() == current.month();\n }\n\n let isOutside = currentMonth != current.month();\n\n let isDisabled = false;\n\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let isHighlighted = false;\n\n if (this.highlightDays && this.highlightDays.length) {\n isHighlighted = this.highlightDays.indexOf(current.valueOf()) >= 0;\n }\n\n row.days.push({\n date: current.toDate(),\n lbl: moment(current).date().toString(),\n isOutside: isOutside,\n selected: isSelected,\n isDisabled: isDisabled,\n isHighlighted: isHighlighted\n });\n\n current = moment(current).add(1, \"day\");\n }\n }\n }\n\n public nextMonth() {\n this.currentSlot = moment(this.currentSlot).add(1, \"month\").toDate();\n this.updateDays();\n }\n\n public prevMonth() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"month\").toDate();\n this.updateDays();\n }\n\n public nextYear() {\n this.currentSlot = moment(this.currentSlot).add(1, \"year\").toDate();\n this.updateDays();\n }\n\n public prevYear() {\n this.currentSlot = moment(this.currentSlot).subtract(1, \"year\").toDate();\n this.updateDays();\n }\n\n public nextYearGroup() {\n this.years = this.years.map(year => year + 15);\n }\n\n public prevYearGroup() {\n this.years = this.years.map(year => year - 15);\n }\n\n public selectDay(day: DatePickerDay) {\n if (day.isDisabled) {\n // day is disabled\n return;\n }\n\n if (this.showTime) {\n this._dateToSet = moment(day.date).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else {\n this._dateToSet = new Date(day.date);\n\n if (this.autoConfirm) {\n this.apply();\n }\n }\n\n this.updateDays();\n }\n\n public selectMonth(month: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setMonth(month);\n this.currentSlot = newDate;\n this.updateDays();\n this.monthPickerVisible = false;\n }\n\n public selectYear(year: number) {\n const newDate = new Date(this.currentSlot);\n newDate.setFullYear(year);\n this.currentSlot = newDate;\n this.updateDays();\n this.yearPickerVisible = false;\n }\n\n public hideTimePicker() {\n if (!this.dispalyOverParent) {\n this.isPickerVisible = false;\n }\n }\n\n\n public timeChanged() {\n let min = parseInt(this.min);\n let hour = parseInt(this.hour);\n let sec = this.showSeconds ? parseInt(this.sec) : 0;\n\n if (isNaN(hour) || isNaN(min)) {\n return;\n }\n\n if (this.showSeconds && isNaN(sec)) {\n return;\n }\n\n hour = Math.min(hour, 12);\n hour = Math.max(hour, 1);\n\n min = Math.min(min, 59);\n min = Math.max(min, 0);\n\n if (this.showSeconds) {\n sec = Math.min(sec, 59);\n sec = Math.max(sec, 0);\n }\n\n const time = moment(`${hour} ${min} ${sec} ${this.isPM ? \"pm\" : \"am\"}`, \"h m s a\");\n\n this.selectedTime = {\n Hr: time.hours(),\n Min: time.minutes(),\n Sec: time.seconds()\n };\n\n // added below condition because we can select the time without date, and it was showing invalid date in the input box\n // second condition is required to disable apply button when date is not selected\n if (this._dateToSet) {\n this._dateToSet = moment(this._dateToSet).hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n } else if (!this.showDate) {\n this._dateToSet = moment().hour(this.selectedTime.Hr).minute(this.selectedTime.Min).second(this.selectedTime.Sec).toDate();\n }\n\n // format\n if (hour < 10) {\n this.hour = `0${hour}`;\n }\n else {\n this.hour = `${hour}`;\n }\n\n if (min < 10) {\n this.min = `0${min}`;\n }\n else {\n this.min = `${min}`;\n }\n\n if (this.showSeconds) {\n if (sec < 10) {\n this.sec = `0${sec}`;\n }\n else {\n this.sec = `${sec}`;\n }\n }\n\n }\n\n public formattedDate() {\n if (!this.date) {\n return \"\";\n }\n\n if (this.boxDesign && moment(this.date).isSame(moment(), \"day\")) {\n return 'Today';\n }\n\n // get the translated text for day and month\n const enMonth = moment(this.date).format(\"MMM\");\n const enDay = moment(this.date).format(\"ddd\");\n const translatedMonth = this._translate.instant(enMonth);\n const translatedDay = this._translate.instant(enDay);\n\n if (this.showDate && !this.showTime && !this.boxDesign) {\n // Expanded formatting for date only picker\n return moment(this.date).format(\"ddd, DD MMM YYYY\")\n .replace(enDay, translatedDay)\n .replace(enMonth, translatedMonth);\n }\n\n return moment(this.date).format(\"MMM DD, YY\").replace(enMonth, translatedMonth);\n }\n\n public formattedTime() {\n if (!this.date) {\n return \"\";\n }\n if (this.showSeconds) {\n return moment(this.date).format(\"h:mm:ss A\");\n }\n return moment(this.date).format(\"h:mm A\");\n }\n\n public toggleTime() {\n this.isPM = !this.isPM;\n this.timeChanged();\n }\n\n public showMonthPicker() {\n this.monthPickerVisible = true;\n }\n\n public showYearPicker() {\n this.yearPickerVisible = true;\n this.years = [];\n for (let i = this.currentSlot.getFullYear() - 7; i < this.currentSlot.getFullYear() + 8; i++) {\n this.years.push(i);\n }\n }\n\n public hourUp() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour++;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public hourDown() {\n let hour = parseInt(this.hour);\n if (isNaN(hour)) {\n return;\n }\n hour--;\n this.hour = hour.toString();\n this.timeChanged();\n }\n\n public minUp() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min++;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public minDown() {\n let min = parseInt(this.min);\n if (isNaN(min)) {\n return;\n }\n min--;\n this.min = min.toString();\n this.timeChanged();\n }\n\n public secUp() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec++;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public secDown() {\n let sec = parseInt(this.sec);\n if (isNaN(sec)) {\n return;\n }\n sec--;\n this.sec = sec.toString();\n this.timeChanged();\n }\n\n public apply() {\n if (this._dateToSet) {\n // If time selection has enabled and user keeps default time then triggering the timeChanged function\n if (this.showTime && this.hour === defaultHours && this.min === defaultMinuts && this.sec === defaultSeconds) {\n this.timeChanged();\n }\n\n this.date = new Date(this._dateToSet);\n }\n this.dateChange.emit(this.date);\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public cancel() {\n this.dispalyOverParent ? this.closePicker() : this.hideTimePicker();\n }\n\n public clear() {\n this._dateToSet = null;\n this.hour = defaultHours;\n this.min = defaultMinuts;\n this.date = null;\n this.apply();\n }\n\n public getIcon() {\n // Change picker icon based on mode\n switch (true) {\n case this.showDate && this.showTime:\n // Date + Time\n return 'assets/ng-zenduit/icons/date.svg';\n case this.showDate && !this.showTime:\n // Date only\n return 'assets/ng-zenduit/icons/calendar.svg';\n case !this.showDate && this.showTime:\n // Time only\n return 'assets/ng-zenduit/icons/time.svg';\n default:\n return 'assets/ng-zenduit/icons/date.svg';\n }\n }\n\n public selectHintDate(date: Date): void {\n if (!date) {\n console.error('Invalid hint');\n return;\n }\n\n this._dateToSet = new Date(date);\n this.selectedTime = {\n Hr: moment(date).hours(),\n Min: moment(date).minutes(),\n Sec: moment(date).seconds()\n };\n\n if (this.autoConfirm) {\n this.apply();\n }\n\n this.updateDays();\n }\n}\n","<div class=\"date-component\">\n <!-- Material design datepicker toggle -->\n @if (!boxDesign) {\n <button class=\"date-toggle\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <div class=\"date-content\">\n <!-- date placeholder -->\n @if (!date && showDate && !showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date\" | translate}}\n </div>\n }\n @if (!date && showTime && !showDate) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Time\" | translate}}\n </div>\n }\n @if (!date && showTime && showDate && showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date & Time\" | translate}}\n </div>\n }\n <!-- Selected datetime -->\n @if (date) {\n <div>\n @if (showDate) {\n <span>{{formattedDate()}}</span>\n }\n @if (showTime) {\n <span> {{formattedTime()}}</span>\n }\n </div>\n }\n </div>\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n </button>\n }\n\n <!-- Box design datepicker toggle -->\n @if (boxDesign) {\n <button class=\"date-toggle new-box-design\"\n #triggerButton\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\"\n [ngClass]=\"{'active': isPickerVisible,'error': highlightError,'readonly': readonly}\">\n <!-- Datepicker icon, depends on picker type -->\n <zen-icon class=\"date-icon\"\n [src]=\"getIcon()\"\n [ngClass]=\"{'filled': date}\">\n </zen-icon>\n <div class=\"date-content new-box-design\">\n <!-- date placeholder -->\n @if (!date && showDate && !showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date\" | translate}}\n </div>\n }\n @if (!date && showTime && !showDate) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Time\" | translate}}\n </div>\n }\n @if (!date && showTime && showDate && showTime) {\n <div class=\"date-placeholder\"\n >\n {{\"Select Date & Time\" | translate}}\n </div>\n }\n <!-- Selected datetime -->\n @if (date) {\n <div>\n @if (showDate) {\n <span>{{formattedDate()}}</span>\n }\n @if (showTime) {\n <span> {{formattedTime()}}</span>\n }\n </div>\n }\n </div>\n </button>\n }\n\n <!-- Datepicker popup -->\n <ng-container *ngTemplateOutlet=\"dateMenuTemplate\">\n </ng-container>\n\n <ng-template #dateMenuTemplate>\n @if (isPickerVisible) {\n <div #dateMenu\n class=\"date-menu\"\n [ngClass]=\"{ 'right': right, 'bottom': bottom }\">\n <div class=\"date-modal\">\n @if (showDate) {\n <div class=\"days-toolbar\">\n <i (click)=\"prevMonth()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showMonthPicker()\">{{daysTitle}}</span>\n <i (click)=\"nextMonth()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"days-container\">\n <div class=\"week-days\">\n @for (weekDay of weekDays; track weekDay) {\n <div\n class=\"week-day\">\n {{weekDay | translate}}\n </div>\n }\n </div>\n @for (row of dayRows; track row) {\n <div\n class=\"day-row\">\n @for (day of row.days; track day) {\n <div\n (click)=\"selectDay(day)\"\n class=\"day-item\"\n [class.ousideRange]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.disabledDay]=\"day.isDisabled\">\n {{day.lbl | translate}}\n @if (day.isHighlighted) {\n <zen-icon\n class=\"highlight-icon\"\n src=\"assets/ng-zenduit/icons/play.svg\"></zen-icon>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (showTime) {\n <div\n class=\"time-container\">\n <div class=\"time-lbl\">\n {{\"Select Time\" | translate}}:\n </div>\n <div class=\"time-picker\">\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"hourUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"hour\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"hourDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n <span>:</span>\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"minUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"min\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"minDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n @if (showSeconds) {\n <span>:</span>\n }\n @if (showSeconds) {\n <div class=\"input-wrapper\">\n <div class=\"time-button\" (click)=\"secUp()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-up-small.svg\"></zen-icon>\n </div>\n <input [(ngModel)]=\"sec\"\n (ngModelChange)=\"timeChanged()\" />\n <div class=\"time-button\" (click)=\"secDown()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-down-small.svg\"></zen-icon>\n </div>\n </div>\n }\n <div class=\"am-pm-picker\">\n <div class=\"main\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'PM' : 'AM') | translate}}\n </div>\n <div class=\"sub\"\n (click)=\"toggleTime()\">\n {{(isPM ? 'AM' : 'PM') | translate}}\n </div>\n </div>\n </div>\n </div>\n }\n @if (hint) {\n <div class=\"hint\"\n >\n <div class=\"hint-description\">\n {{hint.description | translate}}\n </div>\n <div class=\"hint-date\"\n (click)=\"selectHintDate(hint.date)\">\n {{hint.maskText | translate}}\n </div>\n </div>\n }\n @if (!autoConfirm || showTime) {\n <div class=\"footer\"\n >\n @if (date) {\n <button\n (click)=\"clear()\"\n class=\"button-stroked\">\n {{\"Clear\" | translate}}\n </button>\n }\n @if (!date) {\n <button\n (click)=\"cancel()\"\n class=\"button-stroked\">\n {{\"Cancel\" | translate}}\n </button>\n }\n <button [disabled]=\"!_dateToSet\"\n (click)=\"apply()\"\n class=\"button-flat\">\n {{\"Apply\" | translate}}\n </button>\n </div>\n }\n @if (monthPickerVisible) {\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYear()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYear()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n @for (month of months; track month; let index = $index) {\n <div class=\"month-item\"\n (click)=\"selectMonth(index)\">\n {{ month | translate }}\n </div>\n }\n </div>\n </div>\n }\n @if (yearPickerVisible) {\n <div class=\"month-picker\">\n <div class=\"days-toolbar\">\n <i (click)=\"prevYearGroup()\"\n class=\"material-icons\">navigate_before</i>\n <span class=\"title\"\n (click)=\"showYearPicker()\">{{ currentSlot | date: 'yyyy' }}</span>\n <i (click)=\"nextYearGroup()\"\n class=\"material-icons\">navigate_next</i>\n </div>\n <div class=\"months-container\">\n @for (year of years; track year) {\n <div class=\"month-item\"\n (click)=\"selectYear(year)\">\n {{ year }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"date-modal-extra-space\"></div>\n </div>\n }\n </ng-template>\n</div>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle',\n templateUrl: './zendu-toggle.component.html',\n styleUrls: ['./zendu-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduToggleComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() disabled = false;\n\n @Input() label = '';\n\n @Input() supportingText = '';\n\n /**\n * Toggle state\n */\n public toggle() {\n if (this.disabled) return;\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<div class=\"zen-toggle-wrapper\"\n [class.zen-toggle--sm]=\"size === 'sm'\"\n [class.zen-toggle--md]=\"size === 'md'\"\n [class.zen-toggle--has-text]=\"label\">\n\n <button class=\"zen-toggle-track\"\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"enabled\"\n [attr.aria-disabled]=\"disabled\"\n [class.zen-toggle--active]=\"enabled\"\n [class.zen-toggle--disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\">\n <span class=\"zen-toggle-knob\"></span>\n </button>\n\n @if (label) {\n <div class=\"zen-toggle-text\">\n <span class=\"zen-toggle-label\">{{label}}</span>\n @if (supportingText) {\n <span class=\"zen-toggle-supporting\">{{supportingText}}</span>\n }\n </div>\n }\n\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { DataSource } from '../filter/filtersConfig';\n\n@Component({\n selector: 'zen-groups',\n templateUrl: './zendu-groups.component.html',\n styleUrls: ['./zendu-groups.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduGroupsComponent implements OnChanges {\n @Input() dataSource: DataSource[] = [];\n @Input() filteredDataSource: DataSource[] = [];\n @Input() hideSelectAll = false;\n @Input() isSelectedAll = false;\n @Input() inline = false;\n @Input() width = '300px';\n @Input() placeholder = 'Select group';\n @Input() hideSearch = false;\n @Input() idProp: string = 'id';\n @Input() displayProp: string = 'name';\n\n @Output() isSelectedAllChange = new EventEmitter<boolean>();\n @Output() checkedChange = new EventEmitter<DataSource>();\n\n public isOpen = false;\n public openUpward = false;\n public searchText = '';\n private _searchFilteredDataSource: DataSource[] | null = null;\n\n private _treeMap = new Map<string | number, DataSource>();\n private _childCountCache = new Map<string | number, number>();\n\n constructor(private _elementRef: ElementRef) {}\n\n private getChildren(item: any): string[] | undefined {\n return item.children || item.Children || item.Childrens;\n }\n\n public hasChildren(item: any): boolean {\n const children = this.getChildren(item);\n return !!children && children.length > 0;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['dataSource']) {\n this.buildTreeLevels();\n }\n if ((changes['filteredDataSource'] || changes['dataSource']) &&\n this._treeMap.size > 0 && this.filteredDataSource?.length) {\n this.filteredDataSource = this.sortTreeOrder(this.filteredDataSource);\n }\n }\n\n @HostListener('window:mousedown', ['$event'])\n onOutsideClick(event: MouseEvent) {\n if (this.inline || !this.isOpen) return;\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.isOpen = false;\n }\n }\n\n public toggleDropdown(): void {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.openUpward = this.shouldOpenUpward(300);\n } else {\n this.searchText = '';\n this._searchFilteredDataSource = null;\n }\n }\n\n private shouldOpenUpward(dropdownHeight: number): boolean {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return (window.innerHeight - rect.bottom) < dropdownHeight;\n }\n\n public get displayDataSource(): DataSource[] {\n if (this._searchFilteredDataSource !== null) {\n return this._searchFilteredDataSource;\n }\n return this.filteredDataSource;\n }\n\n public onSearchChange(): void {\n if (!this.searchText) {\n this._searchFilteredDataSource = null;\n return;\n }\n\n const lowerSearch = this.searchText.toLowerCase();\n const matchingIds = new Set<string | number>();\n\n for (const el of this.dataSource) {\n const name = typeof el[this.displayProp] === 'number' ? el[this.displayProp].toString() : el[this.displayProp];\n if (name.toLowerCase().includes(lowerSearch)) {\n matchingIds.add(el[this.idProp]);\n // Include all ancestors\n let current = el;\n while (current.parentId != null) {\n matchingIds.add(current.parentId);\n const parent = this._treeMap.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n }\n }\n\n let filtered = this.dataSource.filter(el => matchingIds.has(el[this.idProp]));\n\n // Auto-expand parents when searching\n for (const el of filtered) {\n if (this.hasChildren(el)) {\n el.isOpen = true;\n }\n }\n\n this._searchFilteredDataSource = this.sortTreeOrder(filtered);\n }\n\n public get selectedCount(): number {\n return this.dataSource?.filter(d => d.checked).length || 0;\n }\n\n public get selectedLabel(): string {\n const count = this.selectedCount;\n if (count === 0) return '';\n if (count === 1) {\n const item = this.dataSource.find(d => d.checked);\n return item ? item[this.displayProp]?.toString() : '';\n }\n return `${count} selected`;\n }\n\n public get hasActiveItems(): boolean {\n return this.dataSource?.some(d => d.checked) || false;\n }\n\n public onSelectAll(): void {\n this.dataSource.forEach(d => (d.checked = this.isSelectedAll));\n this.isSelectedAllChange.emit(this.isSelectedAll);\n }\n\n public onCheckChanged(dsItem: DataSource): void {\n this.cascadeToChildren(dsItem);\n this.updateParentCheckedState(dsItem);\n this.checkedChange.emit(dsItem);\n }\n\n private buildTreeLevels(): void {\n if (!this.dataSource?.length) return;\n const hasChildren = this.dataSource.some(d => this.hasChildren(d));\n if (!hasChildren) return;\n\n const map = new Map<string | number, DataSource>();\n for (const item of this.dataSource) {\n map.set(item[this.idProp], item);\n }\n this._treeMap = map;\n\n for (const item of this.dataSource) {\n const children = this.getChildren(item);\n if (children?.length) {\n for (const childId of children) {\n const child = map.get(childId);\n if (child && child.parentId == null) {\n child.parentId = item[this.idProp];\n }\n }\n }\n }\n\n for (const item of this.dataSource) {\n let level = 0;\n let current = item;\n while (current.parentId != null) {\n level++;\n const parent = map.get(current.parentId);\n if (!parent) break;\n current = parent;\n }\n item.level = level;\n }\n\n this._childCountCache.clear();\n const countChildren = (item: DataSource): number => {\n const children = this.getChildren(item);\n if (!children?.length) return 0;\n let count = 0;\n for (const childId of children) {\n const child = map.get(childId);\n if (child) {\n const childLeaves = countChildren(child);\n count += childLeaves > 0 ? childLeaves : 1;\n }\n }\n return count;\n };\n for (const item of this.dataSource) {\n if (this.hasChildren(item)) {\n this._childCountCache.set(item[this.idProp], countChildren(item));\n }\n }\n }\n\n public sortTreeOrder(items: DataSource[]): DataSource[] {\n const itemSet = new Set(items.map(i => i[this.idProp]));\n const visited = new Set<string | number>();\n const ordered: DataSource[] = [];\n const visit = (item: DataSource) => {\n if (visited.has(item[this.idProp])) return;\n if (!itemSet.has(item[this.idProp])) return;\n visited.add(item[this.idProp]);\n ordered.push(item);\n const children = this.getChildren(item);\n if (children?.length) {\n for (const childId of children) {\n const child = this._treeMap.get(childId);\n if (child) {\n visit(child);\n }\n }\n }\n };\n for (const item of items) {\n if (item.parentId == null) {\n visit(item);\n }\n }\n for (const item of items) {\n if (!visited.has(item[this.idProp])) {\n ordered.push(item);\n }\n }\n return ordered;\n }\n\n public isTreeItemVisible(dsItem: DataSource): boolean {\n if (dsItem.parentId == null) {\n return true;\n }\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent) {\n return true;\n }\n return parent.isOpen && this.isTreeItemVisible(parent);\n }\n\n public toggleTreeNode(dsItem: DataSource): void {\n dsItem.isOpen = !dsItem.isOpen;\n }\n\n public getChildCount(dsItem: DataSource): number {\n return this._childCountCache.get(dsItem[this.idProp]) || 0;\n }\n\n public isTreeItemIndeterminate(dsItem: DataSource): boolean {\n if (!this.hasChildren(dsItem)) return false;\n const allDescendants = this.getAllDescendants(dsItem);\n if (!allDescendants.length) return false;\n const checkedCount = allDescendants.filter(d => d.checked).length;\n return checkedCount > 0 && checkedCount < allDescendants.length;\n }\n\n private getAllDescendants(dsItem: DataSource): DataSource[] {\n const result: DataSource[] = [];\n const children = this.getChildren(dsItem);\n if (!children?.length) return result;\n for (const childId of children) {\n const child = this._treeMap.get(childId);\n if (child) {\n result.push(child);\n result.push(...this.getAllDescendants(child));\n }\n }\n return result;\n }\n\n private updateParentCheckedState(dsItem: DataSource): void {\n if (dsItem.parentId == null) return;\n const parent = this._treeMap.get(dsItem.parentId);\n if (!parent || !this.hasChildren(parent)) return;\n const allDescendants = this.getAllDescendants(parent);\n const allChecked = allDescendants.every(d => d.checked);\n parent.checked = allChecked;\n this.updateParentCheckedState(parent);\n }\n\n private cascadeToChildren(item: DataSource): void {\n const children = this.getChildren(item);\n if (!children?.length) return;\n this.dataSource.forEach(data => {\n if (item[this.idProp] == data[this.idProp]) {\n return;\n }\n if (children.includes(<string>data[this.idProp])) {\n data.checked = item.checked;\n if (this.hasChildren(data)) {\n this.cascadeToChildren(data);\n }\n }\n });\n }\n\n public getTreeConnectors(dsItem: DataSource): string[] {\n if (!dsItem.level) return [];\n\n const isLastFlags: boolean[] = [];\n let current: DataSource | undefined = dsItem;\n\n for (let l = dsItem.level; l >= 1; l--) {\n const parent = this._treeMap.get(current!.parentId!);\n const parentChildren = parent ? this.getChildren(parent) : undefined;\n if (!parentChildren?.length) {\n isLastFlags.push(true);\n } else {\n const lastChildId = parentChildren[parentChildren.length - 1];\n isLastFlags.push(current![this.idProp] === lastChildId);\n }\n current = parent;\n }\n\n isLastFlags.reverse();\n\n const result: string[] = [];\n for (let i = 0; i < isLastFlags.length; i++) {\n const isItemLevel = (i === isLastFlags.length - 1);\n const isLast = isLastFlags[i];\n\n if (isItemLevel) {\n result.push(isLast ? 'elbow' : 'branch');\n } else {\n result.push(isLast ? 'none' : 'through');\n }\n }\n return result;\n }\n\n public getTreeMap(): Map<string | number, DataSource> {\n return this._treeMap;\n }\n}\n","<!-- Dropdown mode (default) -->\n@if (!inline) {\n <div class=\"zen-groups-dropdown\" [style.width]=\"width\">\n <button class=\"zen-groups-toggle\"\n (click)=\"toggleDropdown()\"\n [ngClass]=\"{'active': isOpen}\">\n <span class=\"zen-groups-toggle-label\">\n @if (!selectedLabel) {\n <span class=\"zen-groups-placeholder\">{{ placeholder | translate }}</span>\n }\n @if (selectedLabel) {\n <span class=\"zen-groups-value\">{{ selectedLabel }}</span>\n }\n </span>\n <i class=\"material-icons zen-groups-chevron\">expand_more</i>\n </button>\n @if (isOpen) {\n <div class=\"zen-groups-panel\" [class.open-upward]=\"openUpward\">\n @if (!hideSearch) {\n <div class=\"zen-groups-search\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n }\n </div>\n}\n\n<!-- Inline mode (used inside zen-filter) -->\n@if (inline) {\n <div class=\"zen-groups-inline\">\n @if (!hideSearch) {\n <div class=\"zen-groups-search\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"treeContent\"></ng-container>\n </div>\n}\n\n<!-- Shared tree content -->\n<ng-template #treeContent>\n <div class=\"zen-groups-tree\">\n @if (!hideSelectAll) {\n <div class=\"action-item-checkbox select-all\">\n @if (dataSource.length === displayDataSource.length) {\n <zen-checkbox\n [(checked)]=\"isSelectedAll\"\n [indeterminate]=\"hasActiveItems && !isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll()\">\n </zen-checkbox>\n }\n </div>\n }\n\n @for (dsItem of displayDataSource; track dsItem) {\n @if (isTreeItemVisible(dsItem)) {\n <div\n class=\"action-item-checkbox tree-item\"\n [style.padding-left.px]=\"(inline ? 0 : 24) + (dsItem.level || 0) * 24\">\n @if (dsItem.level > 0) {\n @for (connector of getTreeConnectors(dsItem); track connector; let i = $index) {\n <div\n class=\"tree-connector\"\n [ngClass]=\"'tree-connector-' + connector\"\n [style.left.px]=\"(inline ? 8 : 32) + i * 24\">\n </div>\n }\n }\n <div class=\"tree-item-row\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [indeterminate]=\"isTreeItemIndeterminate(dsItem)\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"onCheckChanged(dsItem)\"\n [label]=\"dsItem[displayProp]?.toString() | translate\"></zen-checkbox>\n @if (hasChildren(dsItem)) {\n <span\n class=\"tree-item-badge\">{{ getChildCount(dsItem) }}</span>\n }\n </div>\n @if (hasChildren(dsItem)) {\n <button\n class=\"tree-item-toggle\"\n (click)=\"toggleTreeNode(dsItem)\">\n <i class=\"material-icons tree-toggle-icon\"\n [class.open]=\"dsItem.isOpen\">expand_more</i>\n </button>\n }\n </div>\n }\n }\n\n @if (searchText && displayDataSource.length === 0) {\n <div class=\"zen-groups-no-results\">\n {{ 'No Results Found' | translate }}\n </div>\n }\n </div>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-radio',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduRadioButtonComponent implements OnInit {\n\n @Input() selected: boolean;\n\n @Output() radioChange = new EventEmitter<string>();\n\n @Input() label: string;\n\n @Input() value: string;\n\n @Input() name: string;\n\n @Input() disabled = false;\n\n @Input() imageUrl: string;\n\n @Input() size: 'sm' | 'md' = 'sm';\n\n @Input() supportingText: string;\n\n public selectedRadio: string;\n\n constructor() { }\n\n ngOnInit() {\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"selected\"]) {\n if (changes[\"selected\"].currentValue) {\n this.selectedRadio = this.value;\n }\n else {\n this.selectedRadio = \"\";\n }\n }\n }\n\n public emitChange(event: any): void {\n if (this.disabled) {\n return;\n }\n this.radioChange.emit(event.target.value);\n }\n}\n","<label class=\"radio-component\"\n [ngClass]=\"{'disabled-radio': disabled, 'radio-md': size === 'md'}\"\n for=\"{{value}}\">\n <input type=\"radio\"\n class=\"radio-input\"\n name=\"{{name}}\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n id=\"{{value}}\"\n [checked]=\"selectedRadio === value\"\n (change)=\"emitChange($event)\" />\n\n <span class=\"radio-indicator\"></span>\n\n @if (label || supportingText) {\n <div class=\"radio-text-wrap\"\n >\n <span class=\"app-radio-button-label\">\n @if (imageUrl) {\n <img class=\"radio-image\"\n [src]=\"imageUrl\"\n >\n }\n {{label | translate}}\n </span>\n @if (supportingText) {\n <span class=\"app-radio-supporting-text\"\n >\n {{supportingText}}\n </span>\n }\n </div>\n }\n</label>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-spinner',\n templateUrl: './zendu-spinner.component.html',\n styleUrls: ['./zendu-spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSpinner {\n @Input() size?: \"small\" | \"default\" = \"default\";\n}\n","<div class=\"component\"\n [class.small-size]=\"size == 'small'\">\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport type DatePickerDropdownType = 'single' | 'range';\n\nexport interface DatePickerPreset {\n label: string;\n getRange: () => { start: Date; end: Date };\n}\n\nexport const ZEN_DATE_PICKER_DEFAULT_PRESETS =\n new InjectionToken<DatePickerPreset[]>('ZEN_DATE_PICKER_DEFAULT_PRESETS');\n\nexport interface DateRangeValue {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface DatePickerMarker {\n title?: string;\n color?: string;\n dates: number[];\n}\n","import {\n Component, ElementRef, EventEmitter, HostListener, Inject, Input,\n OnChanges, OnDestroy, OnInit, Optional, Output, SimpleChanges, ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport moment from 'moment/moment';\nimport { DatePickerDay } from '../datepicker/date-picker-day';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n DatePickerDropdownType, DatePickerMarker, DatePickerPreset, DateRangeValue,\n ZEN_DATE_PICKER_DEFAULT_PRESETS\n} from './date-picker-dropdown.types';\n\nconst MOBILE_BREAKPOINT = 768;\n\n// Minimum viewport width needed to show the range picker's dual-calendar\n// desktop layout (presets sidebar ~192px + two 328px calendars + dividers,\n// plus viewport margins). Below this we collapse to the single-calendar compact\n// layout, so the panel stays usable at high OS zoom or in small windows — not\n// only below the mobile breakpoint.\nconst RANGE_DESKTOP_MIN_WIDTH = 880;\n\n// Gap between the trigger and the panel, and the margin the panel is kept clear\n// of the viewport edges. The margin mirrors the SCSS max-height/max-width\n// fallback (`calc(100vh - 32px)`).\nconst PANEL_GAP = 8;\nconst VIEWPORT_MARGIN = 16;\n\n// Never clamp the scrollable panel below this — a shorter panel is unusable;\n// it scrolls internally instead (and the SCSS fallback still caps it to the\n// viewport).\nconst MIN_PANEL_HEIGHT = 160;\n\n@Component({\n selector: 'zen-date-picker-dropdown',\n templateUrl: './zendu-date-picker-dropdown.component.html',\n styleUrls: ['./zendu-date-picker-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDatePickerDropdownComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() type: DatePickerDropdownType = 'single';\n @Input() date: Date | null = null;\n @Output() dateChange = new EventEmitter<Date | null>();\n\n @Input() startDate: Date | null = null;\n @Output() startDateChange = new EventEmitter<Date | null>();\n\n @Input() endDate: Date | null = null;\n @Output() endDateChange = new EventEmitter<Date | null>();\n\n @Output() rangeChange = new EventEmitter<DateRangeValue>();\n\n @Input() presets: DatePickerPreset[] | null = null;\n @Input() minDate: Date | null = null;\n @Input() maxDate: Date | null = null;\n @Input() disabled: boolean = false;\n @Input() dateMarkers: DatePickerMarker[] = [];\n @Input() placeholder: string = '';\n @Input() mobileBreakpoint: number = MOBILE_BREAKPOINT;\n @Input() timePicker: boolean = false;\n @Input() autoApply: boolean = false;\n /**\n * Hide the built-in trigger button. The popup then anchors to the host\n * element, so an external control (e.g. a select) can drive it via open().\n */\n @Input() hideTrigger: boolean = false;\n\n /** Field label rendered above the trigger. Pass an already-translated\n * string (e.g. `[label]=\"'Select Date' | translate\"`) — not translated\n * internally. */\n @Input() label: string = '';\n\n /** Adds a red `*` to the label. */\n @Input() required: boolean = false;\n\n /** Trigger height: `md` (40px, default, matches the md button) or `form`\n * (46px, to sit flush in a 46px-tall form field row). */\n @Input() size: 'md' | 'form' = 'md';\n\n @ViewChild('triggerBtn') triggerBtn?: ElementRef;\n\n mobile = false;\n isOpen = false;\n dropdownStyle: { [key: string]: string } = {};\n\n // rAF handle used to throttle repositioning while the panel is open.\n private _positionRafId: number | null = null;\n\n // Left calendar state\n leftCurrentSlot = new Date();\n leftDayRows: Array<{ days: DatePickerDay[] }> = [];\n leftDaysTitle = '';\n\n // Right calendar state (for range desktop)\n rightCurrentSlot = new Date();\n rightDayRows: Array<{ days: DatePickerDay[] }> = [];\n rightDaysTitle = '';\n\n weekDays = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sat', 'Su'];\n\n // Internal selection state\n _selectedDate: Date | null = null;\n _selectedStart: Date | null = null;\n _selectedEnd: Date | null = null;\n _activePreset: string | null = null;\n _appliedPresetLabel: string | null = null;\n _appliedPresetStartTime: number | null = null;\n _appliedPresetEndTime: number | null = null;\n\n // Time picker state (start date, and single-date mode)\n _hours: number = 12;\n _minutes: number = 0;\n _period: 'AM' | 'PM' = 'AM';\n _hoursDisplay: string = '12';\n _minutesDisplay: string = '00';\n\n // Time picker state for the range end date\n _endHours: number = 12;\n _endMinutes: number = 0;\n _endPeriod: 'AM' | 'PM' = 'AM';\n _endHoursDisplay: string = '12';\n _endMinutesDisplay: string = '00';\n\n defaultPresets: DatePickerPreset[] = [\n {\n label: 'Today',\n getRange: () => ({\n start: moment().startOf('day').toDate(),\n end: moment().endOf('day').toDate()\n })\n },\n {\n label: 'Yesterday',\n getRange: () => ({\n start: moment().subtract(1, 'day').startOf('day').toDate(),\n end: moment().subtract(1, 'day').endOf('day').toDate()\n })\n },\n {\n label: 'This week',\n getRange: () => ({\n start: moment().startOf('isoWeek').toDate(),\n end: moment().endOf('isoWeek').toDate()\n })\n },\n {\n label: 'Last week',\n getRange: () => ({\n start: moment().subtract(1, 'week').startOf('isoWeek').toDate(),\n end: moment().subtract(1, 'week').endOf('isoWeek').toDate()\n })\n },\n {\n label: 'This month',\n getRange: () => ({\n start: moment().startOf('month').toDate(),\n end: moment().endOf('month').toDate()\n })\n },\n {\n label: 'Last month',\n getRange: () => ({\n start: moment().subtract(1, 'month').startOf('month').toDate(),\n end: moment().subtract(1, 'month').endOf('month').toDate()\n })\n }\n ];\n\n constructor(\n private _element: ElementRef,\n private _translate: TranslateService,\n @Optional() @Inject(ZEN_DATE_PICKER_DEFAULT_PRESETS) globalPresets: DatePickerPreset[] | null\n ) {\n if (globalPresets && globalPresets.length) {\n this.defaultPresets = globalPresets;\n }\n }\n\n ngOnInit(): void {\n this.checkMobile();\n }\n\n @HostListener('window:resize')\n onResize() {\n this.checkMobile();\n if (this.isOpen) {\n this.schedulePositionUpdate();\n }\n }\n\n private checkMobile() {\n const width = window.innerWidth;\n // Space-aware: collapse the range layout to a single calendar when the\n // viewport is too narrow to fit the dual-calendar desktop panel — this\n // covers high OS zoom and small windows, not only widths below the\n // mobile breakpoint.\n const cannotFitDesktopRange = this.type === 'range' && width < RANGE_DESKTOP_MIN_WIDTH;\n this.mobile = width < this.mobileBreakpoint || cannotFitDesktopRange;\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 // `type`/`mobileBreakpoint` feed the space-aware layout decision.\n if (changes['type'] || changes['mobileBreakpoint']) {\n this.checkMobile();\n }\n }\n\n ngOnDestroy(): void {\n this.removeRepositionListeners();\n }\n\n @HostListener('window:mousedown', ['$event'])\n outsideHandling(event: MouseEvent) {\n if (!this.isOpen) return;\n if (!document.body.contains(event.target as Node)) return;\n if (this._element.nativeElement.contains(event.target)) return;\n this.close();\n }\n\n get activePresets(): DatePickerPreset[] {\n return this.presets || this.defaultPresets;\n }\n\n get showPresetsSidebar(): boolean {\n return this.type === 'range' && !this.mobile;\n }\n\n get showDualCalendars(): boolean {\n return this.type === 'range' && !this.mobile;\n }\n\n get triggerLabel(): string {\n if (this.type === 'single') {\n if (this.date) {\n return this.formatDate(this.date);\n }\n return this.placeholder || this._translate.instant('Select date');\n }\n if (this.startDate && this.endDate) {\n if (this._appliedPresetLabel\n && this.startDate.getTime() === this._appliedPresetStartTime\n && this.endDate.getTime() === this._appliedPresetEndTime) {\n return this._translate.instant(this._appliedPresetLabel);\n }\n // Show the preset name when the range matches one\n const presetLabel = this.matchingPresetLabel(this.startDate, this.endDate);\n if (presetLabel) {\n return this._translate.instant(presetLabel);\n }\n return `${this.formatDate(this.startDate)} - ${this.formatDate(this.endDate)}`;\n }\n return this.placeholder || this._translate.instant('Select dates');\n }\n\n private matchingPresetLabel(start: Date, end: Date): string | null {\n for (const preset of this.activePresets) {\n const range = preset.getRange();\n if (range.start && range.end\n && moment(start).isSame(range.start, 'day')\n && moment(end).isSame(range.end, 'day')) {\n return preset.label;\n }\n }\n return null;\n }\n\n get legendMarkers(): DatePickerMarker[] {\n return (this.dateMarkers || []).filter(m => !!m.title);\n }\n\n get hasValue(): boolean {\n if (this.type === 'single') return !!this.date;\n return !!(this.startDate && this.endDate);\n }\n\n get formattedSelectedDate(): string {\n // Date only — the time is edited in the time-picker section below, so\n // repeating it here would overflow the narrow input box.\n return this._selectedDate ? this.formatDate(this._selectedDate, false) : '';\n }\n\n get formattedStartDate(): string {\n return this._selectedStart ? this.formatDate(this._selectedStart, false) : '';\n }\n\n get formattedEndDate(): string {\n return this._selectedEnd ? this.formatDate(this._selectedEnd, false) : '';\n }\n\n formatDate(date: Date, includeTime: boolean = true): 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 (includeTime && 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 // Recompute the layout for the current viewport/zoom before rendering,\n // so the correct (desktop vs compact) branch is shown on open.\n this.checkMobile();\n this.isOpen = true;\n this._selectedDate = this.date ? new Date(this.date) : null;\n this._selectedStart = this.startDate ? new Date(this.startDate) : null;\n this._selectedEnd = this.endDate ? new Date(this.endDate) : null;\n this._activePreset = (this._appliedPresetLabel\n && this.startDate?.getTime() === this._appliedPresetStartTime\n && this.endDate?.getTime() === this._appliedPresetEndTime)\n ? this._appliedPresetLabel\n : null;\n\n if (this.timePicker) {\n if (this.type === 'single') {\n this.initTimeFromDate(this.date, 'start');\n } else {\n this.initTimeFromDate(this.startDate, 'start');\n this.initTimeFromDate(this.endDate, 'end');\n }\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.addRepositionListeners();\n this.updateDropdownPosition();\n }\n\n private updateDropdownPosition() {\n const anchorEl = this.anchorElement();\n if (!anchorEl) return;\n\n // Synchronous first placement so the panel opens without a flash. The\n // panel hasn't rendered yet (it renders this change-detection pass), so\n // we anchor it and cap its height to the space on the chosen side up\n // front — that way the footer can't be pushed off-screen even before we\n // measure the real panel. `clampToViewport()` then refines it once the\n // dual calendars have laid out.\n const rect = anchorEl.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const cb = this.containingBlockRect();\n const spaceBelow = viewportHeight - rect.bottom - PANEL_GAP - VIEWPORT_MARGIN;\n const spaceAbove = rect.top - PANEL_GAP - VIEWPORT_MARGIN;\n this.dropdownStyle = spaceBelow >= spaceAbove\n ? {\n left: `${rect.left - cb.left}px`,\n top: `${rect.bottom + PANEL_GAP - cb.top}px`,\n 'max-height': `${Math.max(MIN_PANEL_HEIGHT, spaceBelow)}px`\n }\n : {\n left: `${rect.left - cb.left}px`,\n bottom: `${cb.bottom - rect.top + PANEL_GAP}px`,\n 'max-height': `${Math.max(MIN_PANEL_HEIGHT, spaceAbove)}px`\n };\n\n // Measure AFTER the calendars render. The dual-calendar range layout is\n // tall, and a single pre-render frame can mis-measure its height and\n // place the footer off-screen — so wait two frames, then clamp using the\n // real panel size.\n requestAnimationFrame(() => requestAnimationFrame(() => this.clampToViewport()));\n }\n\n /**\n * Re-clamp the open panel to the viewport using its real measured size.\n * Keeps the panel anchored to the trigger and guarantees the footer stays\n * reachable (the panel scrolls internally) at any viewport size or zoom.\n */\n private clampToViewport() {\n if (!this.isOpen) return;\n const anchorEl = this.anchorElement();\n const panelEl = this._element.nativeElement.querySelector('.dropdown-menu') as HTMLElement | null;\n if (!anchorEl || !panelEl) return;\n\n const rect = anchorEl.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const panelWidth = panelEl.offsetWidth;\n const panelHeight = panelEl.scrollHeight;\n const spaceBelow = viewportHeight - rect.bottom - PANEL_GAP - VIEWPORT_MARGIN;\n const spaceAbove = rect.top - PANEL_GAP - VIEWPORT_MARGIN;\n\n const cb = this.containingBlockRect();\n const style: { [key: string]: string } = {};\n\n // Horizontal: keep the panel fully on-screen (computed in viewport\n // space), then offset into the panel's containing block.\n const desiredLeft = Math.max(\n VIEWPORT_MARGIN,\n Math.min(rect.left, viewportWidth - panelWidth - VIEWPORT_MARGIN)\n );\n style['left'] = `${desiredLeft - cb.left}px`;\n\n // Vertical: open below when it fits or there is more room below,\n // otherwise above. Always cap max-height to the available space so the\n // footer stays reachable via the panel's internal scroll.\n if (panelHeight <= spaceBelow || spaceBelow >= spaceAbove) {\n style['top'] = `${rect.bottom + PANEL_GAP - cb.top}px`;\n style['max-height'] = `${Math.max(MIN_PANEL_HEIGHT, spaceBelow)}px`;\n } else {\n style['bottom'] = `${cb.bottom - rect.top + PANEL_GAP}px`;\n style['max-height'] = `${Math.max(MIN_PANEL_HEIGHT, spaceAbove)}px`;\n }\n\n this.dropdownStyle = style;\n }\n\n /**\n * The panel is `position: fixed`, so its coordinates are viewport-relative\n * ONLY when no ancestor establishes a containing block. Inside a CDK\n * overlay pane (e.g. when this picker sits in a `zen-filter`), the pane is\n * `transform`ed and becomes the containing block, so `fixed` is measured\n * from the pane, not the viewport — which detaches the panel from its\n * trigger. Return that containing block's viewport rect so the\n * viewport-space coordinates above can be offset into the panel's actual\n * coordinate space; falls back to the viewport when nothing transforms.\n */\n private containingBlockRect(): {\n left: number;\n top: number;\n bottom: number;\n } {\n let node: HTMLElement | null =\n this._element.nativeElement.parentElement;\n while (node) {\n const s = getComputedStyle(node);\n const establishesContainingBlock =\n (s.transform && s.transform !== 'none') ||\n (s.perspective && s.perspective !== 'none') ||\n (s.filter && s.filter !== 'none') ||\n s.willChange === 'transform' ||\n (s.contain\n ? /\\b(paint|layout|strict|content)\\b/.test(s.contain)\n : false);\n if (establishesContainingBlock) {\n const r = node.getBoundingClientRect();\n return { left: r.left, top: r.top, bottom: r.bottom };\n }\n node = node.parentElement;\n }\n return { left: 0, top: 0, bottom: window.innerHeight };\n }\n\n /**\n * Anchor to the trigger button, or to the host element when the trigger is\n * hidden (an external control drives the popup).\n */\n private anchorElement(): HTMLElement | null {\n return this.triggerBtn?.nativeElement ?? this._element.nativeElement ?? null;\n }\n\n private addRepositionListeners() {\n // Capture phase so scrolls inside ANY ancestor (e.g. a dialog body) are\n // caught — `scroll` does not bubble, so a window:scroll listener alone\n // would miss them and the fixed panel would detach from its trigger.\n window.addEventListener('scroll', this._onViewportChange, true);\n }\n\n private removeRepositionListeners() {\n window.removeEventListener('scroll', this._onViewportChange, true);\n if (this._positionRafId != null) {\n cancelAnimationFrame(this._positionRafId);\n this._positionRafId = null;\n }\n }\n\n private _onViewportChange = () => this.schedulePositionUpdate();\n\n private schedulePositionUpdate() {\n if (this._positionRafId != null) return;\n this._positionRafId = requestAnimationFrame(() => {\n this._positionRafId = null;\n this.clampToViewport();\n });\n }\n\n close() {\n this.isOpen = false;\n this.removeRepositionListeners();\n }\n\n // Calendar navigation\n leftPrevMonth() {\n this.leftCurrentSlot = moment(this.leftCurrentSlot).subtract(1, 'month').toDate();\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n leftNextMonth() {\n this.leftCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n rightPrevMonth() {\n this.rightCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.leftCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.updateCalendars();\n }\n\n rightNextMonth() {\n this.rightCurrentSlot = moment(this.rightCurrentSlot).add(1, 'month').toDate();\n this.leftCurrentSlot = moment(this.rightCurrentSlot).subtract(1, 'month').toDate();\n this.updateCalendars();\n }\n\n // For mobile/single mode when there's only one calendar\n prevMonth() {\n this.leftPrevMonth();\n }\n\n nextMonth() {\n this.leftNextMonth();\n }\n\n selectDay(day: DatePickerDay) {\n if (day.isDisabled || day.isOutside) return;\n\n if (this.type === 'single') {\n this._selectedDate = new Date(day.date);\n if (this.autoApply) {\n this.apply();\n return;\n }\n } else {\n // Range selection logic — start anchors to start-of-day, end to end-of-day,\n // so a same-day pick spans the full 24h (matches preset semantics).\n if (!this._selectedStart || (this._selectedStart && this._selectedEnd)) {\n // Start new selection\n this._selectedStart = moment(day.date).startOf('day').toDate();\n this._selectedEnd = null;\n this._activePreset = null;\n } else {\n // Complete the range\n const newDay = moment(day.date).startOf('day').toDate();\n if (moment(newDay).isBefore(this._selectedStart)) {\n this._selectedEnd = moment(this._selectedStart).endOf('day').toDate();\n this._selectedStart = newDay;\n } else {\n this._selectedEnd = moment(newDay).endOf('day').toDate();\n }\n }\n }\n this.updateCalendars();\n }\n\n selectPreset(preset: DatePickerPreset) {\n const range = preset.getRange();\n this._selectedStart = range.start;\n this._selectedEnd = range.end;\n this._activePreset = preset.label;\n this.leftCurrentSlot = new Date(range.start);\n if (this.showDualCalendars) {\n this.rightCurrentSlot = moment(this.leftCurrentSlot).add(1, 'month').toDate();\n }\n this.updateCalendars();\n }\n\n goToToday() {\n const today = new Date();\n this._selectedDate = moment(today).startOf('day').toDate();\n this.leftCurrentSlot = new Date(today);\n this.updateCalendars();\n }\n\n // Time picker methods\n private formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n incrementHours(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endHours = this._endHours >= 12 ? 1 : this._endHours + 1;\n this._endHoursDisplay = this.formatNum(this._endHours);\n } else {\n this._hours = this._hours >= 12 ? 1 : this._hours + 1;\n this._hoursDisplay = this.formatNum(this._hours);\n }\n }\n\n decrementHours(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endHours = this._endHours <= 1 ? 12 : this._endHours - 1;\n this._endHoursDisplay = this.formatNum(this._endHours);\n } else {\n this._hours = this._hours <= 1 ? 12 : this._hours - 1;\n this._hoursDisplay = this.formatNum(this._hours);\n }\n }\n\n incrementMinutes(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endMinutes = this._endMinutes >= 59 ? 0 : this._endMinutes + 1;\n this._endMinutesDisplay = this.formatNum(this._endMinutes);\n } else {\n this._minutes = this._minutes >= 59 ? 0 : this._minutes + 1;\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n }\n\n decrementMinutes(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endMinutes = this._endMinutes <= 0 ? 59 : this._endMinutes - 1;\n this._endMinutesDisplay = this.formatNum(this._endMinutes);\n } else {\n this._minutes = this._minutes <= 0 ? 59 : this._minutes - 1;\n this._minutesDisplay = this.formatNum(this._minutes);\n }\n }\n\n onHoursInput(event: Event, target: 'start' | 'end' = 'start') {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n if (target === 'end') {\n this._endHours = 1;\n this._endHoursDisplay = '';\n } else {\n this._hours = 1;\n this._hoursDisplay = '';\n }\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 1 && val <= 12) {\n if (target === 'end') {\n this._endHours = val;\n this._endHoursDisplay = raw;\n } else {\n this._hours = val;\n this._hoursDisplay = raw;\n }\n } else {\n input.value = target === 'end' ? this._endHoursDisplay : this._hoursDisplay;\n }\n }\n\n onMinutesInput(event: Event, target: 'start' | 'end' = 'start') {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n if (target === 'end') {\n this._endMinutes = 0;\n this._endMinutesDisplay = '';\n } else {\n this._minutes = 0;\n this._minutesDisplay = '';\n }\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n if (target === 'end') {\n this._endMinutes = val;\n this._endMinutesDisplay = raw;\n } else {\n this._minutes = val;\n this._minutesDisplay = raw;\n }\n } else {\n input.value = target === 'end' ? this._endMinutesDisplay : this._minutesDisplay;\n }\n }\n\n clampHours(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endHours = Math.max(1, Math.min(12, this._endHours));\n this._endHoursDisplay = this.formatNum(this._endHours);\n } else {\n this._hours = Math.max(1, Math.min(12, this._hours));\n this._hoursDisplay = this.formatNum(this._hours);\n }\n }\n\n clampMinutes(target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endMinutes = Math.max(0, Math.min(59, this._endMinutes));\n this._endMinutesDisplay = this.formatNum(this._endMinutes);\n } else {\n this._minutes = Math.max(0, Math.min(59, this._minutes));\n this._minutesDisplay = this.formatNum(this._minutes);\n }\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', target: 'start' | 'end' = 'start') {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hours') this.incrementHours(target);\n else this.incrementMinutes(target);\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hours') this.decrementHours(target);\n else this.decrementMinutes(target);\n }\n }\n\n setPeriod(period: 'AM' | 'PM', target: 'start' | 'end' = 'start') {\n if (target === 'end') {\n this._endPeriod = period;\n } else {\n this._period = period;\n }\n }\n\n private applyTimeToDate(date: Date, target: 'start' | 'end' = 'start'): Date {\n const result = new Date(date);\n let hours = target === 'end' ? this._endHours : this._hours;\n const minutes = target === 'end' ? this._endMinutes : this._minutes;\n const period = target === 'end' ? this._endPeriod : this._period;\n if (period === 'AM' && hours === 12) {\n hours = 0;\n } else if (period === 'PM' && hours !== 12) {\n hours += 12;\n }\n result.setHours(hours, minutes, 0, 0);\n return result;\n }\n\n private initTimeFromDate(date: Date | null, target: 'start' | 'end' = 'start') {\n let hours = 12;\n let minutes = 0;\n let period: 'AM' | 'PM' = 'AM';\n if (date) {\n const h = date.getHours();\n minutes = date.getMinutes();\n if (h === 0) {\n hours = 12;\n period = 'AM';\n } else if (h < 12) {\n hours = h;\n period = 'AM';\n } else if (h === 12) {\n hours = 12;\n period = 'PM';\n } else {\n hours = h - 12;\n period = 'PM';\n }\n }\n if (target === 'end') {\n this._endHours = hours;\n this._endMinutes = minutes;\n this._endPeriod = period;\n this._endHoursDisplay = this.formatNum(hours);\n this._endMinutesDisplay = this.formatNum(minutes);\n } else {\n this._hours = hours;\n this._minutes = minutes;\n this._period = period;\n this._hoursDisplay = this.formatNum(hours);\n this._minutesDisplay = this.formatNum(minutes);\n }\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, 'start')\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, 'end')\n : new Date(this._selectedEnd);\n this.endDateChange.emit(this.endDate);\n }\n if (this._selectedStart && this._selectedEnd) {\n this.rangeChange.emit({ start: this.startDate, end: this.endDate });\n }\n if (this._activePreset && this.startDate && this.endDate) {\n this._appliedPresetLabel = this._activePreset;\n this._appliedPresetStartTime = this.startDate.getTime();\n this._appliedPresetEndTime = this.endDate.getTime();\n } else {\n this._appliedPresetLabel = null;\n this._appliedPresetStartTime = null;\n this._appliedPresetEndTime = null;\n }\n }\n this.close();\n }\n\n cancel() {\n this.close();\n }\n\n get canApply(): boolean {\n if (this.type === 'single') return !!this._selectedDate;\n return !!(this._selectedStart && this._selectedEnd);\n }\n\n private updateCalendars() {\n this.updateDays(this.leftCurrentSlot, 'left');\n if (this.showDualCalendars) {\n this.updateDays(this.rightCurrentSlot, 'right');\n }\n }\n\n private updateDays(slot: Date, side: 'left' | 'right') {\n const title = moment(slot).format('MMMM YYYY');\n\n const dayRows: Array<{ days: DatePickerDay[] }> = [];\n let current = moment(slot).startOf('month').startOf('isoWeek');\n const end = moment(slot).endOf('month').endOf('isoWeek');\n const currentMonth = moment(slot).month();\n\n while (current.isSameOrBefore(end)) {\n const row = { days: [] as DatePickerDay[] };\n dayRows.push(row);\n for (let idx = 0; idx < 7; idx++) {\n const isOutside = currentMonth !== current.month();\n\n let isDisabled = false;\n if (this.minDate && current.toDate() < this.minDate) {\n isDisabled = true;\n } else if (this.maxDate && current.toDate() > this.maxDate) {\n isDisabled = true;\n }\n\n let markerColors: (string | undefined)[] | undefined;\n if (!isOutside && this.dateMarkers && this.dateMarkers.length) {\n const ts = current.valueOf();\n const colors: (string | undefined)[] = [];\n for (const m of this.dateMarkers) {\n if (m.dates && m.dates.indexOf(ts) >= 0) {\n colors.push(m.color);\n }\n }\n if (colors.length) markerColors = colors;\n }\n\n const isSelected = isOutside ? false : this.isDaySelected(current);\n\n row.days.push({\n date: current.toDate(),\n lbl: isOutside ? '' : current.date().toString(),\n isOutside,\n selected: isSelected,\n isDisabled: isOutside ? true : isDisabled,\n isHighlighted: false,\n markerColors\n });\n\n current = current.clone().add(1, 'day');\n }\n }\n\n if (side === 'left') {\n this.leftDayRows = dayRows;\n this.leftDaysTitle = title;\n } else {\n this.rightDayRows = dayRows;\n this.rightDaysTitle = title;\n }\n }\n\n private isDaySelected(date: moment.Moment): boolean {\n if (this.type === 'single') {\n return this._selectedDate ? date.isSame(moment(this._selectedDate), 'day') : false;\n }\n if (this._selectedStart && date.isSame(moment(this._selectedStart), 'day')) return true;\n if (this._selectedEnd && date.isSame(moment(this._selectedEnd), 'day')) return true;\n return false;\n }\n\n isToday(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n return moment(day.date).isSame(moment(), 'day');\n }\n\n isInRange(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedStart || !this._selectedEnd) return false;\n const d = moment(day.date);\n return d.isAfter(moment(this._selectedStart), 'day') && d.isBefore(moment(this._selectedEnd), 'day');\n }\n\n isRangeStart(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedStart) return false;\n return moment(day.date).isSame(moment(this._selectedStart), 'day');\n }\n\n isRangeEnd(day: DatePickerDay): boolean {\n if (day.isOutside) return false;\n if (this.type !== 'range' || !this._selectedEnd) return false;\n return moment(day.date).isSame(moment(this._selectedEnd), 'day');\n }\n}\n","<div class=\"zen-dpd\">\n <!-- Field label -->\n @if (label) {\n <label class=\"zen-dpd-label\">\n {{ label }}\n @if (required) {\n <span class=\"zen-dpd-required\">*</span>\n }\n </label>\n }\n\n <!-- Trigger Button -->\n @if (!hideTrigger) {\n <button class=\"dropdown-trigger\"\n #triggerBtn\n [class.size-form]=\"size === 'form'\"\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\n <!-- Dropdown Panel -->\n @if (isOpen) {\n <div class=\"dropdown-menu\" [class.mobile]=\"mobile\" [ngStyle]=\"dropdownStyle\">\n <!-- RANGE DESKTOP: presets sidebar + dual calendar -->\n @if (type === 'range' && !mobile) {\n <!-- Presets sidebar -->\n <div class=\"presets-sidebar\">\n @for (preset of activePresets; track preset) {\n <div class=\"preset-item\"\n [class.active]=\"_activePreset === preset.label\"\n (click)=\"selectPreset(preset)\">\n {{ preset.label | translate }}\n </div>\n }\n </div>\n <div class=\"sidebar-divider\"></div>\n <!-- Calendars + bottom panel -->\n <div class=\"calendars-container\">\n <div class=\"dual-calendars\">\n <!-- Left calendar -->\n <div class=\"calendar-panel\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"leftPrevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"leftNextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n </div>\n <div class=\"calendar-divider\"></div>\n <!-- Right calendar -->\n <div class=\"calendar-panel\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"rightPrevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ rightDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"rightNextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: rightDayRows }\"></ng-container>\n </div>\n </div>\n </div>\n <!-- Time Picker (start + end, side by side) -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <div class=\"time-pickers-dual\">\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'start', label: 'Start time' }\"></ng-container>\n <div class=\"time-pickers-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'end', label: 'End time' }\"></ng-container>\n </div>\n }\n <div class=\"bottom-divider\"></div>\n <!-- Bottom panel: inputs (or legend) + actions -->\n <div class=\"bottom-panel\">\n @if (legendMarkers.length) {\n <div class=\"marker-legend\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n } @else {\n <div class=\"input-fields\">\n <div class=\"date-input\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedStart\">\n {{ _selectedStart ? formattedStartDate : ('Start date' | translate) }}\n </span>\n </div>\n <span class=\"date-separator\">–</span>\n <div class=\"date-input\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedEnd\">\n {{ _selectedEnd ? formattedEndDate : ('End date' | translate) }}\n </span>\n </div>\n </div>\n }\n <div class=\"actions\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n </div>\n }\n <!-- RANGE MOBILE: single calendar with dual inputs on top -->\n @if (type === 'range' && mobile) {\n <div class=\"single-calendar-container\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"nextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <!-- Range inputs -->\n <div class=\"mobile-range-inputs\">\n <div class=\"date-input compact\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedStart\">\n {{ _selectedStart ? formattedStartDate : ('Select date' | translate) }}\n </span>\n </div>\n <span class=\"date-separator\">–</span>\n <div class=\"date-input compact\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedEnd\">\n {{ _selectedEnd ? formattedEndDate : ('Select date' | translate) }}\n </span>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n <!-- Time Picker (start + end, side by side) -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <div class=\"time-pickers-dual\">\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'start', label: 'Start time' }\"></ng-container>\n <div class=\"time-pickers-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'end', label: 'End time' }\"></ng-container>\n </div>\n }\n @if (legendMarkers.length) {\n <div class=\"marker-legend standalone\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n }\n <div class=\"bottom-divider\"></div>\n <div class=\"bottom-panel compact\">\n <div class=\"actions full-width\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n </div>\n }\n <!-- SINGLE DATE: single calendar + input + today button -->\n @if (type === 'single') {\n <div class=\"single-calendar-container\">\n <div class=\"calendar-content\">\n <div class=\"month-header\">\n <button class=\"nav-btn\" (click)=\"prevMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-left.svg\"></zen-icon>\n </button>\n <span class=\"month-title\">{{ leftDaysTitle }}</span>\n <button class=\"nav-btn\" (click)=\"nextMonth()\">\n <zen-icon src=\"assets/ng-zenduit/icons/arrow-right.svg\"></zen-icon>\n </button>\n </div>\n <!-- Date input + Today button -->\n <div class=\"single-actions-row\">\n <div class=\"date-input flex-1\">\n <span class=\"date-input-text\" [class.placeholder]=\"!_selectedDate\">\n {{ _selectedDate ? formattedSelectedDate : ('Select date' | translate) }}\n </span>\n </div>\n <button class=\"btn-today\" (click)=\"goToToday()\">{{ 'Today' | translate }}</button>\n </div>\n <ng-container *ngTemplateOutlet=\"calendarGrid; context: { $implicit: leftDayRows }\"></ng-container>\n </div>\n <!-- Time Picker -->\n @if (timePicker) {\n <div class=\"bottom-divider\"></div>\n <ng-container *ngTemplateOutlet=\"timePickerSection; context: { target: 'start' }\"></ng-container>\n }\n @if (legendMarkers.length) {\n <div class=\"marker-legend standalone single\">\n @for (m of legendMarkers; track m) {\n <div class=\"legend-item\">\n <span class=\"legend-dot\" [style.background]=\"m.color || null\"></span>\n <span class=\"legend-title\">{{ m.title | translate }}</span>\n </div>\n }\n </div>\n }\n @if (!autoApply) {\n <div class=\"bottom-divider\"></div>\n <div class=\"bottom-panel compact\">\n <div class=\"actions full-width\">\n <button class=\"btn-cancel\" (click)=\"cancel()\">{{ 'Cancel' | translate }}</button>\n <button class=\"btn-apply\" [disabled]=\"!canApply\" (click)=\"apply()\">{{ 'Apply' | translate }}</button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n\n<!-- Shared time picker template -->\n<ng-template #timePickerSection let-target=\"target\" let-label=\"label\">\n <div class=\"time-picker-container\">\n <div class=\"time-picker-content\">\n <span class=\"time-picker-label\">{{ (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]=\"target === 'end' ? _endHoursDisplay : _hoursDisplay\"\n (input)=\"onHoursInput($event, target)\"\n (focus)=\"onTimeFocus($event)\"\n (blur)=\"clampHours(target)\"\n (keydown)=\"onTimeKeydown($event, 'hours', target)\"\n maxlength=\"2\" />\n <div class=\"time-arrows\">\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"incrementHours(target)\">\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(target)\">\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]=\"target === 'end' ? _endMinutesDisplay : _minutesDisplay\"\n (input)=\"onMinutesInput($event, target)\"\n (focus)=\"onTimeFocus($event)\"\n (blur)=\"clampMinutes(target)\"\n (keydown)=\"onTimeKeydown($event, 'minutes', target)\"\n maxlength=\"2\" />\n <div class=\"time-arrows\">\n <button class=\"time-arrow-btn\" type=\"button\" tabindex=\"-1\" (click)=\"incrementMinutes(target)\">\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(target)\">\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]=\"(target === 'end' ? _endPeriod : _period) === 'AM'\"\n (click)=\"setPeriod('AM', target)\">\n AM\n </button>\n <button class=\"time-period-btn\"\n [class.active]=\"(target === 'end' ? _endPeriod : _period) === 'PM'\"\n (click)=\"setPeriod('PM', target)\">\n PM\n </button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- Shared calendar grid template -->\n<ng-template #calendarGrid let-dayRows>\n <div class=\"dates-grid\">\n <!-- Week day headers -->\n <div class=\"week-header\">\n @for (wd of weekDays; track wd) {\n <div class=\"cell header-cell\">{{ wd | translate }}</div>\n }\n </div>\n <!-- Day rows -->\n @for (row of dayRows; track row) {\n <div class=\"day-row\">\n @for (day of row.days; track day) {\n <div class=\"cell day-cell\"\n [class.outside]=\"day.isOutside\"\n [class.selected]=\"day.selected\"\n [class.today]=\"isToday(day)\"\n [class.disabled]=\"day.isDisabled\"\n [class.in-range]=\"isInRange(day)\"\n [class.range-start]=\"isRangeStart(day)\"\n [class.range-end]=\"isRangeEnd(day)\"\n (click)=\"selectDay(day)\">\n <span class=\"day-number\">{{ day.lbl }}</span>\n @if (day.markerColors?.length) {\n <div class=\"marker-dots\">\n @for (c of day.markerColors; track c) {\n <span class=\"marker-dot\"\n [style.background]=\"c || null\"></span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ng-template>\n","import { Component, Input, HostBinding, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-button',\n templateUrl: './zen-button.component.html',\n styleUrls: ['./zen-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenButtonComponent {\n \n @Input() variant: 'primary' | 'secondary-gray' | 'secondary' | 'tertiary-gray' | 'tertiary' | 'link-gray' | 'link' = 'primary';\n \n @Input() buttonType: 'button' | 'button-dot' | 'button-icon-leading' | 'button-icon-trailing' | 'button-icon-only' = 'button';\n \n @Input() icon?: string;\n @Input() iconRotated: boolean = false;\n @Input() size: '2xl' | 'xl' | 'lg' | 'md' | 'sm' = 'md';\n @Input() destructive: boolean = false;\n @Input() disabled: boolean = false;\n // Bind to the host so the element itself stretches — the host defaults to\n // inline, so without this the inner button's width:100% only fills the\n // shrink-to-content host and never actually spans the parent.\n @HostBinding('class.full-width') @Input() fullWidth: boolean = false;\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n get isIconOnly(): boolean {\n return this.buttonType === 'button-icon-only';\n }\n\n get buttonClasses(): string {\n const classes = [];\n \n // Base variant class\n if (this.variant === 'primary') {\n classes.push('button-base');\n } else if (this.variant === 'secondary-gray') {\n classes.push('button-secondary-gray');\n } else if (this.variant === 'secondary') {\n classes.push('button-secondary-color');\n } else if (this.variant === 'tertiary-gray') {\n classes.push('button-tertiary-gray');\n } else if (this.variant === 'tertiary') {\n classes.push('button-tertiary-color');\n } else if (this.variant === 'link-gray') {\n classes.push('button-link-gray');\n } else if (this.variant === 'link') {\n classes.push('button-link-color');\n }\n \n // Size class\n classes.push(`button-${this.size}`);\n \n // Typography classes based on size\n classes.push('text');\n if (this.size === '2xl') {\n classes.push('text-lg');\n classes.push('text-weight-medium');\n } else if (this.size === 'xl' || this.size === 'lg') {\n classes.push('text-md');\n classes.push('text-weight-medium');\n } else {\n classes.push('text-sm');\n classes.push('text-weight-medium');\n }\n \n // State modifiers\n if (this.destructive) {\n classes.push('destructive');\n }\n \n if (this.isIconOnly) {\n classes.push('button-icon-only');\n }\n \n if (this.fullWidth) {\n classes.push('full-width');\n }\n \n return classes.join(' ');\n }\n\n getIconName(): string {\n // Use the icon input if provided, otherwise default to circle\n return this.icon || 'circle';\n }\n}","<button\n [class]=\"buttonClasses\"\n [type]=\"type\"\n [disabled]=\"disabled\">\n\n <!-- Dot indicator -->\n @if (buttonType === 'button-dot') {\n <span class=\"button-dot\"></span>\n }\n\n <!-- Leading icon -->\n @if (buttonType === 'button-icon-leading' || isIconOnly) {\n <zen-icon\n [name]=\"getIconName()\"\n [class.rotated]=\"iconRotated\"\n size=\"xs\"></zen-icon>\n }\n\n <!-- Button content -->\n @if (!isIconOnly) {\n <ng-content></ng-content>\n }\n\n <!-- Trailing icon -->\n @if (buttonType === 'button-icon-trailing') {\n <zen-icon\n [name]=\"getIconName()\"\n [class.rotated]=\"iconRotated\"\n size=\"xs\"></zen-icon>\n }\n</button>","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n DataSource,\n FiltersConfig,\n FiltersConfigItem,\n MultiSelectItem,\n} from './filtersConfig';\nimport uniqBy from 'lodash.uniqby';\nimport moment from 'moment/moment';\nimport { Util } from '../util';\nimport { DateRange } from './dateRange';\nimport { ZenduOverlayService } from '../overlay/zendu-overlay.service';\nimport { ZenConnectedPanelRef } from '../overlay/zendu-overlay.types';\n\n@Component({\n selector: 'zen-filter',\n templateUrl: './zendu-filter.component.html',\n styleUrls: ['./zendu-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFilterComponent\n implements OnChanges, DoCheck, AfterViewInit, OnDestroy\n{\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 // Optional preset that \"Clear Filter\" resets to. When provided, Clear restores\n // the panel to this filter instead of emptying it (resetBehavior is ignored in\n // that case). When omitted, Clear behaves as before, governed by resetBehavior.\n @Input() defaultFilter?: object;\n\n @Output() filterChange = new EventEmitter<object>();\n\n /**\n * Open/closed state and the single source of truth for the panel. Assigning it\n * attaches/detaches the CDK overlay panel, so every existing open/close path\n * (toggle, hide, apply, external `[(isVisible)]` binding) stays correct without\n * touching each call site — mirrors zen-select's `isOpen`.\n */\n private _isVisible = false;\n @Input()\n set isVisible(open: boolean) {\n open = !!open;\n if (open === this._isVisible) {\n return;\n }\n this._isVisible = open;\n if (open) {\n this._openOverlay();\n } else {\n this._closeOverlay();\n }\n }\n get isVisible(): boolean {\n return this._isVisible;\n }\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() triggerVariant: 'default' | 'icon-only' = 'default';\n\n @Input() showOptions: boolean;\n\n @Input() customOptions: string;\n\n @Input() wrapperBodyClass: string;\n\n /**\n * @deprecated Obsolete since the panel moved to the CDK overlay\n * (ZenduOverlayService), which owns positioning. Kept for back-compat so\n * existing `[customPosition]` bindings keep compiling; it no longer has any\n * effect. Use `position` to steer the preferred side.\n */\n @Input() customPosition: 'fixed' | 'absolute' = 'fixed';\n\n public searchText = '';\n\n // Forces the trigger highlight on. Set internally by updateAppliedState() and\n // settable by a host (via ViewChild) to highlight independent of the live\n // selection count. Read through hasActiveFilters in ngDoCheck().\n public isApplied = false;\n\n private lastAppliedFilter: any = {};\n\n private resetedFilter: any;\n\n // Cached JSON of the default preset's filter object (getFilterObject of\n // defaultFilter). Invariant between config/defaultFilter changes, so it's\n // computed in ngOnChanges and reused each tick by ngDoCheck — avoiding a\n // rebuild of the default object on every change-detection cycle.\n private _defaultFilterSignature: string | null = null;\n\n // Plain fields (not getters) read directly in the template. Recomputed once\n // per change-detection cycle in ngDoCheck(), so the template's repeated reads\n // (badge condition, badge value, footer, trigger highlight) cost O(1) each\n // instead of re-running the count per binding.\n // Live count of the CURRENT in-panel selection (recomputed each CD in\n // ngDoCheck). Drives the in-menu footer counter, the Clear button and the\n // per-section dots — the editing surface, which reverts on cancel.\n public selectedCount = 0;\n\n // Whether the Clear / Reset button is disabled (recomputed each CD). In clear\n // mode it's disabled when nothing is selected; in default mode (defaultFilter\n // set) it's disabled only when the current selection already equals the\n // default — so resetting to the default is always offered when state differs.\n public resetDisabled = true;\n\n // Count of the APPLIED filter (last committed via Apply / external sync /\n // init). Drives the trigger badge + highlight so the trigger reflects what is\n // actually filtering the data, not in-progress edits. Updated only in\n // updateAppliedState() and on config init — never during live editing.\n public appliedCount = 0;\n\n public hasActiveFilters = false;\n\n public showNoFilterResult: boolean;\n\n public errorMessage: string[] = [];\n\n public selectedDateRangeOptions: { [key: string]: string } = {};\n\n /** Trigger element the overlay panel is anchored to. */\n @ViewChild('mainComponent', { static: false })\n _componentElement: ElementRef<HTMLElement>;\n\n /** The filter panel content, rendered into the overlay when open. */\n @ViewChild('filterPanel', { static: false })\n private filterPanel?: TemplateRef<unknown>;\n\n private _panelRef: ZenConnectedPanelRef | null = null;\n\n constructor(\n private overlay: ZenduOverlayService,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n public ngAfterViewInit(): void {\n // Honour an initial `[isVisible]=\"true\"` binding: the input setter may have\n // run before the view (and thus the trigger/panel refs) existed, so open\n // here once they're available.\n if (this._isVisible && !this._panelRef) {\n this._openOverlay();\n }\n }\n\n public ngOnDestroy(): void {\n this._closeOverlay();\n }\n\n /**\n * Open the filter panel in a CDK overlay anchored to the trigger. The overlay\n * owns viewport-aware positioning (flip up/down, push into view, clamp +\n * internal scroll) and renders at the body level, so the panel is never\n * clipped by an ancestor's `overflow` or by the viewport edge. Mirrors\n * zen-select's `_openOverlay`.\n */\n private _openOverlay(): void {\n if (this._panelRef || !this._componentElement || !this.filterPanel) {\n return;\n }\n\n this._panelRef = this.overlay.openConnectedPanel({\n origin: this._componentElement,\n content: this.filterPanel,\n viewContainerRef: this.viewContainerRef,\n // The panel has its own fixed width (.filter-menu); let it size to content\n // and the overlay's flexible dimensions clamp it on small viewports.\n width: 'auto',\n scrollBehavior: 'reposition',\n positions: this._buildConnectedPositions(),\n });\n\n // Outside click / Escape / detach → close AND restore the last-applied\n // filter (cancel-edit), matching the old outside-click behaviour. Closing\n // via Apply/toggle goes through `_closeOverlay()` directly, which the\n // service does not report as a close, so those paths never restore.\n this._panelRef.closed.subscribe(() => {\n this.hide();\n this.restorePreviousApplied();\n });\n\n this.focusSearchBox();\n }\n\n private _closeOverlay(): void {\n this._panelRef?.close();\n this._panelRef = null;\n }\n\n /**\n * Map the `position` input ('left' | 'right' | 'top' | 'bottom' | 'auto', or\n * combinations) to CDK connected positions in preference order. The requested\n * side comes first; the remaining three are fallbacks so the panel always\n * fits. 'left' aligns the panel's right edge to the trigger (opens leftward),\n * 'right' aligns its left edge (opens rightward); 'auto' picks the side with\n * more room. `withPush` + flexible dimensions still clamp into the viewport.\n */\n private _buildConnectedPositions(): ConnectedPosition[] {\n const GAP = 4;\n const rect = this._componentElement?.nativeElement.getBoundingClientRect();\n\n const wantsTop = this.position.includes('top');\n const wantsBottom = this.position.includes('bottom');\n const openUp = wantsTop\n ? true\n : wantsBottom\n ? false\n : // 'auto' / unspecified: open up only when the trigger sits low.\n Boolean(rect && rect.top > window.innerHeight / 2);\n\n const wantsLeft = this.position.includes('left');\n const wantsRight = this.position.includes('right');\n const alignEnd = wantsLeft\n ? true\n : wantsRight\n ? false\n : // 'auto' / unspecified: right-align (open leftward) only near the right edge.\n Boolean(rect && rect.left > window.innerWidth / 2);\n\n const xPref = alignEnd ? 'end' : 'start';\n const xAlt = alignEnd ? 'start' : 'end';\n const below = (x: 'start' | 'end'): ConnectedPosition => ({\n originX: x, originY: 'bottom', overlayX: x, overlayY: 'top', offsetY: GAP,\n });\n const above = (x: 'start' | 'end'): ConnectedPosition => ({\n originX: x, originY: 'top', overlayX: x, overlayY: 'bottom', offsetY: -GAP,\n });\n\n return openUp\n ? [above(xPref), above(xAlt), below(xPref), below(xAlt)]\n : [below(xPref), below(xAlt), above(xPref), above(xAlt)];\n }\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 // Seed the trigger count from the config's default selections so it's\n // correct on first paint even when no `filter` input is provided.\n this.appliedCount = this.computeSelectedCount();\n }\n\n if (changes.filter && changes.filter.currentValue) {\n // Reconcile the internal selection (checkboxes, radios, ranges, the\n // Select-All flag and count badge) to the incoming filter. This must run\n // even when the config changed in the same cycle (initial render / view\n // switch): the config branch only builds the unchecked option list, so\n // without this a preset — e.g. a custom view's saved filters — would be\n // recorded but never shown as checked.\n this.syncFromFilter(changes.filter.currentValue);\n }\n\n // Cache the default preset's filter signature so ngDoCheck only diffs the\n // (mutating) live state against it, instead of rebuilding the invariant\n // default object every tick. Recomputed only when config / defaultFilter\n // change, and after the config branch above has built the data sources.\n if (changes.config || changes.defaultFilter) {\n this._defaultFilterSignature = this.defaultFilter\n ? JSON.stringify(this.getFilterObject(this.defaultFilter))\n : null;\n }\n }\n\n public ngDoCheck(): void {\n // Recompute the cached badge count + trigger highlight once per change-\n // detection cycle. Filter state is mutated in place by the item editors\n // (checkboxes, toggle, date/number inputs) without dedicated change hooks,\n // so deriving here keeps the fields fresh without scattering invalidation\n // calls across every binding.\n // Live (current panel) count for the footer / Clear / dots.\n this.selectedCount = this.computeSelectedCount();\n // Clear/Reset button enablement. With a defaultFilter, the button resets TO\n // that preset, so it's enabled whenever the current selection differs from\n // the default (even when the current selection is empty). Without one, it\n // clears, so it's disabled when nothing is selected.\n this.resetDisabled = this.defaultFilter\n ? JSON.stringify(this.getFilterObject()) === this._defaultFilterSignature\n : this.selectedCount === 0;\n // Trigger highlight tracks the APPLIED state (appliedCount), not the live\n // edit, OR a host forcing it via isApplied (set internally by\n // updateAppliedState(), and externally through a ViewChild — e.g. users /\n // facial-ai pages drive the trigger highlight that way).\n this.hasActiveFilters = this.isApplied || this.appliedCount > 0;\n }\n\n /**\n * Focus the panel's search box when it opens. The panel renders in the overlay\n * at body level, so it isn't reachable via `@ViewChild`; zen-search-box also\n * self-focuses on init (`autoFocus`), and we nudge the rendered input directly\n * as a fallback once the overlay has attached.\n */\n public focusSearchBox(): void {\n const panelEl = this._panelRef?.overlayRef.overlayElement;\n if (!panelEl) {\n return;\n }\n setTimeout(() => {\n const input = panelEl.querySelector('input') as HTMLInputElement | null;\n input?.focus();\n });\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 /**\n * Whether a section is actively contributing to the filter — used to show the\n * per-section \"applied\" dot next to its chevron. Mirrors the per-type gating\n * of computeSelectedCount() (e.g. a radio only counts when it differs from the\n * default), so the dot and the trigger count badge can never disagree. Unlike\n * isItemActive(), this has no side effects and treats a default radio as\n * inactive.\n */\n public isItemFiltered(item: FiltersConfigItem): boolean {\n switch (item.type) {\n case 'multiselect':\n return Boolean(item.dataSource?.some((d) => d.checked));\n case 'radio': {\n const selected = item.radioOptions?.find((o) => o.selected);\n const defaultId = this.resetedFilter\n ? this.resetedFilter[item.key]\n : item.selectedRadio;\n return Boolean(selected) && selected.id !== defaultId;\n }\n case 'numberRange':\n return (\n typeof item.numberRange?.from === 'number' &&\n typeof item.numberRange?.to === 'number'\n );\n case 'dateRange':\n return Boolean(item.dateRange?.start && item.dateRange?.end);\n case 'date':\n return Boolean(item.date);\n case 'toggle':\n return Boolean(item.enabled);\n default:\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 // Lets the whole toggle row act as the switch: clicking anywhere on the row\n // flips the boolean. The inner zen-toggle stops click propagation so a direct\n // click on the switch toggles once (via its own [(enabled)]) instead of twice.\n public toggleEnabled(item: FiltersConfigItem) {\n item.enabled = !item.enabled;\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.type === 'date') {\n // Clear the date (was wrongly reset to today, which left the filter active).\n item.date = null;\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 this.applyFilterToItems(this.lastAppliedFilter);\n }\n\n /**\n * Reflects a filter object onto the in-panel item state (checkboxes, radios,\n * ranges, toggle/date) without emitting. Used to restore the last-applied\n * filter and to reset the panel to a provided `defaultFilter`.\n */\n private applyFilterToItems(source: any): void {\n for (const item of this.config.items) {\n switch (item.type) {\n case 'multiselect':\n if (item.dataSource) {\n const selection = source[item.key];\n\n for (const dataItem of item.dataSource) {\n dataItem.checked = selection\n ? selection.includes(dataItem.id)\n : false;\n }\n\n // Keep the \"Select All\" checkbox in sync with the restored\n // selection — otherwise clearing the filter externally (e.g. a\n // view-filters \"Clear all\") unchecks every node but leaves Select\n // All ticked, so the group checkboxes look out of sync.\n const checkedCount = item.dataSource.filter((d) => d.checked).length;\n item.isSelectedAll =\n checkedCount > 0 && checkedCount === item.dataSource.length;\n }\n break;\n case 'dateRange':\n // Clone so editing item.dateRange.start/end doesn't mutate the shared\n // snapshot (which would defeat a later cancel/revert).\n item.dateRange = source[item.key]\n ? Util.clone(source[item.key])\n : { start: null, end: null };\n break;\n case 'numberRange':\n // Clone — same aliasing concern as dateRange above.\n item.numberRange = source[item.key]\n ? Util.clone(source[item.key])\n : {};\n break;\n case 'toggle':\n // Restore the toggle's own state (was wrongly writing item.dateRange,\n // so toggles never reverted on cancel and kept counting).\n item.enabled = source[item.key];\n break;\n case 'date':\n item.date = source[item.key];\n break;\n case 'radio':\n // Restore the radio SELECTION to the source value; never touch\n // selectedRadio — that's the immutable default resetFilters() resets to\n // (overwriting it here broke Clear Filter and the active-count default).\n // When the source omits this key (e.g. a partial defaultFilter), fall\n // back to the config default so a radio group is never left with\n // nothing selected.\n if (item.radioOptions) {\n const appliedId = source[item.key] ?? item.selectedRadio;\n item.radioOptions.forEach((o) => (o.selected = o.id === appliedId));\n }\n break;\n }\n }\n }\n\n public reset() {\n if (this.defaultFilter) {\n // Reset to the provided default preset instead of emptying everything.\n this.applyFilterToItems(this.defaultFilter);\n } else {\n // No default: clear (or select-all, per resetBehavior) as before.\n this.resetFilters();\n }\n\n this.filter = this.getFilterObject();\n this.resetedFilter = this.getFilterObject();\n\n this.resetLazyLoadingSources(false);\n }\n\n /**\n * Resets the dropdown's internal selection state (checkboxes, radios, date /\n * number ranges) and the trigger count badge to match a filter object —\n * defaults to the currently bound `filter`. Call this from the host after\n * changing the bound filter outside the component's own UI (e.g. removing a\n * chip in a view-filters bar) so the dropdown and badge stay in sync.\n */\n public syncFromFilter(filter: object = this.filter): void {\n this.filter = filter ?? {};\n this.lastAppliedFilter = Util.clone(this.filter);\n this.restorePreviousApplied();\n this.updateAppliedState();\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 // Settle point for the applied state (apply / external sync / init): item\n // state now equals the applied filter, so snapshot the trigger's count here.\n this.appliedCount = this.computeSelectedCount();\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('.filter-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 /**\n * Builds a filter object from the config items. By default it reads the live\n * in-panel state; pass `source` (another filter object) to derive the SAME-\n * shaped object from that source instead — used to compare the current\n * selection against a default preset without duplicating the per-type rules.\n */\n private getFilterObject(source?: any) {\n const live = !source;\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 = live\n ? item.dataSource.filter((i) => i.checked).map((i) => i.id)\n : item.dataSource\n .filter(\n (i) =>\n Array.isArray(source[item.key]) &&\n source[item.key].includes(i.id),\n )\n .map((i) => i.id);\n\n if (checkedIds.length) {\n filter[item.key] = checkedIds;\n }\n }\n break;\n case 'dateRange': {\n const range = live ? item.dateRange : source[item.key];\n if (range && range.start && range.end) {\n filter[item.key] = range;\n }\n break;\n }\n case 'numberRange': {\n const range = live ? item.numberRange : source[item.key];\n if (\n range &&\n typeof range.from === 'number' &&\n typeof range.to === 'number'\n ) {\n filter[item.key] = range;\n }\n break;\n }\n case 'toggle':\n filter[item.key] = (live ? item.enabled : source[item.key]) || false;\n break;\n case 'date': {\n const date = live ? item.date : source[item.key];\n if (date) {\n filter[item.key] = date;\n }\n break;\n }\n case 'radio':\n // Source side falls back to the config default when the key is\n // omitted, mirroring applyFilterToItems() so a partial default\n // compares equal to the state it actually produces.\n filter[item.key] = live\n ? item.radioOptions.find((ro) => ro.selected)?.id\n : (source[item.key] ?? item.selectedRadio);\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 // Lets a click anywhere on a multiselect row toggle its checkbox. Needed for\n // badge rows, where the visible label is a separate styled span and the\n // checkbox itself carries no clickable text. The inner zen-checkbox stops\n // click propagation, so a direct click on it toggles once via its own\n // [(checked)] instead of being toggled again here.\n public toggleDsItem(dsItem: DataSource, item: FiltersConfigItem): void {\n dsItem.checked = !dsItem.checked;\n this.checkChanged(dsItem, item);\n }\n\n public toggle() {\n // Assigning isVisible opens/closes the overlay (and focuses the search box)\n // via the setter; no manual placement/focus needed here.\n this.isVisible = !this.isVisible;\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 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: FiltersConfigItem, date: Date | null) {\n // Without a time picker, snap the end to end-of-day so the range covers the\n // whole final day.\n item.dateRange.end =\n date && !item.showTime ? moment(date).endOf('day').toDate() : date;\n }\n\n // Count of active filters across ALL types: multiselect counts per checked\n // item; every other type contributes +1 when active. Conditions mirror\n // getFilterObject()/resetFilters() so the badge matches what actually applies.\n // hasActiveFilters (trigger highlight) is derived from the same count in\n // ngDoCheck(), so the badge and highlight can never disagree.\n private computeSelectedCount(): number {\n let count = 0;\n for (const item of this.config.items) {\n // Multiselect contributes one per checked item; every other type\n // contributes one when active. isItemFiltered() owns the per-type \"active\"\n // rules (non-default radio, both number ends, etc.) so the badge and the\n // per-section dot stay in lockstep.\n if (item.type === 'multiselect') {\n if (item.dataSource) {\n count += item.dataSource.filter((d) => d.checked).length;\n }\n } else if (this.isItemFiltered(item)) {\n count += 1;\n }\n }\n return count;\n }\n}\n","<div class=\"filters-component\"\n #mainComponent\n click-out=\"isVisible && hide()\">\n\n @if (!customTrigger) {\n <zen-button (click)=\"toggle()\"\n [variant]=\"hasActiveFilters ? 'secondary' : 'secondary-gray'\"\n class=\"filter {{hasActiveFilters ? 'applied' : ''}} {{triggerVariant === 'icon-only' ? 'icon-only' : ''}}\">\n @if (imageUrl) {\n <zen-icon [src]=\"imageUrl\"\n ></zen-icon>\n }\n @if (!imageUrl) {\n <zen-icon class=\"filter-icon\"\n name=\"filter\"></zen-icon>\n }\n @if (triggerVariant !== 'icon-only') {\n <span class=\"filter-label\">{{ (label || 'Filter') | translate }}</span>\n @if (appliedCount > 0) {\n <span class=\"filter-count-badge\">{{ appliedCount }}</span>\n }\n }\n </zen-button>\n <!-- Icon-only mode: count rendered as a corner badge overlapping the\n button's top-right (sibling of the button so it isn't clipped). -->\n @if (triggerVariant === 'icon-only' && appliedCount > 0) {\n <span class=\"filter-icon-badge\">{{ appliedCount }}</span>\n }\n }\n\n @if (customTrigger) {\n <ng-content></ng-content>\n }\n\n <!-- Filter panel (rendered into a CDK overlay via ZenduOverlayService;\n positioning/flip/clamping is handled there, not with absolute CSS) -->\n <ng-template #filterPanel>\n <div class=\"filter-menu\"\n [class.customTrigger]=\"customTrigger\">\n <div class=\"filter-menu__header\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"searchTextChanged()\"></zen-search-box>\n </div>\n\n <div class=\"filter-menu__body\"\n ngClass=\"{{wrapperBodyClass}}\">\n @if (errorMessage.length) {\n @for (item of errorMessage; track item) {\n <li\n class=\"error-msg\">{{item | translate }}</li>\n }\n }\n\n @for (item of config.items; track item) {\n @if (isMenuIsVisible(item)) {\n <div [class]=\"'menu-item menu-item--' + item.type\">\n <!-- Divider between two filter -->\n @if (item.type === 'divider') {\n <p class=\"filter-divider\"></p>\n }\n <!-- Boolean toggle -->\n @if (item.type === 'toggle') {\n <div\n class=\"action-item toggle-row\"\n (click)=\"toggleEnabled(item)\">\n <div>{{item.title | translate}}</div>\n <zen-toggle [(enabled)]=\"item.enabled\"\n (click)=\"$event.stopPropagation()\"></zen-toggle>\n </div>\n }\n @if (item.type != 'toggle' && item.type != 'divider' && !item.disableCollapse) {\n <button class=\"action-item expander-item\"\n (click)=\"toggleItem(item)\">\n <span class=\"expander-title\">{{item.title | translate}}</span>\n <span class=\"expander-indicator\">\n @if (isItemFiltered(item)) {\n <span class=\"filter-section-dot\"></span>\n }\n <zen-icon class=\"expand-icon\"\n name=\"chevron-down\"\n [class.active]=\"item.expanded\"></zen-icon>\n </span>\n </button>\n }\n @if (item.type != 'toggle' && item.type != 'divider' && item.disableCollapse) {\n <div class=\"action-item section-title\"\n >\n <span class=\"expander-title\">{{item.title | translate}}</span>\n @if (isItemFiltered(item)) {\n <span class=\"filter-section-dot\"></span>\n }\n </div>\n }\n @if (item.expanded || item.disableCollapse) {\n @switch (item.type) {\n <!-- Multiselect -->\n @case ('multiselect') {\n <div class=\"menu-item__content\">\n <!-- Lazy loading mode -->\n @if (item.isLazyLoading) {\n @for (dsItem of item.filteredDataSource; track dsItem) {\n <div\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\"\n (click)=\"toggleDsItem(dsItem, item)\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n (click)=\"$event.stopPropagation()\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n @if (dsItem.badgeBgColor) {\n <span\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n }\n </div>\n }\n @if (item.canLoadMore && !item.isLoadingNow) {\n <div\n class=\"action-item\">\n <zen-button variant=\"secondary-gray\"\n size=\"sm\"\n [fullWidth]=\"true\"\n (click)=\"loadMore(item, false)\">\n {{'Load More' | translate}}\n </zen-button>\n </div>\n }\n @if (item.isLoadingNow) {\n <div\n class=\"loader-more-spinner\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n }\n }\n @if (!item.isLazyLoading && !hasTreeData(item)) {\n @if (!item.hideSelectAll) {\n <div class=\"action-item-checkbox ds-item select-all\">\n @if (item.dataSource.length === item.filteredDataSource.length) {\n <zen-checkbox\n [(checked)]=\"item.isSelectedAll\"\n [indeterminate]=\"isItemActive(item) && !item.isSelectedAll\"\n [label]=\"'Select All' | translate\"\n (checkedChange)=\"onSelectAll(item)\">\n </zen-checkbox>\n }\n </div>\n }\n @for (dsItem of item.filteredDataSource; track dsItem) {\n <div\n class=\"action-item-checkbox ds-item\"\n [class.has-badge]=\"dsItem.badgeBgColor\"\n (click)=\"toggleDsItem(dsItem, item)\">\n <zen-checkbox [(checked)]=\"dsItem.checked\"\n [imageUrl]=\"dsItem.imageUrl\"\n (checkedChange)=\"checkChanged(dsItem, item)\"\n (click)=\"$event.stopPropagation()\"\n [label]=\"dsItem.badgeBgColor ? '' : (dsItem.name?.toString() | translate)\"></zen-checkbox>\n @if (dsItem.badgeBgColor) {\n <span\n class=\"filter-item-badge\"\n [ngStyle]=\"{'background': dsItem.badgeBgColor, 'color': dsItem.badgeColor}\">\n {{ dsItem.name?.toString() | translate }}\n </span>\n }\n </div>\n }\n }\n <!-- Tree view mode -->\n @if (!item.isLazyLoading && hasTreeData(item)) {\n <zen-groups\n [dataSource]=\"item.dataSource\"\n [filteredDataSource]=\"item.filteredDataSource\"\n [hideSelectAll]=\"item.hideSelectAll\"\n [inline]=\"true\"\n [hideSearch]=\"true\"\n [(isSelectedAll)]=\"item.isSelectedAll\"\n (checkedChange)=\"checkChanged($event, item)\">\n </zen-groups>\n }\n </div>\n }\n <!-- Date range picker -->\n @case ('dateRange') {\n <div class=\"menu-item__content\">\n <!-- Options date range view -->\n @if (item.dateRangeOptions?.length) {\n @for (option of item.dateRangeOptions; track option) {\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.name\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === option.name\"\n (radioChange)=\"handleDateRangeOptionClick(item, option)\"></zen-radio>\n </div>\n }\n <div class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"'Custom'\"\n [label]=\"'Custom' | translate\"\n [name]=\"item.key\"\n [selected]=\"selectedDateRangeOptions[item.key] === 'Custom'\"\n (radioChange)=\"handleCustomDateRangeClick(item)\"></zen-radio>\n </div>\n @if (selectedDateRangeOptions[item.key] === 'Custom') {\n <div class=\"filter-date-fields\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-date-picker-dropdown\n type=\"single\"\n [(date)]=\"item.dateRange.start\"\n [timePicker]=\"item.showTime\">\n </zen-date-picker-dropdown>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-date-picker-dropdown\n type=\"single\"\n [date]=\"item.dateRange.end\"\n [timePicker]=\"item.showTime\"\n (dateChange)=\"handleEndDateChange(item, $event)\">\n </zen-date-picker-dropdown>\n </div>\n </div>\n }\n }\n <!-- Default date range view -->\n @if (!item.dateRangeOptions?.length) {\n <div class=\"filter-date-fields\">\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'From' | translate}}:</div>\n <zen-date-picker-dropdown\n type=\"single\"\n [(date)]=\"item.dateRange.start\"\n [timePicker]=\"item.showTime\">\n </zen-date-picker-dropdown>\n </div>\n <div class=\"ds-item filter-row\">\n <div class=\"lbl\">{{'To' | translate}}:</div>\n <zen-date-picker-dropdown\n type=\"single\"\n [date]=\"item.dateRange.end\"\n [timePicker]=\"item.showTime\"\n (dateChange)=\"handleEndDateChange(item, $event)\">\n </zen-date-picker-dropdown>\n </div>\n </div>\n }\n </div>\n }\n <!-- Date picker -->\n @case ('date') {\n <div class=\"filter-row menu-item__content\">\n <zen-date-picker-dropdown\n type=\"single\"\n [(date)]=\"item.date\"\n [timePicker]=\"item.showTime\">\n </zen-date-picker-dropdown>\n </div>\n }\n <!-- Number range -->\n @case ('numberRange') {\n <div\n class=\"filter-row number-range-row menu-item__content\">\n <zen-input type=\"number\"\n size=\"sm\"\n [label]=\"'Min' | translate\"\n [(ngModel)]=\"item.numberRange.from\"></zen-input>\n <zen-input type=\"number\"\n size=\"sm\"\n [label]=\"'Max' | translate\"\n [(ngModel)]=\"item.numberRange.to\"></zen-input>\n </div>\n }\n <!-- Radio -->\n @case ('radio') {\n <div class=\"menu-item__content\">\n @for (option of item.radioOptions; track option) {\n <div\n class=\"action-item-radio ds-item\">\n <zen-radio [value]=\"option.id\"\n [label]=\"option.name | translate\"\n [name]=\"item.key\"\n [imageUrl]=\"option.imageUrl\"\n [selected]=\"option.selected\"\n (radioChange)=\"radioChanged($event, item)\"\n [disabled]=\"option.disabled\"></zen-radio>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n }\n }\n @if (showNoFilterResult) {\n <span\n class=\"no-item\">{{'No Results Found' | translate}}..</span>\n }\n </div>\n\n <div class=\"filter-menu__footer\">\n <span class=\"selected-count\">{{ selectedCount }} {{'Selected' | translate}}</span>\n <div class=\"filter-footer-actions\">\n <zen-button variant=\"secondary-gray\"\n [destructive]=\"true\"\n [disabled]=\"resetDisabled\"\n (click)=\"reset()\">\n {{ (defaultFilter ? 'Reset Default' : 'Clear All') | translate }}\n </zen-button>\n <zen-button variant=\"primary\"\n (click)=\"apply()\">\n {{'Apply' | translate}}\n </zen-button>\n </div>\n </div>\n\n </div>\n </ng-template>\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-option]',\n standalone: false\n})\nexport class ZenduSelectOptionDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-value]',\n standalone: false\n})\nexport class ZenduSelectValueDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[zen-select-custom-button]',\n standalone: false\n})\nexport class ZenduSelectButtonDirective {\n\n constructor(public template: TemplateRef<any>) { }\n\n}\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ViewEncapsulation, ContentChild, ChangeDetectionStrategy, ViewChild, TemplateRef, ViewContainerRef } 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';\nimport { ZenduOverlayService } from '../overlay/zendu-overlay.service';\nimport { ZenConnectedPanelRef } from '../overlay/zendu-overlay.types';\n\nexport interface LazyLoaderSearch {\n text?: string;\n ids?: string[];\n}\n\nexport interface LazyLoaderResult {\n id: string | number;\n name?: string | number; // Compatible with DataSource\n text?: string; // Original property\n checked?: boolean;\n imageUrl?: string;\n isOpen?: boolean;\n children?: string[];\n parentId?: string | number;\n level?: number;\n index?: number;\n badgeBgColor?: string;\n badgeColor?: string;\n}\n\nexport type LazyLoaderFunction = (\n search: LazyLoaderSearch, \n offset: number, \n limit: number\n) => Promise<LazyLoaderResult[]>;\n\nexport interface AddOptionEvent {\n value: string;\n}\n\nexport interface RemoveOptionEvent {\n removed: boolean;\n}\n\nexport interface SelectOption {\n [key: string]: any;\n id?: string | number;\n name?: string;\n icon?: string;\n iconName?: string;\n avatar?: string;\n dotColor?: string;\n secondaryText?: string;\n}\n\n@Component({\n selector: 'zen-select',\n templateUrl: './zendu-select.component.html',\n styleUrls: ['./zendu-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSelectComponent implements OnChanges, OnDestroy {\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 * Show a help icon next to the label. On hover/keyboard-focus it reveals a\n * self-contained tooltip with `helpTooltip` (the library does not depend on\n * Angular Material).\n */\n @Input() helpIcon = false;\n\n /**\n * Tooltip text shown on hover/focus of the label help icon. Translated.\n */\n @Input() helpTooltip = '';\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 * Extra class(es) applied to the dropdown's overlay panel (rendered at body\n * level). Use this to style the detached panel — it is no longer a\n * descendant of the select host, so a consuming component's `::ng-deep`\n * rules scoped under the host can't reach it. Omit for default styling.\n */\n @Input() panelClass?: string | string[];\n\n /**\n * Minimum width (px) for the dropdown panel. The panel still matches the\n * trigger width (`width: 'origin'`) by default; this is only a floor, so it\n * can only ever widen the panel — useful when the trigger is a narrow custom\n * button. Omit to keep the panel exactly trigger-width (unchanged behaviour).\n */\n @Input() panelMinWidth?: number;\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. `isOpen` is the single source of truth — assigning it\n * attaches/detaches the CDK overlay panel, so every existing open/close path\n * (toggle, search focus/typing, option select, hideDropDown) stays correct\n * without touching each call site.\n */\n private _isOpen = false;\n public get isOpen(): boolean {\n return this._isOpen;\n }\n public set isOpen(open: boolean) {\n if (open === this._isOpen) return;\n this._isOpen = open;\n if (open) {\n this._openOverlay();\n } else {\n this._closeOverlay();\n }\n }\n public helpTooltipAlign: 'center' | 'start' | 'end' = 'center';\n public helpTooltipPlacement: 'above' | 'below' = 'above';\n public searchText = '';\n public searchInputValue = '';\n public searchFocused = false;\n public filteredOptions: SelectOption[] | any[] = [];\n public selectedDisplay = '';\n public labelText = '';\n public option: SelectOption | null = null;\n public canLoadMore = false;\n public isLoadingNow = false;\n private _searchDebounce: ReturnType<typeof setTimeout>;\n\n // Tree mode properties\n public treeFilteredDataSource: DataSource[] = [];\n public isSelectedAll = false;\n \n /**\n * Select Option Template for custom HTML\n */\n @ContentChild(ZenduSelectOptionDirective) optionTemplate: ZenduSelectOptionDirective;\n \n /**\n * Select Value Template for custom HTML\n */\n @ContentChild(ZenduSelectValueDirective) valueTemplate: ZenduSelectValueDirective;\n \n /**\n * Select Button Template for custom HTML\n */\n @ContentChild(ZenduSelectButtonDirective) buttonTemplate: ZenduSelectButtonDirective;\n\n /** Trigger element the overlay panel is anchored to. */\n @ViewChild('selectWrapper') private selectWrapper?: ElementRef<HTMLElement>;\n\n /** The dropdown panel content, rendered into the overlay when open. */\n @ViewChild('dropdownPanel') private dropdownPanel?: TemplateRef<unknown>;\n\n private _panelRef: ZenConnectedPanelRef | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private overlay: ZenduOverlayService,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n ngOnDestroy(): void {\n this._closeOverlay();\n }\n\n /**\n * Open the dropdown panel in a CDK overlay anchored to the trigger. The\n * overlay handles viewport-aware positioning (flip up/down, push into view,\n * clamp + internal scroll) and renders at the body level, so the panel is\n * never clipped by an ancestor's `overflow` or by the viewport edge.\n */\n private _openOverlay(): void {\n if (this._panelRef || !this.selectWrapper || !this.dropdownPanel) return;\n\n this._panelRef = this.overlay.openConnectedPanel({\n origin: this.selectWrapper,\n content: this.dropdownPanel,\n viewContainerRef: this.viewContainerRef,\n width: 'origin',\n minWidth: this.panelMinWidth,\n panelClass: this.panelClass,\n scrollBehavior: 'reposition'\n });\n\n // Outside click / Escape / detach → close (and emit, as a user action).\n this._panelRef.closed.subscribe(() => this.hideDropDown(true));\n }\n\n private _closeOverlay(): void {\n this._panelRef?.close();\n this._panelRef = null;\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 /**\n * Position the help tooltip so it never overflows the viewport. Horizontally:\n * anchored to the icon's right edge near the right border, to its left edge near\n * the left border, otherwise centered. Vertically: above by default, flipped\n * below when there isn't room above and there's more room below (the label-row\n * icon sits high in the layout). Computed from the icon rect synchronously\n * (before paint) so the tooltip appears in its final spot without a flicker.\n */\n updateHelpTooltipPlacement(event: Event): void {\n const icon = event.currentTarget as HTMLElement | null;\n if (!icon) {\n return;\n }\n const rect = icon.getBoundingClientRect();\n const margin = 8;\n\n const iconCenter = rect.left + rect.width / 2;\n const halfMaxWidth = 130;\n if (iconCenter + halfMaxWidth > window.innerWidth - margin) {\n this.helpTooltipAlign = 'end';\n } else if (iconCenter - halfMaxWidth < margin) {\n this.helpTooltipAlign = 'start';\n } else {\n this.helpTooltipAlign = 'center';\n }\n\n const estimatedHeight = 56;\n const spaceAbove = rect.top;\n const spaceBelow = window.innerHeight - rect.bottom;\n this.helpTooltipPlacement =\n spaceAbove < estimatedHeight + margin && spaceBelow > spaceAbove ? 'below' : 'above';\n }\n\n toggleDropdown(): void {\n if (this.disabled) return;\n \n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.searchText = '';\n if (this.isLazyLoading) {\n // Load the first page (showing already-selected items on top) the first\n // time the dropdown is opened.\n if (!this.isLoadingNow && !this.filteredOptions?.length) {\n this.loadMore(true);\n }\n } else {\n this.filterOptions();\n }\n }\n }\n\n /**\n * Handle scroll on the options list — fetch the next page once the user\n * scrolls near the bottom (lazy loading only).\n */\n public onOptionsScroll(event: Event): void {\n if (!this.isLazyLoading || this.isLoadingNow || !this.canLoadMore) {\n return;\n }\n const el = event.target as HTMLElement;\n const threshold = 40;\n if (el.scrollHeight - el.scrollTop - el.clientHeight <= threshold) {\n this.loadMore(false);\n }\n }\n\n /**\n * Reset and re-fetch the first page when the search text changes in lazy\n * mode (debounced so we don't fire a request on every keystroke).\n */\n private reloadLazySearch(): void {\n clearTimeout(this._searchDebounce);\n this._searchDebounce = setTimeout(() => {\n this.filteredOptions = [];\n this.canLoadMore = true;\n this.loadMore(false);\n }, 300);\n }\n \n /**\n * Handle option selection\n */\n selectOption(option: SelectOption): void {\n this.option = option;\n const optionValue = this.returnOption ? option : this.getOptionValue(option);\n \n if (this.isMultiselect) {\n this.toggleMultiselectOption(optionValue);\n } else {\n this.selectModel = optionValue;\n this.isOpen = false;\n // Update search input value for search type\n if (this.leadingType === 'search') {\n this.searchInputValue = this.getOptionDisplay(option);\n }\n }\n \n this.emitChange();\n this.updateDisplay();\n }\n \n /**\n * Toggle option in multiselect mode\n */\n private toggleMultiselectOption(value: any): void {\n if (!Array.isArray(this.selectModel)) {\n this.selectModel = [];\n }\n \n const index = this.getElementIndex(value);\n \n if (index < 0) {\n this.selectModel.push(value);\n } else {\n this.selectModel.splice(index, 1);\n }\n \n this.updateLabel();\n }\n \n /**\n * Check if option is selected\n */\n isSelected(option: SelectOption): boolean {\n if (this.isModelEmpty()) {\n return false;\n }\n \n const optionId = this.getId(option);\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n return this.selectModel.findIndex(el => this.getId(el as SelectOption) === optionId) >= 0;\n } else {\n return this.getId(this.selectModel as SelectOption) === optionId;\n }\n }\n \n /**\n * Get display text for option\n */\n getOptionDisplay(option: any): string {\n if (typeof option === 'object' && option !== null) {\n if (this.displayProp) {\n const combinedProps = this.displayProp.split(\"|\")\n .map(i => this.getRecursiveProperty(option, i))\n .filter(v => v) // Filter out null values\n .join(\" \");\n return combinedProps || '';\n } else {\n console.error('App-Select: when using objects as model, a displayProp value is mandatory.');\n return \"\";\n }\n }\n return String(option);\n }\n \n /**\n * Alias for getOptionDisplay for backward compatibility\n */\n public getName(option: string | object): string {\n return this.getOptionDisplay(option);\n }\n \n \n /**\n * Get value for option (using idProp)\n */\n getOptionValue(option: SelectOption): string | number {\n return this.getId(option);\n }\n \n /**\n * Get id value from option\n */\n private getId(option: string | number | object): string | number {\n if (typeof option === 'object' && option !== null) {\n if (this.idProp) {\n return this.getRecursiveProperty(option as Record<string, unknown>, this.idProp);\n } else {\n console.error('App-Select: when using objects as model, a idProp value is mandatory.');\n return \"\";\n }\n } else {\n return option as string | number;\n }\n }\n \n /**\n * Update displayed text\n */\n private updateDisplay(): void {\n if (this.isModelEmpty()) {\n this.selectedDisplay = '';\n this.labelText = '';\n // Also clear search input for search type\n if (this.leadingType === 'search') {\n this.searchInputValue = '';\n }\n return;\n }\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n const option = this.findOptionByValue(this.selectModel[0]);\n this.selectedDisplay = option ? this.getOptionDisplay(option) : '';\n } else {\n this.selectedDisplay = `${this.selectModel.length} selected`;\n }\n // For multiselect search type, show count in search input when closed\n if (this.leadingType === 'search' && !this.searchFocused) {\n this.searchInputValue = this.selectedDisplay;\n }\n } else {\n const option = this.findOptionByValue(this.selectModel);\n this.selectedDisplay = option ? this.getOptionDisplay(option) : '';\n // Also update search input for search type\n if (this.leadingType === 'search' && option) {\n this.searchInputValue = this.getOptionDisplay(option);\n }\n }\n }\n \n /**\n * Find option by value\n */\n private findOptionByValue(value: any): SelectOption | null {\n if (this.returnOption) {\n return this.options.find(opt => opt === value) || null;\n }\n return this.options.find(opt => this.getId(opt) === value) || null;\n }\n \n /**\n * Check if model is empty\n */\n public isModelEmpty(): boolean {\n if (this.isMultiselect) {\n return !Array.isArray(this.selectModel) || !this.selectModel.length;\n } else {\n return this.selectModel === null || this.selectModel === void 0;\n }\n }\n \n /**\n * Get element index in multiselect array\n */\n private getElementIndex(value: any): number {\n if (!Array.isArray(this.selectModel)) return -1;\n \n if (typeof value === 'object') {\n const valueId = this.getId(value);\n return this.selectModel.findIndex(el => this.getId(el as SelectOption) === valueId);\n } else {\n return this.selectModel.indexOf(value);\n }\n }\n \n /**\n * Toggle all options in multiselect\n */\n public toggleAll(): void {\n const modelArray = Array.isArray(this.selectModel) ? this.selectModel : [];\n if (modelArray.length !== this.options.length) {\n this.selectModel = this.options.map((el: SelectOption) => this.returnOption ? el : this.getId(el));\n } else {\n this.selectModel = [];\n }\n \n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n \n /**\n * Toggle Select All option for flat multiselect\n */\n public toggleSelectAll(): void {\n if (this.isAllSelected()) {\n // Deselect all\n this.selectModel = [];\n } else {\n // Select all filtered options\n this.selectModel = this.filteredOptions.map((el: SelectOption) => \n this.returnOption ? el : this.getId(el)\n );\n }\n \n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n \n /**\n * Check if all filtered options are selected\n */\n public isAllSelected(): boolean {\n if (!this.isMultiselect || !Array.isArray(this.selectModel)) {\n return false;\n }\n \n if (this.filteredOptions.length === 0) {\n return false;\n }\n \n // Check if all filtered options are in the selectModel\n return this.filteredOptions.every(option => {\n const optionId = this.getId(option);\n return this.selectModel.some((selected: any) => {\n const selectedId = this.returnOption ? this.getId(selected) : selected;\n return selectedId === optionId;\n });\n });\n }\n \n /**\n * Get recursive property from nested object\n */\n private getRecursiveProperty(object: Record<string, unknown>, path: string): string | number {\n return path.split('.').reduce((obj, x) => {\n if (obj && typeof obj === 'object' && x in obj) {\n return (obj as Record<string, unknown>)[x];\n } else {\n return null;\n }\n }, object as unknown) as string | number;\n }\n \n /**\n * Update label text\n */\n public updateLabel(): void {\n if (this.isModelEmpty()) {\n this.labelText = '';\n return;\n }\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n const selectedCount = this.selectModel.length;\n \n if (selectedCount === 1) {\n this.labelText = this.getNameFromValue(this.selectModel[0]);\n } else {\n this.labelText = `${selectedCount} Selected`;\n }\n } else {\n this.labelText = this.getNameFromValue(this.selectModel);\n }\n }\n \n /**\n * Get name from value\n */\n public getNameFromValue(val: any): string {\n if (this.returnOption) {\n return this.getOptionDisplay(val as SelectOption);\n } else {\n if (this.isLazyLoading) {\n const opt = this.filteredOptions?.find(i => this.getId(i) == val);\n return opt ? this.getOptionDisplay(opt) : String(val);\n } else {\n if (!this.options || !this.options.length) {\n return '';\n }\n let option = this.options.find(el => this.getId(el) === val);\n return this.getOptionDisplay(option ?? val as SelectOption);\n }\n }\n }\n \n /**\n * Emit change event\n */\n private emitChange(): void {\n // notify with timeout\n // allow output property \"enabled\" applied by parent first and then emit the onChange\n setTimeout(() => {\n this.selectModelChange.emit(this.selectModel);\n }, 1);\n }\n \n /**\n * Filter options based on search\n */\n filterOptions(): void {\n // In lazy mode the filteredOptions are managed by loadMore(), not derived\n // from the static options array — leave them untouched here.\n if (this.isLazyLoading) {\n return;\n }\n if (!this.searchText) {\n this.filteredOptions = [...this.options];\n return;\n }\n\n const searchLower = this.searchText.toLowerCase();\n this.filteredOptions = this.options.filter(option => {\n const display = this.getOptionDisplay(option).toLowerCase();\n return display.includes(searchLower);\n });\n\n }\n \n /**\n * Handle search input\n */\n onSearchChange(): void {\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n\n clearSearch(): void {\n this.searchText = '';\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n \n /**\n * Handle search input change for search type\n */\n onSearchInputChange(): void {\n this.searchText = this.searchInputValue;\n if (!this.isOpen && this.searchInputValue) {\n this.isOpen = true;\n }\n if (this.isLazyLoading) {\n this.reloadLazySearch();\n return;\n }\n this.filterOptions();\n }\n \n /**\n * Handle search input focus\n */\n onSearchFocus(): void {\n this.searchFocused = true;\n // Clear the search input when focused so user can type fresh\n this.searchInputValue = '';\n this.searchText = '';\n // Open dropdown to show all options\n this.isOpen = true;\n // Reset filtered options to show all\n this.filterOptions();\n }\n \n /**\n * Handle search input blur\n */\n onSearchBlur(event: FocusEvent): void {\n // Don't close immediately if clicking on dropdown\n setTimeout(() => {\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (!relatedTarget || !this.elementRef.nativeElement.contains(relatedTarget)) {\n this.searchFocused = false;\n if (!this.isOpen) {\n this.searchInputValue = this.selectedDisplay;\n }\n }\n }, 200);\n }\n \n /**\n * Get selected option for leading display\n */\n getSelectedOption(): SelectOption | null {\n if (this.isModelEmpty()) return null;\n\n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n return this.findOptionByValue(this.selectModel[0]);\n }\n return null;\n }\n\n return this.findOptionByValue(this.selectModel);\n }\n \n /**\n * Get selected secondary text for display\n */\n getSelectedSecondaryText(): string | null {\n if (!this.selectModel) return null;\n \n if (this.isMultiselect && Array.isArray(this.selectModel)) {\n if (this.selectModel.length === 1) {\n const option = this.findOptionByValue(this.selectModel[0]);\n return option?.secondaryText || null;\n }\n // For multiple selection, we won't show secondary text to avoid confusion\n return null; \n }\n \n const option = this.findOptionByValue(this.selectModel);\n return option?.secondaryText || null;\n }\n \n /**\n * Hide dropdown\n */\n public async hideDropDown(userAction: boolean = false): Promise<void> {\n // Only emit closed event if it was open AND triggered by user action\n if (userAction && this.isOpen) {\n this.closed.emit(this.selectModel);\n }\n \n this.isOpen = false;\n }\n \n /**\n * Handle Enter key on search input\n */\n onSearchEnter(event: Event): void {\n event.preventDefault();\n if (this.enableAddNewOption && this.filteredOptions.length === 0 && (this.searchText || this.searchInputValue)?.trim()) {\n this.handleAddNewOption();\n }\n }\n\n /**\n * Handle add new option\n */\n public handleAddNewOption(): void {\n this.addNewOption.emit({ value: this.searchText || this.searchInputValue });\n this.searchText = '';\n this.searchInputValue = '';\n this.filterOptions();\n this.hideDropDown(true);\n }\n \n /**\n * Handle remove option\n */\n public handleRemoveOption(): void {\n this.removeOption.emit({ removed: true });\n this.hideDropDown(true);\n }\n \n /**\n * Get state classes\n */\n getStateClasses(): string {\n const classes = ['app-select-container'];\n\n if (this.size) classes.push(`size-${this.size}`);\n if (this.isOpen) classes.push('open');\n if (this.disabled) classes.push('disabled');\n if (this.error) classes.push('error');\n if (this.destructive) classes.push('destructive');\n if (this.label) classes.push('with-label');\n if (this.supportingText) classes.push('with-supporting');\n \n return classes.join(' ');\n }\n \n /**\n * Load more items for lazy loading\n */\n public async loadMore(showSelectedOnTop: boolean): Promise<void> {\n try {\n this.isLoadingNow = true;\n if (!this.lazyLoader) {\n throw `loader is not available`;\n }\n if (!this.filteredOptions) {\n this.filteredOptions = [];\n }\n \n // load first 10 records for the first time\n const limit = (this.filteredOptions.length == 0) ? 10 : 100;\n let newItems: LazyLoaderResult[] = await this.lazyLoader({ text: this.searchText || \"\" }, this.filteredOptions.length, limit);\n \n this.canLoadMore = (newItems.length == limit);\n \n // the selectModel contains the selected items ids \n const checkedIds = Array.isArray(this.selectModel) \n ? this.selectModel.map(item => String(this.getId(item as SelectOption)))\n : [];\n \n if (showSelectedOnTop && checkedIds?.length) {\n // remove the checked items first\n this.filteredOptions = this.filteredOptions.filter(i => !checkedIds.includes(String(this.getId(i))));\n newItems = newItems.filter(i => !checkedIds.includes(String(i.id)));\n \n // add all checked items to the top\n const checkedItems: LazyLoaderResult[] = await this.lazyLoader({ ids: checkedIds }, 0, 100);\n this.filteredOptions = [...(checkedItems as SelectOption[]), ...this.filteredOptions];\n \n this.updateLabel();\n }\n \n // the filteredDataSource contains the items that is visible to user at the current moment\n this.filteredOptions = [...this.filteredOptions, ...(newItems as SelectOption[])];\n } catch (err) {\n console.error(err);\n } finally {\n this.isLoadingNow = false;\n }\n }\n\n /**\n * Initialize tree data by syncing selectModel IDs to DataSource checked flags\n */\n private initTreeData(): void {\n if (!this.isTreeMode || !this.options?.length) return;\n const selectedIds = new Set(\n Array.isArray(this.selectModel)\n ? this.selectModel.map(v => String(typeof v === 'object' ? this.getId(v) : v))\n : []\n );\n (this.options as any[]).forEach(opt => {\n opt.checked = selectedIds.has(String(opt[this.idProp]));\n });\n this.treeFilteredDataSource = [...this.options] as DataSource[];\n this.updateTreeSelectAllState();\n }\n\n /**\n * Handle checked change from zen-groups in tree mode\n */\n public onTreeCheckedChange(dsItem: DataSource): void {\n const checkedItems = (this.options as any[]).filter(opt => opt.checked);\n this.selectModel = checkedItems.map(opt =>\n this.returnOption ? opt : opt[this.idProp]\n );\n this.updateTreeSelectAllState();\n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n\n /**\n * Handle select all change from zen-groups in tree mode\n */\n public onTreeSelectAllChange(isSelectedAll: boolean): void {\n this.isSelectedAll = isSelectedAll;\n const checkedItems = (this.options as any[]).filter(opt => opt.checked);\n this.selectModel = checkedItems.map(opt =>\n this.returnOption ? opt : opt[this.idProp]\n );\n this.emitChange();\n this.updateDisplay();\n this.updateLabel();\n }\n\n /**\n * Update the isSelectedAll flag based on current checked state\n */\n private updateTreeSelectAllState(): void {\n if (!this.options?.length) return;\n this.isSelectedAll = (this.options as any[]).every(opt => opt.checked);\n }\n\n}","<div [class]=\"getStateClasses()\">\n <!-- Label -->\n @if (label) {\n <label class=\"app-select-label text text-sm text-weight-medium\"\n [ngClass]=\"{'required': required, 'disabled': disabled, 'destructive': destructive}\">\n {{ label | translate }}\n @if (required) {\n <span class=\"required-indicator\">*</span>\n }\n @if (helpIcon) {\n <span\n class=\"zen-help-icon\"\n role=\"img\"\n [class.disabled]=\"disabled\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-label]=\"helpTooltip | translate\"\n (mouseenter)=\"updateHelpTooltipPlacement($event)\"\n (focus)=\"updateHelpTooltipPlacement($event)\">\n <i class=\"material-icons-outlined\">help_outline</i>\n <!-- Shown on hover/focus via CSS — no click state. -->\n <div\n class=\"zen-help-tooltip\"\n [class.align-start]=\"helpTooltipAlign === 'start'\"\n [class.align-end]=\"helpTooltipAlign === 'end'\"\n [class.place-below]=\"helpTooltipPlacement === 'below'\">\n <div class=\"tooltip-content\">{{ helpTooltip | translate }}</div>\n <div class=\"tooltip-arrow\"></div>\n </div>\n </span>\n }\n </label>\n }\n\n <!-- Select Input -->\n <div class=\"app-select-wrapper\" #selectWrapper>\n <!-- Custom Trigger Template (overrides built-in trigger) -->\n @if (buttonTemplate) {\n <div\n class=\"app-select-custom-trigger\"\n (click)=\"toggleDropdown()\">\n <ng-template [ngTemplateOutlet]=\"buttonTemplate.template\"\n [ngTemplateOutletContext]=\"{ isOpen: isOpen, selected: getSelectedOption(), display: selectedDisplay, disabled: disabled }\">\n </ng-template>\n </div>\n }\n\n <!-- Built-in Trigger (when no custom button template provided) -->\n @if (!buttonTemplate) {\n @switch (leadingType) {\n <!-- Default Select (no leading element) -->\n @case ('default') {\n <ng-container *ngTemplateOutlet=\"defaultSelectTemplate\"></ng-container>\n }\n <!-- Icon Leading Select -->\n @case ('icon') {\n <ng-container *ngTemplateOutlet=\"iconSelectTemplate\"></ng-container>\n }\n <!-- Avatar Leading Select -->\n @case ('avatar') {\n <ng-container *ngTemplateOutlet=\"avatarSelectTemplate\"></ng-container>\n }\n <!-- Dot Leading Select -->\n @case ('dot') {\n <ng-container *ngTemplateOutlet=\"dotSelectTemplate\"></ng-container>\n }\n <!-- Search Input Select -->\n @case ('search') {\n <ng-container *ngTemplateOutlet=\"searchInputTemplate\"></ng-container>\n }\n }\n }\n\n <!-- Dropdown Menu (rendered into a CDK overlay via ZenduOverlayService;\n positioning/flip/clamping is handled there, not with absolute CSS) -->\n <ng-template #dropdownPanel>\n <div class=\"app-select-dropdown\">\n <!-- Tree Mode: embed zen-groups inline -->\n @if (isTreeMode && isMultiselect) {\n <zen-groups [inline]=\"true\"\n [dataSource]=\"$any(options)\"\n [filteredDataSource]=\"treeFilteredDataSource\"\n [hideSelectAll]=\"hideSelectAll\"\n [hideSearch]=\"hideTreeSearch\"\n [idProp]=\"idProp\"\n [displayProp]=\"displayProp\"\n [(isSelectedAll)]=\"isSelectedAll\"\n (isSelectedAllChange)=\"onTreeSelectAllChange($event)\"\n (checkedChange)=\"onTreeCheckedChange($event)\">\n </zen-groups>\n } @else {\n <!-- Search Box for hasSearch (not for search type as it has inline search) -->\n @if (leadingType !== 'search' && hasSearch && !disabled) {\n <div class=\"app-select-search\">\n <zen-icon [name]=\"'search'\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"onSearchChange()\"\n (keydown.enter)=\"onSearchEnter($event)\"\n placeholder=\"Search\"\n class=\"app-select-search-input\">\n @if (searchText) {\n <zen-icon\n class=\"app-select-search-clear\"\n [name]=\"'x'\"\n [customColor]=\"'#667085'\"\n (click)=\"clearSearch(); $event.stopPropagation()\">\n </zen-icon>\n }\n </div>\n }\n <!-- Options List -->\n <div class=\"app-select-options\" (scroll)=\"onOptionsScroll($event)\">\n <!-- Select All Option for Multiselect -->\n @if (isMultiselect && !hideSelectAll && !isLazyLoading && filteredOptions.length > 0) {\n <button\n class=\"app-select-option select-all\"\n (click)=\"toggleSelectAll()\">\n <zen-checkbox class=\"app-select-checkbox\"\n [checked]=\"isAllSelected()\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n <span class=\"app-select-option-text\">\n Select All\n </span>\n </button>\n }\n <!-- Add New Option -->\n @if (enableAddNewOption && (showDefaultAddOption || searchText)) {\n <button\n class=\"app-select-option add-new-option\"\n (click)=\"handleAddNewOption(); $event.stopPropagation()\">\n <zen-icon [name]=\"'plus'\" [customColor]=\"'#136AB6'\"></zen-icon>\n <span class=\"app-select-option-text\">\n {{ (newOptionText || 'Add New Option') + (searchText ? ': \"' + searchText + '\"' : '') }}\n </span>\n </button>\n }\n <!-- Remove Option -->\n @if (enableRemoveOption) {\n <button\n class=\"app-select-option remove-option\"\n (click)=\"handleRemoveOption(); $event.stopPropagation()\">\n <zen-icon [name]=\"'user-x'\" [customColor]=\"'#344054'\"></zen-icon>\n <span class=\"app-select-option-text\">\n {{ removeOptionText || 'Remove' }}\n </span>\n </button>\n }\n @if (filteredOptions.length === 0 && !enableAddNewOption && !isLoadingNow) {\n <div class=\"app-select-no-options\">\n No matching options found\n </div>\n }\n @for (option of filteredOptions; track option) {\n <button\n class=\"app-select-option\"\n [class.selected]=\"isSelected(option)\"\n (click)=\"selectOption(option)\">\n <!-- Checkbox for Multiselect -->\n @if (isMultiselect) {\n <zen-checkbox class=\"app-select-checkbox\"\n [checked]=\"isSelected(option)\"\n [disableValueChange]=\"true\"\n [label]=\"''\"\n size=\"sm\">\n </zen-checkbox>\n }\n <!-- Option Leading Element -->\n @if (leadingType !== 'default') {\n <div class=\"app-select-option-leading\">\n @switch (leadingType) {\n @case ('icon') {\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: option }\"></ng-container>\n }\n @case ('avatar') {\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: option }\"></ng-container>\n }\n @case ('dot') {\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: option }\"></ng-container>\n }\n }\n </div>\n }\n <!-- Option Text -->\n <div class=\"app-select-option-text-wrapper\">\n <!-- Use custom template if provided -->\n @if (!isMultiselect && optionTemplate) {\n <ng-template [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n } @else {\n <span class=\"app-select-option-text\" [class.app-select-option-truncate]=\"isTruncate\">\n {{ getName(option) | translate }}\n </span>\n @if (option.secondaryText) {\n <span class=\"app-select-option-secondary\">\n {{ option.secondaryText }}\n </span>\n }\n }\n </div>\n <!-- Check Icon for Single Select -->\n @if (!isMultiselect && isSelected(option)) {\n <zen-icon\n class=\"app-select-option-check\"\n [name]=\"'check'\"\n [customColor]=\"'#136AB6'\">\n </zen-icon>\n }\n </button>\n }\n <!-- Lazy loading spinner -->\n @if (isLazyLoading && isLoadingNow) {\n <div class=\"app-select-loading\">\n <zen-spinner size=\"small\"></zen-spinner>\n </div>\n }\n </div>\n }\n <!-- Flat List Mode (default) -->\n </div>\n </ng-template>\n </div>\n\n <!-- Hint text / Error message -->\n @if ((destructive && errorMessage) || hintText) {\n <div\n class=\"app-select-hint text text-sm text-weight-regular\"\n [ngClass]=\"{'destructive': destructive}\">\n @if (destructive) {\n <i class=\"material-icons-outlined hint-icon\">error_outline</i>\n }\n <span>{{ ((destructive && errorMessage) ? errorMessage : hintText) | translate }}</span>\n </div>\n }\n</div>\n\n<!-- ============================================= -->\n<!-- MAIN SELECT INPUT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Default Select Template (No Leading Element) -->\n<ng-template #defaultSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Icon Select Template -->\n<ng-template #iconSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"iconLeadingElement; context: { option: getSelectedOption(), icon: leadingIcon }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Avatar Select Template -->\n<ng-template #avatarSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"avatarLeadingElement; context: { option: getSelectedOption(), avatar: leadingAvatar }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Dot Select Template -->\n<ng-template #dotSelectTemplate>\n <button class=\"app-select-input\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [class.focused]=\"isOpen\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <div class=\"app-select-leading\">\n <ng-container *ngTemplateOutlet=\"dotLeadingElement; context: { option: getSelectedOption(), color: leadingDotColor }\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"selectValueDisplay\"></ng-container>\n <ng-container *ngTemplateOutlet=\"dropdownArrow\"></ng-container>\n </button>\n</ng-template>\n\n<!-- Search Input Template -->\n<ng-template #searchInputTemplate>\n <div class=\"app-select-input app-select-search-input\"\n [class.focused]=\"isOpen || searchFocused\"\n [class.has-value]=\"!isModelEmpty()\">\n\n <!-- Search Icon -->\n <zen-icon [name]=\"'search'\"\n [customColor]=\"disabled ? '#9CA3AF' : '#667085'\">\n </zen-icon>\n\n <!-- Search Input Field -->\n <input type=\"text\"\n class=\"app-select-search-field\"\n [(ngModel)]=\"searchInputValue\"\n (ngModelChange)=\"onSearchInputChange()\"\n (keydown.enter)=\"onSearchEnter($event)\"\n (focus)=\"onSearchFocus()\"\n (blur)=\"onSearchBlur($event)\"\n [placeholder]=\"selectedDisplay || placeholder\"\n [disabled]=\"disabled\">\n </div>\n</ng-template>\n\n<!-- ============================================= -->\n<!-- SHARED COMPONENT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Select Value Display -->\n<ng-template #selectValueDisplay>\n <div class=\"app-select-value-wrapper\">\n @if (valueTemplate && !isModelEmpty()) {\n <ng-template [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: getSelectedOption(), display: selectedDisplay }\">\n </ng-template>\n } @else {\n <span class=\"app-select-value\" [class.placeholder]=\"isModelEmpty()\">\n {{ selectedDisplay || placeholder | translate }}\n </span>\n @if (getSelectedSecondaryText() && !isModelEmpty()) {\n <span class=\"app-select-secondary\">\n {{ getSelectedSecondaryText() }}\n </span>\n }\n }\n </div>\n</ng-template>\n\n<!-- Dropdown Arrow -->\n<ng-template #dropdownArrow>\n <zen-icon class=\"app-select-arrow\"\n [class.rotated]=\"isOpen\"\n [name]=\"'chevron-down'\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n</ng-template>\n\n<!-- ============================================= -->\n<!-- LEADING ELEMENT TEMPLATES -->\n<!-- ============================================= -->\n\n<!-- Icon Leading Element (with smart resolution) -->\n<ng-template #iconLeadingElement let-option=\"option\" let-icon=\"icon\">\n @if (icon || option?.icon || option?.iconName) {\n @if (getIconPath(option, icon); as iconPath) {\n <!-- If icon contains / or . treat as SVG path -->\n @if ((icon && (icon.includes('/') || icon.includes('.'))) ||\n (option?.icon && (option.icon.includes('/') || option.icon.includes('.'))) ||\n (option?.iconName && (option.iconName.includes('/') || option.iconName.includes('.')))) {\n <!-- Use img tag for Excel to preserve colors -->\n @if (iconPath.includes('excel')) {\n <img\n [src]=\"iconPath\"\n alt=\"\"\n style=\"width: 20px; height: 20px;\">\n }\n <!-- Use zen-icon with src for other SVG files -->\n @if (!iconPath.includes('excel')) {\n <zen-icon\n [src]=\"iconPath\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n }\n }\n <!-- Otherwise treat as Material icon name or special cases -->\n @if (!((icon && (icon.includes('/') || icon.includes('.'))) ||\n (option?.icon && (option.icon.includes('/') || option.icon.includes('.'))) ||\n (option?.iconName && (option.iconName.includes('/') || option.iconName.includes('.'))))) {\n <!-- Special case for Excel icon - use img to preserve colors -->\n @if ((icon === 'excel') || (option?.icon === 'excel') || (option?.iconName === 'excel')) {\n <img\n src=\"assets/ng-zenduit/icons/excel.svg\"\n alt=\"Excel\"\n style=\"width: 20px; height: 20px;\">\n }\n <!-- Material icon names -->\n @if ((icon !== 'excel') && (option?.icon !== 'excel') && (option?.iconName !== 'excel')) {\n <zen-icon\n [name]=\"icon || option?.icon || option?.iconName\"\n [customColor]=\"'#667085'\">\n </zen-icon>\n }\n }\n }\n }\n</ng-template>\n\n<!-- Avatar Leading Element -->\n<ng-template #avatarLeadingElement let-option=\"option\" let-avatar=\"avatar\">\n @if (avatar || option?.avatar) {\n <div class=\"app-select-avatar\" >\n <img [src]=\"avatar || option?.avatar\" alt=\"\">\n </div>\n }\n</ng-template>\n\n<!-- Dot Leading Element -->\n<ng-template #dotLeadingElement let-option=\"option\" let-color=\"color\">\n <div class=\"app-select-dot\"\n [style.background-color]=\"color || option?.dotColor || '#10B981'\">\n </div>\n</ng-template>","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { PageItem } from './pageItem';\n\n@Component({\n selector: 'zen-pagination-bar',\n templateUrl: './zendu-pagination-bar.component.html',\n styleUrls: ['./zendu-pagination-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduPaginationBarComponent implements OnChanges {\n @Input() page = 1;\n @Input() perPage = 10;\n @Input() count = 0;\n @Input() perPageOptions: number[] = [10, 20, 30, 40, 50];\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() perPageChange = new EventEmitter<number>();\n\n public totalPages = 1;\n public pages: PageItem[] = [];\n public rangeStart = 0;\n public rangeEnd = 0;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['count'] || changes['perPage'] || changes['page']) {\n this.recalculate();\n }\n }\n\n public goToPage(target: number): void {\n const clamped = Math.min(Math.max(1, target), this.totalPages);\n if (clamped === this.page) {\n return;\n }\n this.page = clamped;\n this.recalculate();\n this.pageChange.emit(this.page);\n }\n\n public onPerPageChange(value: number): void {\n this.perPage = value;\n this.page = 1;\n this.recalculate();\n this.perPageChange.emit(this.perPage);\n this.pageChange.emit(this.page);\n }\n\n private recalculate(): void {\n this.totalPages = Math.max(1, Math.ceil((this.count || 0) / (this.perPage || 1)));\n this.pages = this.buildPages(this.page, this.totalPages);\n this.rangeStart = this.count === 0 ? 0 : (this.page - 1) * this.perPage + 1;\n this.rangeEnd = Math.min(this.page * this.perPage, this.count);\n }\n\n private buildPages(current: number, total: number): PageItem[] {\n const result: PageItem[] = [];\n const push = (p: number) => result.push({ kind: 'page', page: p, active: p === current });\n\n if (total <= 7) {\n for (let i = 1; i <= total; i++) {\n push(i);\n }\n return result;\n }\n\n const window = new Set<number>([1, total, current - 1, current, current + 1]);\n if (current <= 3) {\n window.add(2).add(3);\n }\n if (current >= total - 2) {\n window.add(total - 1).add(total - 2);\n }\n\n const sorted = Array.from(window)\n .filter((p) => p >= 1 && p <= total)\n .sort((a, b) => a - b);\n\n let prev = 0;\n for (const p of sorted) {\n if (p - prev > 1) {\n result.push({ kind: 'ellipsis' });\n }\n push(p);\n prev = p;\n }\n return result;\n }\n}\n","<div class=\"pagination-component\">\n <p class=\"results-text\">\n {{ \"Showing\" | translate }} {{ rangeStart }} - {{ rangeEnd }}\n {{ \"of\" | translate }} {{ count }} {{ \"results\" | translate }}\n </p>\n\n <div class=\"page-navigation\">\n <zen-button\n buttonType=\"button-icon-only\"\n variant=\"tertiary-gray\"\n size=\"md\"\n icon=\"chevron-left\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPage(page - 1)\">\n </zen-button>\n\n <div class=\"pages\">\n @for (item of pages; track item; let i = $index) {\n @if (item.kind === 'page') {\n <button\n type=\"button\"\n class=\"page-btn\"\n [class.is-active]=\"item.active\"\n (click)=\"goToPage(item.page)\">\n {{ item.page }}\n </button>\n }\n @if (item.kind === 'ellipsis') {\n <span class=\"page-ellipsis\">…</span>\n }\n }\n </div>\n\n <zen-button\n buttonType=\"button-icon-only\"\n variant=\"tertiary-gray\"\n size=\"md\"\n icon=\"chevron-right\"\n [disabled]=\"page >= totalPages\"\n (click)=\"goToPage(page + 1)\">\n </zen-button>\n </div>\n\n <div class=\"rows-per-page\">\n <span class=\"rows-label\">{{ \"Rows per page\" | translate }}</span>\n <zen-select\n size=\"sm\"\n [options]=\"perPageOptions\"\n [(selectModel)]=\"perPage\"\n (selectModelChange)=\"onPerPageChange($event)\"\n preferredOpenDirection=\"up\">\n </zen-select>\n </div>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\n@Component({\n selector: 'zen-phone-input',\n templateUrl: './zendu-phone-input.component.html',\n styleUrls: ['./zendu-phone-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduPhoneInputComponent implements OnInit, OnChanges {\n\n @ViewChild('input') inputElement: ElementRef<HTMLInputElement>;\n\n @Input() phone: string;\n\n @Input() maxLength: number = 12;\n\n @Output() phoneChange = new EventEmitter<string>();\n\n @Output() validChange = new EventEmitter<boolean>();\n\n @Input() disabled = false;\n\n @Input() width: string;\n\n public phoneText = \"\";\n\n public countryList: { countryCode: string, countryName: string, countryCallingCode: string, flag: string }[] = [\n {\n countryCode: \"US\",\n countryName: \"America\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/USA.svg\"\n },\n {\n countryCode: \"CA\",\n countryName: \"Canada\",\n countryCallingCode: \"+1\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Canada.svg\"\n },\n {\n countryCode: \"MX\",\n countryName: \"Mexico\",\n countryCallingCode: \"+52\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Mexico.svg\"\n }\n ];\n\n public customCountry = {\n countryCode: \"\",\n countryName: \"Custom\",\n countryCallingCode: \"\",\n flag: \"https://storage.googleapis.com/zenduit-icons/Flags/Custom.svg\"\n };\n\n public selectedCountry: { countryCode: string, countryName: string, countryCallingCode: string, flag: string };\n\n public isExpanded = false;\n\n public constructor() {\n this.selectedCountry = this.countryList[1];\n }\n\n public ngOnInit(): void {\n this.parseNumber();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"phone\"] && (!this.selectedCountry || !this.selectedCountry.countryCode)) {\n this.parseNumber();\n }\n }\n\n public parseNumber(): void {\n try {\n this.phoneText = this.phone || '';\n\n if (this.phone) {\n const countryFromList = this.countryList.find(country => this.phone.startsWith(country.countryCallingCode) || `+${this.phone}`.startsWith(country.countryCallingCode));\n if (countryFromList) {\n this.selectedCountry = countryFromList || this.customCountry;\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n const parsedPhone = phoneNumberUtil.parse(this.phone || \"\", 'US');\n setTimeout(() => {\n if (this.phoneText.startsWith('+')) {\n this.phoneText = this.phoneText.replace(`+${parsedPhone.getCountryCode()}`, \"\");\n } else if (this.phoneText.startsWith(parsedPhone.getCountryCode())) {\n this.phoneText = this.phoneText.replace(parsedPhone.getCountryCode(), \"\");\n }\n this.phoneChanged();\n });\n } else {\n this.selectedCountry = this.customCountry; \n }\n } else {\n this.selectedCountry = this.customCountry;\n }\n } catch (err) {\n console.warn(`Can't parse phone: ${this.phone}`, err);\n this.selectedCountry = this.customCountry;\n }\n }\n\n public countryChanged(country): void {\n this.isExpanded = false;\n this.selectedCountry = country;\n this.phoneChanged();\n }\n\n public phoneChanged(input?: HTMLInputElement): void {\n \n // allow + in custom country\n let custom = false;\n if (this.selectedCountry === this.customCountry && this.phoneText.includes('+')) {\n custom = true;\n }\n \n const phoneText = (this.phoneText || '').replace(/\\D/g, '');\n this.phoneText = custom ? `+${phoneText}`: phoneText\n if (input && input.value !== this.phoneText) {\n input.value = this.phoneText;\n }\n const fullNumber = `${this.selectedCountry.countryCallingCode}${this.phoneText}`;\n if (this.phone !== fullNumber) {\n this.phoneChange.emit(fullNumber);\n }\n const phoneNumberUtil = PhoneNumberUtil.getInstance();\n if (this.selectedCountry === this.customCountry) {\n this.validChange.emit(true);\n } else {\n try {\n this.validChange.emit(phoneNumberUtil.isValidNumber(phoneNumberUtil.parseAndKeepRawInput(fullNumber)));\n } catch {\n this.validChange.emit(false);\n }\n }\n }\n\n public hideDropDown(): void {\n this.isExpanded = false;\n }\n\n public toggle() {\n if (this.disabled) {\n return;\n }\n this.isExpanded = !this.isExpanded;\n }\n\n public focusInput(): void {\n if (this.inputElement) {\n this.inputElement.nativeElement.focus();\n }\n }\n}\n","<div class=\"zen-input-container\" [style.width]=\"width\">\n <!-- Input wrapper -->\n <div class=\"zen-input-field-wrapper\" (click)=\"focusInput()\">\n\n <!-- Leading dropdown: Country selector -->\n <div class=\"zen-input-leading-dropdown\">\n <button type=\"button\"\n class=\"zen-dropdown-trigger\"\n [disabled]=\"disabled\"\n (click)=\"toggle(); $event.stopPropagation()\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"selectedCountry.flag\"\n [alt]=\"selectedCountry.countryName\">\n <span class=\"dropdown-label\">{{ selectedCountry.countryCallingCode }}</span>\n <i class=\"material-icons dropdown-icon\"\n [ngClass]=\"{'active': isExpanded}\">expand_more</i>\n </button>\n </div>\n\n <!-- Phone input field -->\n <input #input\n class=\"zen-input-field text text-md text-weight-regular\"\n type=\"text\"\n [(ngModel)]=\"phoneText\"\n (ngModelChange)=\"phoneChanged(input)\"\n (click)=\"isExpanded = false\"\n [disabled]=\"disabled\"\n country-code=\"selectedCountry.countryCode\"\n [maxlength]=\"maxLength\">\n </div>\n\n <!-- Country dropdown menu -->\n @if (isExpanded) {\n <div class=\"zen-dropdown-menu\"\n [ngClass]=\"{'open': isExpanded}\">\n <!-- Countries List -->\n @for (country of countryList; track country) {\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': selectedCountry.countryName === country.countryName}\"\n (click)=\"countryChanged(country)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"country.flag\"\n [alt]=\"country.countryName\">\n <span class=\"zen-phone-country-name\">{{ country.countryName }}</span>\n <span class=\"zen-phone-country-code\">{{ country.countryCallingCode }}</span>\n </button>\n }\n <!-- Custom Country -->\n <button type=\"button\"\n class=\"zen-dropdown-option\"\n [ngClass]=\"{'selected': selectedCountry.countryName === customCountry.countryName}\"\n (click)=\"countryChanged(customCountry)\">\n <img class=\"zen-phone-country-flag\"\n [src]=\"customCountry.flag\"\n [alt]=\"customCountry.countryName\">\n <span class=\"zen-phone-country-name\">{{ customCountry.countryName }}</span>\n <span class=\"zen-phone-country-code\">{{ customCountry.countryCallingCode }}</span>\n </button>\n </div>\n }\n</div>\n\n<!-- Click outside handler for dropdown -->\n@if (isExpanded) {\n <div\n class=\"zen-dropdown-backdrop\"\n (click)=\"hideDropDown()\"></div>\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-sort',\n templateUrl: './zendu-sort-header.component.html',\n styleUrls: ['./zendu-sort-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSortHeaderComponent {\n\n @Input() sort!: 'asc' | 'desc' | '';\n\n @Output() sortChange = new EventEmitter<'asc' | 'desc'>();\n\n @Input() active!: boolean;\n\n public toggleSort() {\n switch (this.sort) {\n case 'asc':\n this.sort = 'desc';\n this.sortChange.emit(this.sort);\n break;\n case 'desc':\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n break;\n default:\n this.sort = 'asc';\n this.sortChange.emit(this.sort);\n }\n }\n}\n","<div class=\"sort-option\"\n (click)=\"toggleSort()\">\n <zen-icon class=\"sort-icon\"\n [class.sort-icon-active]=\"active\"\n [class.sort-icon-asc]=\"active && sort === 'asc'\"\n src=\"assets/ng-zenduit/icons/arrow-down.svg\"></zen-icon>\n</div>\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-toggle-slide',\n templateUrl: './zendu-toggle-slide.component.html',\n styleUrls: ['./zendu-toggle-slide.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduToggleSlideComponent {\n\n @Input() enabled!: boolean;\n\n @Output() enabledChange = new EventEmitter<boolean>();\n\n @Input() disabled!: boolean;\n\n /**\n * Toggle state\n */\n public toggle() {\n this.enabled = !this.enabled;\n this.enabledChange.emit(this.enabled);\n }\n}\n","<button class=\"toggle-slide-component\"\n (click)=\"toggle()\"\n [disabled]=\"disabled\"\n [class.active]=\"enabled\"\n [class.disabled]=\"disabled\">\n\n <div class=\"toggle-slider\"></div>\n <div class=\"toggle-btn\"></div>\n</button>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-card-block',\n templateUrl: './zendu-card-block.component.html',\n styleUrls: ['./zendu-card-block.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduCardBlockComponent {\n\n @Input() icon: string;\n\n @Input() title: string;\n\n @Input() text: string;\n\n @Input() selected: boolean;\n\n}\n","<div class=\"component\">\n @if (icon) {\n <zen-icon\n [src]=\"icon\"></zen-icon>\n }\n\n <div class=\"title\">\n {{title}}\n </div>\n <div class=\"text\">\n {{text}}\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-map-preview',\n templateUrl: './zendu-map-preview.component.html',\n styleUrls: ['./zendu-map-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduMapPreviewComponent implements OnChanges {\n\n @Input() lat: number;\n\n @Input() lng: number;\n\n @Input() apiKey: string;\n\n public source = \"\";\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && this.lat && this.lng) {\n this.source = `https://image.maps.ls.hereapi.com/mia/1.6/mapview?apiKey=${this.apiKey}&c=${this.lat},${this.lng}` +\n `&z=14&w=222&h=80&&base=reduced.night&incidents=off&traffic=off`;\n }\n else {\n this.source = \"\";\n }\n }\n\n}\n","<div class=\"component\"\n [ngStyle]=\"{ 'background-image': 'url('+source+')' }\">\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n\n}","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScriptLoader {\n\n private static _loadedLibs: string[] = [];\n\n private static _lock = new LocalLock();\n\n public async loadScript(lib: \"flv\" | \"opencv\" | \"jscanify\") {\n try {\n await ScriptLoader._lock.lock();\n\n if (ScriptLoader._loadedLibs.includes(lib)) {\n // already loaded\n return;\n }\n\n console.log(`load library \"${lib}\"...`)\n\n // Storage bucket available here:\n // https://console.cloud.google.com/storage/browser/ng-zenduit/scripts?project=zendu-one\n\n let src = \"\";\n switch (lib) {\n case \"flv\":\n // load open cv script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/flv.js\");\n await this.waitInitalization(\"flvjs\");\n break;\n case \"opencv\":\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/opencv_4.7.0.js\");\n await this.waitInitalization(\"cv\");\n break;\n case \"jscanify\":\n // load jscanify script\n this.loadScriptBySrc(\"https://storage.googleapis.com/ng-zenduit/scripts/jscanify_1.2.0.js\");\n await this.waitInitalization(\"jscanify\");\n break;\n default:\n throw `unknown lib \"${lib}\"`\n }\n\n console.log(`Library \"${lib}\" loaded`)\n\n ScriptLoader._loadedLibs.push(lib);\n }\n finally {\n ScriptLoader._lock.release();\n }\n }\n\n private loadScriptBySrc(src: string) {\n const script = <HTMLScriptElement>document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n\n script.src = src;\n // insert script to document\n const node = document.getElementsByTagName('script')[0];\n if (node) {\n node.parentNode.insertBefore(script, node);\n } else {\n document.head.appendChild(script);\n }\n }\n\n private async waitInitalization(globalVarName: string) {\n\n const timeout = Date.now() + 60000;\n\n // wait cv first\n while (true) {\n if (window[globalVarName]) {\n break;\n }\n await Util.sleep(1000);\n\n if (Date.now() > timeout) {\n throw `Failed initalize OpenCV. Reason: timeout`\n }\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalLock } from '../local.lock';\nimport { Util } from '../util';\nimport { ScriptLoader } from './script.loader.service';\n\nexport interface ScanifyCorners {\n topLeftCorner: { x: number, y: number };\n topRightCorner: { x: number, y: number };\n bottomLeftCorner: { x: number, y: number };\n bottomRightCorner: { x: number, y: number };\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenCVService {\n\n private static _isOpenCVLoaded = false;\n\n private static _lock = new LocalLock();\n\n constructor(\n private _scriptLoader: ScriptLoader\n ) { }\n\n /**\n * extract paper from the image\n * @returns\n */\n public async extractPaper(options: {\n src: string;\n height: number;\n width: number;\n corners: ScanifyCorners;\n }): Promise<HTMLCanvasElement> {\n // load open cv\n await this.loadOpenCv();\n\n const htmlImage = await this.loadImage(options.src);\n console.log(\"image is ready\");\n\n const scanner = new window[\"jscanify\"];\n\n return scanner.extractPaper(htmlImage, options.height, options.width, options.corners);\n }\n\n /**\n * Get the paper corners from the specific image\n * @param src\n * @returns\n */\n public async getPaperCorners(src: string, height: number, width: number): Promise<ScanifyCorners> {\n // load opencv\n await this.loadOpenCv();\n\n const cv = this.getCVInternal();\n\n const htmlImage = await this.loadImage(src);\n console.log(\"image is ready\", htmlImage);\n\n const scanner = new window[\"jscanify\"];\n\n const img = cv.imread(htmlImage);\n\n const maxContour = scanner.findPaperContour(img);\n if (!maxContour) {\n return null;\n }\n\n const res = scanner.getCornerPoints(maxContour, img);\n return res;\n }\n\n private loadImage(src: string) {\n return new Promise((resolve) => {\n const image = new Image();\n image.src = src;\n image.onload = function () {\n resolve(image);\n };\n })\n\n }\n\n private async loadOpenCv() {\n try {\n await OpenCVService._lock.lock();\n\n if (OpenCVService._isOpenCVLoaded) {\n return;\n }\n\n console.log(\"load opencv...\");\n\n await Promise.all([\n this._scriptLoader.loadScript(\"opencv\"),\n this._scriptLoader.loadScript(\"jscanify\")\n ]);\n\n console.log(\"OpenCV is ready\")\n\n OpenCVService._isOpenCVLoaded = true;\n }\n finally {\n OpenCVService._lock.release();\n }\n }\n\n private getCVInternal() {\n return window[\"cv\"];\n }\n}\n","import { fabric } from 'fabric';\nimport {\n Component,\n ElementRef,\n Input,\n AfterViewInit,\n ViewChild,\n OnChanges,\n Output,\n EventEmitter,\n SimpleChanges,\n ChangeDetectorRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { OpenCVService } from '../services/opencv.service';\nimport { IText, Transform } from 'fabric/fabric-impl';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'zen-doc-scanner',\n templateUrl: './zendu-doc-scanner.component.html',\n styleUrls: ['./zendu-doc-scanner.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduDocScanner implements AfterViewInit, OnChanges {\n @ViewChild('drawCanas') _canvasElement!: ElementRef<HTMLCanvasElement>;\n\n @ViewChild('componentWrapper') _component!: ElementRef<HTMLDivElement>;\n\n @Input() src = '';\n\n @Input() width = 0;\n\n @Input() height = 0;\n\n @Input() isScanStart: boolean = false;\n\n @Input() canAddText: boolean = false;\n\n @Input() canDoodle: boolean = false;\n\n currentStateIndex: number = -1;\n\n isLoading:BehaviorSubject<boolean> =new BehaviorSubject<boolean>(false);\n\n canvasStates: { state: string; customControl: any }[] = [];\n\n isResize: boolean = false;\n initialMouseY: number;\n originalFontSize: number;\n\n @Input() isRedoing: boolean = false;\n @Input() isUndoing: boolean = false;\n @Input() expandIconSrc: string;\n @Input() rotateIconSrc: string;\n @Input() crossIconSrc: string;\n @Input() set done(completed: boolean) {\n console.log('mark as completed', completed);\n if (completed) {\n this.completeScan(completed);\n }\n }\n\n @Output() extracted = new EventEmitter<HTMLCanvasElement>();\n\n @Output() cornersChanged = new EventEmitter<void>();\n\n @Output() getUndoingChange = new EventEmitter<boolean>()\n @Output() getRedoingChange = new EventEmitter<boolean>()\n\n @Output() canAddTextOrDoole = new EventEmitter<{}>();\n\n @Output() canRedoOrUndo = new EventEmitter<{\n canRedo: boolean;\n canUndo: boolean;\n }>();\n\n private screenPoints: { x: number; y: number }[] = [];\n\n private _canvas!: fabric.Canvas;\n\n private _cornersPg!: fabric.Polygon;\n\n private _scaleFactor = 1;\n\n private _controls: fabric.Circle[] = [];\n\n selectedColor: string = '#121212';\n\n isScaned: boolean = false;\n\n textAdded: boolean = false;\n\n icons = {\n cross: new Image(),\n rotate: new Image(),\n expand: new Image(),\n };\n private Image = {\n height: 0,\n width: 0,\n };\n borderWidth: number = 5;\n colors = [\n { hexCode: '#FFFFFF', selected: false },\n { hexCode: '#121212', selected: false },\n { hexCode: '#2188D9', selected: false },\n { hexCode: '#DC3E33', selected: false },\n { hexCode: '#219653', selected: false },\n { hexCode: '#F1B10B', selected: false },\n { hexCode: '#00F0FF', selected: false },\n ];\n resizeIcon: HTMLElement;\n rotateIcon: HTMLElement;\n removeIcon: HTMLElement;\n constructor(private _opencv: OpenCVService,private cdRef: ChangeDetectorRef) {}\n\n public ngAfterViewInit() {\n this.icons.cross.src = this.crossIconSrc;\n this.icons.rotate.src = this.rotateIconSrc;\n this.icons.expand.src = this.expandIconSrc;\n setTimeout(async () => {\n await this.init();\n // Add an event listener for canvas edits\n }, 1);\n }\n\n public onCanvasEdit() {\n let objects = this._canvas.getObjects();\n if (objects && objects.length)\n this._canvas._activeObject = objects[objects.length - 1];\n if (!this.isScanStart && !this.isRedoing && !this.isUndoing) {\n //Set canvas state as base state when user is done undo at last and than try to add new object\n if (this.canvasStates.length > 1 && this.currentStateIndex === 0)\n this.canvasStates = this.canvasStates.filter(\n (state, index) => index === 0\n );\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex >= 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.saveCanvasState();\n }\n\n}\n public ngOnChanges(changes: SimpleChanges) {\n // When src changes\n if (changes['src'] && this._canvas) {\n this.build();\n }\n //When user start scan\n if (changes['isScanStart'] && changes['isScanStart'].currentValue) {\n if (this.src && this._canvas && this.isScanStart) {\n this.isLoading.next(true);\n this.addPointsTodoc();\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScaned = true;\n this._canvas.selection = false;\n this.textAdded = false;\n }\n }\n // When user wants to draw\n if (\n changes['canDoodle'] &&\n changes['canDoodle'].currentValue &&\n this._canvas\n ) {\n\n if (this.canDoodle) {\n this._canvas.isDrawingMode = this.canDoodle;\n this._canvas.freeDrawingBrush = this.canDoodle\n ? new fabric.PencilBrush(this._canvas)\n : null;\n this._canvas.freeDrawingBrush.width = 10;\n this._canvas.freeDrawingBrush.color = this.selectedColor;\n this._canvas.selection = false;\n this.isScanStart = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n }\n // When user wants to add text\n if (\n changes['canAddText'] &&\n changes['canAddText'].currentValue &&\n this.canAddText &&\n this._canvas\n ) {\n this.canDoodle = false;\n this._canvas.isDrawingMode = false;\n this.isScanStart = false;\n }\n if (\n changes['isUndoing'] &&\n this._canvas\n ){\n this.isUndoing = changes['isUndoing'].currentValue\n if(changes['isUndoing'].currentValue){\n setTimeout(() => {\n this.undo();\n }, 0);\n }\n }\n if (\n changes['isRedoing'] &&\n this._canvas\n ){\n this.isRedoing = changes['isRedoing'].currentValue;\n if(changes['isRedoing'].currentValue){\n setTimeout(() => {\n this.redo();\n }, 0);\n }\n }\n }\n // To change the color of brush or text\n chngClrTextOrBrush(color: string, changeFor: string) {\n this.selectedColor = color;\n this.colors.map((clr, index) => {\n this.colors[index] = { ...this.colors[index], selected: false };\n if (this.colors[index].hexCode === color) {\n this.colors[index] = { ...this.colors[index], selected: true };\n }\n });\n if (changeFor === 'text') {\n const activeObject = this._canvas.getActiveObject();\n if (activeObject && activeObject.type === 'i-text') {\n // Check if an active text object is selected\n activeObject.set('fill', this.selectedColor); // Update the fill color\n this._canvas.renderAll(); // Render the canvas to see the changes\n }\n this._canvas.renderAll();\n this.onCanvasEdit();\n } else {\n this._canvas.freeDrawingBrush.color = color;\n }\n this.selectedColor = color;\n }\n async addPointsTodoc() {\n const corners = await this._opencv.getPaperCorners(\n this._canvas.toDataURL({\n format: 'jpeg',\n quality: 1,\n }),\n\n this.Image.height,\n this.Image.width\n );\n if (corners) {\n this.screenPoints = [\n {x:corners.topLeftCorner.x + 15,y:corners.topLeftCorner.y},\n {x:corners.topRightCorner.x - 30,y:corners.topRightCorner.y},\n {x:corners.bottomRightCorner.x - 30,y:corners.bottomRightCorner.y},\n {x:corners.bottomLeftCorner.x + 15,y:corners.bottomLeftCorner.y},\n ];\n } else {\n console.error(`can't detect document corners`);\n const width = this._canvas.getWidth() / this._scaleFactor;\n const height = this._canvas.getHeight() / this._scaleFactor;\n const offset = 20;\n this.screenPoints = [\n { x: offset, y: 0 },\n { x: width - offset, y: 0 },\n { x: width - offset, y: height - offset },\n { x: offset, y: height - offset },\n ];\n }\n\n // add polygon\n //\n this._cornersPg = new fabric.Polygon(this.screenPoints, {\n stroke: '#2188d9',\n strokeWidth: 10,\n selectable: false,\n fill: 'rgba(33, 136, 217, 0.1)',\n hasBorders: true,\n objectCaching: false,\n });\n this._canvas.add(this._cornersPg);\n this.createControls(this._cornersPg);\n this.isLoading.next(false);\n }\n\n private async init(src?: string) {\n // Create canvas with new changed src\n if (src) {\n this.createCanvas();\n } else {\n try {\n if (!this._canvasElement || !this._canvasElement.nativeElement) {\n // canvas is not ready\n return;\n }\n\n if (this._canvas) {\n // canvas already initalized\n return;\n }\n this.createCanvas();\n } catch (err) {\n console.error(err);\n }\n }\n }\n\n async createCanvas() {\n // documentation: http://fabricjs.com/docs/fabric.Canvas.html\n let canvas = this._canvasElement.nativeElement;\n this._canvas = new fabric.Canvas(canvas, {\n backgroundColor: 'white',\n selection: false,\n });\n const { width, height } = this.getCanvasSize();\n\n this._canvas.setWidth(width);\n this._canvas.setHeight(height);\n this._canvas.on('object:added', this.onCanvasEdit.bind(this));\n this._canvas.on('object:modified', this.onCanvasEdit.bind(this));\n this._canvas.on('mouse:down', this.addTextOnClick.bind(this));\n this._canvas.on('object:scaling', function(obj:any){\n })\n if (this.src) {\n await this.build();\n }\n }\n\n renderIcon(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride,\n fabricObject: fabric.Object,\n iconName: string\n ) {\n var size = 40;\n var iconBackgroundSize = 45; // Adjust the size as needed\n ctx.save();\n\n // Draw a background circle behind the icon\n ctx.fillStyle = 'white'; // Set the background color\n ctx.beginPath();\n ctx.arc(left, top - 10, iconBackgroundSize / 2, 0, 2 * Math.PI);\n ctx.fill();\n\n var img = this.icons[iconName];\n ctx.translate(left, top - 10);\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\n ctx.drawImage(img, -size / 2, -size / 2, size, size);\n ctx.restore();\n }\n\n stopResizeText(event: any) {\n if (this.isResize) {\n this.saveCanvasState();\n this.isResize = false;\n }\n }\n resizeText(event: any) {\n if (this.isResize) {\n const target = event.target;\n const deltaY = event.e.touches[0].clientY - this.initialMouseY;\n\n // Limit the scaling factor to prevent excessive resizing\n const scalingFactor = Math.min(2, Math.max(0.5, 1 + deltaY / 100));\n\n // Calculate the new font size based on the original size and scaling factor\n const newFontSize = this.originalFontSize * scalingFactor;\n\n // Set the font size of the text object\n target.fontSize = newFontSize;\n\n // Re-render the canvas to see the live change\n event.target.canvas.renderAll();\n }\n }\n addTextOnClick(event: any) {\n if (event.transform && event.transform.corner === 'expandControl') {\n this.isResize = true;\n this.initialMouseY = event.e.clientY;\n this.originalFontSize = event.target.fontSize;\n }\n if (\n !this.textAdded &&\n !this.canDoodle &&\n !this.isScanStart &&\n this.canAddText\n ) {\n this.addTextBox(event);\n }\n if (!this.textAdded && this.canAddText && this.currentStateIndex === 0) {\n this.addTextBox(event);\n this.currentStateIndex = -1;\n this.canvasStates = [];\n }\n }\n\n // Add text box with custom controls to canvas\n addTextBox(event) {\n const fixedWidthPercentage = 0.2; // Set a fixed width as a percentage of canvas width\n const fixedHeightPercentage = 0.1; // Set a fixed height as a percentage of canvas height\n\n const canvasWidth = this._canvas.getWidth();\n const canvasHeight = this._canvas.getHeight();\n\n const fixedWidth = canvasWidth * fixedWidthPercentage;\n const fixedHeight = canvasHeight * fixedHeightPercentage;\n\n let _text: IText = new fabric.IText('Type your text here', {\n left: event.pointer.x,\n top: event.pointer.y,\n fill: this.selectedColor,\n fontSize: 40,\n fontFamily: 'Roboto',\n selectable: true,\n fontWeight: 400,\n borderScaleFactor: 3,\n borderColor: 'white',\n backgroundColor: 'transparent', // Set background color of the text box\n cornerColor: 'white', // Set corner (resize handle) color of the text box\n padding: 35, // Set padding inside the text box\n width: fixedWidth, // Set the initial width of the text box\n height: fixedHeight\n });\n //Custom controls for add text box\n let customControls = {\n removeControl: new fabric.Control({\n x: -0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'cross'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n var target = transform.target;\n var canvas = target.canvas;\n canvas.remove(target);\n this.canAddText = true;\n this.textAdded = false;\n // this.canAddTextOrDoole.emit({ key: 'text', value: false });\n canvas.requestRenderAll();\n this.saveCanvasState();\n return true;\n },\n }),\n\n rotateControl: new fabric.Control({\n x: 0.5,\n y: -0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'pointer',\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'rotate'\n );\n },\n mouseUpHandler: (eventData, transform) => {\n let fabricObject = transform.target;\n const rotationIncrement = 30; // Rotation increment in degrees\n fabricObject.set(\n 'angle',\n (fabricObject.angle + rotationIncrement) % 360\n );\n fabricObject.setCoords(); // Update object's coordinates\n // debugger;\n this.saveCanvasState();\n return true;\n },\n }),\n\n expandControl: new fabric.Control({\n x: 0.5,\n y: 0.5,\n sizeX:50,\n sizeY:50,\n offsetY: 15,\n cursorStyle: 'grab',\n actionHandler: ((eventData: MouseEvent, transform: Transform, x: number, y: number) => {\n this.scaleFunction(eventData, transform,x,y)\n return true\n }),\n render: (ctx, left, top, styleOverride, fabricObject) => {\n return this.renderIcon(\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n 'expand'\n );\n },\n }),\n };\n\n _text.controls = customControls;\n this._canvas.add(_text);\n this._canvas.renderAll();\n this.textAdded = true;\n }\n scaleFunction(eventData: MouseEvent, transform: Transform, x: number, y: number){\n const target = transform.target;\n const corner = target.controls['expandControl'];\n const pointer = this._canvas.getPointer(eventData, true);\n\n const scaleX = (pointer.x - target.get('left')) / target.get('width');\n const scaleY = (pointer.y - target.get('top')) / target.get('height');\n\n target.set('scaleX', scaleX);\n target.set('scaleY', scaleY);\n}\n // Function to save the canvas state\n saveCanvasState() {\n const state = JSON.stringify(this._canvas.toJSON());\n // const state = this._canvas.getObjects()[this._canvas.getObjects.length - 1]\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.canvasStates.length = this.currentStateIndex + 1; // Remove future states\n }\n let activeObj = this._canvas.getActiveObject();\n\n if (activeObj && activeObj.type === 'path') {\n // set remove border and controls for drawing\n activeObj.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n }\n const customControl =\n activeObj && activeObj.controls ? activeObj.controls : null;\n this.canvasStates.push({ state, customControl });\n this.currentStateIndex++;\n }\n public redo() {\n // this.isRedoing = true;\n if (this.currentStateIndex < this.canvasStates.length - 1) {\n this.currentStateIndex++;\n const nextState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(nextState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n if (activeObject && activeObject.type !== 'path') {\n activeObject.controls =\n nextState && nextState.customControl\n ? nextState.customControl\n : null;\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n selectable: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n this._canvas.selection = false;\n }\n this._canvas.renderAll();\n this.isRedoing = false\n this.getRedoingChange.emit(this.isRedoing)\n });\n }\n }\n public undo() {\n // this.isUndoing = true;\n if (this.currentStateIndex > 0) {\n this.currentStateIndex--;\n const previousState = this.canvasStates[this.currentStateIndex];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this._canvas.loadFromJSON(previousState.state, () => {\n let activeObject = this._canvas.getActiveObject();\n if (activeObject) {\n if (activeObject.type !== 'path') {\n activeObject.set({\n padding: 36,\n borderScaleFactor: 3,\n borderColor: 'white',\n });\n this._canvas.isDrawingMode = false;\n this._canvas.freeDrawingBrush = null;\n this.textAdded = true;\n this.canAddTextOrDoole.emit({ key: 'doodle', value: false });\n this.canAddTextOrDoole.emit({ key: 'text', value: true });\n } else {\n activeObject.set({\n hasControls: false,\n hasBorders: false,\n });\n this.textAdded = false;\n this._canvas.selection = false;\n this.canAddTextOrDoole.emit({ key: 'text', value: false });\n this.canAddTextOrDoole.emit({ key: 'doodle', value: true });\n }\n this._canvas.getActiveObject().controls =\n previousState && previousState.customControl\n ? previousState.customControl\n : null;\n }else{\n this.textAdded = false;\n }\n this._canvas.getObjects().forEach((obj) => {\n if (obj !== activeObject) {\n obj.evented = false;\n }\n });\n this._canvas.renderAll();\n this.isUndoing = false\n this.cdRef.detectChanges()\n this.getUndoingChange.emit(this.isUndoing)\n });\n }\n }\n private getCanvasSize() {\n const img = new Image();\n img.src = this.src;\n const box = this._component.nativeElement.getBoundingClientRect();\n\n const width = this.width || box.width || 1;\n const height = this.height || box.height || 1;\n return { width, height };\n }\n\n /**\n * recognize paper corners\n */\n private async build() {\n if (!this.src || !this._canvas) {\n return;\n }\n const bg = await this.loadBackgroundImage(this.src);\n\n // Remove all the existing objects before add the new image to background\n this._canvas.clear();\n\n const imgSize = bg.getOriginalSize();\n this.Image = {\n height: imgSize.height * this._scaleFactor,\n width: imgSize.width * this._scaleFactor,\n };\n const scaleX = this._canvas.width / imgSize.width;\n const scaleY = this._canvas.height / imgSize.height;\n this._scaleFactor = Math.min(scaleY, scaleX);\n this._canvas.setDimensions(\n {\n width: imgSize.width,\n height: imgSize.height,\n },\n {\n backstoreOnly: true,\n }\n );\n this._canvas.setBackgroundImage(bg, () => {\n this._canvas.renderAll();\n });\n this.saveCanvasState();\n this._canvas.renderAll();\n }\n\n private createControls(polygon: fabric.Polygon) {\n // remove previous controls\n if (this._controls.length) {\n this._canvas.remove(...this._controls);\n this._controls = [];\n }\n if (polygon) {\n for (const [index, point] of polygon.points.entries()) {\n const circle = this.createControl(index, polygon);\n this._controls.push(circle);\n this._canvas.add(circle);\n }\n }\n }\n\n private createControl(index: number, polygon: fabric.Polygon) {\n const point = polygon.points[index];\n const circle = new fabric.Circle({\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: '#2188d9',\n radius: 20,\n hasRotatingPoint: false,\n hasBorders: false,\n hasControls: false,\n objectCaching: false,\n });\n circle.on('moving', (evt) => {\n if (evt.pointer) {\n polygon.points[index] = new fabric.Point(evt.pointer.x, evt.pointer.y);\n polygon.dirty = true;\n }\n });\n circle.on('mouseup', (evt) => {\n this.cornersChanged.emit();\n this.screenPoints[index] = polygon.points[index];\n });\n return circle;\n }\n\n private loadBackgroundImage(src: string): Promise<fabric.Image> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n let fabImage = new fabric.Image(img);\n resolve(fabImage);\n };\n img.src = src;\n });\n }\n\n public async completeScan(completed: boolean) {\n if (!completed) {\n return;\n }\n console.log(`complete scan & extract paper`);\n\n if (!this._cornersPg) {\n console.error(`Corner line is not available`);\n }\n if (this._cornersPg) {\n this._canvas.remove(this._cornersPg);\n this._canvas.remove(...this._controls);\n this._canvas.renderAll();\n }\n let output: HTMLCanvasElement;\n if (this.isScaned) {\n output = await this._opencv.extractPaper({\n src: this._canvas.toDataURL({ quality: 1 }),\n corners: {\n topLeftCorner: this.screenPoints[0],\n topRightCorner: this.screenPoints[1],\n bottomRightCorner: this.screenPoints[2],\n bottomLeftCorner: this.screenPoints[3],\n },\n height: this._canvas.height,\n width: this._canvas.width,\n });\n this._canvas.remove(...this._canvas.getObjects());\n this.isScaned = false;\n } else {\n output = this._canvas.toCanvasElement();\n }\n this.currentStateIndex = -1;\n this.canvasStates = [];\n this.canRedoOrUndo.emit({\n canUndo: this.currentStateIndex > 0 ? true : false,\n canRedo:\n this.currentStateIndex < this.canvasStates.length - 1 ? true : false,\n });\n this.extracted.emit(output);\n this.cleanupCanvas();\n }\n private cleanupCanvas() {\n this._canvas.getObjects().forEach((obj) => (obj.evented = false));\n this._canvas.selection = false;\n this._canvas.isDrawingMode = false;\n this.canDoodle = false;\n this.isScanStart = false;\n this.canAddText = false;\n this.textAdded = false;\n this._canvas.renderAll();\n }\n}\n","<div #componentWrapper\n class=\"component\">\n <canvas #drawCanas [ngClass]=\"{display: !(isLoading | async) ? 'blurred' : null}\"></canvas>\n <div class=\"loading-overlay\" [ngStyle]=\"{display: !(isLoading | async) ? 'none' : 'block'}\">\n <!-- Add your loading message or spinner here -->\n Scaning...\n </div>\n @if (canDoodle || canAddText) {\n <div class=\"colors-container\">\n @for (color of colors; track color) {\n <div class=\"colors\" [ngStyle]=\"{'background': color.hexCode, 'border':color.selected ? '1.6px solid white' : 'none'}\" (click)=\"chngClrTextOrBrush(color.hexCode, canAddText ? 'text': 'doodle')\"></div>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { ZenDevice, ZenLogRecord, ZenMapTheme, ZenTrip } from '../map/map.types';\n\n@Injectable()\nexport class MapService {\n\n public createDeviceMarker(device: ZenDevice, minZoom?: number): H.map.DomMarker {\n const contentHtml = this.getDeviceContent(device);\n\n const lat = Math.max(Math.min(device.latitude, 180), -180);\n const lng = Math.max(Math.min(device.longitude, 180), -180);\n\n const deviceMarker = new H.map.DomMarker(\n new H.geo.Point(lat, lng),\n {\n zIndex: 10,\n icon: new H.map.DomIcon(contentHtml),\n data: device,\n min: minZoom ? minZoom : 0\n });\n\n return deviceMarker;\n }\n\n private getDeviceContent(device: ZenDevice): string {\n let devIcon = \"\";\n\n if (device.icon) {\n devIcon = device.icon;\n }\n else {\n // Default icon\n devIcon = \"https://storage.googleapis.com/ng-zenduit/icon/car.svg\";\n }\n\n let isDriving = device.isDriving || false;\n let driveClass = \"\";\n if (isDriving) {\n driveClass = \"driving-marker\";\n }\n\n\n let directionSvg = 'https://storage.googleapis.com/ng-zenduit/icon/device_direction.svg';\n\n let displayDirection = isDriving ? \"block\" : \"none\";\n\n let classList = isDriving ? \"moving\" : \"stopped\";\n\n const lblContent =\n `<div class='gotrax-label ${classList}'>` +\n ` <span>${device.name}</span>` +\n ` <div class='gotrax-speed-label'></div>` +\n `</div>`;\n\n const bearing = device.bearing || 0;\n\n let contentHtml =\n `<div>` +\n `<div class='g-marker-vehilce-wrapper'>` +\n `<div class='g-marker-vehilce'>` +\n `<div class='${driveClass} gotrax-img'>\n ${lblContent}\n <div class='g-marker-icon ${classList}'><img class=\"g-marker-img svg-color white\" src=${devIcon} />\n <div class=\"direction-arrow\" style=\"display: ${displayDirection};transform: rotate(${bearing}deg); background-image: url('${directionSvg}');\"></div>\n </div></div>` +\n `</div>` +// close g-marker-vehilce\n `</div>` + // close g-marker-vehilce-wrapper\n `</div>`;\n return contentHtml;\n }\n\n\n public zoomToBounds(map: H.Map, bounds: H.geo.Rect) {\n if (!bounds || bounds.isEmpty()) {\n return;\n }\n\n if (isNaN(bounds.getCenter().lat) ||\n isNaN(bounds.getCenter().lng)) {\n return;\n }\n\n this.zoomToLatLngs(map, [bounds.getTopLeft(), bounds.getBottomRight()]);\n }\n\n private zoomToLatLngs(map: H.Map, pnts: Array<{ lat: number, lng: number }>, zoom: number = 15) {\n\n if (!pnts || pnts.length == 0) {\n return;\n }\n if (pnts.length == 1) {\n map.setZoom(zoom);\n map.setCenter(new H.geo.Point(pnts[0].lat, pnts[0].lng));\n return;\n }\n\n const latLngs: number[] = [];\n pnts.forEach(p => latLngs.push(p.lat, p.lng, 0));\n\n const bounds = H.geo.Rect.coverLatLngAlts(latLngs) as H.geo.Rect;\n\n const minSize = 0.001;\n\n if (bounds.getWidth() < minSize &&\n bounds.getHeight() < minSize) {\n map.setCenter(bounds.getCenter());\n map.setZoom(17);\n }\n else {\n const p1 = bounds.getBottomRight();\n const p2 = bounds.getTopLeft();\n const width = Math.max(bounds.getWidth(), minSize);\n const height = Math.max(bounds.getHeight(), minSize);\n\n // add offset for zooming\n const targetBox = H.geo.Rect.coverLatLngAlts(\n [\n p1.lat - (height * 0.15),\n p2.lng - (width * 0.15),\n 0,\n p2.lat + (height * 0.15),\n p1.lng + (width * 0.15),\n 0\n ]\n ) as H.geo.Rect;\n\n map.getViewPort().resize();\n map.getViewModel().setLookAtData({ bounds: targetBox });\n }\n }\n\n /**\n * Create polylines for given trip and date range.\n * Method create separte polylines for logs outside the date range.\n */\n public createTripPolyline(trip: ZenTrip, map: H.Map, theme: ZenMapTheme): {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n } {\n\n let result = {\n } as {\n polyline: H.map.Polyline,\n arrows: H.map.Polyline\n };\n\n let coords = new Array<number>();\n\n trip.logs.forEach(log => {\n let latLng = new H.geo.Point(log.latitude, log.longitude);\n\n coords.push(latLng.lat, latLng.lng);\n });\n\n if (coords.length < 2) {\n // Skip the empty path\n return result;\n }\n\n if (theme == \"black\") {\n const pl = this.createPl(coords, \"#000000\", 2);\n pl.setZIndex(1);\n result.polyline = pl;\n\n map.addObject(pl);\n }\n else {\n const pl = this.createPl(coords, \"#9510e6\", 5);\n pl.setZIndex(1);\n result.polyline = pl;\n\n let arrow = this.createArrow(coords);\n result.arrows = arrow;\n\n map.addObjects([pl, arrow]);\n\n // store additional information about polyline\n pl.setData({ type: \"trip\", trip: trip });\n arrow.setData({ type: \"trip\", trip: trip });\n }\n\n\n return result;\n }\n\n private createPl(coords: Array<number>, color: string, strokeWeight: number): H.map.Polyline {\n const pl = new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n strokeColor: color,\n lineWidth: strokeWeight\n },\n arrows: {\n fillColor: \"#ffffff\"\n },\n zIndex: 0\n });\n return pl;\n }\n\n private createArrow(coords: Array<number>): H.map.Polyline {\n return new H.map.Polyline(\n H.geo.LineString.fromLatLngArray(coords),\n {\n style: {\n lineWidth: 5,\n fillColor: 'white',\n strokeColor: 'rgba(255, 255, 255, 1)',\n lineDash: [0, 5],\n lineTailCap: 'arrow-tail',\n lineHeadCap: 'arrow-head'\n } as any,\n zIndex: 1\n });\n }\n\n public createStopMarker(map: H.Map, log: ZenLogRecord, stopIdx: number, tag: any, theme: ZenMapTheme) {\n\n let icon: H.map.DomIcon;\n if (theme == \"black\") {\n const src = \"https://storage.googleapis.com/ng-zenduit/icon/stop-icon-black.svg\";\n icon = new H.map.DomIcon(`<div class=\"g-stop-img\"><img src=\"${src}\"/></div>`)\n }\n else {\n // deafault\n icon = new H.map.DomIcon(`<div class=\"g-stop\"><label>${stopIdx}</label></div>`)\n }\n\n let stop = new H.map.DomMarker(\n new H.geo.Point(log.latitude, log.longitude),\n {\n icon: icon,\n zIndex: 2\n });\n map.addObject(stop);\n stop.setData(tag);\n return stop;\n }\n}","import { Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { MapService } from '../services/map.service';\nimport { ZenDevice, ZenMapTheme, ZenTrip } from './map.types';\n\n@Component({\n selector: 'zen-map',\n templateUrl: './zendu-map.component.html',\n styleUrls: ['./zendu-map.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduMapComponent implements OnChanges {\n\n @ViewChild(\"map\") _mapElement!: ElementRef<HTMLDivElement>;\n\n @Input() apiKey: string;\n\n @Input() trips: ZenTrip[] = [];\n\n @Input() devices: ZenDevice[] = [];\n\n @Input() theme: ZenMapTheme = 'default';\n\n private _platform: H.service.Platform;\n\n private _map!: H.Map;\n\n private _objects: H.map.Object[] = [];\n\n private _mapService = new MapService();\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.apiKey && !this._platform) {\n this.init();\n }\n\n if (changes[\"trips\"] || changes[\"devices\"]) {\n this.updateEntities();\n }\n }\n\n private init() {\n this._platform = new H.service.Platform({\n apikey: this.apiKey\n });\n\n setTimeout(() => {\n this.initMap();\n this.updateEntities();\n }, 1000);\n }\n\n\n private initMap() {\n\n // Obtain the default map types from the platform object\n const defaultLayers = this._platform.createDefaultLayers();\n\n this._map = new H.Map(this._mapElement.nativeElement,\n defaultLayers.vector.normal.map,\n {\n zoom: 3,\n center: { lat: 34.366, lng: -89.519 }\n });\n\n\n // Create the default UI\n const ui = H.ui.UI.createDefault(this._map, defaultLayers);\n\n const mapSettings = ui.getControl('mapsettings');\n mapSettings.setAlignment(H.ui.LayoutAlignment.RIGHT_TOP);\n mapSettings.setVisibility(false);\n\n const scalebar = ui.getControl('scalebar');\n scalebar.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM)\n\n const zoom = ui.getControl('zoom');\n zoom.setAlignment(H.ui.LayoutAlignment.RIGHT_BOTTOM);\n\n this._map.getBaseLayer().setMin(3);\n\n // MapEvents enables the event system\n // Behavior implements default interactions for pan/zoom (also on mobile touch environments)\n const behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(this._map));\n }\n\n private updateEntities() {\n if (!this._map) {\n // map is not ready\n return;\n }\n\n this.clearEntities();\n\n this.createTrips();\n\n this.createDevices();\n }\n\n private createTrips() {\n if (!this.trips || !this.trips.length) {\n return;\n }\n\n let box: H.geo.Rect = null;\n\n for (const trip of this.trips) {\n const res = this._mapService.createTripPolyline(trip, this._map, this.theme);\n if (res.polyline) {\n this._objects.push(res.polyline);\n if (box) {\n box = box.mergeRect(res.polyline.getBoundingBox());\n }\n else {\n box = res.polyline.getBoundingBox()\n }\n }\n if (res.arrows) {\n this._objects.push(res.arrows);\n }\n }\n\n // create stop points\n //\n for (const [stopIdx, trip] of this.trips.entries()) {\n let stopLog = trip.logs[trip.logs.length - 1];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, stopIdx + 1, trip, this.theme));\n }\n\n if (this.theme == \"black\") {\n // create a marker for first stop as well\n let stopLog = this.trips[0].logs[0];\n this._objects.push(this._mapService.createStopMarker(this._map, stopLog, 0, this.trips[0], this.theme));\n }\n\n if (box) {\n this._mapService.zoomToBounds(this._map, box);\n }\n }\n\n private createDevices() {\n if (!this.devices || !this.devices.length) {\n return;\n }\n\n for (const device of this.devices) {\n const marker = this._mapService.createDeviceMarker(device)\n this._map.addObject(marker);\n this._objects.push(marker);\n }\n }\n\n private clearEntities() {\n if (!this._map) {\n return;\n }\n this._map.removeObjects(this._objects)\n this._objects = [];\n }\n\n\n\n\n\n}\n","<div class=\"component\">\n <div #map\n class=\"zen-map\"></div>\n</div>\n","import { Component, EventEmitter, HostListener, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-file-upload',\n templateUrl: './zendu-file-upload.component.html',\n styleUrls: ['./zendu-file-upload.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFileUpload {\n\n @Input() fileTypes: string = `image/*`;\n\n @Input() uploadState: \"\" | \"uploading\" | \"done\" = \"\";\n\n /**\n * fire when user clicked on \"Upload now\"\n */\n @Output() uploadFile = new EventEmitter<File[]>();\n\n /**\n * fired when user click \"Cancel\"\n */\n @Output() uploadCancelled = new EventEmitter<void>();\n\n public isFileSelected = false;\n\n public isFileDragover = false;\n\n public filename = \"\";\n\n private _selectedFiles: File[] = [];\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isFileDragover = false;\n\n let target = (evt.dataTransfer as DataTransfer);\n if (target && target.files?.length) {\n this.handleFiles(target.files);\n }\n console.log('File Dropped');\n }\n\n\n public async onFileInput(evt: Event) {\n const target: HTMLInputElement | null = evt.target as HTMLInputElement;\n if (target && target.files) {\n await this.handleFiles(target.files);\n }\n }\n\n public async handleFiles(files: FileList): Promise<void> {\n console.log(`handle files`, files)\n if (!files.length) {\n return;\n }\n this.filename = files.item(0).name;\n\n this._selectedFiles = [];\n for (let idx = 0; idx < files.length; idx++) {\n this._selectedFiles.push(files[idx]);\n }\n\n this.isFileSelected = true;\n this.uploadState = '';\n }\n\n public uploadNow() {\n if (!this._selectedFiles.length) {\n console.error(`no files for uploading`)\n return;\n }\n\n this.uploadFile.emit(this._selectedFiles);\n }\n\n public clear() {\n this.isFileSelected = false;\n this.isFileDragover = false;\n this.filename = \"\";\n this._selectedFiles = [];\n this.uploadState = \"\";\n }\n\n public cancelUploading() {\n this.uploadCancelled.emit();\n this.clear();\n }\n}\n","<div class=\"component\">\n <div class=\"title\">\n @if (uploadState != 'done') {\n <span>Upload File</span>\n }\n @if (uploadState == 'done') {\n <span>Uploaded File</span>\n }\n </div>\n @if (uploadState != 'done') {\n <div class=\"drop-area\"\n [class.dragover]=\"isFileDragover\"\n >\n @if (!isFileSelected) {\n <div class=\"box\"\n >\n <div>\n <zen-icon class=\"doc-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/document.svg\"></zen-icon>\n </div>\n <div>\n <div>Drag and Drop Here</div>\n <div>or</div>\n <span class=\"browse\"\n (click)=\"fileIp.click()\">Browse</span>\n <form><input type=\"file\"\n [accept]=\"fileTypes\"\n #fileIp\n (change)=\"onFileInput($event)\" /></form>\n </div>\n </div>\n }\n @if (isFileSelected) {\n <!-- File selected state -->\n @if (uploadState == '') {\n <div class=\"box-selected-file\">\n <div class=\"close-wrapper\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n <div>\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n </div>\n <div class=\"filename\">\n {{filename}}\n </div>\n </div>\n }\n <!-- Uploading state -->\n @if (uploadState == 'uploading') {\n <div class=\"box-file-uploading\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon-sm\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image-sm.svg\"></zen-icon>\n <div>{{filename}}</div>\n </div>\n <div class=\"progress\">\n <div class=\"progress-bar-value\"></div>\n </div>\n </div>\n }\n }\n </div>\n }\n\n\n <!-- Uploading done -->\n @if (uploadState == 'done') {\n <div\n class=\"box-upload-done\">\n <div class=\"file-description\">\n <zen-icon class=\"img-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/image.svg\"></zen-icon>\n <div class=\"filename\">{{filename}}</div>\n <div class=\"close-btn\">\n <zen-icon (click)=\"clear()\"\n class=\"close-icon\"\n src=\"https://storage.googleapis.com/ng-zenduit/icon/cross.svg\"></zen-icon>\n </div>\n </div>\n </div>\n }\n\n <div class=\"btn-upload-wrapper\">\n\n @if (uploadState == '') {\n <button\n (click)=\"uploadNow()\"\n class=\"button-flat full-width\"\n [disabled]=\"!isFileSelected\">\n Upload Now\n </button>\n }\n\n @if (uploadState == 'uploading') {\n <button\n (click)=\"cancelUploading()\"\n class=\"button-alert full-width\"\n [disabled]=\"!isFileSelected\">\n Cancel\n </button>\n }\n </div>\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\ninterface CircleSizeConfig {\n containerSize: number;\n radius: number;\n strokeWidth: number;\n fontSize: number;\n labelFontSize: number;\n letterSpacing: number;\n}\n\nconst CIRCLE_SIZE_MAP: Record<string, CircleSizeConfig> = {\n xxs: { containerSize: 64, radius: 26, strokeWidth: 5, fontSize: 14, labelFontSize: 12, letterSpacing: 0 },\n xs: { containerSize: 160, radius: 64, strokeWidth: 8, fontSize: 24, labelFontSize: 12, letterSpacing: 0 },\n sm: { containerSize: 200, radius: 80, strokeWidth: 10, fontSize: 30, labelFontSize: 12, letterSpacing: 0 },\n md: { containerSize: 240, radius: 96, strokeWidth: 12, fontSize: 36, labelFontSize: 14, letterSpacing: -0.72 },\n lg: { containerSize: 280, radius: 112, strokeWidth: 14, fontSize: 48, labelFontSize: 14, letterSpacing: -0.96 },\n};\n\n@Component({\n selector: 'zen-progress',\n templateUrl: './zendu-progress.component.html',\n styleUrls: ['./zendu-progress.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduProgress {\n\n @Input() type: \"bar\" | \"circle\" | \"half-circle\" = \"bar\";\n\n /**\n * Label position for bar type.\n */\n @Input() label: 'none' | 'right' | 'bottom' | 'top-floating' | 'bottom-floating' = 'none';\n\n /**\n * Size for circle/half-circle types.\n */\n @Input() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * progress value [0, 100]\n */\n @Input() value = 20;\n\n /**\n * progress text (shown as label above percentage in circle types)\n */\n @Input() text = \"\";\n\n /**\n * Custom color for the progress fill (bar, circle stroke).\n * Accepts any valid CSS color value.\n */\n @Input() color = \"\";\n\n /**\n * Custom color for the progress track/background.\n * Accepts any valid CSS color value.\n */\n @Input() trackColor = \"\";\n\n get sizeConfig(): CircleSizeConfig {\n return CIRCLE_SIZE_MAP[this.size] || CIRCLE_SIZE_MAP['md'];\n }\n\n get circleCenter(): number {\n return this.sizeConfig.containerSize / 2;\n }\n\n get circumference(): number {\n return 2 * Math.PI * this.sizeConfig.radius;\n }\n\n get halfCircumference(): number {\n return Math.PI * this.sizeConfig.radius;\n }\n\n get circleOffset(): number {\n const clampedValue = Math.max(0, Math.min(100, this.value));\n return this.circumference * (1 - clampedValue / 100);\n }\n\n get halfCircleOffset(): number {\n const clampedValue = Math.max(0, Math.min(100, this.value));\n return this.halfCircumference * (1 - clampedValue / 100);\n }\n\n get halfCircleContainerHeight(): number {\n return this.sizeConfig.containerSize / 2 + this.sizeConfig.strokeWidth;\n }\n}\n","<div class=\"component\">\n <!-- Progress bar -->\n @if (type == 'bar') {\n <div class=\"bar-wrapper\"\n [class.bar-label-right]=\"label === 'right'\"\n [class.bar-label-bottom]=\"label === 'bottom'\"\n [class.bar-label-top-floating]=\"label === 'top-floating'\"\n [class.bar-label-bottom-floating]=\"label === 'bottom-floating'\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-bg\" [ngStyle]=\"trackColor ? { 'background-color': trackColor } : {}\"></div>\n <div class=\"progress-bar-fill\" [ngStyle]=\"{ 'width': value + '%', 'background-color': color || null }\">\n <!-- Top floating tooltip -->\n @if (label === 'top-floating') {\n <div class=\"floating-tooltip floating-tooltip-top\">\n <div class=\"tooltip-content\">\n <span class=\"tooltip-text\">{{value}}%</span>\n </div>\n <div class=\"tooltip-arrow tooltip-arrow-down\">\n <svg width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M6.58579 4.41421L2.34315 0.171573C1.41421 -0.757359 0 0 0 0H16C16 0 14.5858 -0.757359 13.6569 0.171573L9.41421 4.41421C8.63316 5.19527 7.36684 5.19527 6.58579 4.41421Z\" fill=\"white\"/>\n </svg>\n </div>\n </div>\n }\n <!-- Bottom floating tooltip -->\n @if (label === 'bottom-floating') {\n <div class=\"floating-tooltip floating-tooltip-bottom\">\n <div class=\"tooltip-arrow tooltip-arrow-up\">\n <svg width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M9.41421 1.58579L13.6569 5.82843C14.5858 6.75736 16 6 16 6H0C0 6 1.41421 6.75736 2.34315 5.82843L6.58579 1.58579C7.36684 0.804738 8.63316 0.804738 9.41421 1.58579Z\" fill=\"white\"/>\n </svg>\n </div>\n <div class=\"tooltip-content\">\n <span class=\"tooltip-text\">{{value}}%</span>\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right label -->\n @if (label === 'right') {\n <span class=\"bar-label\">{{value}}%</span>\n }\n <!-- Bottom label -->\n @if (label === 'bottom') {\n <span class=\"bar-label\">{{value}}%</span>\n }\n <!-- Text description (legacy support) -->\n @if (text && (label === 'none')) {\n <div class=\"progress-text\">{{text}}</div>\n }\n </div>\n }\n\n <!-- Circle progress -->\n @if (type == 'circle') {\n <div class=\"circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': sizeConfig.containerSize\n }\">\n <svg class=\"circle-svg\"\n [attr.width]=\"sizeConfig.containerSize\"\n [attr.height]=\"sizeConfig.containerSize\"\n [attr.viewBox]=\"'0 0 ' + sizeConfig.containerSize + ' ' + sizeConfig.containerSize\">\n <!-- Background ring -->\n <circle class=\"circle-bg\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [style.stroke]=\"trackColor || null\"\n fill=\"none\" />\n <!-- Progress ring -->\n <circle class=\"circle-progress\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"circleOffset\"\n [style.stroke]=\"color || null\"\n fill=\"none\"\n stroke-linecap=\"round\" />\n </svg>\n <div class=\"circle-label\">\n @if (text) {\n <span class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\n }\n <span class=\"circle-value\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.fontSize,\n 'letter-spacing.px': sizeConfig.letterSpacing\n }\">{{value}}%</span>\n </div>\n </div>\n }\n\n <!-- Half-Circle progress -->\n @if (type == 'half-circle') {\n <div class=\"half-circle-wrapper\"\n [ngStyle]=\"{\n 'width.px': sizeConfig.containerSize,\n 'height.px': halfCircleContainerHeight\n }\">\n <svg class=\"circle-svg\"\n [attr.width]=\"sizeConfig.containerSize\"\n [attr.height]=\"sizeConfig.containerSize\"\n [attr.viewBox]=\"'0 0 ' + sizeConfig.containerSize + ' ' + sizeConfig.containerSize\">\n <!-- Background arc (bottom half) -->\n <circle class=\"circle-bg half-circle-ring\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"circumference / 2\"\n [style.stroke]=\"trackColor || null\"\n fill=\"none\" />\n <!-- Progress arc -->\n <circle class=\"circle-progress half-circle-ring\"\n [attr.cx]=\"circleCenter\"\n [attr.cy]=\"circleCenter\"\n [attr.r]=\"sizeConfig.radius\"\n [attr.stroke-width]=\"sizeConfig.strokeWidth\"\n [attr.stroke-dasharray]=\"halfCircumference + ' ' + circumference\"\n [attr.stroke-dashoffset]=\"halfCircleOffset\"\n [style.stroke]=\"color || null\"\n fill=\"none\"\n stroke-linecap=\"round\" />\n </svg>\n <div class=\"half-circle-label\">\n @if (text) {\n <span class=\"circle-label-text\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.labelFontSize\n }\">{{text}}</span>\n }\n <span class=\"circle-value\"\n [ngStyle]=\"{\n 'font-size.px': sizeConfig.fontSize,\n 'letter-spacing.px': sizeConfig.letterSpacing\n }\">{{value}}%</span>\n </div>\n </div>\n }\n</div>\n","import { Injectable } from \"@angular/core\";\n\ninterface IGeocodingRes {\n name: string;\n\n city: string;\n\n country: string;\n\n postalCode: string;\n\n street: string;\n\n state: string;\n\n bounds: { xmin: number, ymin: number, xmax: number, ymax: number };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeocodingService {\n private _platform: H.service.Platform;\n\n public setAPIKey(apiKey: string) {\n this._platform = new H.service.Platform({\n apikey: apiKey\n });\n }\n\n public async geocode(searchText: string): Promise<Array<IGeocodingRes>> {\n return new Promise((resolve, reject) => {\n if (!this._platform) {\n reject(\"API KEY NOT SET\");\n return;\n }\n const geocoder = this._platform.getGeocodingService();\n geocoder.geocode({ searchText: searchText },\n (res: any) => {\n let locations = res.Response.View[0] ? res.Response.View[0].Result : []\n\n let outItems = new Array<IGeocodingRes>();\n let boxOffset = 0.001;\n for (let location of locations) {\n let lat = location.Location.DisplayPosition.Latitude;\n let lng = location.Location.DisplayPosition.Longitude;\n let p1 = new H.geo.Point(lat - boxOffset, lng - boxOffset);\n let p2 = new H.geo.Point(lat + boxOffset, lng + boxOffset);\n let bounds = H.geo.Rect.coverPoints([p1, p2]);\n\n let street = location.Location.Address.Street;\n if (location.Location.Address.HouseNumber) {\n street += \" \" + location.Location.Address.HouseNumber;\n }\n\n outItems.push({\n name: location.Location.Address.Label,\n city: location.Location.Address.City,\n country: location.Location.Address.Country,\n postalCode: location.Location.Address.PostalCode,\n state: location.Location.Address.State,\n street: street,\n bounds: {\n xmin: bounds.getLeft(),\n xmax: bounds.getRight(),\n ymin: Math.min(bounds.getBottom(), bounds.getTop()),\n ymax: Math.max(bounds.getBottom(), bounds.getTop())\n }\n });\n }\n\n resolve(outItems);\n },\n (e: any) => {\n console.warn(e);\n resolve([]);\n }\n );\n })\n }\n\n}\n","import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { GeocodingService } from '../services/geoconding.service';\nimport { Cancellation, LocationAddress } from './location.address';\n\n@Component({\n selector: 'zen-location-search',\n templateUrl: './zendu-location-search.component.html',\n styleUrls: ['./zendu-location-search.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduLocationSearch {\n /**\n * HERE MAPS API Key\n */\n @Input() set apiKey(apiKey: string) {\n this._geocoding.setAPIKey(apiKey);\n }\n\n @Input() address!: string;\n\n @Input() displaySearchIcon: boolean = true;\n\n @Output() addressChange = new EventEmitter<string>();\n\n @Input() materialStyle = true;\n\n @Input() placeholder: string = \"Search address\";\n\n @Input() disabled = false;\n\n @Output() public onSelect = new EventEmitter<LocationAddress>;\n\n // it will apply to input element text and icon color:\n // ie. input like { color: blue}\n @Input() customStyles: any = {};\n\n private addressSearchChanged: Subject<string> = new Subject<string>();\n\n public isSearching: boolean = false;\n\n public ignoreFirstLoad: boolean = false;\n\n public addressList: LocationAddress[] = [];\n\n private _cancelation!: Cancellation;\n\n constructor(\n private _geocoding: GeocodingService,\n private _cdRef: ChangeDetectorRef) {\n\n this.addressSearchChanged\n .pipe(\n debounceTime(200),\n distinctUntilChanged()\n )\n .subscribe((addressSearch: string) => {\n\n this.address = addressSearch\n this.isSearching = true;\n\n if (this._cancelation) {\n // cancel previous\n this._cancelation.cancelled = true;\n }\n\n this._cancelation = { cancelled: false }\n\n this.ignoreFirstLoad = true;\n this.makeSearch(this._cancelation);\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['address'] && this.address) {\n this._cancelation = { cancelled: false }\n await this.makeSearch(this._cancelation);\n const address = this.addressList.find(addr => addr.name === this.address);\n if (address) {\n this.selectAddress(address);\n }\n }\n }\n\n public addressChanged(text: string) {\n this.isSearching = true;\n this.addressChange.emit(text);\n this.addressSearchChanged.next(text);\n\n this._cdRef.detectChanges();\n }\n\n private async makeSearch(cancellation: Cancellation) {\n try {\n if (!this.ignoreFirstLoad) {\n this.ignoreFirstLoad = true;\n return;\n }\n this.addressList = [];\n\n if (!this.address) {\n this.isSearching = false;\n return;\n }\n\n this.addressList = [];\n\n let locations = await this._geocoding.geocode(this.address);\n\n if (this._cancelation.cancelled) {\n // request cancelled\n return;\n }\n\n for (let location of locations) {\n this.addressList.push({\n name: location.name,\n bounds: location.bounds\n });\n }\n this.addressList = [...new Map(this.addressList.map((item: LocationAddress) => [item.name, item])).values()];\n if (this.addressList.length > 20) {\n this.addressList = this.addressList.slice(0, 20);\n }\n\n this.isSearching = false;\n } catch (err) {\n console.error(err);\n } finally {\n this._cdRef.detectChanges();\n }\n }\n\n public selectAddress(address: LocationAddress) {\n this.address = address.name;\n if (this.onSelect) {\n this.addressList = [];\n this.onSelect.emit(address);\n }\n }\n}\n","<div class=\"component\">\n\n <div class=\"search-input-wrapper\"\n [class.boundaries]=\"!materialStyle\">\n @if (displaySearchIcon) {\n <zen-icon src=\"https://storage.googleapis.com/ng-zenduit/icon/search.svg\"\n class=\"search-icon\"\n [style]=\"{'background-color': customStyles.color}\"></zen-icon>\n }\n\n <input type=\"text\"\n class=\"material-input\"\n [style]=\"customStyles\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"address\"\n [ngClass]=\"{'no-icon': !displaySearchIcon}\"\n (ngModelChange)='addressChanged($event)'>\n </div>\n\n @if (address) {\n <div class=\"search-list\"\n [class.boundaries]=\"!materialStyle\"\n appClickOutside\n (clickOutside)=\"addressList = [];\">\n @if (addressList.length || isSearching) {\n <ul class=\"search-item-list\"\n >\n @if (isSearching) {\n <li>Searching</li>\n }\n @if (!isSearching) {\n <div>\n @for (address of addressList; track address) {\n <li\n (click)=\"selectAddress(address)\">\n {{address.name}}\n </li>\n }\n </div>\n }\n </ul>\n }\n </div>\n }\n</div>\n","export class CEvent<T> {\n private index: number = 0;\n\n private handlers: {\n id: number;\n func: (data?: T) => void;\n }[] = [];\n\n public on(handler: (data?: T) => void ): number\n {\n this.index++;\n this.handlers.push({ func: handler, id: this.index });\n return this.index;\n }\n\n public off(id: number)\n {\n this.handlers = this.handlers.filter(h => h.id !== id);\n }\n\n public fire(data?: T)\n {\n if(this.handlers)\n {\n this.handlers.slice(0).forEach(h => h.func(data));\n }\n }\n}","import { CEvent } from \"../core/cevent\";\n\nexport class PlayerControl {\n\tprivate _stopEvent: CEvent<void> = new CEvent();\n\n\tprivate _playEvent: CEvent<void> = new CEvent();\n\n\tprivate _seekEvent: CEvent<number> = new CEvent();\n\n\tprivate _dataEvent: CEvent<number> = new CEvent();\n\n\t/**\n\t * Subscribe to data event\n\t */\n\t public OnData(callback: () => void): number {\n\t\treturn this._dataEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to play event\n\t */\n\t public OnPlay(callback: () => void): number {\n\t\treturn this._playEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to stop event\n\t */\n\t public OnStop(callback: () => void): number {\n\t\treturn this._stopEvent.on(callback);\n\t}\n\n\t/**\n\t * Subscribe to seek event\n\t */\n\tpublic OnSeek(callback: (position: number) => void): number {\n\t\treturn this._seekEvent.on(callback as any);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffPlay(id: number): void {\n\t\tthis._playEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffStop(id: number): void {\n\t\tthis._stopEvent.off(id);\n\t}\n\n\t/**\n\t * Detach the callback from the event\n\t * @param id callback id\n\t */\n\tpublic OffSeek(id: number): void {\n\t\tthis._seekEvent.off(id);\n\t}\n\n\t/**\n\t * Emit the play event\n\t */\n\tpublic Play(): void {\n\t\tthis._playEvent.fire();\n\t}\n\n\t/**\n\t * Emit the stop event\n\t */\n\tpublic Stop(): void {\n\t\tthis._stopEvent.fire();\n\t}\n\n\t/**\n\t * Emit the seek event\n\t */\n\tpublic Seek(position: number) {\n\t\tthis._seekEvent.fire(position);\n\t}\n\n\t/**\n\t * Emit the data event\n\t */\n\tpublic EmitData() {\n\t\tthis._dataEvent.fire();\n\t}\n}","import { Component, Input, OnChanges, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-html5-video-player',\n templateUrl: './html5-video-player.component.html',\n styleUrls: ['./html5-video-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenHTML5VideoPlayerComponent implements OnChanges {\n\t@Input() source!: string;\n\n\t@Input() control!: PlayerControl;\n\n\tpublic async ngOnChanges() {\n\t\tif (this.source) {\n console.log(`Created the html5 video player for source \"${this.source}\"`);\n\t\t}\n\t}\n}\n","<div class=\"html5-player-component\">\n\t<video controls\n\t\t muted\n\t\t autoplay\n\t\t [src]=\"source\">\n\t</video>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { ScriptLoader } from \"../../services/script.loader.service\";\nimport { PlayerControl } from \"../player.control\";\nimport { FlvJs } from \"./flv\"\n\ndeclare var flvjs: {\n createPlayer(mediaDataSource: FlvJs.MediaDataSource, config?: FlvJs.Config): FlvJs.Player;\n isSupported(): boolean;\n getFeatureList(): FlvJs.FeatureList;\n}\n\n@Component({\n selector: 'zen-flv-player',\n templateUrl: './flv-player.component.html',\n styleUrls: ['./flv-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenFlvPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n private _flv!: FlvJs.Player | null;\n\n public IsVideoFilterVisible = false;\n\n public constructor(\n private _element: ElementRef,\n private _scriptLoader: ScriptLoader) {\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.source) {\n this.reload();\n }\n\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private async reload() {\n // load the script first\n await this._scriptLoader.loadScript(\"flv\");\n // update the player\n this.update();\n }\n\n private update(): void {\n this.destroy(Boolean(this.source));\n\n if (!this.source) {\n return;\n }\n\n this._flv = flvjs.createPlayer({\n url: this.source,\n type: \"flv\"\n }, {\n // Enable/Disable IO stash buffer. \n // Set to false if you need realtime (minimal latency) for live stream playback, but may stalled if there's network jittering.\n enableStashBuffer: false\n });\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n this._flv.attachMediaElement(element as HTMLVideoElement);\n this._flv.load();\n this._flv.muted = true;\n this._flv.play();\n\n let previousFrame = 0;\n\n this._flv.on(\"statistics_info\", (event: { decodedFrames: number }) => {\n if (event && event.decodedFrames) {\n if (previousFrame != event.decodedFrames) {\n previousFrame = event.decodedFrames;\n if (this.control) {\n // fired event when video is playing\n this.control.EmitData();\n }\n }\n }\n })\n\n this._flv.on(\"loading_complete\", () => {\n console.log(\"loading completed\");\n\n this.destroy(true);\n })\n\n\n console.log(`Created the flv player for source \"${this.source}\"`);\n }\n\n private destroy(skipNotify?: boolean) {\n if (this._flv) {\n console.log(\"Destroyed the flv player\");\n this._flv.pause();\n this._flv.unload();\n this._flv.destroy();\n this._flv = null;\n\n if (!skipNotify) {\n // this.onStop.emit();\n }\n }\n }\n\n\n}\n","<div class=\"flv-player-component\">\n <video controls\n muted></video>\n\n</div>\n","export class Thread {\n public static sleep(ms: number): Promise<void> {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, ms);\n });\n }\n}","import HLS, { ErrorTypes } from \"hls.js\";\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, Output, ViewChild, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { Thread } from \"../../core/thread\";\n\n@Component({\n selector: 'zen-hls-player',\n templateUrl: './hls-player.component.html',\n styleUrls: ['./hls-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenHlsPlayerComponent implements OnDestroy, OnChanges {\n @Input() source!: string;\n\n @Input() control!: PlayerControl;\n\n @ViewChild(\"video_container\") _video?: ElementRef<HTMLVideoElement>;\n\n public isVideoFilterVisible = false;\n\n private _hls: HLS | null = null;\n\n private _stopCallback!: number;\n\n private _playCallback!: number;\n\n\n private _isDestroyed = false;\n\n public ngOnChanges(changeObj: any): void {\n if (this.source) {\n this.reload()\n }\n if (changeObj.control &&\n changeObj.control.currentValue) {\n this.setControl(changeObj.control.currentValue);\n }\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.destroy();\n }\n\n private async reload() {\n if (!this.source) {\n return;\n }\n\n if (this._isDestroyed) {\n return;\n }\n\n if (!this._video) {\n // wait for component\n await this.waitForComponent();\n }\n\n if (!this._video || this._isDestroyed) {\n return;\n }\n\n if (!HLS.isSupported()) {\n console.log(\"HLS not supported. Set url to the native video player\")\n // just attached the link to video player\n this._video.nativeElement.src = this.source;\n return;\n }\n\n // destroy previous\n this.destroy();\n\n console.log(`[HlsPlayerComponent] start playing for the source [${this.source}]`)\n\n // HLS configuration: https://github.com/video-dev/hls.js/blob/v1.3.0/docs/API.md\n this._hls = new HLS({\n fragLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 3,\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetryTimeout: 10000,\n maxBufferHole: 10,\n lowLatencyMode: false,\n fragLoadingMaxRetry: 1,\n // backBufferLength: 90,\n autoStartLoad: true,\n testBandwidth: false\n });\n this._hls.attachMedia(this._video.nativeElement);\n\n this._hls.loadSource(this.source);\n\n this._hls.on(HLS.Events.FRAG_LOADED, () => {\n // fired event when video is playing\n this.onData();\n });\n\n this._hls.on(HLS.Events.ERROR, (err, data) => {\n if (data.fatal) {\n console.error(\"HLS error:\", err, data);\n // reload source\n console.log(\"HLS reload source\")\n this.destroy();\n this.reload();\n }\n });\n\n console.log(`Created the hls player for source \"${this.source}\"`);\n }\n\n private async waitForComponent() {\n while (!this._video) {\n await Thread.sleep(100);\n if (this._isDestroyed) {\n return;\n }\n }\n }\n\n private setControl(control: PlayerControl): void {\n if (this.control) {\n this.control.OffStop(this._stopCallback);\n this.control.OffStop(this._playCallback);\n }\n\n this.control = control;\n\n if (this.control) {\n this._stopCallback = this.control.OnStop(() => {\n this.destroy();\n });\n\n this._playCallback = this.control.OnPlay(() => {\n this.reload();\n });\n }\n }\n\n\n private destroy() {\n if (this._hls) {\n this._hls.destroy();\n this._hls = null;\n console.log(\"Destroyed the HLS player\");\n }\n }\n\n private onData() {\n console.log(\"HLS on data event\")\n\n if (this.control) {\n this.control.EmitData();\n }\n }\n\n private onError() {\n console.log(\"HLS error\")\n\n if (this.control) {\n this.control.Stop();\n }\n }\n\n\n public toggleFilter(evt: MouseEvent): void {\n this.isVideoFilterVisible = !this.isVideoFilterVisible;\n evt.stopPropagation();\n }\n\n public hideFiler() {\n this.isVideoFilterVisible = false;\n }\n\n}\n","<div class=\"hls-player-component\">\n\t<video #video_container\n\t\t controls\n\t\t muted\n\t\t autoplay></video>\n</div>\n","export class LocalLock {\n private _acquired: boolean;\n\n private _waitingResolvers: Array<() => void>;\n\n constructor() {\n this._acquired = false;\n this._waitingResolvers = [];\n }\n\n public lock(): Promise<any> {\n return new Promise<void>(resolve => {\n if (!this._acquired) {\n this._acquired = true;\n resolve();\n return;\n }\n\n this._waitingResolvers.push(resolve);\n });\n }\n\n public release(): void {\n if (!this._acquired) {\n // Trying to release an unacquired lock\n return;\n }\n if (this._waitingResolvers.length > 0) {\n const resolve = this._waitingResolvers.shift() as (() => void);\n resolve();\n } else {\n this._acquired = false;\n }\n }\n\n public isLock(): boolean\n {\n return this._acquired;\n }\n}","import { Injectable } from \"@angular/core\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { LocalLock } from \"../core/local.lock\";\nimport { Thread } from \"../core/thread\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZenHttpService {\n private cache: {\n [key: string]: {\n lock: LocalLock,\n data: unknown,\n expiry: Date\n }\n } = {};\n\n constructor(private _http: HttpClient) { }\n\n /**\n * https post request\n * @param url the url path\n * @param data the POST payload\n * @param cacheTtl cache ttl in ms\n * @param retires number of retires\n * @returns\n */\n public async post<T>(url: string, data?: unknown, cacheTtl?: number, retires?: number) {\n\n if (cacheTtl) {\n return await this.doCachedPost(url, cacheTtl, data) as T;\n }\n else {\n\n let attemp = 0;\n while (true) {\n attemp++;\n try {\n return await this.doPost(url, data) as T;\n }\n catch (err) {\n if (retires) {\n if (attemp <= retires) {\n console.warn(`[HttpService] retry (${attemp}) for request: ${url}`)\n await Thread.sleep(1000);\n continue;\n }\n }\n throw err;\n }\n }\n }\n }\n\n private async doCachedPost(url: string, cacheTtl: number, data: any) {\n\n const cacheKey = `${url}_${JSON.stringify(data || {})}`\n\n if (!this.cache[cacheKey]) {\n this.cache[cacheKey] = {\n lock: new LocalLock(),\n data: null,\n expiry: new Date(Date.now() + cacheTtl)\n }\n }\n\n let cacheItem = this.cache[cacheKey];\n\n try {\n await cacheItem.lock.lock();\n\n if (cacheItem.data) {\n // return data from cache\n return cacheItem.data;\n }\n cacheItem.data = await this.doPost(url, data);\n return cacheItem.data;\n }\n finally {\n cacheItem.lock.release();\n }\n }\n\n private async doPost<T>(url: string, data?: any) {\n const res = await this._http.post(url,\n data ? data : {}).toPromise();\n return res as T;\n }\n\n public async get<T>(url: string, timeout?: number) {\n\n let httpOptions = {\n timeout: timeout || 60000,\n headers: new HttpHeaders()\n };\n\n const res = await this._http.get(`${url}`, httpOptions).toPromise();\n return res as T;\n }\n\n\n}\n","import { Component, Input, OnChanges, OnDestroy, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\nimport { ZenHttpService } from \"../../services/http.service\";\n\n@Component({\n selector: 'zen-snapshot-player',\n templateUrl: './snapshot-player.component.html',\n styleUrls: ['./snapshot-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSnapshotPlayerComponent implements OnChanges, OnDestroy {\n @Input() source!: string;\n\n @Input() channel!: number;\n\n @Input() control?: PlayerControl;\n\n /**\n * Interval to render a snapshot\n */\n @Input() interval!: number;\n\n public snapshot: string;\n\n private _timer: unknown;\n\n private _isRunning = false;\n\n public IsVideoFilterVisible = false;\n\n private _isDestroyed = false;\n\n public constructor(\n private _http: ZenHttpService) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlay();\n }\n\n public ngOnChanges(changeObj: any): void {\n if (changeObj.control) {\n this.setControl(changeObj.control.currentValue);\n }\n\n this.update();\n }\n\n private setControl(control: PlayerControl): void {\n if (control) {\n this.control = control;\n this.control.OnPlay(() => {\n this.startPlay();\n });\n this.control.OnStop(() => {\n this.stopPlay();\n });\n }\n }\n\n private update(): void {\n if (this.source) {\n this.startPlay();\n }\n else {\n this.stopPlay();\n }\n }\n\n private startPlay(): void {\n this.stopPlay();\n this._isRunning = true;\n this.render();\n }\n\n private async render(): Promise<void> {\n if (!this._isRunning ||\n this._isDestroyed) {\n return;\n }\n\n await this.renderFrame();\n this._timer = setTimeout(async () => {\n this.render();\n }, this.interval || 1000);\n }\n\n private async renderFrame(): Promise<void> {\n if (this._isDestroyed) {\n return;\n }\n console.log('Request Snapshot');\n const data = await this._http.post<{ image: string }>(this.source);\n console.log('Render Snapshot');\n if (data && data.image) {\n\n this.snapshot = \"\";\n if (data.image.startsWith(\"http\")) {\n this.snapshot = data.image;\n }\n else {\n this.snapshot = `data:image/jpeg;base64,${data.image}`;\n }\n }\n }\n\n private stopPlay(): void {\n this._isRunning = false;\n clearTimeout(this._timer as number);\n }\n\n\n\n\n}\n","<div class=\"snapshot-player-component\">\n <div class=\"image\"\n [ngStyle]=\"{ 'background-image': snapshot }\"></div>\n\n</div>\n","import { CEvent } from \"../../core/cevent\";\n\nexport class WebRTC {\n\tprivate _peerId!: any;\n\n\tprivate _msg!: any;\n\n\tprivate _wsConnect!: any;\n\n\tprivate _startPlayEvent = new CEvent();\n\n\tprivate _errorServerEvent = new CEvent();\n\n\tprivate _disconnectServerEvent = new CEvent();\n\n\tprivate _onDataEvent = new CEvent();\n\n\tprivate _connectAttempts = 0;\n\n\tprivate _peerConnection!: any\n\n\t/**\n\t * Promise for local stream after constraints are approved by the user\n\t */\n\tprivate local_stream_promise!: any\n\n\tprivate _wsServer!: any;\n\n\tprivate _wsPort!: any\n\n\t// Set this to use a specific peer id instead of a random one\n\tprivate _defaultPeerId!: any\n\n\t// Override with your own STUN servers if you want\n\tprivate rtc_configuration = {\n\t\ticeServers: [{ urls: \"stun:stun.services.mozilla.com\" },\n\t\t{ urls: \"stun:stun.l.google.com:19302\" }]\n\t};\n\n\tprivate _originalSource!: any;\n\n\tprivate _socketConnectionTimer: any = null;\n\n\tpublic constructor(\n\t\tprivate _source: string,\n\t\tprivate _videoElement: HTMLVideoElement) {\n\t}\n\n\tpublic Start(): void {\n\t\tthis.CreateVideoWebRTC();\n\t}\n\n\tpublic Stop(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic Destroy(): void {\n\t\tthis.StopVideo();\n\t\tthis.DestroyWebRTC();\n\t}\n\n\tpublic OnPlay(callback: () => void): void {\n\t\tthis._startPlayEvent.on(callback);\n\t}\n\n\tpublic OnData(callback: () => void): void {\n\t\tthis._onDataEvent.on(callback);\n\t}\n\n\tpublic OnError(callback: () => void): void {\n\t\tthis._errorServerEvent.on(callback);\n\t}\n\n\tpublic OnClose(callback: () => void): void {\n\t\tthis._disconnectServerEvent.on(callback);\n\t}\n\n\tprivate CreateVideoWebRTC(): void {\n\t\tthis.DestroyWebRTC();\n\t\tthis._originalSource = this._source;\n\n\t\t// Set this to override the automatic detection in websocketServerConnect()\n\t\tthis.WebsocketServerConnect();\n\t}\n\n\tprivate SetError(errorMsg: string): void {\n\t\tthis.Close();\n\t\tconsole.error(errorMsg);\n\t\tthis._errorServerEvent.fire();\n\t}\n\n\tprivate GetId() {\n\t\treturn Math.floor(Math.random() * (1000000 - 10) + 10).toString();\n\t}\n\n\tprivate WebsocketServerConnect(): void {\n\t\tthis._connectAttempts++;\n\t\tif (this._connectAttempts > 20) {\n\t\t\treturn this.SetError(\"Too many connection attempts, aborting. Refresh page to try again\");\n\t\t}\n\n\t\t// Fetch the peer id to use\n\t\tthis._peerId = this._defaultPeerId || this.GetId();\n\t\tthis._wsPort = this._wsPort || '8443';\n\t\tif (window.location.protocol.indexOf(\"file\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || \"0.0.0.0\";\n\t\t}\n\t\telse if (window.location.protocol.indexOf(\"http\") == 0) {\n\t\t\tthis._wsServer = this._wsServer || window.location.hostname;\n\t\t}\n\t\telse {\n\t\t\treturn this.SetError(\"Don't know how to connect to the signalling server with uri\" + window.location);\n\t\t}\n\t\t//ws_server=\"devmedia1.surfsolutions.com\";\n\t\tconst mediacore_domain = new URL(this._originalSource).hostname;\n\n\t\tthis._wsServer = mediacore_domain;\n\t\tconst ws_url = 'wss://' + this._wsServer + ':' + this._wsPort;\n\t\tthis._wsConnect = new WebSocket(ws_url);\n\n\t\t/* When connected, immediately register with the server */\n\t\tthis._wsConnect.addEventListener('open', (event: any) => {\n\t\t\tthis._wsConnect.send('HELLO ' + this._peerId);\n\t\t\tthis._connectAttempts = 0;\n\t\t});\n\t\tthis._wsConnect.addEventListener('error', this.OnServerError.bind(this));\n\t\tthis._wsConnect.addEventListener('message', this.OnServerMessage.bind(this));\n\t\tthis._wsConnect.addEventListener('close', this.OnServerClose.bind(this));\n\t}\n\n\tprivate OnServerMessage(event: any): void {\n\t\tif (event.data.startsWith(\"ERROR\")) {\n\t\t\tthis.handleIncomingError(event.data);\n\t\t\treturn;\n\t\t}\n\t\tif (event.data.startsWith(\"HELLO\")) {\n\t\t\tlet arr = event.data.split(\" \");\n\t\t\tthis._peerId = arr[1];\n\t\t\tthis.SendMessageToStartCall();\n\t\t\treturn;\n\t\t}\n\t\t// Handle incoming JSON SDP and ICE messages\n\t\ttry {\n\t\t\tthis._msg = JSON.parse(event.data);\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof SyntaxError) {\n\t\t\t\tthis.handleIncomingError(\"Error parsing incoming JSON: \" + event.data);\n\t\t\t} else {\n\t\t\t\tthis.handleIncomingError(\"Unknown error parsing response: \" + event.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Incoming JSON signals the beginning of a call\n\t\tif (!this._peerConnection) {\n\t\t\tthis.CreateCall(this._msg);\n\t\t}\n\n\t\tif (this._msg.sdp != null) {\n\t\t\tthis.OnIncomingSDP(this._msg.sdp);\n\t\t}\n\t\telse if (this._msg.ice != null) {\n\t\t\tthis.OnIncomingICE(this._msg.ice);\n\t\t}\n\t\telse {\n\t\t\tthis.handleIncomingError(\"Unknown incoming JSON: \" + this._msg);\n\t\t}\n\t}\n\n\tprivate CreateCall(msg: any): void {\n\t\t// Reset connection attempts because we connected successfully\n\t\tthis._connectAttempts = 0;\n\n\t\tthis._peerConnection = new RTCPeerConnection(this.rtc_configuration);\n\t\tthis._peerConnection.ontrack = this.OnTrack.bind(this);\n\t\tthis.local_stream_promise = new Promise<void>((resolve, reject) => { resolve() });\n\n\t\t// run checks interval to see if we have a live connection\n\t\tthis.RunDataInterval();\n\n\t\tif (!msg.sdp) {\n\t\t\tconsole.warn(\"WARNING: First message wasn't an SDP message!?\");\n\t\t}\n\n\t\tthis._peerConnection.onicecandidate = (event: any) => {\n\t\t\t// We have a candidate, send it to the remote party with the\n\t\t\t// same uuid\n\t\t\tif (event.candidate == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._wsConnect.send(JSON.stringify({ ice: event.candidate }));\n\t\t};\n\t\tthis._peerConnection.oniceconnectionstatechange = (event: any) => {\n\t\t\tif (this._peerConnection && this._peerConnection.iceConnectionState) {\n\t\t\t\tif (this._peerConnection.iceConnectionState == 'failed') {\n\t\t\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\t\t\tthis.SetError('Failed ice connection state');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate RunDataInterval() {\n\n\t\tlet prevFrames = 0;\n\n\t\tconst interval = setInterval(async () => {\n\t\t\tif (!this._peerConnection) {\n\t\t\t\t// stop checking and exit\n\t\t\t\tclearInterval(interval);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconsole.log(\"WebRTC state:\", this._peerConnection.connectionState);\n\t\t\tif (this._peerConnection.connectionState == \"connected\") {\n\t\t\t\tconst stat = await this._peerConnection.getStats();\n\n\t\t\t\tfor (const val of stat.values()) {\n\t\t\t\t\tif (val.id && val.type == \"track\") {\n\t\t\t\t\t\tif (typeof val.framesDecoded == \"number\") {\n\t\t\t\t\t\t\tconst framesDecoded = val.framesDecoded;\n\t\t\t\t\t\t\tconst diff = framesDecoded - prevFrames;\n\t\t\t\t\t\t\tconsole.log(`WebRTC frames decoded: ${framesDecoded}`);\n\t\t\t\t\t\t\tif (diff > 1) { \n\t\t\t\t\t\t\t\tprevFrames = framesDecoded;\n\t\t\t\t\t\t\t\tthis._onDataEvent.fire();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 5000);\n\t}\n\n\tprivate OnTrack(event: any): void {\n\n\t\tconsole.log(\"on track\")\n\n\t\tif (!event.streams && event.streams.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stream = event.streams[0];\n\t\tconst videoTracks = stream.getVideoTracks();\n\n\t\tif (videoTracks.length > 0) {\n\t\t\tthis._videoElement.srcObject = stream;\n\t\t\tthis._startPlayEvent.fire();\n\n\t\t} else {\n\t\t\tthis.handleIncomingError('Stream with unknown tracks added, resetting');\n\t\t}\n\t}\n\n\tprivate httpGetAnswer(): void {\n\t\t/* none */\n\t}\n\n\tprivate SendMessageToStartCall(): void {\n\t\tlet theUrl = this._originalSource.replace(\"#PEERID#\", this._peerId.toString());\n\t\t// making the https get call\n\t\tthis.HttpGetAsync(theUrl, this.httpGetAnswer.bind(this));\n\t}\n\n\tprivate HttpGetAsync(theUrl: string, callback: any): void {\n\t\tlet xmlHttp = new XMLHttpRequest();\n\t\txmlHttp.onreadystatechange = () => {\n\t\t\tif (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\n\t\t\t\tcallback(xmlHttp.responseText);\n\t\t\t}\n\t\t\telse if (xmlHttp.readyState == 4) {\n\t\t\t\tif (this._socketConnectionTimer) {\n\t\t\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t\t\t}\n\t\t\t\tthis.SetError(`Wrong response status '${xmlHttp.status}' for request ${theUrl}`);\n\t\t\t}\n\t\t}\n\t\txmlHttp.open(\"GET\", theUrl, true); // true for asynchronous \n\t\txmlHttp.send(null);\n\t}\n\n\tprivate OnIncomingSDP(sdp: any): void {\n\t\tthis._peerConnection.setRemoteDescription(sdp).then(() => {\n\t\t\tif (sdp.type != \"offer\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.local_stream_promise.then((stream: any) => {\n\t\t\t\tthis._peerConnection.createAnswer()\n\t\t\t\t\t.then(this.OnLocalDescription.bind(this)).catch(this.SetError);\n\t\t\t}).catch(this.SetError);\n\t\t}).catch(this.SetError);\n\t}\n\n\t// Local description was set, send it to peer\n\tprivate OnLocalDescription(desc: any): void {\n\t\tthis._peerConnection.setLocalDescription(desc).then(() => {\n\t\t\tlet sdp = { sdp: this._peerConnection.localDescription }\n\t\t\tthis._wsConnect.send(JSON.stringify(sdp));\n\t\t});\n\t}\n\n\t// ICE candidate received from peer, add it to the peer connection\n\tprivate OnIncomingICE(ice: any): void {\n\t\tlet candidate = new RTCIceCandidate(ice);\n\t\tthis._peerConnection.addIceCandidate(candidate).catch(this.SetError);\n\t}\n\n\tprivate ResetState(): void {\n\t\t// This will call OnServerClose()\n\t\tthis._wsConnect.close();\n\t}\n\n\tprivate handleIncomingError(error: any): void {\n\t\tthis.Close();\n\t\tthis.SetError(\"ERROR: \" + error);\n\t}\n\n\tprivate Close(): void {\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\t}\n\n\tprivate OnServerClose(event: any): void {\n\t\tthis.Close();\n\t\tthis._disconnectServerEvent.fire();\n\t}\n\n\tprivate OnServerError(event: any) {\n\t\tthis.SetError(\"Server Connection Error. Reconnecting shortly.....\");\n\t}\n\n\tprivate StopVideo(): void {\n\t\tthis._videoElement.pause();\n\t\tthis._videoElement.src = \"\";\n\t}\n\n\tprivate DestroyWebRTC(): void {\n\t\tthis.StopVideo();\n\n\t\tif (this._socketConnectionTimer) {\n\t\t\tclearTimeout(this._socketConnectionTimer);\n\t\t}\n\n\t\tif (this._wsConnect) {\n\t\t\tthis._wsConnect.close(4000, \"stop\");\n\t\t}\n\n\t\tif (this._peerConnection) {\n\t\t\tthis._peerConnection.oniceconnectionstatechange = () => { /* none */ };\n\t\t\tthis._peerConnection.close();\n\t\t\tthis._peerConnection = null;\n\t\t}\n\t}\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { WebRTC } from \"./web-rtc\";\nimport { PlayerControl } from \"../player.control\";\n\n@Component({\n selector: 'zen-web-rtc-player',\n templateUrl: './web-rtc-player.component.html',\n styleUrls: ['./web-rtc-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenWebRTCPlayerComponent implements OnChanges, OnDestroy {\n\n @Input() source!: string;\n\n @Input() control?: PlayerControl;\n\n @Output() onStartPlay = new EventEmitter<void>();\n\n @Output() onServerError = new EventEmitter<void>();\n\n @Output() onServerDisconnect = new EventEmitter<void>();\n\n public IsLoading = true;\n\n public IsVideoFilterVisible = false;\n\n private _webrtc!: WebRTC;\n\n private _isDestroyed = false;\n\n public constructor(\n private _element: ElementRef\n ) {\n }\n\n public ngOnDestroy(): void {\n this._isDestroyed = true;\n this.stopPlayback();\n }\n\n public ngOnChanges(changeObj: any): void {\n\n if (changeObj.source) {\n this.source = changeObj.source.currentValue;\n if (this.source) {\n this.createWebRTC();\n this.Play();\n }\n else {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n }\n }\n }\n\n private createWebRTC(): void {\n if (this._webrtc) {\n this._webrtc.Destroy();\n }\n\n this._webrtc = new WebRTC(this.source, this.getVideoElement());\n this._webrtc.OnPlay(this.invokeOnStartPlay.bind(this));\n this._webrtc.OnError(this.invokeOnServerError.bind(this));\n this._webrtc.OnClose(this.invokeOnServerDisconnect.bind(this));\n this._webrtc.OnData(this.invokeOnData.bind(this));\n }\n\n private stopPlayback() {\n if (this._webrtc) {\n this._webrtc.Stop();\n }\n }\n\n private Play() {\n if (this._isDestroyed) {\n return;\n }\n if (this._webrtc) {\n this._webrtc.Start();\n }\n }\n\n private getVideoElement() {\n const element = (this._element.nativeElement as HTMLElement).getElementsByTagName(\"video\").item(0);\n return element as HTMLVideoElement;\n }\n\n private invokeOnStartPlay(): void {\n if (this._isDestroyed) {\n return;\n }\n }\n\n private invokeOnData() {\n if (this._isDestroyed) {\n return;\n }\n if (!this.control) {\n return;\n }\n this.control.EmitData();\n }\n\n private invokeOnServerError(): void {\n if (this.onServerError) {\n this.onServerError.emit();\n }\n }\n\n private invokeOnServerDisconnect(): void {\n if (this.onServerDisconnect) {\n this.onServerDisconnect.emit();\n }\n }\n\n}\n","<div class=\"web-rtc-player\">\n\n <video class=\"web-rtc-player-id\"\n ng-hide=\"IsShowSnapshotPlayer\"\n muted\n controls\n webkit-playsinline=\"true\"\n playsinline=\"true\"\n autoplay=\"\"></video>\n\n</div>\n\n<div class=\"customEventDiv\"></div>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, ChangeDetectionStrategy } from \"@angular/core\";\nimport { PlayerControl } from \"../player.control\";\n\nexport type ZenLiveViewPlayerType = 'html5' | 'flv' | 'webrtc' | 'snapshot' | 'hls' | 'unknown';\n\n@Component({\n selector: 'zen-live-view-player',\n templateUrl: './live-view-player.component.html',\n styleUrls: ['./live-view-player.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenLiveViewPlayerComponent implements OnDestroy {\n @Input() control!: PlayerControl;\n\n @Input() source!: string;\n\n @Input() playerType: ZenLiveViewPlayerType = \"unknown\";\n\n @Input() snapshotInterval!: number;\n\n /**\n * Playback timeout. It uses for streamax live streaming. \n */\n @Input() timeout!: number;\n\n @Output() onData = new EventEmitter<void>();\n\n private _controlPlayHander!: number;\n\n private _controlStopHander!: number;\n\n public IsLoading = true;\n\n constructor() {\n this.control = new PlayerControl();\n this.control.OnData(() => {\n this.onData.emit();\n })\n }\n\n public ngOnDestroy(): void {\n if (this.control) {\n if (this._controlPlayHander) {\n this.control.OffPlay(this._controlPlayHander);\n }\n\n if (this._controlStopHander) {\n this.control.OffStop(this._controlStopHander);\n }\n }\n }\n\n\n\n}\n","@if (playerType == 'webrtc') {\n <zen-web-rtc-player [source]=\"source\"\n [control]=\"control\"\n ></zen-web-rtc-player>\n}\n\n@if (playerType == 'snapshot') {\n <zen-snapshot-player [source]=\"source\"\n [control]=\"control\"\n [interval]=\"snapshotInterval\"\n ></zen-snapshot-player>\n}\n\n@if (playerType == 'flv') {\n <zen-flv-player [source]=\"source\"\n [control]=\"control\"\n ></zen-flv-player>\n}\n\n@if (playerType == 'hls') {\n <zen-hls-player [source]=\"source\"\n [control]=\"control\"\n ></zen-hls-player>\n}\n\n@if (playerType == 'html5') {\n <zen-html5-video-player [source]=\"source\"\n [control]=\"control\"\n ></zen-html5-video-player>\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\n\nexport type TimePickerMode = 'clock' | 'duration';\n\nexport interface TimePickerValue {\n hours: number;\n minutes: number;\n seconds: number;\n period?: 'AM' | 'PM';\n}\n\n@Component({\n selector: 'zen-timepicker',\n templateUrl: './zendu-timepicker.component.html',\n styleUrls: ['./zendu-timepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduTimepickerComponent implements OnInit, OnChanges {\n @Input() mode: TimePickerMode = 'clock';\n @Input() label: string;\n @Input() value: TimePickerValue;\n @Input() showSeconds: boolean = false;\n @Input() showHours: boolean = true;\n @Input() disabled: boolean = false;\n @Input() readonly: boolean = false;\n @Input() placeholder: string;\n @Input() width: string;\n\n @Output() valueChange = new EventEmitter<TimePickerValue>();\n @Output() apply = new EventEmitter<TimePickerValue>();\n @Output() clear = new EventEmitter<void>();\n\n isPickerVisible = false;\n\n selectedHours = 0;\n selectedMinutes = 0;\n selectedSeconds = 0;\n selectedPeriod: 'AM' | 'PM' = 'AM';\n\n // Zero-padded display strings for the input fields\n hoursDisplay = '00';\n minutesDisplay = '00';\n secondsDisplay = '00';\n\n right = false;\n bottom = false;\n\n private maxHour = 12;\n private minHour = 1;\n\n constructor(private _element: ElementRef) {}\n\n @HostListener('window:mousedown', ['$event'])\n outsideClick(event: MouseEvent): void {\n if (!document.body.contains(event.target as Node)) {\n return;\n }\n if (this._element.nativeElement.contains(event.target)) {\n return;\n }\n this.isPickerVisible = false;\n }\n\n get defaultLabel(): string {\n return this.mode === 'clock' ? 'Select a time' : 'Stop Duration';\n }\n\n get defaultPlaceholder(): string {\n if (this.placeholder) return this.placeholder;\n if (this.mode === 'clock') return 'Select Time';\n if (!this.showHours && this.showSeconds) return '0 min 0 sec';\n if (!this.showHours) return '0 min';\n return '0 min';\n }\n\n get formattedDisplayValue(): string {\n if (!this.value) return '';\n\n if (this.mode === 'clock') {\n const h = this.formatNum(this.value.hours);\n const m = this.formatNum(this.value.minutes);\n const s = this.formatNum(this.value.seconds);\n\n if (!this.showHours) {\n return this.showSeconds ? `${m}:${s} ${this.value.period || 'AM'}` : `${m} ${this.value.period || 'AM'}`;\n }\n if (this.showSeconds) {\n return `${h}:${m}:${s} ${this.value.period || 'AM'}`;\n }\n return `${h}:${m} ${this.value.period || 'AM'}`;\n }\n\n // Duration mode\n const parts: string[] = [];\n if (this.showHours && this.value.hours > 0) {\n parts.push(`${this.value.hours} hr`);\n }\n if (this.value.minutes > 0) {\n parts.push(`${this.value.minutes} min`);\n }\n if (this.showSeconds && this.value.seconds > 0) {\n parts.push(`${this.value.seconds} sec`);\n }\n return parts.length > 0 ? parts.join(' ') : '0 min';\n }\n\n ngOnInit(): void {\n this.updateHourLimits();\n if (this.value) {\n this.applyValue(this.value);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['mode']) {\n this.updateHourLimits();\n }\n if (changes['value'] && this.value) {\n this.applyValue(this.value);\n }\n }\n\n togglePicker(): void {\n if (this.disabled || this.readonly) return;\n this.isPickerVisible = !this.isPickerVisible;\n if (this.isPickerVisible) {\n if (this.value) {\n this.applyValue(this.value);\n }\n this.updatePlacement();\n }\n }\n\n // ─── Increment / Decrement ───\n\n incrementHours(): void {\n this.selectedHours = this.selectedHours >= this.maxHour ? this.minHour : this.selectedHours + 1;\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n decrementHours(): void {\n this.selectedHours = this.selectedHours <= this.minHour ? this.maxHour : this.selectedHours - 1;\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n incrementMinutes(): void {\n this.selectedMinutes = this.selectedMinutes >= 59 ? 0 : this.selectedMinutes + 1;\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n decrementMinutes(): void {\n this.selectedMinutes = this.selectedMinutes <= 0 ? 59 : this.selectedMinutes - 1;\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n incrementSeconds(): void {\n this.selectedSeconds = this.selectedSeconds >= 59 ? 0 : this.selectedSeconds + 1;\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n decrementSeconds(): void {\n this.selectedSeconds = this.selectedSeconds <= 0 ? 59 : this.selectedSeconds - 1;\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n // ─── Direct Input ───\n\n onHoursInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedHours = this.minHour;\n this.hoursDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val <= this.maxHour) {\n this.selectedHours = Math.max(this.minHour, val);\n this.hoursDisplay = raw;\n } else {\n input.value = this.hoursDisplay;\n }\n }\n\n onMinutesInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedMinutes = 0;\n this.minutesDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this.selectedMinutes = val;\n this.minutesDisplay = raw;\n } else {\n input.value = this.minutesDisplay;\n }\n }\n\n onSecondsInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value.replace(/\\D/g, '');\n if (raw === '') {\n this.selectedSeconds = 0;\n this.secondsDisplay = '';\n return;\n }\n const val = parseInt(raw, 10);\n if (val >= 0 && val <= 59) {\n this.selectedSeconds = val;\n this.secondsDisplay = raw;\n } else {\n input.value = this.secondsDisplay;\n }\n }\n\n onFocus(event: Event): void {\n const input = event.target as HTMLInputElement;\n input.select();\n }\n\n clampHours(): void {\n this.selectedHours = Math.max(this.minHour, Math.min(this.maxHour, this.selectedHours));\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n clampMinutes(): void {\n this.selectedMinutes = Math.max(0, Math.min(59, this.selectedMinutes));\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n }\n\n clampSeconds(): void {\n this.selectedSeconds = Math.max(0, Math.min(59, this.selectedSeconds));\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n }\n\n onInputKeydown(event: KeyboardEvent, type: 'hours' | 'minutes' | 'seconds'): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (type === 'hours') this.incrementHours();\n else if (type === 'minutes') this.incrementMinutes();\n else this.incrementSeconds();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (type === 'hours') this.decrementHours();\n else if (type === 'minutes') this.decrementMinutes();\n else this.decrementSeconds();\n }\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod = period;\n }\n\n formatNum(n: number): string {\n return n < 10 ? '0' + n : '' + n;\n }\n\n onApply(): void {\n const val = this.getCurrentValue();\n this.value = val;\n this.valueChange.emit(val);\n this.apply.emit(val);\n this.isPickerVisible = false;\n }\n\n onClear(): void {\n this.selectedHours = this.mode === 'clock' ? 12 : 0;\n this.selectedMinutes = 0;\n this.selectedSeconds = 0;\n this.selectedPeriod = 'AM';\n this.hoursDisplay = this.formatNum(this.selectedHours);\n this.minutesDisplay = '00';\n this.secondsDisplay = '00';\n this.value = null;\n this.valueChange.emit(null);\n this.clear.emit();\n this.isPickerVisible = false;\n }\n\n // ─── Private ───\n\n private updatePlacement(): void {\n this.right = false;\n this.bottom = false;\n const el = this._element.nativeElement;\n const rect = el.getBoundingClientRect();\n if (rect.left > window.innerWidth / 2) {\n this.right = true;\n }\n if (rect.top > window.innerHeight / 2) {\n this.bottom = true;\n }\n }\n\n private updateHourLimits(): void {\n if (this.mode === 'clock') {\n this.maxHour = 12;\n this.minHour = 1;\n if (this.selectedHours === 0 && this.showHours) this.selectedHours = 12;\n } else {\n this.maxHour = 23;\n this.minHour = 0;\n }\n this.hoursDisplay = this.formatNum(this.selectedHours);\n }\n\n private applyValue(val: TimePickerValue): void {\n this.selectedHours = Math.max(this.minHour, Math.min(this.maxHour, val.hours || 0));\n this.selectedMinutes = Math.max(0, Math.min(59, val.minutes || 0));\n this.selectedSeconds = Math.max(0, Math.min(59, val.seconds || 0));\n this.hoursDisplay = this.formatNum(this.selectedHours);\n this.minutesDisplay = this.formatNum(this.selectedMinutes);\n this.secondsDisplay = this.formatNum(this.selectedSeconds);\n if (val.period) {\n this.selectedPeriod = val.period;\n }\n }\n\n private getCurrentValue(): TimePickerValue {\n const val: TimePickerValue = {\n hours: this.selectedHours,\n minutes: this.selectedMinutes,\n seconds: this.selectedSeconds,\n };\n if (this.mode === 'clock') {\n val.period = this.selectedPeriod;\n }\n return val;\n }\n}\n","<div class=\"zen-tp\">\n <!-- Input toggle button -->\n <button class=\"zen-tp__toggle zen-tp__toggle--box\"\n [class.zen-tp__toggle--active]=\"isPickerVisible\"\n [class.zen-tp__toggle--disabled]=\"disabled\"\n [class.zen-tp__toggle--readonly]=\"readonly\"\n [style.width]=\"width || null\"\n [disabled]=\"disabled || readonly\"\n (click)=\"togglePicker()\">\n <span class=\"zen-tp__display\" [class.zen-tp__display--placeholder]=\"!value\">\n {{ value ? formattedDisplayValue : defaultPlaceholder }}\n </span>\n <zen-icon class=\"zen-tp__icon\"\n [class.zen-tp__icon--filled]=\"value\"\n src=\"assets/ng-zenduit/icons/time.svg\">\n </zen-icon>\n </button>\n\n <!-- Picker dropdown -->\n @if (isPickerVisible) {\n <div class=\"zen-tp__dropdown\"\n #pickerPopup\n [class.zen-tp__dropdown--right]=\"right\"\n [class.zen-tp__dropdown--bottom]=\"bottom\">\n <div class=\"zen-tp__popup\">\n <!-- Header -->\n <div class=\"zen-tp__popup-label\">{{ label || defaultLabel }}</div>\n <!-- Time fields -->\n <div class=\"zen-tp__fields\">\n <!-- Hours -->\n @if (showHours) {\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Hours\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"hoursDisplay\"\n (input)=\"onHoursInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampHours()\"\n (keydown)=\"onInputKeydown($event, 'hours')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementHours()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementHours()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">HRS</span>\n </div>\n }\n @if (showHours) {\n <span class=\"zen-tp__colon\">:</span>\n }\n <!-- Minutes -->\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Minutes\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"minutesDisplay\"\n (input)=\"onMinutesInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampMinutes()\"\n (keydown)=\"onInputKeydown($event, 'minutes')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementMinutes()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementMinutes()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">MIN</span>\n </div>\n <!-- Seconds (duration mode or when showSeconds) -->\n @if (showSeconds) {\n <span class=\"zen-tp__colon\">:</span>\n <div class=\"zen-tp__field\">\n <div class=\"zen-tp__input-box\">\n <input class=\"zen-tp__input\"\n type=\"text\"\n aria-label=\"Seconds\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [value]=\"secondsDisplay\"\n (input)=\"onSecondsInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"clampSeconds()\"\n (keydown)=\"onInputKeydown($event, 'seconds')\"\n maxlength=\"2\" />\n <div class=\"zen-tp__arrows\">\n <button class=\"zen-tp__arrow zen-tp__arrow--up\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"incrementSeconds()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button class=\"zen-tp__arrow zen-tp__arrow--down\"\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"decrementSeconds()\">\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n <span class=\"zen-tp__field-label\">SEC</span>\n </div>\n }\n <!-- AM/PM Toggle (Clock mode only) -->\n @if (mode === 'clock') {\n <div class=\"zen-tp__period\">\n <button class=\"zen-tp__period-btn\"\n type=\"button\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'AM'\"\n (click)=\"selectPeriod('AM')\">\n AM\n </button>\n <button class=\"zen-tp__period-btn\"\n type=\"button\"\n [class.zen-tp__period-btn--active]=\"selectedPeriod === 'PM'\"\n (click)=\"selectPeriod('PM')\">\n PM\n </button>\n </div>\n }\n </div>\n <!-- Divider -->\n <div class=\"zen-tp__divider\"></div>\n <!-- Actions -->\n <div class=\"zen-tp__actions\">\n <button class=\"zen-tp__btn zen-tp__btn--clear\" type=\"button\" (click)=\"onClear()\">Clear</button>\n <button class=\"zen-tp__btn zen-tp__btn--apply\" type=\"button\" (click)=\"onApply()\">Apply</button>\n </div>\n </div>\n </div>\n }\n</div>\n","import {\n Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FileUploadItem, FileUploaderProgressType } from './file-uploader.types';\n\n@Component({\n selector: 'zen-file-uploader',\n templateUrl: './zendu-file-uploader.component.html',\n styleUrls: ['./zendu-file-uploader.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduFileUploaderComponent {\n\n @Input() accept: string = '*';\n @Input() multiple: boolean = true;\n @Input() maxFileSize: number = 0;\n @Input() disabled: boolean = false;\n @Input() description: string = '';\n @Input() progressType: FileUploaderProgressType = 'bar';\n @Input() files: FileUploadItem[] = [];\n\n @Output() filesSelected = new EventEmitter<File[]>();\n @Output() fileRemoved = new EventEmitter<FileUploadItem>();\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n isDragover = false;\n\n @HostListener('dragover', ['$event'])\n onDragOver(evt: DragEvent) {\n if (this.disabled) return;\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = false;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(evt: DragEvent) {\n if (this.disabled) return;\n evt.preventDefault();\n evt.stopPropagation();\n this.isDragover = false;\n\n const dt = evt.dataTransfer;\n if (dt && dt.files.length) {\n const filtered = this.filterFiles(dt.files);\n if (filtered.length) {\n this.filesSelected.emit(filtered);\n }\n }\n }\n\n openFileDialog() {\n if (this.disabled) return;\n this.fileInput.nativeElement.click();\n }\n\n onFileInput(evt: Event) {\n const input = evt.target as HTMLInputElement;\n if (input.files && input.files.length) {\n const files: File[] = [];\n for (let i = 0; i < input.files.length; i++) {\n files.push(input.files[i]);\n }\n this.filesSelected.emit(files);\n }\n input.value = '';\n }\n\n removeFile(item: FileUploadItem) {\n this.fileRemoved.emit(item);\n }\n\n getFileIcon(fileType: string): string {\n switch (fileType) {\n case 'video': return 'assets/ng-zenduit/icons/film.svg';\n case 'misc': return 'assets/ng-zenduit/icons/upload-cloud.svg';\n default: return 'assets/ng-zenduit/icons/file-upload.svg';\n }\n }\n\n formatFileSize(bytes: number): string {\n if (!bytes) return '0 B';\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n }\n\n private filterFiles(fileList: FileList): File[] {\n const files: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList[i];\n if (this.maxFileSize && file.size > this.maxFileSize) continue;\n if (this.accept && this.accept !== '*') {\n const accepted = this.accept.split(',').map(t => t.trim());\n const match = accepted.some(type => {\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.replace('/*', '/'));\n }\n return file.type === type;\n });\n if (!match) continue;\n }\n files.push(file);\n }\n return files;\n }\n}\n","<div class=\"zen-fu\" [class.disabled]=\"disabled\">\n <!-- Drop Zone -->\n <div class=\"drop-zone\"\n [class.dragover]=\"isDragover\"\n (click)=\"openFileDialog()\">\n <div class=\"drop-zone-icon\">\n <zen-icon src=\"assets/ng-zenduit/icons/upload-cloud.svg\"></zen-icon>\n </div>\n <div class=\"drop-zone-text\">\n <span class=\"click-text\">{{ 'Click to upload' | translate }}</span>\n <span class=\"drag-text\">{{ 'or drag and drop' | translate }}</span>\n </div>\n <p class=\"drop-zone-description\">\n {{ description || ('SVG, PNG, JPG or GIF (max. 800x400px)' | translate) }}\n </p>\n </div>\n\n <input type=\"file\"\n #fileInput\n style=\"display:none\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"onFileInput($event)\" />\n\n <!-- File Queue -->\n @if (files?.length) {\n <div class=\"file-queue\">\n <!-- Progress Bar Type -->\n @if (progressType === 'bar') {\n @for (item of files; track item) {\n <div class=\"file-item bar-type\"\n [class.complete]=\"item.status === 'complete'\">\n <div class=\"file-item-content\">\n <div class=\"file-icon-wrap\">\n <zen-icon class=\"file-icon\"\n [src]=\"getFileIcon(item.fileType)\">\n </zen-icon>\n </div>\n <div class=\"file-info\">\n <div class=\"file-text\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n <p class=\"file-size\">{{ formatFileSize(item.file.size) }}</p>\n </div>\n <div class=\"progress-row\">\n <div class=\"progress-track\">\n <div class=\"progress-fill\" [style.width.%]=\"item.progress\"></div>\n </div>\n <span class=\"progress-label\">{{ item.progress }}%</span>\n </div>\n </div>\n </div>\n @if (item.status === 'uploading') {\n <button class=\"file-action\"\n (click)=\"removeFile(item)\">\n <zen-icon class=\"trash-icon\"\n src=\"assets/ng-zenduit/icons/trash.svg\">\n </zen-icon>\n </button>\n }\n @if (item.status === 'complete') {\n <zen-icon class=\"check-icon\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n }\n </div>\n }\n }\n <!-- Progress Fill Type -->\n @if (progressType === 'fill') {\n @for (item of files; track item) {\n <div class=\"file-item fill-type\"\n >\n <div class=\"fill-bg\" [style.width.%]=\"item.progress\"></div>\n <div class=\"file-item-content\">\n <div class=\"file-icon-wrap\">\n <zen-icon class=\"file-icon\"\n [src]=\"getFileIcon(item.fileType)\">\n </zen-icon>\n </div>\n <div class=\"file-info\">\n <p class=\"file-name\">{{ item.file.name }}</p>\n <p class=\"file-size\">{{ formatFileSize(item.file.size) }} – {{ item.progress }}% {{ 'uploaded' | translate }}</p>\n </div>\n </div>\n @if (item.status === 'uploading') {\n <zen-spinner\n class=\"file-spinner\"\n size=\"small\">\n </zen-spinner>\n }\n @if (item.status === 'complete') {\n <zen-icon class=\"check-icon\"\n src=\"assets/ng-zenduit/icons/check-circle.svg\">\n </zen-icon>\n }\n </div>\n }\n }\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type ZenduAvatarStatusIcon = 'none' | 'online' | 'company';\n\n@Component({\n selector: 'zendu-avatar',\n templateUrl: './zendu-avatar.component.html',\n styleUrls: ['./zendu-avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarComponent {\n\n @Input() size: ZenduAvatarSize = 'md';\n @Input() src: string;\n @Input() text: string;\n @Input() statusIcon: ZenduAvatarStatusIcon = 'none';\n @Input() companyImgSrc: string;\n @Input() focused = false;\n\n get showImage(): boolean {\n return !!this.src;\n }\n\n get showText(): boolean {\n return !this.src && !!this.text;\n }\n\n get showPlaceholder(): boolean {\n return !this.src && !this.text;\n }\n\n get cssClasses(): Record<string, boolean> {\n return {\n ['zendu-avatar--' + this.size]: true,\n 'zendu-avatar--focused': this.focused\n };\n }\n}\n","<div class=\"zendu-avatar\" [ngClass]=\"cssClasses\">\n <!-- Image avatar -->\n @if (showImage) {\n <img [src]=\"src\" class=\"zendu-avatar__img\" alt=\"\" />\n }\n\n <!-- Text initials -->\n @if (showText) {\n <span class=\"zendu-avatar__text\">{{ text }}</span>\n }\n\n <!-- Placeholder user icon -->\n @if (showPlaceholder) {\n <div class=\"zendu-avatar__placeholder\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6666 17.5C16.6666 16.337 16.6666 15.7555 16.4942 15.2824C16.1544 14.3491 15.4008 13.5955 14.4675 13.2558C13.9944 13.0833 13.4129 13.0833 12.2499 13.0833H7.74992C6.58694 13.0833 6.00545 13.0833 5.53237 13.2558C4.59907 13.5955 3.84542 14.3491 3.50567 15.2824C3.33325 15.7555 3.33325 16.337 3.33325 17.5M13.7499 6.25C13.7499 8.32107 12.0710 10 9.99992 10C7.92885 10 6.24992 8.32107 6.24992 6.25C6.24992 4.17893 7.92885 2.5 9.99992 2.5C12.0710 2.5 13.7499 4.17893 13.7499 6.25Z\" stroke=\"currentColor\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- Online indicator -->\n @if (statusIcon === 'online') {\n <div class=\"zendu-avatar__online-dot\"></div>\n }\n\n <!-- Company icon -->\n @if (statusIcon === 'company') {\n <div class=\"zendu-avatar__company-icon\">\n @if (companyImgSrc) {\n <img [src]=\"companyImgSrc\" alt=\"\" />\n }\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarGroupSize = 'xs' | 'sm' | 'md';\n\n@Component({\n selector: 'zendu-avatar-group',\n templateUrl: './zendu-avatar-group.component.html',\n styleUrls: ['./zendu-avatar-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarGroupComponent {\n\n @Input() size: ZenduAvatarGroupSize = 'md';\n @Input() images: string[] = [];\n @Input() moreCount = 0;\n @Input() showAddButton = false;\n}\n","<div class=\"zendu-avatar-group\" [ngClass]=\"'zendu-avatar-group--' + size\">\n <div class=\"zendu-avatar-group__avatars\">\n @for (img of images; track img) {\n <div class=\"zendu-avatar-group__wrap\">\n <div class=\"zendu-avatar-group__avatar\">\n <img [src]=\"img\" alt=\"\" />\n </div>\n </div>\n }\n\n @if (moreCount > 0) {\n <div class=\"zendu-avatar-group__more\">\n <span>+{{ moreCount }}</span>\n </div>\n }\n </div>\n\n @if (showAddButton) {\n <div class=\"zendu-avatar-group__add-btn\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 3.333v9.334M3.333 8h9.334\" stroke=\"currentColor\" stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenduAvatarSize, ZenduAvatarStatusIcon } from './zendu-avatar.component';\n\nexport type ZenduAvatarLabelGroupSize = 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'zendu-avatar-label-group',\n templateUrl: './zendu-avatar-label-group.component.html',\n styleUrls: ['./zendu-avatar-label-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarLabelGroupComponent {\n\n @Input() size: ZenduAvatarLabelGroupSize = 'md';\n @Input() src: string;\n @Input() text: string;\n @Input() name: string;\n @Input() subtitle: string;\n @Input() statusIcon: ZenduAvatarStatusIcon = 'none';\n @Input() companyImgSrc: string;\n @Input() focused = false;\n\n get avatarSize(): ZenduAvatarSize {\n return this.size as ZenduAvatarSize;\n }\n}\n","<div class=\"zendu-avatar-label-group\" [ngClass]=\"'zendu-avatar-label-group--' + size\">\n <zendu-avatar\n [size]=\"avatarSize\"\n [src]=\"src\"\n [text]=\"text\"\n [statusIcon]=\"statusIcon\"\n [companyImgSrc]=\"companyImgSrc\"\n [focused]=\"focused\">\n </zendu-avatar>\n\n <div class=\"zendu-avatar-label-group__text\">\n <span class=\"zendu-avatar-label-group__name\">{{ name }}</span>\n @if (subtitle) {\n <span class=\"zendu-avatar-label-group__subtitle\">{{ subtitle }}</span>\n }\n </div>\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduAvatarProfilePhotoSize = 'md' | 'lg';\n\n@Component({\n selector: 'zendu-avatar-profile-photo',\n templateUrl: './zendu-avatar-profile-photo.component.html',\n styleUrls: ['./zendu-avatar-profile-photo.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduAvatarProfilePhotoComponent {\n\n @Input() size: ZenduAvatarProfilePhotoSize = 'lg';\n @Input() src: string;\n @Input() text: string;\n\n get showImage(): boolean {\n return !!this.src;\n }\n\n get showText(): boolean {\n return !this.src && !!this.text;\n }\n\n get showPlaceholder(): boolean {\n return !this.src && !this.text;\n }\n}\n","<div class=\"zendu-avatar-profile-photo\" [ngClass]=\"'zendu-avatar-profile-photo--' + size\">\n <!-- Image -->\n @if (showImage) {\n <img [src]=\"src\" class=\"zendu-avatar-profile-photo__img\" alt=\"\" />\n }\n\n <!-- Placeholder icon -->\n @if (showPlaceholder) {\n <div class=\"zendu-avatar-profile-photo__placeholder\">\n <svg viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6666 17.5C16.6666 16.337 16.6666 15.7555 16.4942 15.2824C16.1544 14.3491 15.4008 13.5955 14.4675 13.2558C13.9944 13.0833 13.4129 13.0833 12.2499 13.0833H7.74992C6.58694 13.0833 6.00545 13.0833 5.53237 13.2558C4.59907 13.5955 3.84542 14.3491 3.50567 15.2824C3.33325 15.7555 3.33325 16.337 3.33325 17.5M13.7499 6.25C13.7499 8.32107 12.0710 10 9.99992 10C7.92885 10 6.24992 8.32107 6.24992 6.25C6.24992 4.17893 7.92885 2.5 9.99992 2.5C12.0710 2.5 13.7499 4.17893 13.7499 6.25Z\" stroke=\"currentColor\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- Text initials -->\n @if (showText) {\n <span class=\"zendu-avatar-profile-photo__text\">{{ text }}</span>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenduSliderLabel = 'none' | 'bottom' | 'bottom-floating' | 'top-floating';\n\n@Component({\n selector: 'zendu-slider',\n templateUrl: './zendu-slider.component.html',\n styleUrls: ['./zendu-slider.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenduSliderComponent implements OnDestroy {\n\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() lowValue = 0;\n @Input() highValue = 100;\n @Input() label: ZenduSliderLabel = 'none';\n @Input() suffix = '%';\n @Input() disabled = false;\n\n @Output() lowValueChange = new EventEmitter<number>();\n @Output() highValueChange = new EventEmitter<number>();\n\n @ViewChild('track', { static: true }) trackRef: ElementRef<HTMLElement>;\n\n private activeThumb: 'low' | 'high' | null = null;\n private boundMouseMove = this.onMouseMove.bind(this);\n private boundMouseUp = this.onMouseUp.bind(this);\n private boundTouchMove = this.onTouchMove.bind(this);\n private boundTouchEnd = this.onTouchEnd.bind(this);\n\n get lowPercent(): number {\n return ((this.lowValue - this.min) / (this.max - this.min)) * 100;\n }\n\n get highPercent(): number {\n return ((this.highValue - this.min) / (this.max - this.min)) * 100;\n }\n\n formatValue(value: number): string {\n return `${value}${this.suffix}`;\n }\n\n onTrackClick(event: MouseEvent): void {\n if (this.disabled) return;\n const percent = this.getPercentFromEvent(event);\n const value = this.percentToValue(percent);\n const distToLow = Math.abs(value - this.lowValue);\n const distToHigh = Math.abs(value - this.highValue);\n if (distToLow <= distToHigh) {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n onThumbMouseDown(event: MouseEvent, thumb: 'low' | 'high'): void {\n if (this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.activeThumb = thumb;\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('mouseup', this.boundMouseUp);\n }\n\n onThumbTouchStart(event: TouchEvent, thumb: 'low' | 'high'): void {\n if (this.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.activeThumb = thumb;\n document.addEventListener('touchmove', this.boundTouchMove, { passive: false });\n document.addEventListener('touchend', this.boundTouchEnd);\n }\n\n ngOnDestroy(): void {\n this.removeListeners();\n }\n\n private onMouseMove(event: MouseEvent): void {\n if (!this.activeThumb) return;\n const percent = this.getPercentFromEvent(event);\n const value = this.percentToValue(percent);\n if (this.activeThumb === 'low') {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n private onMouseUp(): void {\n this.activeThumb = null;\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n }\n\n private onTouchMove(event: TouchEvent): void {\n if (!this.activeThumb || !event.touches.length) return;\n event.preventDefault();\n const touch = event.touches[0];\n const percent = this.getPercentFromTouch(touch);\n const value = this.percentToValue(percent);\n if (this.activeThumb === 'low') {\n this.updateLow(value);\n } else {\n this.updateHigh(value);\n }\n }\n\n private onTouchEnd(): void {\n this.activeThumb = null;\n document.removeEventListener('touchmove', this.boundTouchMove);\n document.removeEventListener('touchend', this.boundTouchEnd);\n }\n\n private getPercentFromEvent(event: MouseEvent): number {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n return Math.max(0, Math.min(100, (x / rect.width) * 100));\n }\n\n private getPercentFromTouch(touch: Touch): number {\n const rect = this.trackRef.nativeElement.getBoundingClientRect();\n const x = touch.clientX - rect.left;\n return Math.max(0, Math.min(100, (x / rect.width) * 100));\n }\n\n private percentToValue(percent: number): number {\n const raw = this.min + (percent / 100) * (this.max - this.min);\n return Math.round(raw / this.step) * this.step;\n }\n\n private updateLow(value: number): void {\n value = Math.max(this.min, Math.min(value, this.highValue));\n if (value !== this.lowValue) {\n this.lowValue = value;\n this.lowValueChange.emit(value);\n }\n }\n\n private updateHigh(value: number): void {\n value = Math.max(this.lowValue, Math.min(value, this.max));\n if (value !== this.highValue) {\n this.highValue = value;\n this.highValueChange.emit(value);\n }\n }\n\n private removeListeners(): void {\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n document.removeEventListener('touchmove', this.boundTouchMove);\n document.removeEventListener('touchend', this.boundTouchEnd);\n }\n}\n","<div class=\"zendu-slider\" [class.zendu-slider--disabled]=\"disabled\">\n\n <!-- Top floating labels -->\n @if (label === 'top-floating') {\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--top\" [style.left.%]=\"lowPercent\">\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(lowValue) }}</div>\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--down\"></div>\n </div>\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--top\" [style.left.%]=\"highPercent\">\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(highValue) }}</div>\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--down\"></div>\n </div>\n }\n\n <!-- Track -->\n <div class=\"zendu-slider__track\" #track (mousedown)=\"onTrackClick($event)\">\n <div class=\"zendu-slider__track-bg\"></div>\n <div class=\"zendu-slider__track-fill\"\n [style.left.%]=\"lowPercent\"\n [style.right.%]=\"100 - highPercent\"></div>\n\n <!-- Low thumb -->\n <div class=\"zendu-slider__thumb\"\n [style.left.%]=\"lowPercent\"\n (mousedown)=\"onThumbMouseDown($event, 'low')\"\n (touchstart)=\"onThumbTouchStart($event, 'low')\"></div>\n\n <!-- High thumb -->\n <div class=\"zendu-slider__thumb\"\n [style.left.%]=\"highPercent\"\n (mousedown)=\"onThumbMouseDown($event, 'high')\"\n (touchstart)=\"onThumbTouchStart($event, 'high')\"></div>\n </div>\n\n <!-- Bottom floating labels -->\n @if (label === 'bottom-floating') {\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--bottom\" [style.left.%]=\"lowPercent\">\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--up\"></div>\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(lowValue) }}</div>\n </div>\n <div class=\"zendu-slider__tooltip zendu-slider__tooltip--bottom\" [style.left.%]=\"highPercent\">\n <div class=\"zendu-slider__tooltip-arrow zendu-slider__tooltip-arrow--up\"></div>\n <div class=\"zendu-slider__tooltip-content\">{{ formatValue(highValue) }}</div>\n </div>\n }\n\n <!-- Bottom plain labels -->\n @if (label === 'bottom') {\n <div class=\"zendu-slider__label zendu-slider__label--bottom\" [style.left.%]=\"lowPercent\">\n {{ formatValue(lowValue) }}\n </div>\n <div class=\"zendu-slider__label zendu-slider__label--bottom\" [style.left.%]=\"highPercent\">\n {{ formatValue(highValue) }}\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenBadgeSize = 'sm' | 'md' | 'lg';\nexport type ZenBadgeColor =\n | 'gray' | 'primary' | 'error' | 'warning' | 'success'\n | 'blue-gray' | 'blue-light' | 'blue' | 'indigo' | 'purple'\n | 'pink' | 'rose' | 'orange';\nexport type ZenBadgeIconDirection = 'left' | 'right';\nexport type ZenBadgeGroupTheme = 'light' | 'medium' | 'dark';\nexport type ZenBadgeGroupBadgePosition = 'leading' | 'trailing';\n\n@Component({\n selector: 'zen-badge',\n templateUrl: './zen-badge.component.html',\n styleUrls: ['./zen-badge.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenBadgeComponent {\n\n @Input() size: ZenBadgeSize = 'md';\n @Input() color: ZenBadgeColor = 'primary';\n @Input() dot = false;\n @Input() removable = false;\n @Input() iconOnly = false;\n\n /** Icon name (resolved via zen-icon's iconBasePath) */\n @Input() icon: string;\n /** Direct icon src URL (use instead of name) */\n @Input() iconSrc: string;\n /** Icon placement direction */\n @Input() iconDirection: ZenBadgeIconDirection = 'left';\n\n /** Image src (country flag or avatar) — shown as a round image left of text */\n @Input() imgSrc: string;\n\n /** Badge group mode — renders as a pill with inner badge + message */\n @Input() group = false;\n /** Badge group: inner badge label text */\n @Input() badgeLabel: string;\n /** Badge group: badge position (leading = left, trailing = right) */\n @Input() badgePosition: ZenBadgeGroupBadgePosition = 'leading';\n /** Badge group: theme variant */\n @Input() theme: ZenBadgeGroupTheme = 'light';\n /** Badge group: show arrow icon */\n @Input() showIcon = false;\n\n @Output() remove = new EventEmitter<void>();\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n get hasIcon(): boolean {\n return !!(this.icon || this.iconSrc);\n }\n\n get hostClasses(): string {\n const classes = [\n 'zen-badge',\n `zen-badge--${this.size}`,\n `zen-badge--${this.color}`,\n ];\n if (this.dot) classes.push('zen-badge--dot');\n if (this.removable) classes.push('zen-badge--removable');\n if (this.iconOnly) classes.push('zen-badge--icon-only');\n if (this.imgSrc) classes.push('zen-badge--has-img');\n if (this.hasIcon && !this.iconOnly && this.iconDirection === 'left') classes.push('zen-badge--icon-left');\n if ((this.hasIcon && !this.iconOnly && this.iconDirection === 'right') || this.removable) classes.push('zen-badge--icon-right');\n return classes.join(' ');\n }\n\n get groupClasses(): string {\n const classes = [\n 'zen-badge-group',\n `zen-badge-group--${this.size}`,\n `zen-badge-group--${this.color}`,\n `zen-badge-group--${this.theme}`,\n `zen-badge-group--${this.badgePosition}`,\n ];\n if (this.showIcon) classes.push('zen-badge-group--has-icon');\n return classes.join(' ');\n }\n\n onClick(event: MouseEvent): void {\n this.clicked.emit(event);\n }\n\n onRemove(event: MouseEvent): void {\n event.stopPropagation();\n this.remove.emit();\n }\n}\n","<!-- Badge Group mode -->\n@if (group) {\n <div [class]=\"groupClasses\" (click)=\"onClick($event)\">\n <!-- Leading: inner badge first -->\n @if (badgePosition === 'leading') {\n <span class=\"zen-badge-group__badge\">{{ badgeLabel }}</span>\n <span class=\"zen-badge-group__content\">\n <span class=\"zen-badge-group__message\"><ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container></span>\n @if (showIcon) {\n <zen-icon class=\"zen-badge-group__icon\" name=\"arrow-right\"></zen-icon>\n }\n </span>\n }\n <!-- Trailing: message first, badge with optional icon last -->\n @if (badgePosition === 'trailing') {\n <span class=\"zen-badge-group__message\"><ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container></span>\n <span class=\"zen-badge-group__badge\">\n {{ badgeLabel }}\n @if (showIcon) {\n <zen-icon class=\"zen-badge-group__badge-icon\" name=\"arrow-right\"></zen-icon>\n }\n </span>\n }\n </div>\n} @else {\n <div [class]=\"hostClasses\" (click)=\"onClick($event)\">\n @if (dot) {\n <span class=\"zen-badge__dot\"></span>\n }\n @if (imgSrc) {\n <img class=\"zen-badge__img\" [src]=\"imgSrc\" alt=\"\">\n }\n @if (hasIcon && !iconOnly && iconDirection === 'left') {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (!iconOnly) {\n <span class=\"zen-badge__text\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </span>\n }\n @if (iconOnly && hasIcon) {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (hasIcon && !iconOnly && iconDirection === 'right') {\n <zen-icon class=\"zen-badge__icon\"\n [name]=\"icon\" [src]=\"iconSrc\"></zen-icon>\n }\n @if (removable) {\n <button class=\"zen-badge__close\" (click)=\"onRemove($event)\" type=\"button\" aria-label=\"Remove\">\n <zen-icon class=\"zen-badge__icon\" name=\"x\"></zen-icon>\n </button>\n }\n </div>\n}\n\n<!-- Standard badge mode -->\n\n<ng-template #contentTpl><ng-content></ng-content></ng-template>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\n\nexport interface DropdownMenuItem {\n label?: string;\n icon?: string;\n shortcut?: string;\n checked?: boolean;\n divider?: boolean;\n disabled?: boolean;\n}\n\nexport interface DropdownMenuHeader {\n name: string;\n email: string;\n avatarSrc?: string;\n}\n\nexport type DropdownTriggerType = 'list-header' | 'icon' | 'button' | 'avatar';\n\n@Component({\n selector: 'zen-dropdown-menu',\n templateUrl: './zen-dropdown-menu.component.html',\n styleUrls: ['./zen-dropdown-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenDropdownMenuComponent implements AfterViewInit, OnDestroy {\n\n // Trigger-related inputs\n @Input() triggerType: DropdownTriggerType = 'button';\n @Input() buttonText: string = 'Account';\n @Input() avatarSrc?: string;\n\n // Menu-related inputs\n @Input() items: DropdownMenuItem[] = [];\n @Input() showCheckbox: boolean = false;\n @Input() showShortcut: boolean = false;\n @Input() showIcon: boolean = false;\n @Input() showCount: boolean = false;\n @Input() headerUser?: DropdownMenuHeader;\n @Input() showHeader: boolean = true;\n\n // Positioning inputs\n @Input() position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right' | 'bottom' | '' = '';\n @Input() offset: number = 0;\n @Input() closeOnOutsideClick: boolean = true;\n @Input() scrollHandler: string = '';\n\n @Output() itemClick = new EventEmitter<DropdownMenuItem>();\n @Output() itemCheck = new EventEmitter<{item: DropdownMenuItem, checked: boolean}>();\n @Output() openChange = new EventEmitter<boolean>();\n @Output() onClose = new EventEmitter();\n\n @ViewChild('dropdown', { static: false }) dropdownElement!: ElementRef<HTMLElement>;\n\n isOpen = false;\n dropdownVisible = false;\n private scrollSubscription: Subscription = new Subscription();\n\n constructor(private elementRef: ElementRef) {}\n\n ngAfterViewInit(): void {\n if (this.scrollHandler) {\n this.scrollSubscription = fromEvent(\n document.getElementsByClassName(this.scrollHandler)[0],\n 'scroll'\n ).subscribe(() => {\n this.closeDropdown();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.scrollSubscription.unsubscribe();\n }\n\n toggleDropdown(): void {\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n openDropdown(): void {\n this.isOpen = true;\n this.openChange.emit(this.isOpen);\n \n // Position dropdown before making it visible to prevent jerk\n setTimeout(() => {\n if (this.dropdownElement) {\n this.updateDropdownPosition();\n this.dropdownVisible = true;\n }\n }, 0);\n }\n\n closeDropdown(): void {\n if (this.isOpen) {\n this.dropdownVisible = false;\n this.isOpen = false;\n this.openChange.emit(this.isOpen);\n this.onClose.emit();\n }\n }\n\n updateDropdownPosition(): void {\n if (!this.dropdownElement) return;\n\n const container = this.elementRef.nativeElement as HTMLElement;\n const dropdown = this.dropdownElement.nativeElement;\n const pos = container.getBoundingClientRect();\n \n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n const dropdownWidth = 240; // Dropdown width\n const position = this.position || 'bottom-right'; // Default to bottom-right\n\n // Set positioning properties\n dropdown.style.position = 'fixed';\n dropdown.style.zIndex = '1000';\n dropdown.style.minWidth = '240px';\n\n // Parse position string to determine vertical and horizontal alignment\n const isTop = position.includes('top');\n const isBottom = position.includes('bottom') || (!isTop && position !== 'left' && position !== 'right');\n const isLeft = position.includes('left') || position === 'left';\n const isRight = position.includes('right') || position === 'right';\n\n // Vertical positioning\n if (isTop) {\n // Position above the trigger\n dropdown.style.bottom = `${viewportHeight - pos.top + 8}px`;\n dropdown.style.top = 'unset';\n } else {\n // Position below the trigger (default)\n dropdown.style.top = `${pos.bottom + 8}px`;\n dropdown.style.bottom = 'unset';\n }\n\n // Horizontal positioning\n // 'right' means dropdown extends to the right (left edge aligned with trigger's left edge)\n // 'left' means dropdown extends to the left (right edge aligned with trigger's right edge)\n if (isRight) {\n // Dropdown extends rightward: align left edges\n dropdown.style.left = `${pos.left + this.offset}px`;\n dropdown.style.right = 'unset';\n\n // Make sure dropdown doesn't go off-screen on the right\n const dropdownRight = pos.left + dropdownWidth;\n if (dropdownRight > viewportWidth) {\n dropdown.style.right = `${Math.max(8, viewportWidth - pos.right + this.offset)}px`;\n dropdown.style.left = 'unset';\n }\n } else if (isLeft) {\n // Dropdown extends leftward: align right edges\n const rightPosition = viewportWidth - pos.right + this.offset;\n dropdown.style.right = `${rightPosition}px`;\n dropdown.style.left = 'unset';\n\n // Make sure dropdown doesn't go off-screen on the left\n const dropdownLeft = pos.right - dropdownWidth;\n if (dropdownLeft < 0) {\n dropdown.style.left = `${Math.max(8, pos.left + this.offset)}px`;\n dropdown.style.right = 'unset';\n }\n }\n\n // Legacy support for old position values\n if (position === 'bottom') {\n dropdown.style.left = `${pos.left + this.offset}px`;\n dropdown.style.right = 'unset';\n }\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.closeOnOutsideClick) return;\n if (!document.body.contains(event.target as Node)) return;\n if (!this.dropdownElement) return;\n if (!this.isOpen) return;\n if (this.dropdownElement.nativeElement.contains(event.target as Node)) return;\n if (this.elementRef.nativeElement.contains(event.target as Node)) return;\n \n this.closeDropdown();\n }\n\n @HostListener('window:wheel', ['$event'])\n handleMouseScroll(event: WheelEvent): void {\n if (!this.dropdownElement || !this.isOpen) return;\n if (this.dropdownElement.nativeElement.contains(event.target as Node)) return;\n \n this.closeDropdown();\n }\n\n @HostListener('window:keydown', ['$event'])\n onWindowKeyDown(event: KeyboardEvent): void {\n if (!this.isOpen) return;\n \n if (\n event.key === 'ArrowUp' ||\n event.key === 'ArrowDown' ||\n event.key === 'PageUp' ||\n event.key === 'PageDown' ||\n event.key === 'Escape'\n ) {\n this.closeDropdown();\n }\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this.isOpen && this.dropdownElement) {\n this.updateDropdownPosition();\n }\n }\n\n // Trigger type getters\n get showListHeader(): boolean {\n return this.triggerType === 'list-header';\n }\n\n get showIconTrigger(): boolean {\n return this.triggerType === 'icon';\n }\n\n get showButton(): boolean {\n return this.triggerType === 'button';\n }\n\n get showAvatar(): boolean {\n return this.triggerType === 'avatar';\n }\n\n onItemClick(item: DropdownMenuItem, event?: MouseEvent): void {\n if (!item.disabled && !item.divider) {\n // If showCheckbox is true, toggle the checkbox state when clicking the item\n if (this.showCheckbox && event) {\n // Check if click was directly on checkbox (which will have stopPropagation)\n const target = event.target as HTMLElement;\n const isCheckboxClick = target.closest('zen-checkbox');\n if (!isCheckboxClick) {\n // Toggle checkbox when clicking elsewhere on the item\n item.checked = !item.checked;\n this.itemCheck.emit({ item, checked: item.checked });\n }\n } else {\n // For non-checkbox items, emit the click event\n this.itemClick.emit(item);\n }\n }\n }\n\n onCheckboxChange(item: DropdownMenuItem, checked: boolean): void {\n if (!item.disabled) {\n item.checked = checked;\n this.itemCheck.emit({ item, checked });\n }\n }\n\n}","<div class=\"zen-dropdown-menu\" [class.zen-dropdown-menu--open]=\"isOpen\">\n\n <!-- TRIGGERS SECTION -->\n\n <!-- List Header Trigger -->\n @if (showListHeader) {\n <div\n class=\"zen-dropdown-menu__list-header\"\n (click)=\"toggleDropdown()\">\n <div class=\"zen-dropdown-menu__user-info\">\n <img\n class=\"zen-dropdown-menu__user-avatar\"\n [src]=\"headerUser?.avatarSrc\"\n [alt]=\"headerUser?.name || 'User'\">\n <div class=\"zen-dropdown-menu__user-details\">\n <div class=\"zen-dropdown-menu__user-name text text-sm text-weight-medium\">{{ (headerUser?.name || 'User') | translate }}</div>\n <div class=\"zen-dropdown-menu__user-email text text-sm text-weight-regular\">{{ headerUser?.email }}</div>\n </div>\n </div>\n </div>\n }\n\n <!-- Icon Button Trigger -->\n @if (showIconTrigger) {\n <button\n class=\"zen-dropdown-menu__icon-button\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <zen-icon name=\"more-vertical\" [customColor]=\"'#667085'\"></zen-icon>\n </button>\n }\n\n <!-- Button Trigger -->\n @if (showButton) {\n <button\n class=\"zen-dropdown-menu__button\"\n [class.zen-dropdown-menu__button--focused]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <span class=\"zen-dropdown-menu__button-text text text-sm text-weight-medium\">{{ buttonText | translate }}</span>\n <zen-icon\n [name]=\"isOpen ? 'chevron-up' : 'chevron-down'\"\n [customColor]=\"'#667085'\"\n class=\"zen-dropdown-menu__button-icon\">\n </zen-icon>\n </button>\n }\n\n <!-- Avatar Trigger -->\n @if (showAvatar) {\n <button\n class=\"zen-dropdown-menu__avatar\"\n [class.zen-dropdown-menu__avatar--focused]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n type=\"button\">\n <img\n class=\"zen-dropdown-menu__avatar-img\"\n [src]=\"avatarSrc\"\n alt=\"User Avatar\">\n </button>\n }\n\n <!-- DROPDOWN CONTENT SECTION -->\n @if (isOpen) {\n <div class=\"zen-dropdown-menu__dropdown\" #dropdown\n [style.position]=\"'fixed'\"\n [style.opacity]=\"dropdownVisible ? 1 : 0\"\n [style.visibility]=\"dropdownVisible ? 'visible' : 'hidden'\">\n <!-- Header Section -->\n @if (showHeader && headerUser) {\n <div class=\"zen-dropdown-menu__header\">\n <div class=\"zen-dropdown-menu__header-info\">\n <img\n class=\"zen-dropdown-menu__header-avatar\"\n [src]=\"headerUser.avatarSrc\"\n [alt]=\"headerUser.name\">\n <div class=\"zen-dropdown-menu__header-details\">\n <div class=\"zen-dropdown-menu__header-name text text-sm text-weight-medium\">{{ headerUser.name | translate }}</div>\n <div class=\"zen-dropdown-menu__header-email text text-sm text-weight-regular\">{{ headerUser.email }}</div>\n </div>\n </div>\n </div>\n }\n <!-- Divider after header -->\n @if (showHeader && headerUser) {\n <div class=\"zen-dropdown-menu__divider\"></div>\n }\n <!-- Menu Items -->\n <div class=\"zen-dropdown-menu__content\">\n @for (item of items; track item) {\n <!-- Divider -->\n @if (item.divider) {\n <div class=\"zen-dropdown-menu__divider\"></div>\n }\n <!-- Menu Item -->\n @if (!item.divider) {\n <div\n class=\"zen-dropdown-menu__item\"\n [class.zen-dropdown-menu__item--disabled]=\"item.disabled\"\n (click)=\"onItemClick(item, $event)\">\n <!-- Checkbox variant -->\n @if (showCheckbox) {\n <zen-checkbox\n class=\"zen-dropdown-menu__checkbox\"\n [checked]=\"item.checked || false\"\n [disabled]=\"item.disabled\"\n [size]=\"'sm'\"\n [label]=\"''\"\n (checkedChange)=\"onCheckboxChange(item, $event)\"\n (click)=\"$event.stopPropagation()\">\n </zen-checkbox>\n }\n <!-- Icon -->\n @if (showIcon && item.icon) {\n <zen-icon\n class=\"zen-dropdown-menu__item-icon\"\n [name]=\"item.icon\"\n [customColor]=\"'#344054'\">\n </zen-icon>\n }\n <!-- Item Content -->\n <div class=\"zen-dropdown-menu__item-content\">\n <!-- Label -->\n <span class=\"zen-dropdown-menu__label text text-sm text-weight-regular\">\n {{ item.label | translate }}\n </span>\n <!-- Count number (shown at the end of the row) -->\n @if (showCount && item.shortcut) {\n <span\n class=\"zen-dropdown-menu__count text text-xs text-weight-regular\">\n {{ item.shortcut }}\n </span>\n }\n <!-- Shortcut -->\n @if (showShortcut && item.shortcut && !showCount) {\n <span\n class=\"zen-dropdown-menu__shortcut text text-xs text-weight-regular\">\n {{ item.shortcut | translate }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n\n</div>","import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\n\nexport type ZenTooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right';\nexport type ZenTooltipTheme = 'dark' | 'light';\n\n@Component({\n selector: 'zen-tooltip-popup',\n templateUrl: './zen-tooltip.component.html',\n styleUrls: ['./zen-tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class ZenTooltipPopupComponent {\n @Input() text = '';\n @Input() supportingText = '';\n @Input() theme: ZenTooltipTheme = 'dark';\n @Input() position: ZenTooltipPosition = 'top';\n\n get arrowPosition(): string {\n switch (this.position) {\n case 'top': return 'bottom-center';\n case 'bottom': return 'top-center';\n case 'left': return 'right';\n case 'right': return 'left';\n case 'top-left': return 'bottom-left';\n case 'top-right': return 'bottom-right';\n default: return 'bottom-center';\n }\n }\n\n get hasSupportingText(): boolean {\n return !!this.supportingText;\n }\n}\n","<div class=\"zen-tooltip\"\n [class.zen-tooltip--dark]=\"theme === 'dark'\"\n [class.zen-tooltip--light]=\"theme === 'light'\"\n [class.zen-tooltip--has-supporting]=\"hasSupportingText\"\n [attr.data-arrow]=\"arrowPosition\">\n\n <!-- Arrow: top (for bottom tooltip) — points up toward element -->\n @if (arrowPosition === 'top-center') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--top\"\n width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 6L6.59 0.91C7.37 0.13 8.63 0.13 9.41 0.91L16 6H0Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Arrow: left (for right tooltip) — points left toward element -->\n @if (arrowPosition === 'left') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--left\"\n width=\"6\" height=\"16\" viewBox=\"0 0 6 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 0L0.91 6.59C0.13 7.37 0.13 8.63 0.91 9.41L6 16V0Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Content -->\n <div class=\"zen-tooltip__content\">\n <p class=\"zen-tooltip__title\">{{ text }}</p>\n @if (hasSupportingText) {\n <p class=\"zen-tooltip__supporting\">{{ supportingText }}</p>\n }\n </div>\n\n <!-- Arrow: bottom (for top tooltip) — points down toward element -->\n @if (arrowPosition === 'bottom-center' || arrowPosition === 'bottom-left' || arrowPosition === 'bottom-right') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--bottom\"\n [class.zen-tooltip__arrow--bottom-left]=\"arrowPosition === 'bottom-left'\"\n [class.zen-tooltip__arrow--bottom-right]=\"arrowPosition === 'bottom-right'\"\n width=\"16\" height=\"6\" viewBox=\"0 0 16 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16 0L9.41 5.09C8.63 5.87 7.37 5.87 6.59 5.09L0 0H16Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n\n <!-- Arrow: right (for left tooltip) — points right toward element -->\n @if (arrowPosition === 'right') {\n <svg\n class=\"zen-tooltip__arrow zen-tooltip__arrow--right\"\n width=\"6\" height=\"16\" viewBox=\"0 0 6 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 16L5.09 9.41C5.87 8.63 5.87 7.37 5.09 6.59L0 0V16Z\"\n [attr.fill]=\"theme === 'dark' ? '#101828' : '#FFFFFF'\" />\n </svg>\n }\n</div>\n","import {\n Directive,\n Input,\n ElementRef,\n OnDestroy,\n ComponentRef,\n ViewContainerRef,\n HostListener,\n} from '@angular/core';\nimport {\n Overlay,\n OverlayRef,\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ZenTooltipPopupComponent, ZenTooltipPosition, ZenTooltipTheme } from './zen-tooltip.component';\n\n@Directive({\n selector: '[zenTooltip]',\n standalone: false\n})\nexport class ZenTooltipDirective implements OnDestroy {\n\n @Input('zenTooltip') text = '';\n @Input() tooltipSupportingText = '';\n @Input() tooltipPosition: ZenTooltipPosition = 'top';\n @Input() tooltipTheme: ZenTooltipTheme = 'dark';\n @Input() tooltipDisabled = false;\n\n private _overlayRef: OverlayRef | null = null;\n private _tooltipRef: ComponentRef<ZenTooltipPopupComponent> | null = null;\n\n constructor(\n private _overlay: Overlay,\n private _elementRef: ElementRef,\n private _viewContainerRef: ViewContainerRef,\n ) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltipDisabled || !this.text) return;\n this._show();\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this._hide();\n }\n\n @HostListener('focus')\n onFocus(): void {\n if (this.tooltipDisabled || !this.text) return;\n this._show();\n }\n\n @HostListener('blur')\n onBlur(): void {\n this._hide();\n }\n\n ngOnDestroy(): void {\n this._hide();\n }\n\n private _show(): void {\n if (this._overlayRef) return;\n\n const positionStrategy = this._getPositionStrategy();\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.close(),\n panelClass: 'zen-tooltip-overlay',\n });\n\n const portal = new ComponentPortal(\n ZenTooltipPopupComponent,\n this._viewContainerRef\n );\n\n this._tooltipRef = this._overlayRef.attach(portal);\n this._tooltipRef.instance.text = this.text;\n this._tooltipRef.instance.supportingText = this.tooltipSupportingText;\n this._tooltipRef.instance.theme = this.tooltipTheme;\n this._tooltipRef.instance.position = this.tooltipPosition;\n this._tooltipRef.changeDetectorRef.markForCheck();\n }\n\n private _hide(): void {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n this._tooltipRef = null;\n }\n }\n\n private _getPositionStrategy(): FlexibleConnectedPositionStrategy {\n const positions = this._getPositions();\n\n return this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n\n private _getPositions(): ConnectedPosition[] {\n const offset = 4;\n\n switch (this.tooltipPosition) {\n case 'top':\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n ];\n case 'bottom':\n return [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n ];\n case 'left':\n return [\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n ];\n case 'right':\n return [\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n ];\n case 'top-left':\n return [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\n ];\n case 'top-right':\n return [\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },\n ];\n default:\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n ];\n }\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenEldStatusType = 'on-duty' | 'off-duty' | 'driving' | 'sleeper' | 'personal-conveyance' | 'yard-move';\n\nconst STATUS_ABBREVIATIONS: Record<ZenEldStatusType, string> = {\n 'on-duty': 'ON',\n 'off-duty': 'OFF',\n 'driving': 'D',\n 'sleeper': 'SB',\n 'personal-conveyance': 'PC',\n 'yard-move': 'YM',\n};\n\n@Component({\n selector: 'zen-eld-status',\n templateUrl: './zen-eld-status.component.html',\n styleUrls: ['./zen-eld-status.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenEldStatusComponent {\n\n @Input() status: ZenEldStatusType = 'off-duty';\n\n get hostClasses(): string {\n return `zen-eld-status zen-eld-status--${this.status}`;\n }\n\n get abbreviation(): string {\n return STATUS_ABBREVIATIONS[this.status] || 'OFF';\n }\n}\n","<span [class]=\"hostClasses\">{{ abbreviation }}</span>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-nav-search',\n templateUrl: './zen-nav-search.component.html',\n styleUrls: ['./zen-nav-search.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenNavSearchComponent {\n\n @Input() placeholder = 'Search';\n @Input() value = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() search = new EventEmitter<string>();\n\n hovered = false;\n\n get hostClasses(): string {\n const classes = ['zen-nav-search'];\n if (this.hovered) classes.push('zen-nav-search--hover');\n return classes.join(' ');\n }\n\n onInput(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.value = val;\n this.valueChange.emit(val);\n }\n\n onSearch(): void {\n this.search.emit(this.value);\n }\n}\n","<div [class]=\"hostClasses\"\n (mouseenter)=\"hovered = true\"\n (mouseleave)=\"hovered = false\">\n <zen-icon class=\"zen-nav-search__icon\" name=\"search\" [customColor]=\"'#D0D5DD'\"></zen-icon>\n <input class=\"zen-nav-search__input\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (keyup.enter)=\"onSearch()\" />\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'zen-submodule-item',\n templateUrl: './zen-submodule-item.component.html',\n styleUrls: ['./zen-submodule-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSubmoduleItemComponent {\n\n @Input() label = 'Submodule';\n @Input() icon: string;\n @Input() current = false;\n\n @Output() activate = new EventEmitter<void>();\n\n get hostClasses(): string {\n const classes = ['zen-submodule-item'];\n if (this.current) classes.push('zen-submodule-item--current');\n return classes.join(' ');\n }\n\n get iconColor(): string {\n return this.current ? '#FFFFFF' : '#667085';\n }\n\n onActivate(): void {\n this.activate.emit();\n }\n}\n","<button [class]=\"hostClasses\" (click)=\"onActivate()\" type=\"button\">\n @if (icon) {\n <zen-icon class=\"zen-submodule-item__icon\"\n [name]=\"icon\" [customColor]=\"iconColor\"></zen-icon>\n }\n <span class=\"zen-submodule-item__label\">{{ label }}</span>\n</button>\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { ZenEldStatusType } from '../eld-status/zen-eld-status.component';\n\nexport type ZenSubpageItemType = 'vehicle' | 'driver';\nexport type ZenSubpageItemState = 'default' | 'hover' | 'focused';\n\n@Component({\n selector: 'zen-subpage-item',\n templateUrl: './zen-subpage-item.component.html',\n styleUrls: ['./zen-subpage-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenSubpageItemComponent {\n\n @Input() type: ZenSubpageItemType = 'vehicle';\n @Input() state: ZenSubpageItemState = 'default';\n @Input() label = '';\n @Input() eldStatus: ZenEldStatusType;\n\n @Output() activate = new EventEmitter<void>();\n\n private _hovered = false;\n\n get hostClasses(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n const classes = [\n 'zen-subpage-item',\n `zen-subpage-item--${this.type}`,\n `zen-subpage-item--${activeState}`,\n ];\n return classes.join(' ');\n }\n\n get typeIcon(): string {\n return this.type === 'vehicle' ? 'truck' : 'user';\n }\n\n get iconColor(): string {\n const activeState = this._hovered && this.state === 'default' ? 'hover' : this.state;\n return activeState === 'focused' ? '#FFFFFF' : '#1D2939';\n }\n\n onActivate(): void {\n this.activate.emit();\n }\n\n onMouseEnter(): void {\n this._hovered = true;\n }\n\n onMouseLeave(): void {\n this._hovered = false;\n }\n}\n","<div [class]=\"hostClasses\"\n (click)=\"onActivate()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <zen-icon class=\"zen-subpage-item__icon\"\n [name]=\"typeIcon\"\n [customColor]=\"iconColor\"></zen-icon>\n <span class=\"zen-subpage-item__label\">{{ label }}</span>\n @if (type === 'driver' && eldStatus) {\n <zen-eld-status\n [status]=\"eldStatus\"\n class=\"zen-subpage-item__eld\"></zen-eld-status>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ZenModulePopupModule =\n | 'fleet' | 'safety' | 'operations' | 'reports'\n | 'bus' | 'fuel' | 'maintain' | 'efficiency' | 'inventory' | 'more';\n\nexport interface ZenModulePopupItem {\n label: string;\n route?: string;\n tag?: unknown;\n}\n\nconst MODULE_LABELS: Record<ZenModulePopupModule, string> = {\n fleet: 'Fleet',\n safety: 'Safety',\n operations: 'Operate',\n reports: 'Reports',\n bus: 'Bus',\n fuel: 'Fuel',\n maintain: 'Maintain',\n efficiency: 'Efficiency',\n inventory: 'Inventory',\n more: 'More',\n};\n\nconst MODULE_ICONS: Record<ZenModulePopupModule, string> = {\n fleet: 'truck',\n safety: 'shield',\n operations: 'briefcase',\n reports: 'bar-chart-2',\n bus: 'bus',\n fuel: 'droplet',\n maintain: 'tool',\n efficiency: 'trending-up',\n inventory: 'package',\n more: 'more-vertical',\n};\n\n@Component({\n selector: 'zen-module-popup',\n templateUrl: './zen-module-popup.component.html',\n styleUrls: ['./zen-module-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenModulePopupComponent {\n\n @Input() module: ZenModulePopupModule = 'fleet';\n @Input() items: ZenModulePopupItem[] = [];\n @Input() isOpen = false;\n\n @Output() itemClick = new EventEmitter<ZenModulePopupItem>();\n @Output() close = new EventEmitter<void>();\n\n constructor(private _elementRef: ElementRef) {}\n\n get moduleLabel(): string {\n return MODULE_LABELS[this.module] || this.module;\n }\n\n get moduleIcon(): string {\n return MODULE_ICONS[this.module] || 'circle';\n }\n\n get hostClasses(): string {\n const classes = ['zen-module-popup'];\n if (this.module === 'more') classes.push('zen-module-popup--more');\n return classes.join(' ');\n }\n\n onItemClick(item: ZenModulePopupItem): void {\n this.itemClick.emit(item);\n }\n\n @HostListener('document:mousedown', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.isOpen && !this._elementRef.nativeElement.contains(event.target)) {\n this.close.emit();\n }\n }\n}\n","@if (isOpen) {\n <div [class]=\"hostClasses\">\n <!-- Header -->\n <div class=\"zen-module-popup__header\">\n <zen-icon class=\"zen-module-popup__header-icon\"\n [name]=\"moduleIcon\"\n [customColor]=\"'#98A2B3'\"></zen-icon>\n <span class=\"zen-module-popup__header-label\">{{ moduleLabel }}</span>\n </div>\n <div class=\"zen-module-popup__divider\"></div>\n <!-- Items -->\n <div class=\"zen-module-popup__items\">\n @for (item of items; track item) {\n <div\n class=\"zen-module-popup__item\"\n (click)=\"onItemClick(item)\">\n {{ item.label }}\n </div>\n }\n </div>\n </div>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ElementRef,\n AfterViewInit,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { ChartConfiguration, ChartData, ChartType } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\nimport { ZenChartStyle, ZenChartLegend, ZenChartDataset } from './zen-chart.types';\n\nconst DEFAULT_LINE_COLORS = ['#136AB6', '#48A2E8', '#12497A'];\nconst DEFAULT_BAR_COLORS = ['#105494', '#2188D9', '#88C1F1'];\n\n@Component({\n selector: 'zen-chart',\n templateUrl: './zen-chart.component.html',\n styleUrls: ['./zen-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenChartComponent implements OnChanges, AfterViewInit {\n\n @Input() chartStyle: ZenChartStyle = 'line';\n @Input() legend: ZenChartLegend = 'false';\n @Input() axisLabels: boolean = true;\n @Input() labels: string[] = [];\n @Input() datasets: ZenChartDataset[] = [];\n @Input() xAxisLabel: string = '';\n @Input() yAxisLabel: string = '';\n @Input() stacked: boolean = true;\n @Input() colors: string[];\n @Input() breakpoint: 'desktop' | 'mobile' = 'desktop';\n\n @Output() pointClick = new EventEmitter<{ datasetIndex: number; index: number; value: number }>();\n\n @ViewChild(BaseChartDirective) chart?: BaseChartDirective;\n\n chartData: ChartData = { labels: [], datasets: [] };\n chartOptions: ChartConfiguration['options'] = {};\n\n private initialized = false;\n\n private get defaultPalette(): string[] {\n return this.chartStyle === 'line' ? DEFAULT_LINE_COLORS : DEFAULT_BAR_COLORS;\n }\n\n get hostClasses(): string {\n const classes = ['zen-chart', `zen-chart--legend-${this.legend}`];\n if (this.breakpoint === 'mobile') classes.push('zen-chart--mobile');\n return classes.join(' ');\n }\n\n getColor(index: number): string {\n const palette = this.colors || this.defaultPalette;\n return palette[index % palette.length];\n }\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.buildChart();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.initialized) {\n this.buildChart();\n }\n }\n\n onChartClick(event: any): void {\n if (event?.active?.length) {\n const active = event.active[0];\n const value = this.datasets[active.datasetIndex]?.data[active.index];\n this.pointClick.emit({\n datasetIndex: active.datasetIndex,\n index: active.index,\n value: value ?? 0\n });\n }\n }\n\n private buildChart(): void {\n const palette = this.colors || this.defaultPalette;\n\n const datasets = this.datasets.map((ds, i) => {\n const color = ds.color || palette[i % palette.length];\n\n if (this.chartStyle === 'line') {\n return {\n label: ds.label,\n data: ds.data,\n borderColor: color,\n backgroundColor: i === 0 ? this.hexToRgba(color, 0.04) : 'transparent',\n fill: i === 0,\n tension: 0.4,\n pointRadius: 0,\n pointHoverRadius: 3,\n pointHoverBorderWidth: 2,\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: color,\n borderWidth: 1.5\n };\n }\n\n return {\n label: ds.label,\n data: ds.data,\n backgroundColor: color,\n borderRadius: 4,\n borderSkipped: 'bottom' as const,\n maxBarThickness: 32,\n categoryPercentage: 0.4,\n barPercentage: 0.9\n };\n });\n\n this.chartData = {\n labels: this.labels,\n datasets\n };\n\n const isStacked = this.chartStyle === 'bar' && this.stacked;\n\n this.chartOptions = {\n responsive: true,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n mode: 'index'\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n backgroundColor: '#101828',\n titleFont: { family: 'Inter', size: 12 },\n bodyFont: { family: 'Inter', size: 12 },\n padding: 8,\n cornerRadius: 8,\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: 8,\n boxPadding: 4\n }\n },\n scales: {\n x: {\n stacked: isStacked,\n grid: {\n display: false\n },\n border: {\n display: false\n },\n ticks: {\n font: { family: 'Inter', size: 12, weight: 400 },\n color: '#667085'\n }\n },\n y: {\n stacked: isStacked,\n grid: {\n color: '#F2F4F7'\n },\n border: {\n display: false,\n dash: [4, 4]\n },\n ticks: {\n font: { family: 'Inter', size: 12, weight: 400 },\n color: '#667085',\n callback: (value: any) => {\n return typeof value === 'number' ? value.toLocaleString() : value;\n }\n }\n }\n }\n };\n\n // Apply gradient fills for line charts after next render cycle\n if (this.chartStyle === 'line' && this.chart?.chart) {\n setTimeout(() => this.applyGradients(), 0);\n }\n }\n\n private applyGradients(): void {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n\n const ctx = chartInstance.ctx;\n const chartArea = chartInstance.chartArea;\n if (!chartArea) return;\n\n const palette = this.colors || this.defaultPalette;\n\n const firstDs = chartInstance.data.datasets[0] as any;\n if (firstDs) {\n const color = this.datasets[0]?.color || palette[0];\n const gradient = ctx.createLinearGradient(0, chartArea.top, 0, chartArea.bottom);\n gradient.addColorStop(0, this.hexToRgba(color, 0.06));\n gradient.addColorStop(1, this.hexToRgba(color, 0.01));\n firstDs.backgroundColor = gradient;\n }\n\n chartInstance.update('none');\n }\n\n private hexToRgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- Legend: top position -->\n @if (legend === 'top') {\n <div class=\"zen-chart__legend\">\n @for (ds of datasets; track ds; let i = $index) {\n <div class=\"zen-chart__legend-item\">\n <span class=\"zen-chart__legend-dot\" [style.background-color]=\"getColor(i)\"></span>\n <span class=\"zen-chart__legend-label\">{{ ds.label }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Y-axis label + chart canvas -->\n <div class=\"zen-chart__body\">\n @if (axisLabels && yAxisLabel) {\n <div class=\"zen-chart__y-label\">\n <span>{{ yAxisLabel }}</span>\n </div>\n }\n <div class=\"zen-chart__canvas-wrapper\">\n <canvas baseChart\n [type]=\"chartStyle\"\n [data]=\"chartData\"\n [options]=\"chartOptions\"\n (chartClick)=\"onChartClick($event)\">\n </canvas>\n </div>\n </div>\n\n <!-- X-axis label -->\n @if (axisLabels && xAxisLabel) {\n <div class=\"zen-chart__x-label\">\n <span>{{ xAxisLabel }}</span>\n </div>\n }\n\n <!-- Legend: right position -->\n @if (legend === 'right') {\n <div class=\"zen-chart__legend\">\n @for (ds of datasets; track ds; let i = $index) {\n <div class=\"zen-chart__legend-item\">\n <span class=\"zen-chart__legend-dot\" [style.background-color]=\"getColor(i)\"></span>\n <span class=\"zen-chart__legend-label\">{{ ds.label }}</span>\n </div>\n }\n </div>\n }\n\n</div>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStepBaseType\n} from './zen-progress-steps.types';\n\nexport { ZenStepBaseType } from './zen-progress-steps.types';\n\n@Component({\n selector: 'zen-step-base',\n templateUrl: './zen-step-base.component.html',\n styleUrls: ['./zen-step-base.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenStepBaseComponent {\n\n /** Layout type of the step */\n @Input() type: ZenStepBaseType = 'top';\n\n /** Size variant */\n @Input() size: ZenProgressStepsSize = 'sm';\n\n /** Theme variant */\n @Input() theme: ZenProgressStepsTheme = 'light';\n\n /** Status of this step */\n @Input() status: ZenStepStatus = 'incomplete';\n\n /** Step title */\n @Input() title: string = '';\n\n /** Step description / supporting text */\n @Input() description: string = '';\n\n /** Whether to show the vertical connector (icon-left type) */\n @Input() showConnector: boolean = false;\n\n get hostClasses(): string {\n return [\n 'zen-step-base',\n `zen-step-base--${this.type}`,\n `zen-step-base--${this.size}`,\n `zen-step-base--${this.theme}`,\n `zen-step-base--${this.status}`,\n ].join(' ');\n }\n\n get dotSize(): number {\n switch (this.size) {\n case 'sm': return 8;\n case 'md': return 10;\n case 'lg': return 12;\n }\n }\n\n get checkSize(): number {\n switch (this.size) {\n case 'sm': return 10;\n case 'md': return 14;\n case 'lg': return 16;\n }\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ============ TYPE: TOP (icons-centered) ============ -->\n @if (type === 'top') {\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n <!-- ============ TYPE: ICON ONLY (minimal-icons) ============ -->\n @if (type === 'icon-only') {\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n }\n\n <!-- ============ TYPE: TEXT LINE ============ -->\n @if (type === 'text-line') {\n <div class=\"zen-step-base__bar\"></div>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n <!-- ============ TYPE: ICON LEFT (icons-text vertical) ============ -->\n @if (type === 'icon-left') {\n <div class=\"zen-step-base__icon-col\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n @if (showConnector) {\n <div\n class=\"zen-step-base__connector\"\n [class.zen-step-base__connector--complete]=\"status === 'complete'\"\n [class.zen-step-base__connector--incomplete]=\"status !== 'complete'\">\n </div>\n }\n </div>\n @if (title || description) {\n <div class=\"zen-step-base__content\">\n @if (title) {\n <p class=\"zen-step-base__title\">{{ title }}</p>\n }\n @if (description) {\n <p class=\"zen-step-base__description\">{{ description }}</p>\n }\n </div>\n }\n }\n\n</div>\n\n<!-- ============ ICON TEMPLATE ============ -->\n<ng-template #iconTpl>\n <div class=\"zen-step-base__icon\"\n [class.zen-step-base__icon--complete]=\"status === 'complete'\"\n [class.zen-step-base__icon--current]=\"status === 'current'\"\n [class.zen-step-base__icon--incomplete]=\"status === 'incomplete'\">\n <!-- Complete: checkmark -->\n @if (status === 'complete') {\n <svg\n [attr.width]=\"checkSize\" [attr.height]=\"checkSize\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.3334 4L6.00008 11.3333L2.66675 8\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n <!-- Current / Incomplete: dot -->\n @if (status !== 'complete') {\n <span\n class=\"zen-step-base__dot\"\n [style.width.px]=\"dotSize\"\n [style.height.px]=\"dotSize\">\n </span>\n }\n </div>\n</ng-template>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ZenProgressStepsType,\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStep\n} from './zen-progress-steps.types';\n\nexport {\n ZenProgressStepsType,\n ZenProgressStepsSize,\n ZenProgressStepsTheme,\n ZenStepStatus,\n ZenStep\n} from './zen-progress-steps.types';\n\n@Component({\n selector: 'zen-progress-steps',\n templateUrl: './zen-progress-steps.component.html',\n styleUrls: ['./zen-progress-steps.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ZenProgressStepsComponent {\n\n @Input() type: ZenProgressStepsType = 'icons-centered';\n @Input() size: ZenProgressStepsSize = 'sm';\n @Input() theme: ZenProgressStepsTheme = 'light';\n @Input() steps: ZenStep[] = [];\n @Input() currentStep: number = 0;\n @Input() showText: boolean = true;\n @Input() connector: boolean = true;\n\n get hostClasses(): string {\n const classes = [\n 'zen-progress-steps',\n `zen-progress-steps--${this.type}`,\n `zen-progress-steps--${this.size}`,\n `zen-progress-steps--${this.theme}`,\n ];\n if (!this.showText) classes.push('zen-progress-steps--no-text');\n if (!this.connector) classes.push('zen-progress-steps--no-connector');\n return classes.join(' ');\n }\n\n getStepStatus(index: number): ZenStepStatus {\n if (index < this.currentStep) return 'complete';\n if (index === this.currentStep) return 'current';\n return 'incomplete';\n }\n}\n","<div [class]=\"hostClasses\">\n\n <!-- ============ ICONS CENTERED ============ -->\n @if (type === 'icons-centered') {\n <div class=\"zen-progress-steps__row\">\n <!-- Lines behind icons -->\n <div class=\"zen-progress-steps__lines\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n @if (!last) {\n <div\n class=\"zen-progress-steps__line\"\n [class.zen-progress-steps__line--complete]=\"i < currentStep\"\n [class.zen-progress-steps__line--incomplete]=\"i >= currentStep\">\n </div>\n }\n }\n </div>\n <!-- Step columns -->\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"top\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n\n <!-- ============ MINIMAL ICONS / MINIMAL ICONS CONNECTED ============ -->\n @if (type === 'minimal-icons' || type === 'minimal-icons-connected') {\n <div class=\"zen-progress-steps__row zen-progress-steps__row--inline\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n <zen-step-base class=\"zen-progress-steps__step--minimal\"\n type=\"icon-only\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\">\n </zen-step-base>\n @if (!last) {\n <div\n class=\"zen-progress-steps__line zen-progress-steps__line--horizontal\"\n [class.zen-progress-steps__line--complete]=\"i < currentStep\"\n [class.zen-progress-steps__line--incomplete]=\"i >= currentStep\">\n </div>\n }\n }\n </div>\n <!-- Optional text row -->\n @if (showText) {\n <div class=\"zen-progress-steps__text-row\">\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__text-step\"\n type=\"text-line\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n }\n\n <!-- ============ TEXT LINE ============ -->\n @if (type === 'text-line') {\n <div class=\"zen-progress-steps__row zen-progress-steps__row--text-line\">\n @for (step of steps; track step; let i = $index) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"text-line\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\">\n </zen-step-base>\n }\n </div>\n }\n\n <!-- ============ ICONS TEXT (Vertical) ============ -->\n @if (type === 'icons-text') {\n <div class=\"zen-progress-steps__column\">\n @for (step of steps; track step; let i = $index; let last = $last) {\n <zen-step-base\n class=\"zen-progress-steps__step\"\n type=\"icon-left\"\n [size]=\"size\"\n [theme]=\"theme\"\n [status]=\"getStepStatus(i)\"\n [title]=\"step.title || ''\"\n [description]=\"step.description || ''\"\n [showConnector]=\"connector && !last\">\n </zen-step-base>\n }\n </div>\n }\n\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ZenduCheckboxComponent } from './checkbox/zendu-checkbox.component';\nimport { ZenduColorPickerComponent } from './colorpicker/zendu-colorpicker.component';\nimport { ZenduColumnConfigurationComponent } from './column-configuration/zendu-column-configuration.component';\nimport { ZenduDatepickerComponent } from './datepicker/zendu-datepicker.component';\nimport { ZenduFilterComponent } from './filter/zendu-filter.component';\nimport { ZenduGroupsComponent } from './groups/zendu-groups.component';\nimport { ZenduPaginationBarComponent } from './pagination-bar/zendu-pagination-bar.component';\nimport { ZenduPhoneInputComponent } from './phone-input/zendu-phone-input.component';\nimport { ZenduRadioButtonComponent } from './radio-button/radio-button.component';\nimport { ZenduSearchBoxComponent } from './search-box/zendu-search-box.component';\nimport { ZenduSelectComponent } from './select/zendu-select.component';\nimport { ZenduSelectOptionDirective } from './select/templates/zendu-select-option.directive';\nimport { ZenduSelectValueDirective } from './select/templates/zendu-select-value.directive';\nimport { ZenduSortHeaderComponent } from './sort-header/zendu-sort-header.component';\nimport { ZenduToggleSlideComponent } from './toggle-slide/zendu-toggle-slide.component';\nimport { ZenduToggleComponent } from './toggle/zendu-toggle.component';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ZenduIconComponent } from './icon/zendu-icon.component';\nimport { ZenduCardBlockComponent } from './card-block/zendu-card-block.component';\nimport { ZenduMapPreviewComponent } from './map-preview/zendu-map-preview.component';\nimport { ZenduSpinner } from './spinner/zendu-spinner.component';\nimport { ZenduDocScanner } from './doc-scanner/zendu-doc-scanner.component';\nimport { ZenduMapComponent } from './map/zendu-map.component';\nimport { ZenduFileUpload } from './file-upload/zendu-file-upload.component';\nimport { ZenduProgress } from './progress/zendu-progress.component';\nimport { OpenCVService } from './services/opencv.service';\nimport { ZenduLocationSearch } from './location-search/zendu-location-search.component';\nimport { SignaturePadComponent } from '@almothafar/angular-signature-pad';\nimport { provideHttpClient, withInterceptorsFromDi, withXhr } from '@angular/common/http';\nimport { ZenLiveViewPlayerComponent } from './live-view-player/live-view-player/live-view-player.component';\nimport { ZenHTML5VideoPlayerComponent } from './live-view-player/html5-video-player/html5-video-player.component';\nimport { ZenFlvPlayerComponent } from './live-view-player/flv-player/flv-player.component';\nimport { ZenHlsPlayerComponent } from './live-view-player/hls-player/hls-player.component';\nimport { ZenWebRTCPlayerComponent } from './live-view-player/web-rtc/web-rtc-player.component';\nimport { ZenSnapshotPlayerComponent } from './live-view-player/snapshot-player/snapshot-player.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { ZenduSelectButtonDirective } from './select/templates/zendu-select-button.directive';\nimport { ZenduTimepickerComponent } from './timepicker/zendu-timepicker.component';\nimport { ZenduDatePickerDropdownComponent } from './date-picker-dropdown/zendu-date-picker-dropdown.component';\nimport { ZenduFileUploaderComponent } from './file-uploader/zendu-file-uploader.component';\nimport { ZenduAvatarComponent } from './avatar/zendu-avatar.component';\nimport { ZenduAvatarGroupComponent } from './avatar/zendu-avatar-group.component';\nimport { ZenduAvatarLabelGroupComponent } from './avatar/zendu-avatar-label-group.component';\nimport { ZenduAvatarProfilePhotoComponent } from './avatar/zendu-avatar-profile-photo.component';\nimport { ZenduSliderComponent } from './slider/zendu-slider.component';\nimport { ZenBadgeComponent } from './badge/zen-badge.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { ZenButtonComponent } from './button/zen-button.component';\nimport { ZenduInputComponent } from './input/zendu-input.component';\nimport { ZenDropdownMenuComponent } from './dropdown-menu/zen-dropdown-menu.component';\nimport { ZenTooltipDirective } from './tooltip/zen-tooltip.directive';\nimport { ZenTooltipPopupComponent } from './tooltip/zen-tooltip.component';\nimport { ZenEldStatusComponent } from './eld-status/zen-eld-status.component';\nimport { ZenNavSearchComponent } from './nav-search/zen-nav-search.component';\nimport { ZenSubmoduleItemComponent } from './submodule-item/zen-submodule-item.component';\nimport { ZenSubpageItemComponent } from './subpage-item/zen-subpage-item.component';\nimport { ZenModulePopupComponent } from './module-popup/zen-module-popup.component';\nimport { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts';\nimport { ZenChartComponent } from './chart/zen-chart.component';\nimport { ZenProgressStepsComponent } from './progress-steps/zen-progress-steps.component';\nimport { ZenStepBaseComponent } from './progress-steps/zen-step-base.component';\nimport { ZenSnackbarComponent } from './snackbar/zen-snackbar.component';\n\n@NgModule({ declarations: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenHTML5VideoPlayerComponent,\n ZenFlvPlayerComponent,\n ZenHlsPlayerComponent,\n ZenSnapshotPlayerComponent,\n ZenWebRTCPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduDatePickerDropdownComponent,\n ZenduFileUploaderComponent,\n ZenduAvatarComponent,\n ZenduAvatarGroupComponent,\n ZenduAvatarLabelGroupComponent,\n ZenduAvatarProfilePhotoComponent,\n ZenduSliderComponent,\n ZenduInputComponent,\n ZenButtonComponent,\n ZenDropdownMenuComponent,\n ZenBadgeComponent,\n ZenTooltipDirective,\n ZenTooltipPopupComponent,\n ZenEldStatusComponent,\n ZenNavSearchComponent,\n ZenSubmoduleItemComponent,\n ZenSubpageItemComponent,\n ZenModulePopupComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent,\n ZenSnackbarComponent\n ],\n exports: [\n ZenduCheckboxComponent,\n ZenduToggleComponent,\n ZenduToggleSlideComponent,\n ZenduSearchBoxComponent,\n ZenduSelectComponent,\n ZenduSelectOptionDirective,\n ZenduSelectValueDirective,\n ZenduDatepickerComponent,\n ZenduFilterComponent,\n ZenduGroupsComponent,\n ZenduPaginationBarComponent,\n ZenduColumnConfigurationComponent,\n ZenduSortHeaderComponent,\n ZenduPhoneInputComponent,\n ZenduColorPickerComponent,\n ZenduRadioButtonComponent,\n ZenduIconComponent,\n ZenduCardBlockComponent,\n ZenduMapPreviewComponent,\n ZenduSpinner,\n ZenduDocScanner,\n ZenduMapComponent,\n ZenduFileUpload,\n ZenduProgress,\n ZenduLocationSearch,\n ZenLiveViewPlayerComponent,\n ZenduSelectButtonDirective,\n ZenduTimepickerComponent,\n ZenduDatePickerDropdownComponent,\n ZenduFileUploaderComponent,\n ZenduAvatarComponent,\n ZenduAvatarGroupComponent,\n ZenduAvatarLabelGroupComponent,\n ZenduAvatarProfilePhotoComponent,\n ZenduSliderComponent,\n ZenduInputComponent,\n ZenButtonComponent,\n ZenDropdownMenuComponent,\n ZenBadgeComponent,\n ZenTooltipDirective,\n ZenTooltipPopupComponent,\n ZenEldStatusComponent,\n ZenNavSearchComponent,\n ZenSubmoduleItemComponent,\n ZenSubpageItemComponent,\n ZenModulePopupComponent,\n ZenChartComponent,\n ZenProgressStepsComponent,\n ZenStepBaseComponent,\n ZenSnackbarComponent\n ], imports: [CommonModule,\n FormsModule,\n DragDropModule,\n SignaturePadComponent,\n ReactiveFormsModule,\n OverlayModule,\n BaseChartDirective,\n TranslateModule.forRoot({\n loader: provideTranslateHttpLoader({\n prefix: '/assets/i18n/',\n suffix: '.json'\n })\n })], providers: [\n OpenCVService,\n provideCharts(withDefaultRegisterables()),\n provideHttpClient(withXhr(), withInterceptorsFromDi()),\n ] })\nexport class NgZenduitModule { }\n\n","/*\n * Public API of ng-zenduit\n */\nexport * from \"./lib/services/zendu-notify.service\";\nexport * from \"./lib/overlay/zendu-overlay.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/overlay/zendu-overlay.types';\nexport * from './lib/file-uploader/file-uploader.types';\n\n/**\n * Components\n */\nexport * from \"./lib/checkbox/zendu-checkbox.component\";\nexport * from \"./lib/colorpicker/zendu-colorpicker.component\";\nexport * from \"./lib/column-configuration/zendu-column-configuration.component\";\nexport * from \"./lib/datepicker/zendu-datepicker.component\";\nexport * from \"./lib/filter/zendu-filter.component\";\nexport * from \"./lib/groups/zendu-groups.component\";\nexport * from \"./lib/pagination-bar/zendu-pagination-bar.component\";\nexport * from \"./lib/phone-input/zendu-phone-input.component\";\nexport * from \"./lib/radio-button/radio-button.component\";\nexport * from \"./lib/search-box/zendu-search-box.component\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/select/templates/zendu-select-value.directive\";\nexport * from \"./lib/select/templates/zendu-select-option.directive\";\nexport * from \"./lib/select/templates/zendu-select-button.directive\";\nexport * from \"./lib/select/zendu-select.component\";\nexport * from \"./lib/sort-header/zendu-sort-header.component\";\nexport * from \"./lib/toggle/zendu-toggle.component\";\nexport * from \"./lib/toggle-slide/zendu-toggle-slide.component\";\nexport * from \"./lib/icon/zendu-icon.component\";\nexport * from \"./lib/icon/icon-config\";\nexport * from \"./lib/card-block/zendu-card-block.component\";\nexport * from \"./lib/map-preview/zendu-map-preview.component\";\nexport * from \"./lib/spinner/zendu-spinner.component\";\nexport * from \"./lib/doc-scanner/zendu-doc-scanner.component\";\nexport * from \"./lib/map/zendu-map.component\";\nexport * from \"./lib/file-upload/zendu-file-upload.component\";\nexport * from \"./lib/progress/zendu-progress.component\";\nexport * from \"./lib/location-search/zendu-location-search.component\";\nexport * from \"./lib/live-view-player/live-view-player/live-view-player.component\";\nexport * from \"./lib/timepicker/zendu-timepicker.component\";\nexport * from \"./lib/date-picker-dropdown/zendu-date-picker-dropdown.component\";\nexport * from \"./lib/file-uploader/zendu-file-uploader.component\";\nexport * from \"./lib/avatar/zendu-avatar.component\";\nexport * from \"./lib/avatar/zendu-avatar-group.component\";\nexport * from \"./lib/avatar/zendu-avatar-label-group.component\";\nexport * from \"./lib/avatar/zendu-avatar-profile-photo.component\";\nexport * from \"./lib/slider/zendu-slider.component\";\nexport * from \"./lib/button/zen-button.component\";\nexport * from \"./lib/input/zendu-input.component\";\nexport * from \"./lib/dropdown-menu/zen-dropdown-menu.component\";\nexport * from \"./lib/badge/zen-badge.component\";\nexport * from \"./lib/tooltip/zen-tooltip.directive\";\nexport * from \"./lib/tooltip/zen-tooltip.component\";\nexport * from \"./lib/eld-status/zen-eld-status.component\";\nexport * from \"./lib/nav-search/zen-nav-search.component\";\nexport * from \"./lib/submodule-item/zen-submodule-item.component\";\nexport * from \"./lib/subpage-item/zen-subpage-item.component\";\nexport * from \"./lib/module-popup/zen-module-popup.component\";\nexport * from \"./lib/chart/zen-chart.component\";\nexport * from \"./lib/chart/zen-chart.types\";\nexport * from \"./lib/progress-steps/zen-progress-steps.component\";\nexport * from \"./lib/progress-steps/zen-step-base.component\";\nexport * from \"./lib/snackbar/zen-snackbar.component\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.ZenduInputComponent","i3","i2","i3.ZenduCheckboxComponent","i4.ZenduSearchBoxComponent","i4","i5.ZenduIconComponent","i2.ZenduCheckboxComponent","i3.ZenduSearchBoxComponent","i3.ZenduIconComponent","i1.ZenduIconComponent","i1.ZenduOverlayService","i4.ZenduCheckboxComponent","i5.ZenduToggleComponent","i6.ZenduSearchBoxComponent","i7.ZenduGroupsComponent","i8.ZenduRadioButtonComponent","i9.ZenduIconComponent","i10.ZenduSpinner","i11.ZenduDatePickerDropdownComponent","i12.ZenduInputComponent","i13.ZenButtonComponent","i14","i5.ZenduGroupsComponent","i6.ZenduIconComponent","i7.ZenduSpinner","i8","i1.ZenduSelectComponent","i2.ZenButtonComponent","LocalLock","i1.ScriptLoader","i1.OpenCVService","i2.ZenduIconComponent","i1.GeocodingService","i4.ZenduIconComponent","i1.ZenHttpService","i1.ZenHTML5VideoPlayerComponent","i2.ZenFlvPlayerComponent","i3.ZenHlsPlayerComponent","i4.ZenSnapshotPlayerComponent","i5.ZenWebRTCPlayerComponent","i2.ZenduSpinner","i2.ZenduAvatarComponent","i1.ZenduCheckboxComponent","i2.ZenEldStatusComponent","i1.ZenStepBaseComponent"],"mappings":"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"}
|